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

# Top affiliate creators

> Lists the shop's affiliate creators ranked by GMV over a date window. Each row has `creatorKey` (the creator's open id, else username, stable across renames), `creatorUsername`, `gmvGross`, `orders`, `skuOrders`, `itemsSold`, `commissionEstimated` and `lastOrderAt`.

`start_date` and `end_date` are YYYY-MM-DD UTC days, both inclusive. `scope` is `all` (default) or `growi` (only collabs created through Growi). `limit` is 1 to 500 (default 50). When more creators exist the response has `nextCursor`; pass it back as `cursor` with the same dates and scope, and stop when it's absent. A cursor sent with a different window or scope is rejected. In a window that includes today, GMV still moves as orders sync, so a creator can shift between pages. Page through a closed window for exports. `sweptThrough` shows how fresh the data is.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/affiliate/creators
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/affiliate/creators:
    get:
      summary: Top affiliate creators
      description: >-
        Lists the shop's affiliate creators ranked by GMV over a date window.
        Each row has `creatorKey` (the creator's open id, else username, stable
        across renames), `creatorUsername`, `gmvGross`, `orders`, `skuOrders`,
        `itemsSold`, `commissionEstimated` and `lastOrderAt`.


        `start_date` and `end_date` are YYYY-MM-DD UTC days, both inclusive.
        `scope` is `all` (default) or `growi` (only collabs created through
        Growi). `limit` is 1 to 500 (default 50). When more creators exist the
        response has `nextCursor`; pass it back as `cursor` with the same dates
        and scope, and stop when it's absent. A cursor sent with a different
        window or scope is rejected. In a window that includes today, GMV still
        moves as orders sync, so a creator can shift between pages. Page through
        a closed window for exports. `sweptThrough` shows how fresh the data is.
      parameters:
        - name: start_date
          in: query
          required: true
          schema:
            type: string
          description: Window start, YYYY-MM-DD INCLUSIVE (local-aggregates convention).
        - name: end_date
          in: query
          required: true
          schema:
            type: string
          description: Window end, YYYY-MM-DD, inclusive.
        - name: scope
          in: query
          required: false
          schema:
            type: string
            enum:
              - all
              - growi
            default: all
          description: >-
            all = every affiliate order in the window; growi = only orders on
            target collabs created through Growi.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 50
          description: Max creators returned (default 50, max 500).
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            Opaque; from the previous response's nextCursor. Only valid with the
            start_date, end_date and scope it came from.
          example: >-
            WyJnbXZfZGVzYyIsIjIwMjYtMDgtMDEiLCIyMDI2LTA4LTA3IiwiYWxsIiwiNTAuMjUiLCJjcmVhdG9yMSIsIm9pZC0xIl0
        - 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: >-
            { creators: [...] } (each row also carries creatorKey: the row's
            group key, the creator's open id, else the username; stable across
            renames) plus window {startDate, endDate}, scope, and sweptThrough
            (ISO timestamp orders are swept through, null when this shop has
            never swept). nextCursor is present only when more creators exist; a
            caller that sends no cursor gets the same first page as before
            paging existed.
          content:
            application/json:
              example:
                creators:
                  - creatorKey: creator_one
                    creatorUsername: creator_one
                    gmvGross: 3120.4
                    orders: 88
                    skuOrders: 91
                    itemsSold: 97
                    commissionEstimated: 468.06
                    lastOrderAt: '2026-09-07T21:14:03.000Z'
                  - creatorKey: creator_two
                    creatorUsername: creator_two
                    gmvGross: 1875
                    orders: 50
                    skuOrders: 50
                    itemsSold: 53
                    commissionEstimated: 281.25
                    lastOrderAt: '2026-09-06T17:40:51.000Z'
                nextCursor: WyJleGFtcGxlIiwiY3Vyc29yIl0
                window:
                  startDate: '2026-09-01'
                  endDate: '2026-09-07'
                scope: all
                sweptThrough: '2026-09-28T06:00:00.000Z'
        '400':
          description: >-
            Invalid params: missing/malformed dates, limit out of range, or a
            cursor that is malformed or was minted for a different window, scope
            or sort
          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`
          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:
    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.