The San Francisco Compute Company Instances API

Spin up instances in a capacity to use your available compute.

Operations 10

POST /preview/v2/instances Create instance #
GET /preview/v2/instances List instances #
PATCH /preview/v2/instances Update multiple instances #
DELETE /preview/v2/instances/{id} Delete instance #
GET /preview/v2/instances/{id} Get instance #
PATCH /preview/v2/instances/{id} Update instance #
GET /preview/v2/instances/{id}/logs Get instance logs #
POST /preview/v2/instances/{id}/replace Replace instance #
GET /preview/v2/instances/{id}/ssh Get instance SSH info #
POST /preview/v2/instances/{id}/terminate Terminate instance #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/the-san-francisco-compute-company-instances-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

the-san-francisco-compute-company-instances-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: sfc-api Account Instances API
  description: Public preview API - subject to change. See https://docs.sfcompute.com/preview/roadmap for details.
  version: 0.1.0
  x-apievangelist:
    method: searched
    generated: '2026-07-21'
    source: Reconstructed from per-operation OpenAPI blocks published on https://docs.sfcompute.com/preview/api-reference/* (Mintlify). 65 pages merged; paths + components unioned verbatim.
    note: Public preview API (subject to change). Base path /preview/v2 under server https://api.sfcompute.com.
servers:
- url: https://api.sfcompute.com
security:
- bearer_auth: []
tags:
- name: Instances
  description: Spin up instances in a capacity to use your available compute.
