{"openapi":"3.0.0","info":{"description":"SF Compute GPU cloud API — deployments and capacity on api.sfcompute.com; Bearer (JWT-format key).","version":"v2"},"servers":[{"description":"SF Compute GPU cloud API — deployments and capacity on api.sfcompute.com; Bearer (JWT-format key).","url":"https://api.apirails.com/sfcompute"}],"paths":{"/preview/v2/me":{"get":{"tags":["Account"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/account/get-the-authenticated-account-and-logged-in-user.md","api_endpoint":"https://api.sfcompute.com/preview/v2/me"},"summary":"Get the authenticated account and logged-in user","description":"Get the authenticated account and logged-in user | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nReturns the authenticated account along with details about the logged-in user that issued the calling token.\nThe `user` field is `null` when authenticated with a service token.","security":[{"bearerAuth":[]}]}},"/preview/v2/deployments":{"post":{"tags":["Deployments"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/deployments/create-deployment.md","api_endpoint":"https://api.sfcompute.com/preview/v2/deployments"},"summary":"Create deployment","description":"Create deployment | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nCreate a generic deployment that uses capacity already owned in a pool, or a spot deployment that buys capacity for a specific instance SKU at or below a maximum rate.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"instance_name_template":{"type":"string","description":"A name template using {{variable}} syntax. Available variables: {{adjective}} (~128 random adjectives), {{noun}} (~128 random nouns), {{nanoid(N)}} (N-character alphanumeric identifier, 1 ≤ N ≤ 21). The template must produce enough unique combinations to avoid collisions — equivalent to at least the default template {{adjective}}-{{noun}}-{{nanoid(6)}} (~1 quadrillion possibilities). Must start with an alphanumeric character. Resolved names are limited to 255 characters."},"instance_sku":{"type":"string","description":"Legacy alias prefix; accepted on read, never emitted on write.","required":true},"instance_template":{"type":"string","description":"A resource path like 'sfc:instance_template:acme:prod:my-instance_template' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true},"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true},"target_instance_count":{"type":"number","description":"body.target_instance_count (number field from the documented request schema)","required":true}}},"example":{"instance_name_template":["string"],"instance_sku":["string"],"instance_template":["string"],"name":["string"],"pool":["string"],"target_instance_count":[0]}}}}},"get":{"tags":["Deployments"],"parameters":[{"name":"ending_before","in":"query","description":"ending_before (query parameter from the official API reference)","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"pool","in":"query","description":"Filter by pool.","required":false,"schema":{"type":"string","example":""}},{"name":"starting_after","in":"query","description":"starting_after (query parameter from the official API reference)","required":false,"schema":{"type":"string","example":""}},{"name":"workspace","in":"query","description":"Filter by workspace.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/deployments/list-deployments.md","api_endpoint":"https://api.sfcompute.com/preview/v2/deployments"},"summary":"List deployments","description":"List deployments | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList all deployments.","security":[{"bearerAuth":[]}]}},"/preview/v2/deployments/{id}":{"delete":{"tags":["Deployments"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:deployment:acme:prod:my-deployment' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/deployments/delete-deployment.md","api_endpoint":"https://api.sfcompute.com/preview/v2/deployments/{id}"},"summary":"Delete deployment","description":"Delete deployment | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nDelete a deployment or spot deployment.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Deployments"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:deployment:acme:prod:my-deployment' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/deployments/get-deployment.md","api_endpoint":"https://api.sfcompute.com/preview/v2/deployments/{id}"},"summary":"Get deployment","description":"Get deployment | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nRetrieve a deployment or spot deployment by ID or resource path.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Deployments"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:deployment:acme:prod:my-deployment' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/deployments/update-deployment.md","api_endpoint":"https://api.sfcompute.com/preview/v2/deployments/{id}"},"summary":"Update deployment","description":"Update deployment | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nUpdate a deployment or spot deployment's configuration.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"enabled":{"type":"boolean","description":"body.enabled (boolean field from the documented request schema)","enum":[true,false]},"instance_name_template":{"type":"string","description":"A name template using {{variable}} syntax. Available variables: {{adjective}} (~128 random adjectives), {{noun}} (~128 random nouns), {{nanoid(N)}} (N-character alphanumeric identifier, 1 ≤ N ≤ 21). The template must produce enough unique combinations to avoid collisions — equivalent to at least the default template {{adjective}}-{{noun}}-{{nanoid(6)}} (~1 quadrillion possibilities). Must start with an alphanumeric character. Resolved names are limited to 255 characters."},"instance_template":{"type":"string","description":"A resource path like 'sfc:instance_template:acme:prod:my-instance_template' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent."},"max_buy_price_dollars_per_node_hour":{"type":"string","description":"Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour."},"min_runtime_minutes":{"type":"number","description":"Minimum continuous capacity window, in minutes, the spot deployment tries to purchase before launching each target instance. Boot time counts toward this window. Below 10 minutes, an instance may have very little or no usable runtime after boot; use shorter windows only for fast-starting, interruption-tolerant workloads. Minimum runtimes of 2 minutes or lower do not include a preemption notice."},"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"target_instance_count":{"type":"number","description":"body.target_instance_count (number field from the documented request schema)"}}},"example":{"enabled":["string"],"instance_name_template":["string"],"instance_template":["string"],"max_buy_price_dollars_per_node_hour":["string"],"min_runtime_minutes":["string"],"name":["string"],"target_instance_count":["string"]}}}}}},"/preview/v2/firewalls":{"post":{"tags":["Firewalls"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/firewalls/create-firewall.md","api_endpoint":"https://api.sfcompute.com/preview/v2/firewalls"},"summary":"Create firewall","description":"Create firewall | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nCreate a workspace-scoped firewall with an ordered list of allow-only ingress rules.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"rules":{"type":"array","description":"Allow-only ingress rules. Order is preserved across reads and PUT replacements.","required":true,"items":{"type":"object","properties":{"direction":{"type":"string","description":"Direction of a firewall rule. Only `ingress` is accepted today; `egress` is reserved for future use and rejected with 422 if submitted.","required":true},"port":{"type":"string","description":"A single port (e.g. \"22\") or a closed range (e.g. \"8000-8999\"). Both endpoints must be in 0-65535 with start <= end. Required for tcp/udp rules; forbidden on icmp rules."},"protocol":{"type":"string","description":"body.rules.protocol (string field from the documented request schema)","required":true},"source":{"type":"string","description":"An IPv4 CIDR block (e.g. \"10.0.0.0/24\"). Host bits must be zero; prefix length is 0–32."}}}}}},"example":{"rules":[[{"direction":"ingress","port":"string","protocol":"tcp","source":"string"}]]}}}}},"get":{"tags":["Firewalls"],"parameters":[{"name":"workspace","in":"query","description":"Workspace to list firewalls in.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/firewalls/list-firewalls.md","api_endpoint":"https://api.sfcompute.com/preview/v2/firewalls"},"summary":"List firewalls","description":"List firewalls | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList firewalls in a workspace, including the auto-managed 'default' firewall.","security":[{"bearerAuth":[]}]}},"/preview/v2/firewalls/{id}":{"delete":{"tags":["Firewalls"],"parameters":[{"name":"id","in":"path","description":"Firewall ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/firewalls/delete-firewall.md","api_endpoint":"https://api.sfcompute.com/preview/v2/firewalls/{id}"},"summary":"Delete firewall","description":"Delete firewall | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nDelete a firewall. Fails with 409 if any active instance or instance template still references it. The 'default' firewall is auto-managed and cannot be deleted (422).","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Firewalls"],"parameters":[{"name":"id","in":"path","description":"Firewall ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/firewalls/get-firewall.md","api_endpoint":"https://api.sfcompute.com/preview/v2/firewalls/{id}"},"summary":"Get firewall","description":"Get firewall | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nRetrieve a firewall by ID or resource path. Includes the workspace's 'default' firewall, fetched the same way as any other.","security":[{"bearerAuth":[]}]},"put":{"tags":["Firewalls"],"parameters":[{"name":"id","in":"path","description":"Firewall ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/firewalls/replace-a-firewalls-rules.md","api_endpoint":"https://api.sfcompute.com/preview/v2/firewalls/{id}"},"summary":"Replace a firewall's rules","description":"Replace a firewall's rules | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nAtomically replaces the firewall's rules with the rules in the request body. The new rule order is preserved on subsequent reads. Updating the auto-managed 'default' firewall is rejected with 422.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"rules":{"type":"array","description":"Allow-only ingress rules. Order is preserved across reads and PUT replacements.","required":true,"items":{"type":"object","properties":{"direction":{"type":"string","description":"Direction of a firewall rule. Only `ingress` is accepted today; `egress` is reserved for future use and rejected with 422 if submitted.","required":true},"port":{"type":"string","description":"A single port (e.g. \"22\") or a closed range (e.g. \"8000-8999\"). Both endpoints must be in 0-65535 with start <= end. Required for tcp/udp rules; forbidden on icmp rules."},"protocol":{"type":"string","description":"body.rules.protocol (string field from the documented request schema)","required":true},"source":{"type":"string","description":"An IPv4 CIDR block (e.g. \"10.0.0.0/24\"). Host bits must be zero; prefix length is 0–32."}}}}}},"example":{"rules":[[{"direction":"ingress","port":"string","protocol":"tcp","source":"string"}]]}}}}}},"/v2/images/{id}/complete":{"post":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/complete-image-upload.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}/complete"},"summary":"Complete image upload","description":"Complete image upload | Finalize a multipart image upload.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"sha256":{"type":"string","description":"Not verified on upload; used during instance boot to verify integrity.","required":true}}},"example":{"sha256":["string"]}}}}}},"/v2/images":{"post":{"tags":["Images"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/create-image.md","api_endpoint":"https://api.sfcompute.com/v2/images"},"summary":"Create image","description":"Create image | Create an image and start a multipart upload.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"workspace":{"type":"string","description":"A resource path like 'sfc:workspace:acme:my-workspace' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true}}},"example":{"name":["string"],"workspace":["string"]}}}}},"get":{"tags":["Images"],"parameters":[{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by image ID (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"Maximum number of results to return (1-200, default 50).","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}},{"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 where the caller has `Image:List` and `Image:Read` (granted at either the workspace or organization level). Public images are not included by default - request them by specifying `sfc:workspace:sfcompute:public` for the `workspace` query parameter.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/list-images.md","api_endpoint":"https://api.sfcompute.com/v2/images"},"summary":"List images","description":"List images | List images in the specified workspace. Pass `sfc:workspace:sfcompute:public` as the workspace to list sfc-provided public images instead.","security":[{"bearerAuth":[]}]}},"/v2/images/{id}":{"delete":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/delete-image.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}"},"summary":"Delete image","description":"Delete image | Delete an image.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/get-image.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}"},"summary":"Get image","description":"Get image | Retrieve an image by ID. Returns both user-owned and public images.","security":[{"bearerAuth":[]}]}},"/v2/images/{id}/download":{"get":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/download-image.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}/download"},"summary":"Download image","description":"Download image | Get a presigned URL to download an image.","security":[{"bearerAuth":[]}]}},"/v2/images/{id}/parts":{"post":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/get-upload-part-url.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}/parts"},"summary":"Get upload part URL","description":"Get upload part URL | Get a presigned URL to upload one part of a multipart image upload.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"part_id":{"type":"number","description":"Caller-assigned part number, starting at 1.","required":true}}},"example":{"part_id":[0]}}}}}},"/v2/images/{id}/reinstate":{"post":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/reinstate-image.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}/reinstate"},"summary":"Reinstate image","description":"Reinstate image | Reinstate a revoked image, making it available for new instances again","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/v2/images/{id}/revoke":{"post":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID, name, or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/images/revoke-image.md","api_endpoint":"https://api.sfcompute.com/v2/images/{id}/revoke"},"summary":"Revoke image","description":"Revoke image | Revoke a private image. Revoked images can't back new instances; existing instances continue running.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/preview/v2/infiniband_partitions":{"post":{"tags":["InfiniBand Partitions"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/infiniband-partitions/create-infiniband-partition.md","api_endpoint":"https://api.sfcompute.com/preview/v2/infiniband_partitions"},"summary":"Create InfiniBand partition","description":"Create InfiniBand partition | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nCreate a named InfiniBand partition in a region and availability zone.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"availability_zone":{"type":"string","description":"Availability zone within the region.","required":true},"name":{"type":"string","description":"body.name (string field from the documented request schema)","required":true},"region":{"type":"string","description":"Region to create this partition in.","required":true},"workspace":{"type":"string","description":"A resource path like 'sfc:workspace:acme:my-workspace' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true}}},"example":{"availability_zone":["string"],"name":["string"],"region":["string"],"workspace":["string"]}}}}},"get":{"tags":["InfiniBand Partitions"],"parameters":[{"name":"availability_zone","in":"query","description":"An independent failure domain within a region, e.g. `a`.","required":false,"schema":{"type":"string","example":""}},{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"Maximum number of results to return (1-200, default 50).","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}},{"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 where the caller has `InfinibandPartition:List` and `InfinibandPartition:Read` (granted at either the workspace or organization level).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/infiniband-partitions/list-infiniband-partitions.md","api_endpoint":"https://api.sfcompute.com/preview/v2/infiniband_partitions"},"summary":"List InfiniBand partitions","description":"List InfiniBand partitions | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList InfiniBand partitions. Optionally filter by workspace and availability zone.","security":[{"bearerAuth":[]}]}},"/preview/v2/infiniband_partitions/{id}":{"delete":{"tags":["InfiniBand Partitions"],"parameters":[{"name":"id","in":"path","description":"InfiniBand partition ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/infiniband-partitions/delete-infiniband-partition.md","api_endpoint":"https://api.sfcompute.com/preview/v2/infiniband_partitions/{id}"},"summary":"Delete InfiniBand partition","description":"Delete InfiniBand partition | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nDelete an InfiniBand partition. Fails while instances are still attached. The name 'default' is reserved and cannot be deleted (422).","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["InfiniBand Partitions"],"parameters":[{"name":"id","in":"path","description":"InfiniBand partition ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/infiniband-partitions/get-infiniband-partition.md","api_endpoint":"https://api.sfcompute.com/preview/v2/infiniband_partitions/{id}"},"summary":"Get InfiniBand partition","description":"Get InfiniBand partition | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nGet an InfiniBand partition by ID.","security":[{"bearerAuth":[]}]}},"/preview/v2/instance_templates":{"post":{"tags":["Instance Templates"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instance-templates/create-instance-template.md","api_endpoint":"https://api.sfcompute.com/preview/v2/instance_templates"},"summary":"Create instance template","description":"Create instance template | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nCreate a reusable instance template.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"cloud_init_user_data":{"type":"string","description":"Base64-encoded [cloud-init user data](https://cloudinit.readthedocs.io/en/latest/explanation/format/index.html). Maximum 64KB. Instances created by a generic or spot deployment inherit this data from the referenced template, so bootstrap steps such as worker registration can be configured here."},"enable_public_ipv4":{"type":"boolean","description":"Assign a public IPv4 address to instances started with this template.","enum":[true,false]},"firewall":{"type":"string","description":"A resource path like 'sfc:firewall:acme:prod:my-firewall' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent."},"image":{"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.","required":true},"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"tags":{"type":"string","description":"body.tags (string field from the documented request schema)"},"workspace":{"type":"string","description":"A resource path like 'sfc:workspace:acme:my-workspace' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true}}},"example":{"cloud_init_user_data":["IyEvYmluL2Jhc2gKZWNobyBoZWxsbyB3b3JsZAo="],"enable_public_ipv4":[false],"firewall":["string"],"image":["string"],"name":["string"],"tags":["string"],"workspace":["string"]}}}}},"get":{"tags":["Instance Templates"],"parameters":[{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by instance template ID or name (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"include","in":"query","description":"Additional fields to include in the response.","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}},{"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 where the caller has `InstanceTemplate:List` and `InstanceTemplate:Read` (granted at either the workspace or organization level).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instance-templates/list-instance-templates.md","api_endpoint":"https://api.sfcompute.com/preview/v2/instance_templates"},"summary":"List instance templates","description":"List instance templates | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList all instance templates.","security":[{"bearerAuth":[]}]}},"/preview/v2/instance_templates/{id}":{"delete":{"tags":["Instance Templates"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:instance_template:acme:prod:my-instance_template' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instance-templates/delete-instance-template.md","api_endpoint":"https://api.sfcompute.com/preview/v2/instance_templates/{id}"},"summary":"Delete instance template","description":"Delete instance template | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nDelete an instance template. The template must not be in use by any capacity.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Instance Templates"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:instance_template:acme:prod:my-instance_template' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instance-templates/get-instance-template.md","api_endpoint":"https://api.sfcompute.com/preview/v2/instance_templates/{id}"},"summary":"Get instance template","description":"Get instance template | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nRetrieve an instance template by ID or resource path.","security":[{"bearerAuth":[]}]}},"/v2/instances":{"post":{"tags":["Instances"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/create-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances"},"summary":"Create instance","description":"Create instance | Create an instance.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"_preview_enable_public_ipv4":{"type":"boolean","description":"**Preview.** 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 `sku` must advertise the SKU property `public_ipv4` with value `\"yes\"`.","enum":[true,false]},"_preview_firewall":{"type":"string","description":"A resource path like 'sfc:firewall:acme:prod:my-firewall' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent."},"cloud_init_user_data":{"type":"string","description":"Base64-encoded [cloud-init user data](https://cloudinit.readthedocs.io/en/latest/explanation/format/index.html). Maximum 64KB."},"image":{"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.","required":true},"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true},"priority_level":{"type":"string","description":"Instance priority — a relative ranking that determines which instances the system prefers to keep running when capacity is constrained. When a capacity's quota drops below its running-instance count, instances are terminated in priority order (lower first).\nOrdering: `yield < normal < preferred < critical`."},"sku":{"type":"string","description":"SKU this instance will run on, as a `sku_`-prefixed id. The instance is pinned to the SKU's underlying hardware pool at create time — it will not land on any other SKU. See `GET /v2/skus` to enumerate the SKUs visible to your account.","required":true},"tags":{"type":"string","description":"body.tags (string field from the documented request schema)"}}},"example":{"_preview_enable_public_ipv4":[false],"_preview_firewall":["string"],"cloud_init_user_data":["IyEvYmluL2Jhc2gKZWNobyBoZWxsbyB3b3JsZAo="],"image":["string"],"name":["string"],"pool":["string"],"priority_level":["yield"],"sku":["sku_k3R-nX9vLm7Qp2Yw5Jd8F"],"tags":["string"]}}}}},"get":{"tags":["Instances"],"parameters":[{"name":"created_after","in":"query","description":"Filter to instances created at or after this Unix timestamp (seconds).","required":false,"schema":{"type":"number","example":""}},{"name":"created_before","in":"query","description":"Filter to instances created at or before this Unix timestamp (seconds).","required":false,"schema":{"type":"number","example":""}},{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by instance ID (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"pool","in":"query","description":"Filter by pool (repeatable). Instances on any of the given pools match.","required":false,"schema":{"type":"array","example":""}},{"name":"sku","in":"query","description":"Filter by SKU id (repeatable; any id spelling is accepted). Instances on any of the given SKUs match.","required":false,"schema":{"type":"array","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}},{"name":"status","in":"query","description":"Filter by instance status (repeatable).","required":false,"schema":{"type":"array","example":""}},{"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","example":""}},{"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","example":""}},{"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 where the caller has `Instance:List` and `Instance:Read` (granted at either the workspace or organization level).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/list-instances.md","api_endpoint":"https://api.sfcompute.com/v2/instances"},"summary":"List instances","description":"List instances | List all instances.","security":[{"bearerAuth":[]}]}},"/v2/instances/{id}":{"delete":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/delete-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}"},"summary":"Delete instance","description":"Delete instance | Delete an instance.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/get-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}"},"summary":"Get instance","description":"Get instance | Retrieve an instance by ID or name.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/update-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}"},"summary":"Update instance","description":"Update instance | Update an instance. Omitted fields are left unchanged.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"priority_level":{"type":"string","description":"Instance priority — a relative ranking that determines which instances the system prefers to keep running when capacity is constrained. When a capacity's quota drops below its running-instance count, instances are terminated in priority order (lower first).\nOrdering: `yield < normal < preferred < critical`."},"tags":{"type":"string","description":"body.tags (string field from the documented request schema)"}}},"example":{"name":["string"],"priority_level":["yield"],"tags":["string"]}}}}}},"/v2/instances/{id}/cloud_init_user_data":{"get":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/get-instance-cloud-init-user-data.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}/cloud_init_user_data"},"summary":"Get instance cloud-init user data","description":"Get instance cloud-init user data | Retrieve the cloud-init user data an instance was created with. Whether an instance has any is reported by the `cloud_init_user_data_used` field on the instance itself.","security":[{"bearerAuth":[]}]}},"/v2/instances/{id}/logs":{"get":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}},{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"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":{"type":"number","example":""}},{"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":{"type":"number","example":""}},{"name":"seqnum_after","in":"query","description":"Return logs with `seqnum` greater than or equal to this value.","required":false,"schema":{"type":"number","example":""}},{"name":"seqnum_before","in":"query","description":"Return logs with `seqnum` less than or equal to this value.","required":false,"schema":{"type":"number","example":""}},{"name":"sort_by","in":"query","description":"sort_by (query parameter from the official API reference)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["seqnum","-seqnum"]}}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/get-instance-logs.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}/logs"},"summary":"Get instance logs","description":"Get instance logs | Retrieve logs for an instance.","security":[{"bearerAuth":[]}]}},"/v2/instances/{id}/ssh":{"get":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/get-instance-ssh-info.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}/ssh"},"summary":"Get instance SSH info","description":"Get instance SSH info | Retrieve SSH connection details for an instance.","security":[{"bearerAuth":[]}]}},"/v2/instances/{id}/replace":{"post":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}},{"name":"Idempotency-Key","in":"query","description":"Optional key that makes the request idempotent. Retries with the same key return the original replacement.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/replace-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}/replace"},"summary":"Replace instance","description":"Replace instance | 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"cloud_init_user_data":{"type":"string","description":"Base64-encoded [cloud-init user data](https://cloudinit.readthedocs.io/en/latest/explanation/format/index.html). Maximum 64KB. If omitted, the replacement starts with no startup script — you will not be able to SSH into it."},"image":{"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.","required":true},"name":{"type":"string","description":"body.name (string field from the documented request schema)"}}},"example":{"cloud_init_user_data":["IyEvYmluL2Jhc2gKZWNobyBoZWxsbyB3b3JsZAo="],"image":["string"],"name":["string"]}}}}}},"/v2/instances/{id}/terminate":{"post":{"tags":["Instances"],"parameters":[{"name":"id","in":"path","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.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/instances/terminate-instance.md","api_endpoint":"https://api.sfcompute.com/v2/instances/{id}/terminate"},"summary":"Terminate instance","description":"Terminate instance | Terminates a running instance. Terminated instances can not be restarted.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/preview/v2/orderbook/depth":{"get":{"tags":["Orderbook"],"parameters":[{"name":"depth","in":"query","description":"Maximum levels returned per side. Clamped to [1, 100]. Default 20.","required":false,"schema":{"type":"number","example":""}},{"name":"end_at","in":"query","description":"End of the delivery window.","required":true,"schema":{"type":"number","example":""}},{"name":"requirements","in":"query","description":"URL-safe `field[:op]:value` triples joined by `;`.","required":false,"schema":{"type":"string","example":""}},{"name":"start_at","in":"query","description":"Start of the delivery window.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orderbook/get-market-depth.md","api_endpoint":"https://api.sfcompute.com/preview/v2/orderbook/depth"},"summary":"Get market depth","description":"Get market depth | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nDepth of book for the given requirements and delivery window, aggregated by instance SKU and price level. Individual orders and participants are not exposed.","security":[{"bearerAuth":[]}]}},"/preview/v2/orderbook/quote":{"get":{"tags":["Orderbook"],"parameters":[{"name":"end_at","in":"query","description":"End of the delivery window.","required":true,"schema":{"type":"number","example":""}},{"name":"requirements","in":"query","description":"URL-safe `field[:op]:value` triples joined by `;`.","required":false,"schema":{"type":"string","example":""}},{"name":"start_at","in":"query","description":"Start of the delivery window.","required":true,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orderbook/get-market-quote.md","api_endpoint":"https://api.sfcompute.com/preview/v2/orderbook/quote"},"summary":"Get market quote","description":"Get market quote | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nTop-of-book quote (best bid + best ask) for the given requirements and delivery window. Returned price levels include the matching instance SKU.","security":[{"bearerAuth":[]}]}},"/preview/v2/orderbook/fills":{"get":{"tags":["Orderbook"],"parameters":[{"name":"end_at","in":"query","description":"End of the delivery window.","required":true,"schema":{"type":"number","example":""}},{"name":"limit","in":"query","description":"Maximum results to return. Clamped to [1, 200]. Default 50.","required":false,"schema":{"type":"number","example":""}},{"name":"requirements","in":"query","description":"URL-safe `field[:op]:value` triples joined by `;`.","required":false,"schema":{"type":"string","example":""}},{"name":"since_at","in":"query","description":"Lower bound on when the fill happened. Unix epoch seconds. Defaults to `now - 7d`. Must be no more than 30 days before `now`; older values return 422.","required":false,"schema":{"type":"number","example":""}},{"name":"start_at","in":"query","description":"Start of the delivery window.","required":true,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next (older) page.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orderbook/list-market-fills.md","api_endpoint":"https://api.sfcompute.com/preview/v2/orderbook/fills"},"summary":"List market fills","description":"List market fills | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nAll trades that filled on hardware meeting the requirements for the given delivery window, sorted newest first. One row per fill, including the instance SKU. Participant identity is never exposed.","security":[{"bearerAuth":[]}]}},"/preview/v2/orderbook/windows":{"get":{"tags":["Orderbook"],"parameters":[{"name":"limit","in":"query","description":"Maximum results to return. Clamped to [1, 200]. Default 50.","required":false,"schema":{"type":"number","example":""}},{"name":"range_end_at","in":"query","description":"End of the delivery-window range to browse. Unix epoch seconds, minute-aligned, must be > `range_start_at`.","required":true,"schema":{"type":"number","example":""}},{"name":"range_start_at","in":"query","description":"Start of the delivery-window range to browse. Unix epoch seconds, minute-aligned.","required":true,"schema":{"type":"number","example":""}},{"name":"requirements","in":"query","description":"URL-safe `field[:op]:value` triples joined by `;`.","required":false,"schema":{"type":"string","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orderbook/list-market-windows.md","api_endpoint":"https://api.sfcompute.com/preview/v2/orderbook/windows"},"summary":"List market windows","description":"List market windows | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList every instance SKU and delivery window with resting orders matching the requirements, within the given time range. Each row is a summary; use /quote or /depth for detail on a specific SKU window.","security":[{"bearerAuth":[]}]}},"/v2/orders/{id}/cancel":{"post":{"tags":["Orders"],"parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orders/cancel-order.md","api_endpoint":"https://api.sfcompute.com/v2/orders/{id}/cancel"},"summary":"Cancel order","description":"Cancel order | Request cancellation of an order. Because cancellation is asynchronous, the order may match more capacity and add entries to `fills` after this request returns but before its state changes to `cancelled`. Poll `GET /v2/orders/{id}` until then. At that point, `fills` and `filled_allocation_schedule_delta` are final and remain available from both `GET /v2/orders/{id}` and `GET /v2/orders`.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/v2/orders":{"post":{"tags":["Orders"],"parameters":[{"name":"Idempotency-Key","in":"query","description":"Unique key to ensure idempotent order creation. If provided, duplicate requests with the same key will not place a new order and return the original order.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orders/create-order.md","api_endpoint":"https://api.sfcompute.com/v2/orders"},"summary":"Create order","description":"Create order | Place a buy or sell order. Orders fill on a single instance SKU matching the order's `requirements`. By default orders fill completely or not at all; set `allow_partial` to permit a partial fill. Order filling is asynchronous; poll `GET /v2/orders/{id}` to check the order's state.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"allocation_schedule_delta":{"type":"array","description":"Node count over time, as a list of `[start_at, end_at)` time ranges.\nExample: 5 nodes from t=0 to t=3600 is `[{\"start_at\": 0, \"end_at\": 3600, \"node_count\": 5}]`.\n`start_at` and `end_at` must be 60-second aligned, `node_count` must be non-negative. On non-final entries, `end_at` may be omitted (inferred from the next entry's `start_at`); gaps fill with `node_count: 0`.\nIn responses, a non-empty array always closes with a terminator entry whose `end_at` is `null` (the unbounded tail) and, for a bounded schedule, `node_count: 0`; an empty schedule is returned as `[]`.","required":true,"items":{"type":"object","properties":{"end_at":{"type":"string","description":"Unix timestamp."},"node_count":{"type":"number","description":"body.allocation_schedule_delta.node_count (number field from the documented request schema)","required":true},"start_at":{"type":"number","description":"Unix timestamp.","required":true}}}},"allow_partial":{"type":"boolean","description":"If true, the order may fill partially — fewer nodes and/or a subset of the requested time window. The filled time may be disjoint.","required":true,"enum":[true,false]},"allow_standing":{"type":"boolean","description":"If true, the order rests on the order book until it fills, is cancelled, or its end time passes. If false, the order is cancelled immediately if it does not fill.","required":true,"enum":[true,false]},"limit_price_dollars_per_node_hour":{"type":"string","description":"Price in dollars per node-hour, encoded as a decimal string. Prices are rounded to the nearest $0.000060/node-hour market tick. This is one microdollar per node-minute. Responses contain the rounded value with six decimal places. Inputs must contain a decimal point, be non-negative, and not exceed $500/node-hour.","required":true},"pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true},"side":{"type":"string","description":"body.side (string field from the documented request schema)","required":true},"sku":{"type":"string","description":"SKU this order will fill on. Rejected at submission if the SKU id is not registered. Any id spelling is accepted.","required":true}}},"example":{"allocation_schedule_delta":[[{"end_at":1738972800,"node_count":0,"start_at":1738972800}]],"allow_partial":[false],"allow_standing":[false],"limit_price_dollars_per_node_hour":["string"],"pool":["string"],"side":["sell"],"sku":["sku_k3R-nX9vLm7Qp2Yw5Jd8F"]}}}}},"get":{"tags":["Orders"],"parameters":[{"name":"_preview_deployment","in":"query","description":"Filter to one deployment's orders (ID or resource path). Without it, the list omits deployment-managed orders.","required":false,"schema":{"type":"string","example":""}},{"name":"_preview_procurement","in":"query","description":"Filter to one procurement's orders (ID or resource path). Without it, the list omits procurement orders.","required":false,"schema":{"type":"string","example":""}},{"name":"created_after","in":"query","description":"Unix timestamp.","required":false,"schema":{"type":"number","example":""}},{"name":"created_before","in":"query","description":"Unix timestamp.","required":false,"schema":{"type":"number","example":""}},{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by order ID (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"pool","in":"query","description":"Filter by pool.","required":false,"schema":{"type":"string","example":""}},{"name":"side","in":"query","description":"side (query parameter from the official API reference)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["sell","buy"]}}},{"name":"sort_by","in":"query","description":"Prefix with `-` for descending.","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["created_at","-created_at","start_at","-start_at"]}}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}},{"name":"status","in":"query","description":"Filter by status (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"workspace","in":"query","description":"Scope the listing to a single workspace (ID, resource path, or name). Ignored when `pool` is given (the pool already names its workspace). Without either, the list spans the whole organization and requires an org-level `Order:List` grant.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orders/list-orders.md","api_endpoint":"https://api.sfcompute.com/v2/orders"},"summary":"List orders","description":"List orders | List all orders.","security":[{"bearerAuth":[]}]}},"/preview/v2/order_preview":{"post":{"tags":["Orders"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orders/estimate-an-order.md","api_endpoint":"https://api.sfcompute.com/preview/v2/order_preview"},"summary":"Estimate an order","description":"Estimate an order | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nEstimate a buy or sell order before placing it.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"duration_seconds":{"type":"number","description":"Order duration in seconds. Must be a positive multiple of 60.","required":true},"node_count":{"type":"number","description":"Number of nodes. Must be positive.","required":true},"pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent."},"requirements":{"type":"object","description":"Key/value filters on instance SKU properties.\nKeys are the property names instance SKUs carry on `GET /v2/instance_skus` (e.g. `accelerator`); values match each property's `value` spelling. The reserved `instance_sku` key pins to a single SKU by id.\nEmpty map = no constraints.","required":true,"properties":{}},"start_at":{"type":"number","description":"Unix timestamp.","required":true}}},"example":{"duration_seconds":[0],"node_count":[0],"pool":["string"],"requirements":[{"accelerator":["H100"]}],"start_at":[1738972800]}}}}}},"/v2/orders/{id}":{"get":{"tags":["Orders"],"parameters":[{"name":"id","in":"path","description":"Order ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/orders/get-order.md","api_endpoint":"https://api.sfcompute.com/v2/orders/{id}"},"summary":"Get order","description":"Get order | Retrieve an order by ID.","security":[{"bearerAuth":[]}]}},"/preview/v2/pool_transfers":{"post":{"tags":["Pools"],"parameters":[{"name":"Idempotency-Key","in":"query","description":"Unique key for idempotent transfer creation.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/create-pool-transfer.md","api_endpoint":"https://api.sfcompute.com/preview/v2/pool_transfers"},"summary":"Create pool transfer","description":"Create pool transfer | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nTransfer some or all of one pool into another","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"allocation_schedule_delta":{"type":"array","description":"Node count over time, as a list of `[start_at, end_at)` time ranges.\nExample: 5 nodes from t=0 to t=3600 is `[{\"start_at\": 0, \"end_at\": 3600, \"node_count\": 5}]`.\n`start_at` and `end_at` must be 60-second aligned, `node_count` must be non-negative. On non-final entries, `end_at` may be omitted (inferred from the next entry's `start_at`); gaps fill with `node_count: 0`.\nIn responses, a non-empty array always closes with a terminator entry whose `end_at` is `null` (the unbounded tail) and, for a bounded schedule, `node_count: 0`; an empty schedule is returned as `[]`.","required":true,"items":{"type":"object","properties":{"end_at":{"type":"string","description":"Unix timestamp."},"node_count":{"type":"number","description":"body.allocation_schedule_delta.node_count (number field from the documented request schema)","required":true},"start_at":{"type":"number","description":"Unix timestamp.","required":true}}}},"from_pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true},"instance_sku":{"type":"string","description":"Legacy alias prefix; accepted on read, never emitted on write.","required":true},"to_pool":{"type":"string","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true}}},"example":{"allocation_schedule_delta":[[{"end_at":1738972800,"node_count":0,"start_at":1738972800}]],"from_pool":["string"],"instance_sku":["string"],"to_pool":["string"]}}}}},"get":{"tags":["Pools"],"parameters":[{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"pool","in":"query","description":"Filter by source or destination pool (repeatable). Returns transfers where the source or destination pool is any of the supplied pools.","required":false,"schema":{"type":"array","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}},{"name":"status","in":"query","description":"Filter by transfer status.","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["pending","executed","rejected"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/list-pool-transfers.md","api_endpoint":"https://api.sfcompute.com/preview/v2/pool_transfers"},"summary":"List pool transfers","description":"List pool transfers | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList pool transfers for the caller's organization.","security":[{"bearerAuth":[]}]}},"/v2/pools":{"post":{"tags":["Pools"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/create-pool.md","api_endpoint":"https://api.sfcompute.com/v2/pools"},"summary":"Create pool","description":"Create pool | Create a pool to hold compute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"tags":{"type":"string","description":"body.tags (string field from the documented request schema)"},"workspace":{"type":"string","description":"A resource path like 'sfc:workspace:acme:my-workspace' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true}}},"example":{"name":["string"],"tags":["string"],"workspace":["string"]}}}}},"get":{"tags":["Pools"],"parameters":[{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by pool ID, resource path, or name (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"schedule_history_minutes","in":"query","description":"How many minutes of past schedule to include.","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}},{"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","example":""}},{"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","example":""}},{"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 where the caller has `Capacity:List` and `Capacity:Read` (granted at either the workspace or organization level).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/list-pools.md","api_endpoint":"https://api.sfcompute.com/v2/pools"},"summary":"List pools","description":"List pools | List all pools.","security":[{"bearerAuth":[]}]}},"/v2/pools/{id}":{"delete":{"tags":["Pools"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/delete-pool.md","api_endpoint":"https://api.sfcompute.com/v2/pools/{id}"},"summary":"Delete pool","description":"Delete pool | Delete a pool. The pool must have no active orders, future allocations, active nodes, deployments, or procurements. Remove all dependencies before deleting.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Pools"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}},{"name":"schedule_history_minutes","in":"query","description":"How many minutes of past schedule to include.","required":false,"schema":{"type":"number","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/get-pool.md","api_endpoint":"https://api.sfcompute.com/v2/pools/{id}"},"summary":"Get pool","description":"Get pool | Retrieve a pool by ID, resource path, or name, including its compute schedule.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Pools"],"parameters":[{"name":"id","in":"path","description":"A resource path like 'sfc:pool:acme:prod:my-pool' _or_ an ID. Resource paths are human-readable but not stable - they change when resources are renamed or moved. IDs are stable and permanent.","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/update-pool.md","api_endpoint":"https://api.sfcompute.com/v2/pools/{id}"},"summary":"Update pool","description":"Update pool | Update a pool. Omitted fields are left unchanged.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"},"tags":{"type":"string","description":"body.tags (string field from the documented request schema)"}}},"example":{"name":["string"],"tags":["string"]}}}}}},"/preview/v2/pool_transfers/{id}":{"get":{"tags":["Pools"],"parameters":[{"name":"id","in":"path","description":"Pool transfer ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/pools/get-pool-transfer.md","api_endpoint":"https://api.sfcompute.com/preview/v2/pool_transfers/{id}"},"summary":"Get pool transfer","description":"Get pool transfer | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nRetrieve a pool transfer by ID.","security":[{"bearerAuth":[]}]}},"/v2/skus/{id}/availability":{"get":{"tags":["SKUs"],"parameters":[{"name":"id","in":"path","description":"SKU ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/skus/get-sku-availability.md","api_endpoint":"https://api.sfcompute.com/v2/skus/{id}/availability"},"summary":"Get SKU availability","description":"Get SKU availability | The purchasable-capacity schedule of one SKU.","security":[{"bearerAuth":[]}]}},"/v2/skus/{id}":{"get":{"tags":["SKUs"],"parameters":[{"name":"id","in":"path","description":"SKU ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/skus/get-sku.md","api_endpoint":"https://api.sfcompute.com/v2/skus/{id}"},"summary":"Get SKU","description":"Get SKU | Retrieve a SKU by ID, including its properties.","security":[{"bearerAuth":[]}]}},"/v2/skus/availability":{"get":{"tags":["SKUs"],"parameters":[{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"Maximum number of results to return (1-200, default 50).","required":false,"schema":{"type":"number","example":""}},{"name":"sku_query","in":"query","description":"SKU property filters as semicolon-separated `key:value` pairs, e.g. `accelerator:h100;num_accelerators:8`. Keys are the SKU object's property fields, plus the reserved `sku` key, which filters to a single SKU by id. Omit to list every SKU.","required":false,"schema":{"type":"string","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/skus/list-sku-availability.md","api_endpoint":"https://api.sfcompute.com/v2/skus/availability"},"summary":"List SKU availability","description":"List SKU availability | The purchasable-capacity schedule of every SKU, optionally narrowed by a `sku_query` property filter.","security":[{"bearerAuth":[]}]}},"/v2/skus":{"get":{"tags":["SKUs"],"parameters":[{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"include_deleted","in":"query","description":"Include retired (soft-deleted) SKUs in the results. Defaults to false.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"limit","in":"query","description":"Maximum number of results to return (1-200, default 50).","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/skus/list-skus.md","api_endpoint":"https://api.sfcompute.com/v2/skus"},"summary":"List SKUs","description":"List SKUs | List the SKUs available on the market with their properties.","security":[{"bearerAuth":[]}]}},"/preview/v2/users/{id}":{"get":{"tags":["Users"],"parameters":[{"name":"id","in":"path","description":"User ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/users/get-user.md","api_endpoint":"https://api.sfcompute.com/preview/v2/users/{id}"},"summary":"Get user","description":"Get user | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nReturns user details by ID or resource path.","security":[{"bearerAuth":[]}]}},"/preview/v2/users":{"get":{"tags":["Users"],"parameters":[{"name":"email","in":"query","description":"Filter to the user with this email address. Matched case-insensitively against the member's non-deleted identities.","required":false,"schema":{"type":"string","example":""}},{"name":"ending_before","in":"query","description":"Set to the response's `cursor` to fetch the previous page.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by user ID or resource path (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"limit (query parameter from the official API reference)","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Set to the response's `cursor` to fetch the next page.","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/users/list-users.md","api_endpoint":"https://api.sfcompute.com/preview/v2/users"},"summary":"List users","description":"List users | > ⚠️ This endpoint is in [public preview](/preview/roadmap#feature-states).\nList users that are members of the caller's organization.","security":[{"bearerAuth":[]}]}},"/v2/workspaces":{"post":{"tags":["Workspaces"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/workspaces/create-workspace.md","api_endpoint":"https://api.sfcompute.com/v2/workspaces"},"summary":"Create workspace","description":"Create workspace | Create a workspace.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"}}},"example":{"name":["string"]}}}}},"get":{"tags":["Workspaces"],"parameters":[{"name":"ending_before","in":"query","description":"Cursor for backward pagination.","required":false,"schema":{"type":"string","example":""}},{"name":"id","in":"query","description":"Filter by workspace ID, resource path, or name (repeatable).","required":false,"schema":{"type":"array","example":""}},{"name":"limit","in":"query","description":"Maximum number of results to return (1-200, default 50).","required":false,"schema":{"type":"number","example":""}},{"name":"starting_after","in":"query","description":"Cursor for forward pagination (from a previous response's `cursor` field).","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/workspaces/list-workspaces.md","api_endpoint":"https://api.sfcompute.com/v2/workspaces"},"summary":"List workspaces","description":"List workspaces | List all workspaces for the authenticated account, newest first.","security":[{"bearerAuth":[]}]}},"/v2/workspaces/{id}":{"delete":{"tags":["Workspaces"],"parameters":[{"name":"id","in":"path","description":"Workspace ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/workspaces/delete-workspace.md","api_endpoint":"https://api.sfcompute.com/v2/workspaces/{id}"},"summary":"Delete workspace","description":"Delete workspace | Soft-delete a workspace by ID or resource path. Workspace must be empty.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}},"get":{"tags":["Workspaces"],"parameters":[{"name":"id","in":"path","description":"Workspace ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/workspaces/get-workspace.md","api_endpoint":"https://api.sfcompute.com/v2/workspaces/{id}"},"summary":"Get workspace","description":"Get workspace | Retrieve a workspace by ID or resource path.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Workspaces"],"parameters":[{"name":"id","in":"path","description":"Workspace ID or resource path","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://docs.sfcompute.com/api-reference/workspaces/update-workspace.md","api_endpoint":"https://api.sfcompute.com/v2/workspaces/{id}"},"summary":"Update workspace","description":"Update workspace | Rename a workspace.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"body.name (string field from the documented request schema)"}}},"example":{"name":["string"]}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}