TikTok
List the company's TikTok product listings
Lists the TikTok product listings on the company’s TikTok Shop connection, one per Fluid product selected for the shop, with TikTok’s listing status and review (audit) status side by side plus the last publish/sync times and error. Requires a company admin token with the products.view permission. Returns 404 when the company has never connected a TikTok Shop. Cursor-paginated, newest first: page[limit] defaults to 25 (max 100); pass meta.pagination.next_cursor back as page[cursor] to fetch the next page.
GET
/
api
/
v202506
/
tiktok
/
product_listings
List the company's TikTok product listings
curl --request GET \
--url https://api.fluid.app/api/v202506/tiktok/product_listings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202506/tiktok/product_listings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202506/tiktok/product_listings', 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.fluid.app/api/v202506/tiktok/product_listings",
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.fluid.app/api/v202506/tiktok/product_listings"
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.fluid.app/api/v202506/tiktok/product_listings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202506/tiktok/product_listings")
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{
"product_listings": [
{
"id": 27418,
"tiktok_product_id": "1729587461203847291",
"product_id": 91274,
"tiktok_category_id": "600966",
"status": "active",
"audit_status": "approved",
"last_published_at": "2026-09-22T14:05:37.000Z",
"last_synced_at": "2026-09-29T09:12:44.000Z",
"last_error": null
},
{
"id": 27419,
"tiktok_product_id": null,
"product_id": 91288,
"tiktok_category_id": "600966",
"status": "publish_failed",
"audit_status": null,
"last_published_at": null,
"last_synced_at": null,
"last_error": {
"type": "tiktok_error",
"description": "Main image does not meet the minimum resolution",
"details": {}
}
}
],
"status": 200,
"meta": {
"request_uuid": "8b4e2f71-3c9a-4d6e-b1f0-5a7c9e2d4b18",
"timestamp": "2026-09-30T16:42:11Z",
"pagination": {
"cursor": "eyJpZCI6NDgyMTMsImNyZWF0ZWRfYXQiOiIyMDI2LTA5LTI5In0",
"limit": 25,
"prev_cursor": null,
"next_cursor": "eyJpZCI6Mjc0MTksImNyZWF0ZWRfYXQiOiIyMDI2LTA5LTIyIn0"
}
}
}{
"message": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Cursor token for pagination (from meta.pagination in the response).
Number of records per page (max 100).
Required range:
1 <= x <= 100⌘I
List the company's TikTok product listings
curl --request GET \
--url https://api.fluid.app/api/v202506/tiktok/product_listings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/v202506/tiktok/product_listings"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/v202506/tiktok/product_listings', 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.fluid.app/api/v202506/tiktok/product_listings",
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.fluid.app/api/v202506/tiktok/product_listings"
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.fluid.app/api/v202506/tiktok/product_listings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202506/tiktok/product_listings")
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{
"product_listings": [
{
"id": 27418,
"tiktok_product_id": "1729587461203847291",
"product_id": 91274,
"tiktok_category_id": "600966",
"status": "active",
"audit_status": "approved",
"last_published_at": "2026-09-22T14:05:37.000Z",
"last_synced_at": "2026-09-29T09:12:44.000Z",
"last_error": null
},
{
"id": 27419,
"tiktok_product_id": null,
"product_id": 91288,
"tiktok_category_id": "600966",
"status": "publish_failed",
"audit_status": null,
"last_published_at": null,
"last_synced_at": null,
"last_error": {
"type": "tiktok_error",
"description": "Main image does not meet the minimum resolution",
"details": {}
}
}
],
"status": 200,
"meta": {
"request_uuid": "8b4e2f71-3c9a-4d6e-b1f0-5a7c9e2d4b18",
"timestamp": "2026-09-30T16:42:11Z",
"pagination": {
"cursor": "eyJpZCI6NDgyMTMsImNyZWF0ZWRfYXQiOiIyMDI2LTA5LTI5In0",
"limit": 25,
"prev_cursor": null,
"next_cursor": "eyJpZCI6Mjc0MTksImNyZWF0ZWRfYXQiOiIyMDI2LTA5LTIyIn0"
}
}
}{
"message": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}