curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/creators \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/creators"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.growi.io/api/public/v1/tik_tok_shop/creators', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growi.io/api/public/v1/tik_tok_shop/creators",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.growi.io/api/public/v1/tik_tok_shop/creators"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.growi.io/api/public/v1/tik_tok_shop/creators")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/creators")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 123,
"external_id": "<string>",
"connected_account": {
"id": 123,
"username": "<string>",
"profile_share_url": "<string>"
},
"affiliate_id": 123,
"affiliate_name": "<string>",
"affiliate_email": "<string>",
"affiliate_avatar_url": "<string>",
"total_gmv": 123,
"total_gmv_formatted": "<string>",
"total_commission": 123,
"total_commission_formatted": "<string>",
"total_refunded_amount": 123,
"total_refunded_amount_formatted": "<string>",
"total_live_gmv": 123,
"total_live_gmv_formatted": "<string>",
"total_product_card_gmv": 123,
"total_product_card_gmv_formatted": "<string>",
"total_units_sold": 123,
"total_units_sold_formatted": "<string>",
"total_sku_orders": 123,
"total_sku_orders_formatted": "<string>",
"total_items_refunded": 123,
"total_items_refunded_formatted": "<string>",
"total_posts_with_gmv": 123,
"total_posts_with_gmv_formatted": "<string>"
}
],
"meta": {
"row_count": 123,
"total_pages": 123,
"current_page": 123,
"next_page": 123,
"prev_page": 123
},
"additional_data": {
"total_gmv": 123,
"total_units_sold": 123,
"total_sku_orders": 123,
"total_commission": 123,
"total_items_refunded": 123,
"total_refunded_amount": 123,
"currency_symbol": "<string>",
"currency": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}TikTok Shop Creators
One row per creator with GMV, orders, commission, and refund totals for the date range. Ordered by total GMV descending (no sort parameter). Money fields are raw numbers in display currency units with *_formatted display-string variants.
curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/creators \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/creators"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.growi.io/api/public/v1/tik_tok_shop/creators', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.growi.io/api/public/v1/tik_tok_shop/creators",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.growi.io/api/public/v1/tik_tok_shop/creators"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.growi.io/api/public/v1/tik_tok_shop/creators")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/creators")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 123,
"external_id": "<string>",
"connected_account": {
"id": 123,
"username": "<string>",
"profile_share_url": "<string>"
},
"affiliate_id": 123,
"affiliate_name": "<string>",
"affiliate_email": "<string>",
"affiliate_avatar_url": "<string>",
"total_gmv": 123,
"total_gmv_formatted": "<string>",
"total_commission": 123,
"total_commission_formatted": "<string>",
"total_refunded_amount": 123,
"total_refunded_amount_formatted": "<string>",
"total_live_gmv": 123,
"total_live_gmv_formatted": "<string>",
"total_product_card_gmv": 123,
"total_product_card_gmv_formatted": "<string>",
"total_units_sold": 123,
"total_units_sold_formatted": "<string>",
"total_sku_orders": 123,
"total_sku_orders_formatted": "<string>",
"total_items_refunded": 123,
"total_items_refunded_formatted": "<string>",
"total_posts_with_gmv": 123,
"total_posts_with_gmv_formatted": "<string>"
}
],
"meta": {
"row_count": 123,
"total_pages": 123,
"current_page": 123,
"next_page": 123,
"prev_page": 123
},
"additional_data": {
"total_gmv": 123,
"total_units_sold": 123,
"total_sku_orders": 123,
"total_commission": 123,
"total_items_refunded": 123,
"total_refunded_amount": 123,
"currency_symbol": "<string>",
"currency": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Response Fields
Each creator row contains:| Field | Type | Description |
|---|---|---|
id | Integer | null | Internal snapshot id |
external_id | String | TikTok creator id (oecuid) |
affiliate_id | Integer | null | Growi user id (null if the creator is not on Growi) |
affiliate_name | String | Creator name ("N/A" when unknown) |
affiliate_email | String | Creator email ("N/A" when unknown) |
affiliate_avatar_url | String | Avatar image URL |
connected_account | Object | { id, username, profile_share_url } of the linked TikTok account |
total_gmv | Number | Gross merchandise value in display currency units (e.g. dollars) |
total_units_sold | Integer | Items sold |
total_sku_orders | Integer | SKU orders |
total_commission | Number | Estimated commission |
total_refunded_amount | Number | Refunded amount |
total_items_refunded | Integer | Items refunded |
total_posts_with_gmv | Integer | Distinct videos with GMV in the range |
total_live_gmv / total_product_card_gmv | Number | Always 0 (reserved) |
*_formatted | String | Display-string variant of every metric above (e.g. "$1,234.56") |
{ data, meta, additional_data }: meta carries pagination (row_count, total_pages, current_page, next_page, prev_page) and additional_data carries raw totals across the full result set plus currency / currency_symbol.
Request Parameters
| Parameter | Type | Description | Required | Default |
|---|---|---|---|---|
start_date | String | Start of the GMV date range (ISO 8601, YYYY-MM-DD) | Yes | — |
end_date | String | End of the GMV date range (ISO 8601, YYYY-MM-DD) | Yes | — |
page | Integer | Page number | No | 1 |
per_page | Integer | Results per page (max 100) | No | 20 |
search | String | Free-text search by creator name | No | — |
campaign_id | Integer | Filter to a campaign or contract in your organization | No | — |
creator_id | Integer | Filter to a single Growi creator (user id) | No | — |
external_creator_id | String | Filter to a single TikTok creator (oecuid) | No | — |
connected_account_id | Integer | Filter by connected social account id | No | — |
platform | String | growi (only creators on Growi), all (all TikTok Shop data), non_growi (creators not on Growi) | No | growi |
gmv_min / gmv_max | Number | GMV range bounds in display currency units | No | — |
all_contracts | String | 'true' to include creators from all contracts | No | — |
exclude_contests | String | 'true' to exclude TikTok Shop contest campaigns | No | — |
organization_id | Integer | Narrow to a child organization of the API key organization | No | — |
Request Example
curl -X GET "https://api.growi.io/api/public/v1/tik_tok_shop/creators?start_date=2026-07-01&end_date=2026-07-31&platform=all&per_page=20" \
-H "Authorization: Bearer YOUR_PUBLIC_API_KEY" \
-H "Content-Type: application/json"
Response Example
{
"data": [
{
"id": 123456,
"external_id": "7495033444...",
"affiliate_id": 98765,
"affiliate_name": "Jane Creator",
"affiliate_email": "jane@example.com",
"affiliate_avatar_url": "https://...",
"connected_account": {
"id": 4321,
"username": "janecreates",
"profile_share_url": "https://www.tiktok.com/@janecreates"
},
"total_gmv": 12345.67,
"total_gmv_formatted": "$12,345.67",
"total_units_sold": 480,
"total_units_sold_formatted": "480",
"total_sku_orders": 402,
"total_sku_orders_formatted": "402",
"total_commission": 1851.85,
"total_commission_formatted": "$1,851.85",
"total_refunded_amount": 250.0,
"total_refunded_amount_formatted": "$250.00",
"total_items_refunded": 12,
"total_items_refunded_formatted": "12",
"total_posts_with_gmv": 35,
"total_posts_with_gmv_formatted": "35"
}
],
"meta": {
"row_count": 214,
"total_pages": 11,
"current_page": 1,
"next_page": 2,
"prev_page": null
},
"additional_data": {
"total_gmv": 250000.5,
"total_units_sold": 10400,
"total_sku_orders": 9020,
"total_commission": 37500.25,
"total_items_refunded": 310,
"total_refunded_amount": 6100.0,
"currency_symbol": "$",
"currency": "usd"
}
}
Use Cases
- Building creator leaderboards and performance dashboards from your TikTok Shop data
- Reconciling creator commissions against GMV for payout workflows
- Comparing on-Growi vs. off-Growi creator performance via the
platformfilter - Tracking campaign- or contract-specific creator performance with
campaign_id
Notes
- Results are always ordered by total GMV descending; there is no sort parameter.
- Money fields are raw numbers in display currency units (dollars for USD shops); use the
*_formattedvariants for display. - Dates are inclusive; the dashboard’s default view is the last 30 days.
- Requests are rate limited (minimum 2 seconds between requests plus an hourly quota); see the
X-RateLimit-*response headers.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Start of the GMV date range (ISO 8601, YYYY-MM-DD)
End of the GMV date range (ISO 8601, YYYY-MM-DD)
Page number (default 1)
Results per page: 1-100, default 20
x <= 100Free-text search
Filter to a campaign or contract belonging to your organization
Filter to a single Growi creator (user id)
Data scope: growi (only creators on Growi, default), all (all TikTok Shop data), non_growi (creators not on Growi)
growi, all, non_growi Narrow results to a child organization (id) of the API key organization
Filter to a single TikTok creator by TikTok creator id (oecuid)
Filter by connected social account id (matches dashboard behavior; prefer external_creator_id)
Minimum GMV in display currency units (e.g. dollars)
Maximum GMV in display currency units (e.g. dollars)
Set to 'true' to include creators from all contracts
true Set to 'true' to exclude TikTok Shop contest campaigns
true