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

# Creator activity over time

> Returns active, new, returning, retained and churned creators per week or month. A creator is active in a period when they have a counting affiliate sale for this shop (`INELIGIBLE` lines excluded). `new` means their first sale ever falls in the period. `returning` means active, not active in the previous period, and not new. `retained` means active in this period and the previous one. `churned` means active in the previous period but not this one, and carries the previous period's GMV and orders. Each group has `creators`, `gmvGross` and `orders`.

`granularity` is `week` (Monday to Sunday, default) or `month`, both in UTC. `start_date` and `end_date` are inclusive, at most 365 days apart. Every period touching the window is returned; a clipped first or last period has `partial: true`, so start on a Monday or the 1st to avoid that. `historyFrom` is the earliest sale Growi holds, so periods near it can count long-standing creators as new.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/affiliate/creator_activity
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/creator_activity:
    get:
      summary: Creator activity over time
      description: >-
        Returns active, new, returning, retained and churned creators per week
        or month. A creator is active in a period when they have a counting
        affiliate sale for this shop (`INELIGIBLE` lines excluded). `new` means
        their first sale ever falls in the period. `returning` means active, not
        active in the previous period, and not new. `retained` means active in
        this period and the previous one. `churned` means active in the previous
        period but not this one, and carries the previous period's GMV and
        orders. Each group has `creators`, `gmvGross` and `orders`.


        `granularity` is `week` (Monday to Sunday, default) or `month`, both in
        UTC. `start_date` and `end_date` are inclusive, at most 365 days apart.
        Every period touching the window is returned; a clipped first or last
        period has `partial: true`, so start on a Monday or the 1st to avoid
        that. `historyFrom` is the earliest sale Growi holds, so periods near it
        can count long-standing creators as new.
      parameters:
        - name: start_date
          in: query
          required: true
          schema:
            type: string
          description: >-
            Window start, YYYY-MM-DD INCLUSIVE, UTC day of the order create
            time. Start on a Monday or a 1st to avoid a clipped first period.
        - name: end_date
          in: query
          required: true
          schema:
            type: string
          description: >-
            Window end, YYYY-MM-DD INCLUSIVE. At most 365 days after start_date,
            same cap as the other affiliate reads.
        - name: granularity
          in: query
          required: false
          schema:
            type: string
            enum:
              - week
              - month
            default: week
          description: week (Monday to Sunday, UTC) or month (calendar month, UTC).
        - 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: >-
            { window, sweptThrough, granularity, timezone: UTC, historyFrom
            (earliest counting creator sale we hold on or before end_date; null
            when there is none), currency (null when mixed or empty), periods:
            [{ period (calendar start), from, to, partial, active, new,
            returning, retained, churned }] with each group { creators,
            gmvGross, orders }, source: rollup | live, note }.
          content:
            application/json:
              example:
                window:
                  startDate: '2026-08-31'
                  endDate: '2026-09-13'
                sweptThrough: '2026-09-28T06:00:00.000Z'
                granularity: week
                timezone: UTC
                historyFrom: '2025-11-02'
                currency: USD
                periods:
                  - period: '2026-08-31'
                    from: '2026-08-31'
                    to: '2026-09-06'
                    partial: false
                    active:
                      creators: 20
                      gmvGross: 2580.75
                      orders: 86
                    new:
                      creators: 5
                      gmvGross: 300
                      orders: 10
                    returning:
                      creators: 3
                      gmvGross: 180.5
                      orders: 6
                    retained:
                      creators: 12
                      gmvGross: 2100.25
                      orders: 70
                    churned:
                      creators: 4
                      gmvGross: 220
                      orders: 8
                  - period: '2026-09-07'
                    from: '2026-09-07'
                    to: '2026-09-13'
                    partial: false
                    active:
                      creators: 22
                      gmvGross: 2955
                      orders: 97
                    new:
                      creators: 6
                      gmvGross: 410
                      orders: 13
                    returning:
                      creators: 2
                      gmvGross: 95
                      orders: 3
                    retained:
                      creators: 14
                      gmvGross: 2450
                      orders: 81
                    churned:
                      creators: 6
                      gmvGross: 340.5
                      orders: 12
                source: rollup
                note: >-
                  Periods are calendar weeks (Monday start) or months in UTC,
                  the same day buckets as every /affiliate read; the first and
                  last are clipped to the window (partial: true). A creator is
                  active in a period when they have a counting sale in it for
                  this shop (gross affiliate GMV, INELIGIBLE lines excluded,
                  keyed by open id like /affiliate/creators, with rollup days
                  stored before we knew the open id merged in). new: their first
                  counting sale ever falls in the period. returning: active, not
                  active in the previous period, not new. retained: active in
                  this period and the previous one. So active = new + returning
                  + retained. churned: active in the previous period, not in
                  this one; its GMV and orders are the previous period's. The
                  first period's previous period is the whole calendar period
                  before it, even when that falls outside the window. 'Ever'
                  means every row we hold: historyFrom is the earliest counting
                  creator sale we hold on or before end_date, and our rows only
                  start at the shop's first orders sweep, so periods near it
                  overcount new creators.
        '400':
          description: >-
            Invalid params: missing/malformed dates, a window over 365 days, or
            a granularity other than week or month
          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.