> ## 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.

# SKU ranking

> Lists the shop's SKUs with GMV, SKU orders and units sold for a date window, from TikTok's analytics. Ranked by GMV by default. `gmv` is `{ amount, currency }`.

`start_date` is inclusive and `end_date` is exclusive (YYYY-MM-DD, shop timezone), so pass the day after the last day you want. TikTok rejects windows starting more than about 180 days back. `sort_field` is `gmv`, `sku_orders` or `units_sold`, and `sort_order` is `DESC` (default) or `ASC`. Filter with `product_ids` (comma-separated) and `product_status` (`LIVE`, `INACTIVE` or `ALL`). `currency` is `USD` or `LOCAL` (TikTok's default). `page_size` is 1 to 100 (TikTok's default is 10); pass `nextPageToken` back as `page_token` with the same filters. Data lags 1 to 2 days, and `latestAvailableDate` shows the newest day.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/analytics/sku_performance
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/analytics/sku_performance:
    get:
      summary: SKU ranking
      description: >-
        Lists the shop's SKUs with GMV, SKU orders and units sold for a date
        window, from TikTok's analytics. Ranked by GMV by default. `gmv` is `{
        amount, currency }`.


        `start_date` is inclusive and `end_date` is exclusive (YYYY-MM-DD, shop
        timezone), so pass the day after the last day you want. TikTok rejects
        windows starting more than about 180 days back. `sort_field` is `gmv`,
        `sku_orders` or `units_sold`, and `sort_order` is `DESC` (default) or
        `ASC`. Filter with `product_ids` (comma-separated) and `product_status`
        (`LIVE`, `INACTIVE` or `ALL`). `currency` is `USD` or `LOCAL` (TikTok's
        default). `page_size` is 1 to 100 (TikTok's default is 10); pass
        `nextPageToken` back as `page_token` with the same filters. Data lags 1
        to 2 days, and `latestAvailableDate` shows the newest day.
      parameters:
        - name: start_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: Window start, YYYY-MM-DD inclusive (shop timezone).
        - name: end_date
          in: query
          required: true
          schema:
            type: string
            format: date
          description: >-
            Window end, YYYY-MM-DD EXCLUSIVE (TikTok's end_date_lt semantics).
            TikTok rejects windows starting more than ~180 days back.
        - name: page_size
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
          description: TikTok default 10.
        - name: page_token
          in: query
          required: false
          schema:
            type: string
          description: >-
            The nextPageToken from the previous page, with the same window and
            filters.
        - name: sort_field
          in: query
          required: false
          schema:
            type: string
            enum:
              - gmv
              - sku_orders
              - units_sold
          description: Sort by gmv, sku_orders or units_sold. TikTok's default is gmv.
        - name: sort_order
          in: query
          required: false
          schema:
            type: string
            enum:
              - ASC
              - DESC
          description: DESC or ASC. TikTok's default is DESC.
        - name: product_ids
          in: query
          required: false
          schema:
            type: string
          description: 'Comma-separated product ids: only their SKUs.'
        - name: product_status
          in: query
          required: false
          schema:
            type: string
            enum:
              - LIVE
              - INACTIVE
              - ALL
          description: >-
            Only SKUs of LIVE or INACTIVE products, or ALL. TikTok's default is
            ALL.
        - name: currency
          in: query
          required: false
          schema:
            type: string
            enum:
              - USD
              - LOCAL
          description: TikTok defaults to LOCAL.
        - 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 SKU rows.
          content:
            application/json:
              schema:
                type: object
                properties:
                  skus:
                    type: array
                    items:
                      type: object
                      properties:
                        skuId:
                          type: string
                          nullable: true
                        productId:
                          type: string
                          nullable: true
                        gmv:
                          $ref: '#/components/schemas/Money'
                        skuOrders:
                          type: integer
                          nullable: true
                        unitsSold:
                          type: integer
                          nullable: true
                  totalCount:
                    type: integer
                    nullable: true
                  nextPageToken:
                    type: string
                    nullable: true
                  latestAvailableDate:
                    type: string
                    nullable: true
                    description: Freshness marker (T+1 to T+2).
              example:
                skus:
                  - skuId: '1729000000000000101'
                    productId: '1729000000000000100'
                    gmv:
                      amount: '2105.25'
                      currency: USD
                    skuOrders: 86
                    unitsSold: 90
                  - skuId: '1729000000000000102'
                    productId: '1729000000000000100'
                    gmv:
                      amount: '980.00'
                      currency: USD
                    skuOrders: 40
                    unitsSold: 41
                totalCount: 12
                nextPageToken: b2Zmc2V0PTI
                latestAvailableDate: '2026-09-27'
        '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:
    Money:
      type: object
      nullable: true
      description: 'TikTok''s money object: amount as a decimal string, ISO currency code.'
      properties:
        amount:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
    TikTokShopError:
      type: object
      required:
        - error
      properties:
        error:
          type: string
          description: What went wrong
        code:
          type: string
          description: Machine-readable reason, when there is one
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer

````

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