---
title: "Update a SKU"
method: PATCH
path: "/api/v1/sa/inventory/skus/{id}"
tags: ["SKUs"]
---

# Update a SKU

`PATCH /api/v1/sa/inventory/skus/{id}`

## Request

- Base URL: `https://app.sellerassistant.app` (the document declares no server; this is the origin it was published from)
- URL: `https://app.sellerassistant.app/api/v1/sa/inventory/skus/{id}`
- Auth: one of:
  - API key in query parameter `api_key`
  - API key in header `X-Api-Key`

The call changes only the fields the body carries, and it leaves the others as they are. The link to a purchase order line is a field, not an action: `purchase_order_item_id` links the SKU, and `null` unlinks it and keeps the costs the SKU already holds. The line must belong to the team, and one line holds one SKU, so a line another SKU already holds answers 409. `cost_overrides` holds the costs a person sets by hand, and they win over the ones the purchase order gives. A cost inside `cost_overrides` and the same cost at the top level are not the same field: `prep_cost` at the top level is the cost of the SKU, and `cost_overrides.prep_cost` overrides it.

## Path parameters

- `id` integer, required

## Request body

- object
  - `prep_cost` number, nullable: The prep cost of the SKU.
  - `purchase_order_item_id` integer, nullable: The purchase order line the costs come from. `null` unlinks the SKU.
  - `cost_overrides` object, nullable: The costs a person sets by hand. Each one wins over the cost the purchase order gives.
    - `unit_cost` number, nullable
    - `prep_cost` number, nullable
    - `allocated_po_expenses` number, nullable
    - `fba_inbound_cost` number, nullable
    - `fbm_postage_cost` number, nullable: The postage the seller pays for one FBM order unit. For an FBM SKU, the Repricer uses it for the profit and the cost-based price floors, and a change re-prices the SKU. `null` removes it: the postage is then not known, not zero.

## Response `200`

The SKU

- object
  - `data` Sku: What the team sells on one channel: the identity, the costs and the stock.
    - `id` integer: SKUs on the public API v1. There is no create endpoint. A SKU comes from the channel sync, so the API reads, updates the costs, and deletes.
    - `team_id` integer
    - `channel` string
    - `marketplace_id` string, nullable
    - `seller_id` string, nullable
    - `sku` string
    - `asin` string, nullable
    - `fnsku` string, nullable
    - `internal_product_id` string, nullable
    - `purchase_order_item_id` integer, nullable: The purchase order line the costs come from.
    - `status` string
    - `condition` string
    - `fulfillment_channel` 'FBA' | 'FBM', nullable: Who ships the orders of the SKU: Amazon (FBA) or the seller (FBM). `null` means that the channel is not known. The Repricer then uses the FBA formula.
    - `unit_cost` number, nullable
    - `allocated_po_expenses` number, nullable
    - `prep_cost` number, nullable
    - `fba_inbound_cost` number, nullable
    - `landed_cost` number, nullable: Every cost the SKU carries, added up.
    - `cost_overrides` object, nullable: The costs a person set by hand. They win over the ones the purchase order gives.
    - `cost_source` 'po_linked' | 'po_wac' | 'override' | 'none': Where the costs come from.
    - `stock_quantity` integer, nullable
    - `stock_updated_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `sold_in_unconnected_marketplace` boolean: The SKU sells in a marketplace the seller has not connected, so its data stays behind until the seller connects it.
    - `linked_purchase_order` object, nullable: The purchase order the cost comes from. The key is there only when an order item gives the cost.
      - `id` integer, nullable
      - `name` string, nullable
    - `internal_product` object, nullable: The inventory product of the SKU. When the product is gone, the object keeps the title and the image the SKU recorded, with `deleted: true`.
      - `title` string, nullable
      - `image_url` string, nullable
      - `brand` string, nullable
      - `deleted` boolean
    - `listing` Listing: The live state of one SKU on one channel.
      - `id` integer
      - `team_id` integer
      - `sku_id` integer, nullable
      - `channel` 'amazon' | 'walmart' | 'shopify' | 'ebay'
      - `marketplace_id` string, nullable
      - `seller_id` string, nullable
      - `sku` string
      - `identifier` string, nullable
      - `price` number, nullable
      - `currency` string, nullable
      - `condition` string, nullable
      - `fulfillment_type` string, nullable
      - `status` string
      - `error_message` string, nullable
      - `channel_data` object, nullable
      - `listed_at` string, date-time, nullable
      - `batch_id` string, nullable: The batch the draft was made in.
      - `sku_record` object, nullable: The SKU the listing sells, and the product behind it. The list and the read of one listing carry it; a draft the call has just written does not.
        - `id` integer
        - `sku` string, nullable
        - `asin` string, nullable
        - `fnsku` string, nullable
        - `internal_product_id` string, nullable
        - `product_title` string, nullable
        - `product_image_url` string, nullable
        - `internal_product` object, nullable
          - `id` string
          - `title` string, nullable
          - `brand` string, nullable
          - `image_url` string, nullable
      - `created_at` string, date-time, nullable
      - `updated_at` string, date-time, nullable

## Other responses

- `400`: Bad request - validation failed or invalid parameters
- `403`: Access denied - insufficient permissions, invalid API key, or the API request limit is used up (`public_api_key_limit`)
- `404`: Resource not found
- `409`: Conflict - the row is there, and another row already holds the place the call asks for
- `429`: Too many requests - rate limit exceeded

---

[API](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api.md) · [All operations](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sellerassistant/apis/seller-assistant-public-api/revisions/5b3ecdbcadb6?raw)
