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

# Sample applicant vetting

> Returns facts for vetting sample applicants, for up to 50 application ids. Each item has the current `application` (products and state), the creator's marketplace `facts` (followers, `pps`, fulfillment rate, median video views, 30-day GMV, categories) and their `history` in this shop across their other sample applications: requests by state, shipped, content fulfilled, `postedRate`, videos posted and GMV.

There's no score or recommendation, so apply your own rules. History is keyed by the creator's open id, not the handle, so a reused handle doesn't pull in another creator's samples. Pass `applicationIds` as a comma-separated list (1 to 50 after duplicates collapse). Items come back in your order. `found: false` means Growi has no sample row for that id. `facts` are platform-wide and a point in time. Served from Growi's synced data.



## OpenAPI

````yaml api-reference/tik-tok-shop-openapi.json GET /tik_tok_shop/samples/vetting
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/samples/vetting:
    get:
      summary: Sample applicant vetting
      description: >-
        Returns facts for vetting sample applicants, for up to 50 application
        ids. Each item has the current `application` (products and state), the
        creator's marketplace `facts` (followers, `pps`, fulfillment rate,
        median video views, 30-day GMV, categories) and their `history` in this
        shop across their other sample applications: requests by state, shipped,
        content fulfilled, `postedRate`, videos posted and GMV.


        There's no score or recommendation, so apply your own rules. History is
        keyed by the creator's open id, not the handle, so a reused handle
        doesn't pull in another creator's samples. Pass `applicationIds` as a
        comma-separated list (1 to 50 after duplicates collapse). Items come
        back in your order. `found: false` means Growi has no sample row for
        that id. `facts` are platform-wide and a point in time. Served from
        Growi's synced data.
      parameters:
        - name: applicationIds
          in: query
          required: true
          style: form
          explode: false
          schema:
            type: array
            minItems: 1
            maxItems: 50
            items:
              type: string
              pattern: ^[0-9]{1,32}$
          description: >-
            Comma-separated numeric application ids, 1-50 after duplicates
            collapse.
        - 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 item per requested application id
          content:
            application/json:
              schema:
                type: object
                properties:
                  items:
                    type: array
                    items:
                      type: object
                      required:
                        - applicationId
                        - found
                      properties:
                        applicationId:
                          type: string
                        found:
                          type: boolean
                          description: >-
                            false = Growi has no sample record for this id in
                            this shop (not synced yet, another shop's id, or a
                            typo). Only applicationId is present then.
                        creatorId:
                          type: string
                          description: Creator open id.
                        creatorUsername:
                          type: string
                          description: Handle stored on this application.
                          nullable: true
                        application:
                          type: object
                          properties:
                            firstSeenAt:
                              type: string
                              format: date-time
                              description: >-
                                When Growi first saw the request. TikTok doesn't
                                send a request-creation time.
                            currentState:
                              type: string
                              description: >-
                                Furthest canonical state across the
                                application's product rows.
                              nullable: true
                            products:
                              type: array
                              items:
                                type: object
                                properties:
                                  productId:
                                    type: string
                                    nullable: true
                                  productTitle:
                                    type: string
                                    nullable: true
                                  currentState:
                                    type: string
                                  nativeStatus:
                                    type: string
                                    nullable: true
                                  stateTimestamps:
                                    type: object
                                    additionalProperties:
                                      type: string
                                      format: date-time
                        facts:
                          type: object
                          description: >-
                            The same creatorFacts object the
                            relationship.state_changed event carries, from the
                            creator's identity row. Marketplace-wide and point
                            in time. null when nothing is known.
                          properties:
                            followerCount:
                              type: number
                              nullable: true
                            pps:
                              type: string
                              description: Promotion Performance Score as TikTok sends it.
                              nullable: true
                            fulfillmentRate:
                              type: number
                              description: 90-day sample fulfillment rate, percent.
                              nullable: true
                            medianVideoViews:
                              type: number
                              nullable: true
                            gmv30dAmount:
                              type: string
                              description: Platform-wide 30-day GMV, decimal string.
                              nullable: true
                            gmv30dCurrency:
                              type: string
                              nullable: true
                            contentCount:
                              type: number
                              nullable: true
                            unitsSold:
                              type: number
                              nullable: true
                            categories:
                              type: array
                              items:
                                type: string
                              nullable: true
                            enrichedAt:
                              type: string
                              nullable: true
                              format: date-time
                          nullable: true
                        history:
                          type: object
                          description: >-
                            The creator's OTHER sample applications in this shop
                            (this one excluded), counted per application. Raw
                            counts ride alongside every rate so the caller can
                            judge small samples.
                          properties:
                            requests:
                              type: integer
                              description: Past sample applications.
                            byState:
                              type: object
                              description: >-
                                Past applications by their furthest canonical
                                state. Every sample funnel state is present,
                                zero included.
                              additionalProperties:
                                type: integer
                            shipped:
                              type: integer
                              description: Past applications shipped or further.
                            contentFulfilled:
                              type: integer
                              description: >-
                                Past applications TikTok counted as
                                content_fulfilled.
                            postedRate:
                              type: number
                              description: >-
                                contentFulfilled / shipped, 0 to 1, 4 decimals.
                                null when nothing shipped.
                              nullable: true
                            videosPosted:
                              type: integer
                              description: >-
                                Distinct videos stored against past
                                applications.
                            gmv:
                              type: object
                              description: >-
                                GMV from past samples, the /samples/outcomes
                                attribution summed over the past applications:
                                order lines on each sample's own videos for the
                                products it requested, under the creator's
                                handle, INELIGIBLE excluded. A line is credited
                                to one application shop-wide, so it counts once.
                                null = nothing to join on (no stored content or
                                no known handle).
                              properties:
                                amount:
                                  type: string
                                  description: >-
                                    Decimal string; null when the lines span
                                    more than one currency.
                                  nullable: true
                                currency:
                                  type: string
                                  description: >-
                                    null when the lines span more than one
                                    currency, or there are none.
                                  nullable: true
                                orders:
                                  type: integer
                              nullable: true
                            firstRequestSeenAt:
                              type: string
                              format: date-time
                              description: >-
                                When Growi first saw the earliest past
                                application.
                              nullable: true
                            lastRequestSeenAt:
                              type: string
                              format: date-time
                              description: >-
                                When Growi first saw the latest past
                                application.
                              nullable: true
              example:
                items:
                  - applicationId: '5800000000000000003'
                    found: true
                    creatorId: uACafQAAAABexampleOpenId0000000
                    creatorUsername: creator_one
                    application:
                      firstSeenAt: '2026-03-01T10:00:00.000Z'
                      currentState: sample_requested
                      products:
                        - productId: '1729000000000000001'
                          productTitle: Example Serum 30ml
                          currentState: sample_requested
                          nativeStatus: PENDING
                          stateTimestamps:
                            sample_requested: '2026-03-01T10:00:00.000Z'
                    facts:
                      followerCount: 48200
                      pps: '4.5'
                      fulfillmentRate: 96.5
                      medianVideoViews: 1800
                      gmv30dAmount: '4520.10'
                      gmv30dCurrency: USD
                      contentCount: 140
                      unitsSold: 320
                      categories:
                        - Beauty & Personal Care
                      enrichedAt: '2026-02-28T12:00:00.000Z'
                    history:
                      requests: 3
                      byState:
                        sample_requested: 0
                        awaiting_shipment: 0
                        sample_shipped: 0
                        content_pending: 0
                        content_warning: 0
                        content_fulfilled: 2
                        content_unfulfilled: 1
                        cancelled: 0
                      shipped: 3
                      contentFulfilled: 2
                      postedRate: 0.6667
                      videosPosted: 3
                      gmv:
                        amount: '310.00'
                        currency: USD
                        orders: 16
                      firstRequestSeenAt: '2026-01-02T10:00:00.000Z'
                      lastRequestSeenAt: '2026-02-10T10:00:00.000Z'
        '400':
          description: Missing applicationIds, more than 50, or a non-numeric id
          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.