curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/lives \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/lives"
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/lives', 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/lives",
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/lives"
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/lives")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/lives")
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>",
"external_creator_id": "<string>",
"external_product_id": "<string>",
"title": "<string>",
"truncated_title": "<string>",
"duration": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"product": {},
"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>",
"item_refunded_count": 123,
"gpm_amount": 123,
"average_viewing_duration": "<string>",
"product_sold_count": 123,
"average_gmv_per_customer_amount": 123,
"aov_amount": 123,
"like_count": 123,
"live_product_impressions_count": 123,
"comment_count": 123,
"engagement_rate": "<string>",
"share_count": 123,
"tap_through_rate": "<string>",
"unique_viewer_count": 123,
"live_product_click_through_rate": "<string>",
"product_clicks_count": 123,
"impression_count": 123
}
],
"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 LIVE Streams
One row per LIVE stream with GMV totals and engagement metrics for the date range. Ordered by GMV descending (no sort parameter). The *_amount metric fields (gpm_amount, aov_amount, average_gmv_per_customer_amount) are integer cents.
curl --request GET \
--url https://api.growi.io/api/public/v1/tik_tok_shop/lives \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.growi.io/api/public/v1/tik_tok_shop/lives"
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/lives', 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/lives",
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/lives"
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/lives")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.growi.io/api/public/v1/tik_tok_shop/lives")
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>",
"external_creator_id": "<string>",
"external_product_id": "<string>",
"title": "<string>",
"truncated_title": "<string>",
"duration": "<string>",
"start_time": "<string>",
"end_time": "<string>",
"product": {},
"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>",
"item_refunded_count": 123,
"gpm_amount": 123,
"average_viewing_duration": "<string>",
"product_sold_count": 123,
"average_gmv_per_customer_amount": 123,
"aov_amount": 123,
"like_count": 123,
"live_product_impressions_count": 123,
"comment_count": 123,
"engagement_rate": "<string>",
"share_count": 123,
"tap_through_rate": "<string>",
"unique_viewer_count": 123,
"live_product_click_through_rate": "<string>",
"product_clicks_count": 123,
"impression_count": 123
}
],
"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 LIVE row contains:| Field | Type | Description |
|---|---|---|
id | Integer | Internal snapshot id |
external_id | String | TikTok LIVE id |
external_creator_id | String | null | TikTok creator id (oecuid) of the host |
external_product_id | String | null | Featured product id |
title / truncated_title | String | LIVE title (full / truncated) |
duration | String | Display string of the LIVE start/end time |
start_time / end_time | String | null | LIVE start/end (ISO 8601) |
product | Object | null | Featured product { id, title, image_url } |
affiliate_* / connected_account | Mixed | Growi creator info (see Creators endpoint) |
total_gmv | Number | GMV in display currency units |
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 |
*_formatted | String | Display-string variant of every metric above |
gpm_amount | Integer | GMV per mille, integer cents |
aov_amount | Integer | Average order value, integer cents |
average_gmv_per_customer_amount | Integer | Integer cents |
average_viewing_duration | String | null | e.g. "1m 32s" |
unique_viewer_count / impression_count / like_count / comment_count / share_count | Integer | Engagement counts |
engagement_rate / tap_through_rate / live_product_click_through_rate | String | null | Rate display strings |
live_product_impressions_count / product_clicks_count / product_sold_count | Integer | Product funnel counts |
{ data, meta, additional_data } (see the Creators endpoint for the envelope shape).
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 | 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, all, or non_growi | No | growi |
gmv_min / gmv_max | Number | GMV range bounds in display currency units | No | — |
organization_id | Integer | Narrow to a child organization | No | — |
Request Example
curl -X GET "https://api.growi.io/api/public/v1/tik_tok_shop/lives?start_date=2026-07-01&end_date=2026-07-31&platform=all" \
-H "Authorization: Bearer YOUR_PUBLIC_API_KEY" \
-H "Content-Type: application/json"
Response Example
{
"data": [
{
"id": 55443,
"external_id": "7523400011122233344",
"external_creator_id": "7495033444...",
"title": "Summer restock LIVE 🍑",
"truncated_title": "Summer restock LIVE 🍑...",
"duration": "July 15, 2026 18:00 - 19:00",
"start_time": "2026-07-15T18:00:00Z",
"end_time": "2026-07-15T19:00:00Z",
"product": {
"id": 887766,
"title": "Peach Perfect Multivitamin",
"image_url": "https://..."
},
"affiliate_name": "Jane Creator",
"total_gmv": 7500.0,
"total_gmv_formatted": "$7,500.00",
"total_units_sold": 260,
"total_units_sold_formatted": "260",
"gpm_amount": 1250,
"aov_amount": 2885,
"unique_viewer_count": 4300,
"impression_count": 15800,
"engagement_rate": "8.4%",
"tap_through_rate": "3.1%"
}
],
"meta": {
"row_count": 42,
"total_pages": 3,
"current_page": 1,
"next_page": 2,
"prev_page": null
},
"additional_data": {
"total_gmv": 98000.0,
"total_units_sold": 3400,
"total_sku_orders": 2980,
"total_commission": 14700.0,
"total_items_refunded": 85,
"total_refunded_amount": 2100.0,
"currency_symbol": "$",
"currency": "usd"
}
}
Use Cases
- Measuring LIVE selling performance (GMV, GPM, AOV) per stream
- Comparing LIVE engagement funnels: impressions → product clicks → sales
- Identifying your best LIVE hosts by GMV and unique viewers
- Feeding LIVE performance into scheduling and incentive decisions
Notes
- Results are always ordered by GMV descending; there is no sort parameter.
- The
total_*money fields are raw display-currency numbers; the passthrough*_amountmetrics (gpm_amount,aov_amount,average_gmv_per_customer_amount) are integer cents. - Rate fields (
engagement_rate,tap_through_rate,live_product_click_through_rate) are display strings as provided by TikTok Shop. - 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)