> ## Documentation Index
> Fetch the complete documentation index at: https://growi.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Product catalog

> Lists the shop's products from TikTok, each with its SKUs (`sellerSku`, prices, `status`), in-stock `inventory` per warehouse, and main and SKU images. Prices are decimal strings with a `currency` on each SKU.

`status` filters by product status: `ACTIVATE` (default), `ALL`, `DRAFT`, `PENDING`, `FAILED`, `SELLER_DEACTIVATED`, `PLATFORM_DEACTIVATED`, `FREEZE` or `DELETED`. `page_size` is 1 to 100 (default 50). Pass `nextPageToken` back as `page_token`. Read live from TikTok, so the shop has to be connected through TikTok's official API.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/products/catalog
openapi: 3.0.3
info:
  title: 'Growi API: TikTok Shop'
  version: 1.0.0
  description: >-
    Generated by scripts/gen_tik_tok_shop.rb from Growi's TikTok Shop route
    table.
servers:
  - url: https://api.growi.io/api/public/v1
security:
  - bearerAuth: []
paths:
  /tik_tok_shop/products/catalog:
    get:
      summary: Product catalog
      description: >-
        Lists the shop's products from TikTok, each with its SKUs (`sellerSku`,
        prices, `status`), in-stock `inventory` per warehouse, and main and SKU
        images. Prices are decimal strings with a `currency` on each SKU.


        `status` filters by product status: `ACTIVATE` (default), `ALL`,
        `DRAFT`, `PENDING`, `FAILED`, `SELLER_DEACTIVATED`,
        `PLATFORM_DEACTIVATED`, `FREEZE` or `DELETED`. `page_size` is 1 to 100
        (default 50). Pass `nextPageToken` back as `page_token`. Read live from
        TikTok, so the shop has to be connected through TikTok's official API.
      parameters:
        - name: status
          in: query
          required: false
          schema:
            type: string
            enum:
              - ALL
              - DRAFT
              - PENDING
              - FAILED
              - ACTIVATE
              - SELLER_DEACTIVATED
              - PLATFORM_DEACTIVATED
              - FREEZE
              - DELETED
            default: ACTIVATE
          description: Product status filter.
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 50
          description: Products per page, 1 to 100 (default 50).
        - name: page_token
          in: query
          required: false
          schema:
            type: string
          description: The previous page's nextPageToken.
        - name: organization_id
          in: query
          required: false
          schema:
            type: integer
          description: >-
            Use the TikTok Shop of this child brand (organization id) of your
            API key's organization
      responses:
        '200':
          description: One page of products.
          content:
            application/json:
              schema:
                type: object
                properties:
                  shopId:
                    type: string
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/CatalogProduct'
                  totalCount:
                    type: integer
                    nullable: true
                  nextPageToken:
                    type: string
                    nullable: true
              example:
                shopId: '7494000000000000123'
                products:
                  - productId: '1729000000000000100'
                    title: Example Serum 30ml
                    status: ACTIVATE
                    createdAt: '2025-11-02T10:00:00.000Z'
                    updatedAt: '2026-09-12T08:30:00.000Z'
                    imageUrl: https://media.example.com/products/1729000000000000100.jpg
                    skus:
                      - skuId: '1729000000000000101'
                        sellerSku: SERUM-30
                        currency: USD
                        taxExclusivePrice: '24.99'
                        salePrice: null
                        listPrice: '29.99'
                        status: NORMAL
                        inventory: 340
                        warehouses:
                          - warehouseId: '7300000000000000001'
                            quantity: 340
                        imageUrl: null
                totalCount: 42
                nextPageToken: b2Zmc2V0PTUw
        '400':
          description: Invalid query
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
        '404':
          description: >-
            `organization_id` isn't an active child brand of your organization,
            or the record you asked for doesn't exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
        '422':
          description: >-
            No TikTok Shop is connected for this organization. A parent
            organization whose shops sit on its child brands has to pass
            `organization_id`. Also returned when the shop isn't connected
            through TikTok's official API (`code: unsupported_on_web_only_shop`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
        '429':
          description: >-
            Rate limited: one call every 2 seconds and an hourly cap per API
            key. See `Retry-After` and the `X-RateLimit-*` headers
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
        '502':
          description: >-
            TikTok refused or failed. `error` is a fixed message and `code`
            names the failure when there is one
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TikTokShopError'
components:
  schemas:
    CatalogProduct:
      type: object
      properties:
        productId:
          type: string
        title:
          type: string
        status:
          type: string
          nullable: true
          description: ACTIVATE, SELLER_DEACTIVATED, ...
        createdAt:
          type: string
          nullable: true
          format: date-time
        updatedAt:
          type: string
          nullable: true
          format: date-time
        imageUrl:
          type: string
          nullable: true
          description: Our stored main image. null when we never saw one.
        skus:
          type: array
          items:
            $ref: '#/components/schemas/CatalogSku'
    TikTokShopError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong
        code:
          type: string
          description: Machine-readable reason, when there is one
    CatalogSku:
      type: object
      properties:
        skuId:
          type: string
        sellerSku:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
        taxExclusivePrice:
          type: string
          nullable: true
          description: >-
            Local display price for local sellers; pre-tax price for global
            sellers.
        salePrice:
          type: string
          nullable: true
          description: Display price for global sellers.
        listPrice:
          type: string
          nullable: true
          description: 'US only: verified list price (MSRP).'
        status:
          type: string
          nullable: true
          description: NORMAL | DEACTIVATED
        inventory:
          type: integer
          nullable: true
          description: >-
            In-stock units summed over warehouses. null when TikTok sent no
            inventory.
        warehouses:
          type: array
          items:
            type: object
            properties:
              warehouseId:
                type: string
                nullable: true
              quantity:
                type: integer
                nullable: true
        imageUrl:
          type: string
          nullable: true
          description: >-
            Our stored SKU image (R2 mirror, else TikTok's URL). null when we
            never saw one.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.