---
title: "Create a new instance SKU with validated properties."
method: POST
path: "/preview/v2/admin/instance_skus"
tags: ["admin"]
---

# Create a new instance SKU with validated properties.

`POST /preview/v2/admin/instance_skus`

> ⚠️ This endpoint is in [public preview](/preview/roadmap).

Minimal compared to the v1 `POST /v1/admin/clusters` endpoint: this
does **not** touch zones, workspaces, capacities, delivery fees, or
zone metadata — only the trading-engine `CreateCluster` command with
validated properties. Use the v1 endpoint if you need that extra
provider-onboarding plumbing.

## Request body

- SfcApiCreateAdminInstanceSkuRequest
  - `owner` string, required
  - `name` string, required
  - `properties` SfcApiInstanceType, required

## Response `201`

Instance SKU created

- SfcApiAdminInstanceSku
  - `object` 'instance_sku', required — Single discriminator for the instance-SKU object on both admin and public endpoints. They expose different field shapes but represent the same underlying resource (mirrors Stripe's pattern of one `object` discriminator per resource type, regardless of view).
  - `id` string, required
  - `name` string
  - `properties` SfcApiAdminInstanceSkuProperty[], required
    - union — A property set on an instance SKU, admin view. Tagged to match the public [`InstanceSkuProperty`][crate::v2_routes::instance_skus::InstanceSkuProperty] shape, with extra variants for keys/values that aren't fully registered (admins see everything, customers only see fully registered properties).
      - object
        - `key` SfcApiAdminInstanceSkuPropertyKey, required — Admin view of a property key. Same shape as the public [`InstanceSkuPropertyKey`][crate::v2_routes::instance_skus::InstanceSkuPropertyKey] with extra fields admins need to manage the registry lifecycle.
          - `name` string, required
          - `display_name` string, required
          - `description` string, required
          - `documentation_link` string, nullable
          - `required` boolean, required
          - `stable_at` integer — Unix timestamp.
          - `deprecated_at` integer — Unix timestamp.
          - `deprecation_info` string, nullable
          - `deleted_at` integer — Unix timestamp.
          - `created_at` integer, required — Unix timestamp.
          - `updated_at` integer, required — Unix timestamp.
          - `internal_note` string, nullable
        - `value` SfcApiAdminInstanceSkuEnumerationValue, required — Admin view of an enumeration value.
          - `key` string, required
          - `name` string, required
          - `display_name` string, required
          - `description` string, required
          - `documentation_link` string, nullable
          - `stable_at` integer — Unix timestamp.
          - `deprecated_at` integer — Unix timestamp.
          - `deprecation_info` string, nullable
          - `deleted_at` integer — Unix timestamp.
          - `created_at` integer, required — Unix timestamp.
          - `updated_at` integer, required — Unix timestamp.
          - `internal_note` string, nullable
        - `type` 'enumeration', required
      - object — The key is registered but the value is not in the registered enumeration. The registry is descriptive, not a whitelist.
        - `key` SfcApiAdminInstanceSkuPropertyKey, required — Admin view of a property key. Same shape as the public [`InstanceSkuPropertyKey`][crate::v2_routes::instance_skus::InstanceSkuPropertyKey] with extra fields admins need to manage the registry lifecycle.
          - `name` string, required
          - `display_name` string, required
          - `description` string, required
          - `documentation_link` string, nullable
          - `required` boolean, required
          - `stable_at` integer — Unix timestamp.
          - `deprecated_at` integer — Unix timestamp.
          - `deprecation_info` string, nullable
          - `deleted_at` integer — Unix timestamp.
          - `created_at` integer, required — Unix timestamp.
          - `updated_at` integer, required — Unix timestamp.
          - `internal_note` string, nullable
        - `value` string, required
        - `type` 'unregistered_enumeration_value', required
      - object — Neither the key nor the value is in the registry.
        - `key` string, required
        - `value` string, required
        - `type` 'unregistered', required
  - `total_scheduled_supply` SfcApiScheduleEntry[], required — Node count over time, as a list of `[start_at, end_at)` time ranges. Example: 5 nodes from t=0 to t=3600 is `[{"start_at": 0, "end_at": 3600, "node_count": 5}]`. `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`.
    - `start_at` integer, required — Unix timestamp.
    - `end_at` integer — Unix timestamp.
    - `node_count` integer, required

## Other responses

- `400` — Validation failure
- `403` — Forbidden
- `404` — Owner account not found
- `500` — Internal server error

---

[API](https://skmtc.net/sfcompute/apis/san-francisco-compute-documentation.md) · [All operations](https://skmtc.net/sfcompute/apis/san-francisco-compute-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sfcompute/san-francisco-compute-documentation/versions/93dd7661e9bb/schema)
