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

> Returns one product's performance over time from TikTok's analytics: all-channel GMV, orders and items sold per day or as one total, with sales and traffic split by channel (`VIDEO`, `LIVE`, `PRODUCT_CARD`), cancelled, returned and refunded units, and the star-rating breakdown. `title` and `imageUrl` come from the shop's catalog.

`start_date` is inclusive and `end_date` is exclusive, both YYYY-MM-DD in the shop's timezone, so pass the day after the last day you want. TikTok rejects windows starting more than about 180 days back. `granularity` is `1D` (default, one interval per day) or `ALL` (one total). TikTok fills the cancel and refund counts only on `ALL`. `currency` is `USD` or `LOCAL` (TikTok's default). `latestAvailableDate` shows the newest day TikTok has data for.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/analytics/products/{productId}/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/products/{productId}/performance:
    get:
      summary: Product performance
      description: >-
        Returns one product's performance over time from TikTok's analytics:
        all-channel GMV, orders and items sold per day or as one total, with
        sales and traffic split by channel (`VIDEO`, `LIVE`, `PRODUCT_CARD`),
        cancelled, returned and refunded units, and the star-rating breakdown.
        `title` and `imageUrl` come from the shop's catalog.


        `start_date` is inclusive and `end_date` is exclusive, both YYYY-MM-DD
        in the shop's timezone, so pass the day after the last day you want.
        TikTok rejects windows starting more than about 180 days back.
        `granularity` is `1D` (default, one interval per day) or `ALL` (one
        total). TikTok fills the cancel and refund counts only on `ALL`.
        `currency` is `USD` or `LOCAL` (TikTok's default). `latestAvailableDate`
        shows the newest day TikTok has data for.
      parameters:
        - name: productId
          in: path
          required: true
          schema:
            type: string
            pattern: ^[0-9]{1,32}$
          description: TikTok product id.
        - 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: granularity
          in: query
          required: false
          schema:
            type: string
            enum:
              - 1D
              - ALL
            default: 1D
          description: 1D = one interval per day, ALL = one aggregate interval.
        - 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: The product's intervals.
          content:
            application/json:
              schema:
                type: object
                properties:
                  productId:
                    type: string
                  title:
                    type: string
                    nullable: true
                  imageUrl:
                    type: string
                    nullable: true
                  latestAvailableDate:
                    type: string
                    nullable: true
                  intervals:
                    type: array
                    items:
                      type: object
                      properties:
                        startDate:
                          type: string
                          nullable: true
                        endDate:
                          type: string
                          nullable: true
                          description: Exclusive.
                        gmv:
                          $ref: '#/components/schemas/Money'
                        orders:
                          type: integer
                          nullable: true
                        itemsSold:
                          type: integer
                          nullable: true
                        salesByChannel:
                          type: array
                          items:
                            type: object
                            properties:
                              contentType:
                                type: string
                              gmv:
                                $ref: '#/components/schemas/Money'
                              itemsSold:
                                type: integer
                                nullable: true
                              avgCustomers:
                                type: integer
                                nullable: true
                        trafficByChannel:
                          type: array
                          items:
                            type: object
                            properties:
                              contentType:
                                type: string
                              impressions:
                                type: integer
                                nullable: true
                              pageViews:
                                type: integer
                                nullable: true
                              avgUniquePageViews:
                                type: integer
                                nullable: true
                              ctr:
                                type: string
                                nullable: true
                              avgConversionRate:
                                type: string
                                nullable: true
                        cancelAndRefunds:
                          type: object
                          nullable: true
                          description: Units, not money.
                          properties:
                            returned:
                              type: integer
                              nullable: true
                            canceled:
                              type: integer
                              nullable: true
                            refunded:
                              type: integer
                              nullable: true
                            replacements:
                              type: integer
                              nullable: true
                  ratings:
                    type: array
                    items:
                      type: object
                      properties:
                        stars:
                          type: string
                        count:
                          type: integer
                          nullable: true
                        percentage:
                          type: string
                          nullable: true
              example:
                productId: '1729000000000000100'
                title: Example Serum 30ml
                imageUrl: https://media.example.com/products/1729000000000000100.jpg
                latestAvailableDate: '2026-09-27'
                intervals:
                  - startDate: '2026-09-01'
                    endDate: '2026-09-02'
                    gmv:
                      amount: '149.94'
                      currency: USD
                    orders: 6
                    itemsSold: 6
                    salesByChannel:
                      - contentType: VIDEO
                        gmv:
                          amount: '99.96'
                          currency: USD
                        itemsSold: 4
                        avgCustomers: 4
                      - contentType: PRODUCT_CARD
                        gmv:
                          amount: '49.98'
                          currency: USD
                        itemsSold: 2
                        avgCustomers: 2
                    trafficByChannel:
                      - contentType: VIDEO
                        impressions: 21000
                        pageViews: 640
                        avgUniquePageViews: 600
                        ctr: '0.0305'
                        avgConversionRate: '0.0067'
                    cancelAndRefunds: null
                ratings:
                  - stars: '5'
                    count: 120
                    percentage: '0.80'
        '400':
          description: Invalid id or dates
          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.