SF Compute Inference API
OpenAI-compatible inference served on SF Compute capacity. Models are listed via the models endpoint and called through a standard chat completions interface, letting bought GPU capacity be exposed as an inference fleet.
OpenAI-compatible inference served on SF Compute capacity. Models are listed via the models endpoint and called through a standard chat completions interface, letting bought GPU capacity be exposed as an inference fleet.
openapi: 3.0.1
info:
title: SF Compute API
description: >-
REST API for the SF Compute (San Francisco Compute Company) GPU compute
marketplace. Place buy/sell market orders for blocks of H100 GPU-hours,
list and retrieve tradable cluster contracts, request live market quotes,
read account balance, and provision managed-Kubernetes clusters, nodes,
and VM instances. All endpoints require a Bearer API token generated with
`sf tokens create`.
termsOfService: https://sfcompute.com/terms
contact:
name: SF Compute Support
email: hello@sfcompute.com
version: v0
servers:
- url: https://api.sfcompute.com/v0
security:
- bearerAuth: []
tags:
- name: Orders
- name: Contracts
- name: Prices
- name: Clusters
- name: Nodes
- name: Balance
- name: Account
paths:
/orders:
get:
operationId: listOrders
tags:
- Orders
summary: List orders
description: List market orders for the authenticated account with filtering, sorting, and pagination.
parameters:
- name: side
in: query
schema:
type: string
enum: [buy, sell]
- name: instance_type
in: query
schema:
type: string
example: h100i
- name: min_price
in: query
schema:
type: integer
description: Minimum price in cents.
- name: max_price
in: query
schema:
type: integer
- name: only_open
in: query
schema:
type: boolean
- name: only_filled
in: query
schema:
type: boolean
- name: only_cancelled
in: query
schema:
type: boolean
- name: sort_by
in: query
schema:
type: string
enum: [created_at, start_time]
- name: sort_direction
in: query
schema:
type: string
enum: [ASC, DESC]
- name: limit
in: query
schema:
type: integer
- name: offset
in: query
schema:
type: integer
responses:
'200':
description: A list of orders.
content:
application/json:
schema:
$ref: '#/components/schemas/OrderList'
post:
operationId: placeOrder
tags:
- Orders
summary: Place an order
description: >-
Place a buy or sell market order. Buy orders specify an instance type,
quantity, price, duration, and start time. Sell orders list time from
an existing contract back to the market.
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/PlaceBuyOrder'
- $ref: '#/components/schemas/PlaceSellOrder'
responses:
'200':
description: The placed order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
delete:
operationId: cancelAllOrders
tags:
- Orders
summary: Cancel all open orders
responses:
'200':
description: Orders cancelled.
/orders/{id}:
get:
operationId: getOrder
tags:
- Orders
summary: Get an order
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: The order.
content:
application/json:
schema:
$ref: '#/components/schemas/Order'
delete:
operationId: cancelOrder
tags:
- Orders
summary: Cancel an order
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: Order cancelled.
/orders/{id}/clusters:
get:
operationId: getOrderClusters
tags:
- Orders
- Clusters
summary: Get clusters for an order
description: Returns the clusters provisioned from a filled order.
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: Clusters associated with the order.
/quote:
get:
operationId: getQuote
tags:
- Prices
summary: Get a market quote
description: >-
Request an indicative market price for a desired instance type,
quantity, start window, and duration. Returns a quote with the price
in cents from which a per-GPU-hour rate can be derived. There is no
single fixed price per GPU-hour; each block is priced by the market.
parameters:
- name: side
in: query
schema:
type: string
enum: [buy, sell]
- name: instance_type
in: query
schema:
type: string
example: h100i
- name: quantity
in: query
schema:
type: integer
- name: min_start_date
in: query
schema:
type: string
description: ISO 8601 timestamp or the literal "NOW".
- name: max_start_date
in: query
schema:
type: string
- name: min_duration
in: query
schema:
type: integer
description: Minimum duration in seconds.
- name: max_duration
in: query
schema:
type: integer
- name: cluster
in: query
schema:
type: string
- name: colocate_with
in: query
schema:
type: string
responses:
'200':
description: A market quote, or null when no block is available.
content:
application/json:
schema:
$ref: '#/components/schemas/QuoteResponse'
/contracts:
get:
operationId: listContracts
tags:
- Contracts
summary: List contracts
responses:
'200':
description: A list of contracts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContractList'
/contracts/{id}:
get:
operationId: getContract
tags:
- Contracts
summary: Get a contract
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: The contract.
content:
application/json:
schema:
$ref: '#/components/schemas/Contract'
/procurements:
get:
operationId: listProcurements
tags:
- Clusters
summary: List procurements
description: List auto-scaling procurement fleets.
parameters:
- name: limit
in: query
schema:
type: integer
- name: offset
in: query
schema:
type: integer
responses:
'200':
description: A list of procurements.
post:
operationId: createProcurement
tags:
- Clusters
summary: Create a procurement
description: Create an auto-scaling procurement that maintains a target quantity of capacity.
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created procurement.
/procurements/{id}:
get:
operationId: getProcurement
tags:
- Clusters
summary: Get a procurement
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: The procurement.
/instances:
get:
operationId: listInstances
tags:
- Nodes
summary: List instances
responses:
'200':
description: A list of instances.
/instances/{id}:
get:
operationId: getInstance
tags:
- Nodes
summary: Get an instance
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: The instance.
/zones:
get:
operationId: listZones
tags:
- Clusters
summary: List zones
responses:
'200':
description: A list of availability zones.
/credentials:
get:
operationId: listCredentials
tags:
- Clusters
summary: List credentials
responses:
'200':
description: A list of cluster credentials (kubeconfig).
post:
operationId: createCredential
tags:
- Clusters
summary: Create a credential
requestBody:
required: true
content:
application/json:
schema:
type: object
responses:
'200':
description: The created credential.
/vms/instances:
get:
operationId: listVmInstances
tags:
- Nodes
summary: List VM instances
responses:
'200':
description: A list of VM instances.
/balance:
get:
operationId: getBalance
tags:
- Balance
summary: Get account balance
description: Returns available and current account balance in cents.
responses:
'200':
description: The account balance.
content:
application/json:
schema:
$ref: '#/components/schemas/Balance'
/transactions:
get:
operationId: listTransactions
tags:
- Balance
summary: List transactions
responses:
'200':
description: A list of account transactions.
/tokens:
get:
operationId: listTokens
tags:
- Account
summary: List API tokens
responses:
'200':
description: A list of tokens.
post:
operationId: createToken
tags:
- Account
summary: Create an API token
responses:
'200':
description: The created token.
/tokens/{id}:
delete:
operationId: deleteToken
tags:
- Account
summary: Delete an API token
parameters:
- $ref: '#/components/parameters/IdParam'
responses:
'200':
description: Token deleted.
/me:
get:
operationId: getMe
tags:
- Account
summary: Get current account
responses:
'200':
description: The authenticated account.
/ping:
get:
operationId: ping
tags:
- Account
summary: Health check
security: []
responses:
'200':
description: Service is reachable.
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'API token created with `sf tokens create`, sent as `Authorization: Bearer <token>`.'
parameters:
IdParam:
name: id
in: path
required: true
schema:
type: string
schemas:
OrderList:
type: object
properties:
object:
type: string
enum: [list]
data:
type: array
items:
$ref: '#/components/schemas/Order'
Order:
type: object
properties:
object:
type: string
enum: [order]
id:
type: string
side:
type: string
enum: [buy, sell]
instance_type:
type: string
example: h100i
price:
type: integer
description: Price in cents.
quantity:
type: integer
start_at:
type: string
format: date-time
end_at:
type: string
format: date-time
status:
type: string
enum: [pending, rejected, open, cancelled, filled, expired]
executed:
type: boolean
execution_price:
type: integer
cancelled:
type: boolean
cluster:
type: string
created_at:
type: string
format: date-time
flags:
$ref: '#/components/schemas/OrderFlags'
OrderFlags:
type: object
properties:
market:
type: boolean
post_only:
type: boolean
ioc:
type: boolean
prorate:
type: boolean
PlaceBuyOrder:
type: object
required: [side, quantity, price, instance_type, duration, start_at]
properties:
side:
type: string
enum: [buy]
quantity:
type: integer
description: Number of nodes.
price:
type: integer
description: Total price in cents.
instance_type:
type: string
example: h100i
duration:
type: integer
description: Duration in seconds.
start_at:
type: string
description: ISO 8601 timestamp or "NOW".
PlaceSellOrder:
type: object
required: [side, quantity, price, start_at, end_at, contract_id]
properties:
side:
type: string
enum: [sell]
quantity:
type: integer
price:
type: integer
description: Total price in cents.
start_at:
type: string
format: date-time
end_at:
type: string
format: date-time
contract_id:
type: string
QuoteResponse:
type: object
properties:
object:
type: string
enum: [quote]
quote:
nullable: true
allOf:
- $ref: '#/components/schemas/Quote'
Quote:
type: object
properties:
price:
type: integer
description: Total price in cents for the quoted block.
quantity:
type: integer
instance_type:
type: string
start_at:
type: string
format: date-time
end_at:
type: string
format: date-time
ContractList:
type: object
properties:
object:
type: string
enum: [list]
data:
type: array
items:
$ref: '#/components/schemas/Contract'
Contract:
type: object
properties:
object:
type: string
enum: [contract]
id:
type: string
status:
type: string
enum: [active, expired, upcoming, pending]
instance_type:
type: string
created_at:
type: string
format: date-time
cluster_id:
type: string
zone:
type: string
colocate_with:
type: array
items:
type: string
shape:
type: object
properties:
intervals:
type: array
items:
type: string
format: date-time
quantities:
type: array
items:
type: integer
Balance:
type: object
properties:
available_balance_cents:
type: integer
current_balance_cents:
type: integer