---
title: "PUT /preview/v2/admin/instance_skus/{id}"
method: PUT
path: "/preview/v2/admin/instance_skus/{id}"
tags: ["admin"]
---

# PUT /preview/v2/admin/instance_skus/{id}

`PUT /preview/v2/admin/instance_skus/{id}`

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

## Path parameters

- `id` string, required

## Request body

- SfcApiPutAdminInstanceSkuRequest
  - `properties` SfcApiInstanceType, required
  - `allow_modify` boolean — ⚠️ DANGER — DO NOT SET THIS UNLESS YOU MEAN IT. ⚠️ When `false` (the default), every existing `(key, value)` pair must be present unchanged in `properties` — new keys can be added, but no existing key may be dropped or have its value rewritten. The trading engine treats SKU properties as the canonical hardware/visibility identity of the SKU; flipping `audience: public → internal`, dropping `accelerator`, or renaming a property retroactively reshapes every order, contract, and procurement that's already pointed at this SKU. Customers who trusted that the SKU they bought against was H100 will suddenly be matching against whatever you wrote. Set this to `true` ONLY when you have audited every live procurement, order, and contract on this SKU and know for certain that the rewrite is intended (e.g. correcting a typo nobody has matched against yet, or renaming a property the trading engine doesn't key on). For everything else, create a new SKU and migrate.

## Response `200`

Updated instance SKU

- 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` — Properties failed validation
- `403` — Forbidden
- `404` — 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)