paths:
  /preview/v2/instances:
    post:
      tags:
      - Instances
      summary: Create instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Create an instance.'
      operationId: create_instance
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateInstanceRequest'
        required: true
      responses:
        '201':
          description: Instance created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Capacity not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '422':
          description: Validation error (e.g. capacity limit reached).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
    get:
      tags:
      - Instances
      summary: List instances
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        List all instances.'
      operationId: list_instances
      parameters:
      - name: workspace
        in: query
        description: Scope the returned list to a single workspace (ID, resource path, or name). Without it, the returned list spans every workspace the caller has requisite permissions on.
        required: false
        schema:
          $ref: '#/components/schemas/ResourcePathOrId_WorkspaceId'
      - name: id
        in: query
        description: Filter by instance ID (repeatable).
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/InstanceId'
        style: form
        explode: true
        example: inst_k3R-nX9vLm7Qp2Yw5Jd8F
      - name: pool
        in: query
        description: Filter by pool (repeatable). Instances on any of the given pools match.
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/ResourcePathOrId_PoolId'
        style: form
        explode: true
      - name: status
        in: query
        description: Filter by instance status (repeatable).
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/InstanceStatus'
        style: form
        explode: true
      - name: created_after
        in: query
        description: Filter to instances created at or after this Unix timestamp (seconds).
        required: false
        schema:
          type: integer
          format: int64
      - name: created_before
        in: query
        description: Filter to instances created at or before this Unix timestamp (seconds).
        required: false
        schema:
          type: integer
          format: int64
      - name: instance_sku
        in: query
        description: Filter by instance SKU (repeatable). Instances on any of the given SKUs match.
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/InstanceSkuId'
        style: form
        explode: true
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          format: u-int32
          default: 50
          maximum: 200
          minimum: 1
      - name: starting_after
        in: query
        description: Cursor for forward pagination (from a previous response's `cursor` field).
        required: false
        schema:
          $ref: '#/components/schemas/InstancesCursor'
      - name: ending_before
        in: query
        description: Cursor for backward pagination.
        required: false
        schema:
          $ref: '#/components/schemas/InstancesCursor'
      - name: include
        in: query
        description: Additional fields to include in the response.
        required: false
        schema:
          type: array
          items:
            $ref: '#/components/schemas/InstanceInclude'
      - name: tag
        in: query
        description: 'Filter by tag key-value pair (repeatable). Format: `key=value` (the `=` between key and value must be percent-encoded in the URL).'
        required: false
        schema:
          type: array
          items:
            type: string
        style: form
        explode: true
      - name: tag_key
        in: query
        description: Filter by tag key existence (repeatable). Returns resources that have a tag with this key, regardless of the value.
        required: false
        schema:
          type: array
          items:
            type: string
        style: form
        explode: true
      responses:
        '200':
          description: Paginated list of instances.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListInstancesResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Capacity not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '422':
          description: Validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
    patch:
      tags:
      - Instances
      summary: Update multiple instances
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Update one or more instances atomically. All listed instances must be in the same workspace; mixed-workspace batches are rejected with 422.'
      operationId: batch_patch_instances
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchPatchInstancesRequest'
        required: true
      responses:
        '200':
          description: Instances updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchPatchInstancesResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '422':
          description: Unknown instance, cross-workspace batch, or batch over the entry cap.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /preview/v2/instances/{id}:
    delete:
      tags:
      - Instances
      summary: Delete instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Delete an instance.'
      operationId: delete_instance
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      responses:
        '204':
          description: Instance deleted.
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '409':
          description: Instance must be terminated before deletion.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
    get:
      tags:
      - Instances
      summary: Get instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Retrieve an instance by ID or name.'
      operationId: fetch_instance
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      responses:
        '200':
          description: Instance details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
    patch:
      tags:
      - Instances
      summary: Update instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Update an instance. Omitted fields are left unchanged.'
      operationId: update_instance
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchInstanceRequest'
        required: true
      responses:
        '200':
          description: Instance updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
        '400':
          description: Validation error (e.g. duplicate name).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestError'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '422':
          description: Validation error (e.g. field not applicable to this instance).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /preview/v2/instances/{id}/logs:
    get:
      tags:
      - Instances
      summary: Get instance logs
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Retrieve logs for an instance.'
      operationId: get_instance_logs
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      - name: seqnum_before
        in: query
        description: Return logs with `seqnum` less than or equal to this value.
        required: false
        schema:
          type: integer
          format: u-int64
          minimum: 0
      - name: seqnum_after
        in: query
        description: Return logs with `seqnum` greater than or equal to this value.
        required: false
        schema:
          type: integer
          format: u-int64
          minimum: 0
      - name: realtime_timestamp_before
        in: query
        description: Due to clock synchronization, some earlier log messages may have a realtime timestamp after this value.
        required: false
        schema:
          $ref: '#/components/schemas/UnixEpoch'
      - name: realtime_timestamp_after
        in: query
        description: Due to clock synchronization, some later log messages may have a realtime timestamp before this value.
        required: false
        schema:
          $ref: '#/components/schemas/UnixEpoch'
      - name: sort_by
        in: query
        required: false
        schema:
          type: string
          enum:
          - seqnum
          - -seqnum
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          format: u-int64
          default: 100
          maximum: 2500
          minimum: 1
      responses:
        '200':
          description: Log chunks.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceLogsResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '422':
          description: Validation failed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /preview/v2/instances/{id}/replace:
    post:
      tags:
      - Instances
      summary: Replace instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Terminates the target instance and creates a fresh one on the same capacity and SKU with a new image (and optionally a new startup script and name). Capacity, SKU, subnet, public IPv4, firewall, tags, and priority are inherited from the replaced instance. The two operations happen in a single transaction. Pass an `Idempotency-Key` header to make retries safe: a repeated request returns the replacement created by the first attempt instead of creating another one.'
      operationId: replace_instance
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      - name: Idempotency-Key
        in: header
        description: Optional key that makes the request idempotent. Retries with the same key return the original replacement.
        required: false
        schema:
          type:
          - string
          - 'null'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceInstanceRequest'
        required: true
      responses:
        '201':
          description: Replacement instance created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
        '400':
          description: Invalid request (e.g. requested name already in use).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestError'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found or already terminated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '422':
          description: Validation error (e.g. image not available).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /preview/v2/instances/{id}/ssh:
    get:
      tags:
      - Instances
      summary: Get instance SSH info
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Retrieve SSH connection details for an instance.'
      operationId: get_instance_ssh
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      responses:
        '200':
          description: SSH connection details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceSshInfo'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: SSH details not available.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
  /preview/v2/instances/{id}/terminate:
    post:
      tags:
      - Instances
      summary: Terminate instance
      description: '> ⚠️ This endpoint is in [public preview](/preview/roadmap).


        Terminates a running instance. Terminated instances can not be restarted.'
      operationId: terminate_instance
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          description: A resource path like 'sfc:instance:acme:prod:my-instance' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
          examples:
          - inst_k3R-nX9vLm7Qp2Yw5Jd8F
          pattern: (inst_[0-9a-zA-Z_-]{1,21}|vm_[0-9a-zA-Z_-]{1,21})|(sfc:instance:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
      responses:
        '200':
          description: Instance terminated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstanceResponse'
        '401':
          description: Unauthorized.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Instance not found or already terminated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerError'
components:
  schemas:
    Name:
      type: string
      examples:
      - my-resource-name
      maxLength: 255
      minLength: 1
      pattern: '[a-zA-Z0-9][a-zA-Z0-9._-]{0,254}'
    BatchPatchInstanceEntry:
      type: object
      description: 'One entry in a [`BatchPatchInstancesRequest`]: the instance to patch (`id`) and the fields to update. `priority_level` is the only field currently patchable here. To update name, tags, or other instance fields, use `PATCH /v2/instances/{id}`.'
      required:
      - id
      - priority_level
      properties:
        id:
          $ref: '#/components/schemas/InstanceId'
        priority_level:
          $ref: '#/components/schemas/InstancePriority'
          description: Instance priority arm to apply to this instance. Required.
    Tags:
      type: object
      additionalProperties:
        type: string
        examples:
        - prod
        maxLength: 256
        pattern: ^[^,=]{0,256}$
      propertyNames:
        type: string
        examples:
        - env
        maxLength: 128
        minLength: 1
        pattern: ^[^_,= ][^,= ]{0,127}$
      examples:
      - env: prod
        team: infra
      maxProperties: 50
    ListInstancesResponse:
      type: object
      required:
      - object
      - has_more
      - data
      properties:
        object:
          type: string
          const: list
          default: list
          readOnly: true
        cursor:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/InstancesCursor'
            description: Pass as `starting_after` or `ending_before` to paginate.
        has_more:
          type: boolean
        data:
          type: array
          items:
            $ref: '#/components/schemas/InstanceResponse'
    ResourcePathOrId_ImageId:
      type: string
      description: A resource path like 'sfc:image:acme:prod:my-image' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.
      examples:
      - image_k3R-nX9vLm7Qp2Yw5Jd8F
      pattern: (image_[0-9a-zA-Z_-]{1,21}|vmi_[0-9a-zA-Z_-]{1,21})|(sfc:image:[a-zA-Z0-9._-]+(:[a-zA-Z0-9._-]+){2,2})
    PatchInstanceRequest:
      type: object
      properties:
        name:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/Name'
        tags:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/Tags'
            description: 'Metadata tags. Full replacement semantics: replaces all existing tags. Omit to leave tags unchanged. Set to `null` to clear all tags.'
        priority_level:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/InstancePriority'
            description: Instance priority. Omit to leave unchanged.
    ImageSummary:
      type: object
      required:
      - id
      - name
      properties:
        id:
          $ref: '#/components/schemas/ImageId'
        name:
          $ref: '#/components/schemas/Name'
    NotFoundError:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - type
          - message
          properties:
            type:
              type: string
              const: not_found
              default: not_found
              readOnly: true
            message:
              type: string
              x-speakeasy-error-message: true
    InstanceSshHostKey:
      type: object
      required:
      - key_type
      - key
      properties:
        key_type:
          type: string
          description: Key algorithm.
          examples:
          - ssh-ed25519
          - ssh-rsa
        key:
          type: string
          format: byte
          description: Base64-encoded public key.
          example: AAAAC3NzaC1lZDI1NTE5AAAAI...
          contentEncoding: base64
    UnprocessableEntityError:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - type
          - message
          properties:
            type:
              type: string
              const: unprocessable_entity
              default: unprocessable_entity
              readOnly: true
            message:
              type: string
              x-speakeasy-error-message: true
            details:
              type: array
              items:
                $ref: '#/components/schemas/ErrorDetail'
    InstanceLogsResponse:
      type: object
      required:
      - object
      - data
      properties:
        object:
          type: string
          const: list
          default: list
          readOnly: true
        data:
          type: array
          items:
            $ref: '#/components/schemas/InstanceLogChunk'
    CreateInstanceRequest:
      type: object
      required:
      - pool
      - image
      - instance_sku
      properties:
        name:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/Name'
        pool:
          $ref: '#/components/schemas/ResourcePathOrId_PoolId'
        image:
          $ref: '#/components/schemas/ResourcePathOrId_ImageId'
        instance_sku:
          $ref: '#/components/schemas/InstanceSkuId'
          description: Instance SKU this instance will run on. The instance is pinned to the SKU's underlying hardware pool at create time — it will not land on any other SKU. See `GET /preview/v2/instance_skus` to enumerate the SKUs visible to your account.
        cloud_init_user_data:
          type: string
          format: byte
          description: Base64-encoded [cloud-init user data](https://cloudinit.readthedocs.io/en/latest/explanation/format/index.html). Maximum 64KB.
          example: IyEvYmluL2Jhc2gKZWNobyBoZWxsbyB3b3JsZAo=
          contentEncoding: base64
        enable_public_ipv4:
          type: boolean
          description: Whether to assign a public IPv4 address to this instance. When `false` (the default), only SSH (TCP port 22) is open on the instance and no other ports accept inbound traffic. When `true`, the chosen `instance_sku` must advertise the SKU property `public_ipv4` with value `"yes"`.
        firewall:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/ResourcePathOrId_FirewallId'
            description: 'Firewall to attach to this instance''s public IP, e.g. `sfc:firewall:acme:prod:default` to use the workspace''s auto-managed default firewall.


              Required when `enable_public_ipv4 = true`; forbidden otherwise.'
        tags:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/Tags'
            description: Optional metadata tags for this instance.
        priority_level:
          oneOf:
          - type: 'null'
          - $ref: '#/components/schemas/InstancePriority'
            description: Instance priority. Omit to default to `normal`.
        _preview_enable_infiniband:
          type: boolean
          description: '**Experimental — subject to change or removal without notice.** Enables InfiniBand. The chosen `instance_sku` must support InfiniBand.'
          default: false
          example: false
    CapacitySummary:
      type: object
      required:
      - id
      - name
      properties:
        id:
          $ref: '#/components/schemas/CapacityId'
        name:
          $ref: '#/components/schemas/Name'
    InstanceResponse:
      allOf:
      - $ref: '#/components/schemas/InstanceScope'
      - type: object
        required:
        - object
        - status
        - instance_sku
        - capacity
        - pool
        - created_at
        - updated_at
        - image
        - cloud_init_user_data_used
        properties:
          object:
            type: string
            const: instance
            default: instance
            readOnly: true
          status:
            $ref: '#/components/schemas/InstanceStatus'

# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/the-san-francisco-compute-company/refs/heads/main/openapi/the-san-francisco-compute-company-instances-api-openapi.yml