---
title: "List SKUs"
method: GET
path: "/api/v1/sa/inventory/skus"
tags: ["SKUs"]
---

# List SKUs

`GET /api/v1/sa/inventory/skus`

## 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`
- Auth: one of:
  - API key in query parameter `api_key`
  - API key in header `X-Api-Key`

A SKU has no create endpoint: SKUs arrive from the channel synchronisation.

## Query parameters

- `filter[listing_status][eq]` 'active' | 'inactive' | 'draft'
- `filter[channel][eq]` 'amazon' | 'walmart' | 'shopify' | 'ebay'
- `filter[marketplace_id][eq]` string
- `filter[cost_source][eq]` 'po_linked' | 'po_wac' | 'override' | 'none'
- `search` string
- `sort` string
- `page` integer
- `per_page` integer

## Response `200`

One page of the SKUs

- object
  - `data` Sku[]
    - `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
  - `meta` object
    - `pagination` ApiV1Pagination: The page the answer carries. Every list of the v1 answers it under `meta`.
      - `page` integer: The schemas every endpoint of the public API v1 shares. The envelope is the same on every endpoint, so it lives here once. An endpoint points at it with a `$ref`, and the generated collection stays small and consistent. The parameters live in ApiV1Parameters, not here. swagger-php drops the class level `OA\Schema` attributes of a class that also carries a class level `OA\Parameter`, so the two kinds need two classes. This class holds no code. swagger-php reads the attributes, and nothing calls it.
      - `per_page` integer
      - `total` integer
      - `last_page` integer
    - `trial_limit` ApiV1TrialLimit: Present only on trial, when the trial hides rows of the list. The trial shows the first rows of a list, and the pagination counts only these rows.
      - `max_rows` integer: The number of rows that the trial shows.
      - `total` integer, nullable: The true number of rows in the list. It is null for a list that does not count its rows.
      - `code` string
      - `message` string
      - `subscribe_url` string, uri

## 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`)
- `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)
