curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly"
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/summary/weekly', 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/summary/weekly",
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/summary/weekly"
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/summary/weekly")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly")
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{
"week": {
"startDate": "2026-09-21",
"endDate": "2026-09-27"
},
"previousWeek": {
"startDate": "2026-09-14",
"endDate": "2026-09-20"
},
"inProgress": false,
"timezone": "UTC",
"currency": "USD",
"metrics": {
"affiliateGmv": {
"value": "1200.5",
"previous": "1000.25",
"change": "200.25",
"changePct": 20.02,
"source": "affiliate_summary"
},
"orders": {
"value": 12,
"previous": 10,
"change": 2,
"changePct": 20,
"source": "affiliate_summary"
},
"unitsSold": {
"value": 15,
"previous": 15,
"change": 0,
"changePct": 0,
"source": "affiliate_summary"
},
"commission": {
"value": "120.05",
"previous": "100",
"change": "20.05",
"changePct": 20.05,
"source": "affiliate_summary"
},
"activeCreators": {
"value": 7,
"previous": 5,
"change": 2,
"changePct": 40,
"source": "affiliate_summary"
},
"newCreators": {
"value": 3,
"previous": 2,
"change": 1,
"changePct": 50,
"source": "creator_activity"
},
"samplesRequested": {
"value": 20,
"previous": 10,
"change": 10,
"changePct": 100,
"source": "sample_funnel"
},
"samplesApproved": {
"value": 8,
"previous": 10,
"change": -2,
"changePct": -20,
"source": "sample_funnel"
},
"samplesShipped": {
"value": 5,
"previous": 0,
"change": 5,
"changePct": null,
"source": "sample_funnel"
},
"contentPosted": {
"value": 3,
"previous": 0,
"change": 3,
"changePct": null,
"source": "posted_contents"
}
},
"topMovers": {
"creators": {
"metric": "gmv",
"source": "affiliate_creators",
"basis": "Affiliate GMV from our orders mirror, INELIGIBLE lines excluded, UTC days; ...",
"top": [
{
"creatorUsername": "ana",
"creatorKey": "-000AbCdEfG",
"value": "500",
"previous": "100",
"change": "400",
"changePct": 400
}
],
"drops": [
{
"creatorUsername": "cy",
"creatorKey": "cy",
"value": "0",
"previous": "400",
"change": "-400",
"changePct": -100
}
],
"dropsExact": true
},
"products": {
"metric": "gmv",
"source": "tiktok_product_analytics",
"basis": "All-channel GMV (seller videos, LIVE, product card and affiliate) in the shop's local currency from TikTok's official shop analytics ...",
"top": [
{
"productId": "1729000000000000001",
"productTitle": "Vitamin C serum",
"value": "250.10",
"previous": "100.05",
"change": "150.05",
"changePct": 149.98
}
],
"drops": [
{
"productId": "1729000000000000002",
"productTitle": "Night cream",
"value": "120",
"previous": "300",
"change": "-180",
"changePct": -60
}
],
"dropsExact": true
},
"productsBySamples": {
"metric": "samples_requested",
"source": "samples_by_product",
"basis": "Sample rows requested in the week (the /samples/by-product request cohort), UTC days.",
"top": [
{
"productId": "1729000000000000001",
"productTitle": "Vitamin C serum",
"value": 9,
"previous": 3,
"change": 6,
"changePct": 200
}
],
"drops": [
{
"productId": "1729000000000000002",
"productTitle": "Night cream",
"value": 4,
"previous": 6,
"change": -2,
"changePct": -33.33
}
],
"dropsExact": true
},
"videos": {
"metric": "gmv",
"source": "content_top",
"basis": "Affiliate video GMV from the Data Compass scrape (the /contents/top read), on region days (Pacific for US), not UTC.",
"top": [
{
"contentId": "7420000000000000001",
"value": "90",
"previous": "10",
"change": "80",
"changePct": 800
}
],
"drops": [],
"dropsExact": false
}
},
"freshness": {
"ordersSweptThrough": "2026-09-28T06:00:00.000Z",
"ordersCompleteForWeek": true,
"creatorActivity": {
"source": "rollup",
"historyFrom": "2026-01-02"
},
"videoSales": {
"firstFinalDay": "2026-06-01",
"weekFinalThrough": "2026-09-26",
"previousWeekFinalThrough": "2026-09-20"
},
"samplesSyncedAt": "2026-09-29T01:00:00.000Z",
"contentSyncedAt": "2026-09-29T02:00:00.000Z",
"productAnalytics": {
"weekLatestAvailableDate": "2026-09-27",
"previousWeekLatestAvailableDate": "2026-09-27"
}
},
"unavailable": [],
"note": "Weeks are Monday to Sunday in UTC, both ends inclusive. ..."
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Weekly summary
Compares one week with the week before across affiliate GMV, orders, units sold, commission, creators, samples and content posted, plus top movers. Each metric is { value, previous, change, changePct, source }; changePct is null when the previous value is 0 or unknown. Money is an exact decimal string in currency.
Weeks run Monday to Sunday in UTC, both ends inclusive. week_start is that Monday (YYYY-MM-DD), from 26 weeks back up to the current week. It defaults to the last complete week, and the current week is flagged inProgress. Each figure matches its source endpoint (such as Affiliate summary or Sample funnel) for the same week.
Sample counts follow a request cohort, so last week’s approved and shipped numbers can still grow. Content counts stop changing two weeks after the week ends. topMovers lists 5 top and 5 drops for creators, products, products by samples and videos, each with a basis sentence. Product movers use TikTok’s all-channel analytics in the shop’s timezone and local currency, 1 to 2 days behind. Product movers are null when the shop isn’t connected through TikTok’s official API or its TikTok authorization doesn’t include analytics data. A part that fails or times out is listed in unavailable with null metrics; the rest still returns.
curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly"
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/summary/weekly', 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/summary/weekly",
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/summary/weekly"
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/summary/weekly")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/summary/weekly")
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{
"week": {
"startDate": "2026-09-21",
"endDate": "2026-09-27"
},
"previousWeek": {
"startDate": "2026-09-14",
"endDate": "2026-09-20"
},
"inProgress": false,
"timezone": "UTC",
"currency": "USD",
"metrics": {
"affiliateGmv": {
"value": "1200.5",
"previous": "1000.25",
"change": "200.25",
"changePct": 20.02,
"source": "affiliate_summary"
},
"orders": {
"value": 12,
"previous": 10,
"change": 2,
"changePct": 20,
"source": "affiliate_summary"
},
"unitsSold": {
"value": 15,
"previous": 15,
"change": 0,
"changePct": 0,
"source": "affiliate_summary"
},
"commission": {
"value": "120.05",
"previous": "100",
"change": "20.05",
"changePct": 20.05,
"source": "affiliate_summary"
},
"activeCreators": {
"value": 7,
"previous": 5,
"change": 2,
"changePct": 40,
"source": "affiliate_summary"
},
"newCreators": {
"value": 3,
"previous": 2,
"change": 1,
"changePct": 50,
"source": "creator_activity"
},
"samplesRequested": {
"value": 20,
"previous": 10,
"change": 10,
"changePct": 100,
"source": "sample_funnel"
},
"samplesApproved": {
"value": 8,
"previous": 10,
"change": -2,
"changePct": -20,
"source": "sample_funnel"
},
"samplesShipped": {
"value": 5,
"previous": 0,
"change": 5,
"changePct": null,
"source": "sample_funnel"
},
"contentPosted": {
"value": 3,
"previous": 0,
"change": 3,
"changePct": null,
"source": "posted_contents"
}
},
"topMovers": {
"creators": {
"metric": "gmv",
"source": "affiliate_creators",
"basis": "Affiliate GMV from our orders mirror, INELIGIBLE lines excluded, UTC days; ...",
"top": [
{
"creatorUsername": "ana",
"creatorKey": "-000AbCdEfG",
"value": "500",
"previous": "100",
"change": "400",
"changePct": 400
}
],
"drops": [
{
"creatorUsername": "cy",
"creatorKey": "cy",
"value": "0",
"previous": "400",
"change": "-400",
"changePct": -100
}
],
"dropsExact": true
},
"products": {
"metric": "gmv",
"source": "tiktok_product_analytics",
"basis": "All-channel GMV (seller videos, LIVE, product card and affiliate) in the shop's local currency from TikTok's official shop analytics ...",
"top": [
{
"productId": "1729000000000000001",
"productTitle": "Vitamin C serum",
"value": "250.10",
"previous": "100.05",
"change": "150.05",
"changePct": 149.98
}
],
"drops": [
{
"productId": "1729000000000000002",
"productTitle": "Night cream",
"value": "120",
"previous": "300",
"change": "-180",
"changePct": -60
}
],
"dropsExact": true
},
"productsBySamples": {
"metric": "samples_requested",
"source": "samples_by_product",
"basis": "Sample rows requested in the week (the /samples/by-product request cohort), UTC days.",
"top": [
{
"productId": "1729000000000000001",
"productTitle": "Vitamin C serum",
"value": 9,
"previous": 3,
"change": 6,
"changePct": 200
}
],
"drops": [
{
"productId": "1729000000000000002",
"productTitle": "Night cream",
"value": 4,
"previous": 6,
"change": -2,
"changePct": -33.33
}
],
"dropsExact": true
},
"videos": {
"metric": "gmv",
"source": "content_top",
"basis": "Affiliate video GMV from the Data Compass scrape (the /contents/top read), on region days (Pacific for US), not UTC.",
"top": [
{
"contentId": "7420000000000000001",
"value": "90",
"previous": "10",
"change": "80",
"changePct": 800
}
],
"drops": [],
"dropsExact": false
}
},
"freshness": {
"ordersSweptThrough": "2026-09-28T06:00:00.000Z",
"ordersCompleteForWeek": true,
"creatorActivity": {
"source": "rollup",
"historyFrom": "2026-01-02"
},
"videoSales": {
"firstFinalDay": "2026-06-01",
"weekFinalThrough": "2026-09-26",
"previousWeekFinalThrough": "2026-09-20"
},
"samplesSyncedAt": "2026-09-29T01:00:00.000Z",
"contentSyncedAt": "2026-09-29T02:00:00.000Z",
"productAnalytics": {
"weekLatestAvailableDate": "2026-09-27",
"previousWeekLatestAvailableDate": "2026-09-27"
}
},
"unavailable": [],
"note": "Weeks are Monday to Sunday in UTC, both ends inclusive. ..."
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Monday of the week, YYYY-MM-DD, UTC. From 26 weeks before this week's Monday up to this week's Monday. Default: the last complete week.
Use the TikTok Shop of this child brand (organization id) of your API key's organization
Response
{ week, previousWeek, inProgress, timezone: UTC, currency (one currency across both weeks, else null), metrics { affiliateGmv, orders, unitsSold, commission, activeCreators, newCreators, samplesRequested, samplesApproved, samplesShipped, contentPosted }, topMovers { creators, products, productsBySamples, videos }, each { metric, source, basis, top[], drops[], dropsExact } or null when that part is unavailable, freshness, unavailable[], note }.