Publishing flow
https://api.ailingtu.com
Find a creator
id + creatorIdSelect a product
SHOP / SHOWCASEUpload media
presign → PUT → confirmCreate a post
VIDEO / PHOTOKeep API keys on your server. Never expose them in browser code or logs.
Treat non-2xx responses, invalid JSON, or a non-zero business code as failures.
Machine-readable API descriptions
Use the OpenAPI description as the source for agents, SDK generation, and contract validation.
Commerce publishing
Commerce publishing
Resolve creators and products before creating TikTok Shop publishing tasks.
/v1/creatorAccount/pageListAvailableoperationId: listCreatorAccounts
List authorized creators
List authorized TikTok Shop creators, regions, and posting permissions. Use id for product queries and creatorId when creating a post.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
pageSize | integer | Yes | Items per page, up to 200 |
pageNumber | integer | Yes | Page number, starting at 1 |
valid | boolean | No | Return valid authorizations only; defaults to true |
authSource | string | No | Use TIKTOK_SHOP_CREATOR for commerce posts |
usernames | string[] | No | Repeat the query parameter for multiple usernames |
selectionRegion | string | No | Target region, such as US |
hasPhotoPermission | boolean | No | Return accounts with shoppable photo permission only |
{
"code": 0,
"data": {
"list": [
{
"id": 12345,
"creatorId": "2077242233106595840",
"username": "shop_creator",
"authSource": "TIKTOK_SHOP_CREATOR",
"oauthRegion": "USA",
"registerRegion": "US",
"selectionRegion": "US",
"targetMarket": "US",
"valid": true,
"tagNames": [
"top-tier"
],
"permissions": [
"VIDEO_SHOPPABLE_PERMISSION",
"PHOTO_SHOPPABLE_PERMISSION_PRODUCT"
]
}
],
"total": 1,
"pageNumber": 1,
"pageSize": 200,
"totalPages": 1
},
"message": "success"
}/v1/creator/tiktokshop/product/listByShopAvailableoperationId: listTikTokShopProducts
List shop products
List TikTok Shop products using the creator account id. Use SHOP as the product source when creating a post.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Creator account id, not creatorId |
origin | TIKTOK | Yes | Always TIKTOK |
pageSize | integer | Yes | Items per page |
pageToken | string | No | Pagination token from the previous response |
titleKeyword | string | No | Product title keyword |
{
"code": 0,
"data": {
"products": [
{
"id": "1732280564607717841",
"title": "Summer Vibes Cord",
"price": {
"amount": "19.99",
"currency": "USD"
},
"images": [
{
"url": "https://cdn.example.com/product.jpg",
"width": 800,
"height": 800
}
]
}
],
"nextPageToken": "",
"totalCount": 1
},
"message": "success"
}/v1/creator/tiktokshop/product/listByShowcaseAvailableoperationId: listTikTokShowcaseProducts
List showcase products
List products in a creator showcase. The response matches shop products; use SHOWCASE as the product source.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Creator account id |
origin | TIKTOK | Yes | Always TIKTOK |
pageSize | integer | Yes | Items per page |
pageToken | string | No | Pagination token from the previous response |
{
"code": 0,
"data": {
"products": [
{
"id": "1732280564607717841",
"title": "Summer Vibes Cord",
"price": {
"amount": "19.99",
"currency": "USD"
},
"images": [
{
"url": "https://cdn.example.com/product.jpg",
"width": 800,
"height": 800
}
]
}
],
"nextPageToken": "",
"totalCount": 1
},
"message": "success"
}File upload
File upload
Request a presigned URL, upload media directly to object storage, then confirm new files.
/v1/file/presignAvailableoperationId: createFileUpload
Create a presigned upload
Submit file metadata and the compatible hash to receive a fileId and object-storage URL. Skip upload and confirmation when isNew is false.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
fileName | string | Yes | File name including extension |
contentType | string | Yes | File MIME type |
size | integer | Yes | File size in bytes |
hash | string | Yes | SHA-256 of the UTF-8 encoded lowercase hex representation of the file bytes |
{
"fileName": "video.mp4",
"contentType": "video/mp4",
"size": 12345678,
"hash": "3786a02b..."
}{
"code": 0,
"data": {
"fileId": 591,
"uploadUrl": "https://object-storage.example.com/presigned-url",
"url": "https://cdn.ailingtu.com/media/video.mp4",
"isNew": true,
"expiresAt": "2026-07-29T12:00:00Z"
},
"message": "success"
}/v1/file/confirmAvailableoperationId: confirmFileUpload
Confirm an uploaded file
Call only after a new file is successfully PUT to its presigned URL. Deduplicated files do not require confirmation.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
fileId | integer | string | Yes | File ID returned by the presign endpoint |
{
"fileId": 591
}{
"code": 0,
"data": {
"fileId": 591,
"confirmed": true
},
"message": "success"
}/v1/creator/post/createAvailableoperationId: createCreatorPost
Create a publishing task
Create a TikTok Shop commerce video or photo publishing task. A successful response means the task was accepted; verify the final result in publishing records.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
businessId | string | Yes | Video fileId; first image fileId for photo posts |
businessType | FILE | Yes | Use FILE for uploaded media |
creatorId | string | Yes | creatorId returned by the creator endpoint |
title | string | Yes | Post caption, up to 4,000 characters |
platform | TIKTOK_SHOP | Yes | Use TIKTOK_SHOP for commerce posts |
mediaType | VIDEO | PHOTO | Yes | Explicitly select video or photo |
scheduledAt | integer | No | Unix epoch in milliseconds |
scheduledTz | string | No | IANA timezone |
tiktokShop | object | Conditional | Required for VIDEO |
tiktokShopPhoto | object | Conditional | Required for PHOTO |
{
"code": 0,
"data": {
"id": 100,
"postId": "post_xxx",
"platform": "TIKTOK_SHOP",
"title": "Summer Sale 2026 #summer",
"videoUrl": "https://cdn.ailingtu.com/media/video.mp4",
"status": "SCHEDULED"
},
"message": "success"
}{
"businessId": "591",
"businessType": "FILE",
"creatorId": "2077242233106595840",
"title": "Summer Sale 2026 #summer",
"platform": "TIKTOK_SHOP",
"mediaType": "VIDEO",
"scheduledAt": 1784896665989,
"scheduledTz": "America/New_York",
"oauthRegion": "USA",
"tiktokShop": {
"productInfo": {
"productId": "1732280564607717841",
"title": "Summer Vibes Cord",
"source": "SHOP"
}
}
}{
"businessId": "591",
"businessType": "FILE",
"creatorId": "2077242233106595840",
"title": "Summer Sale 2026 #summer",
"platform": "TIKTOK_SHOP",
"mediaType": "PHOTO",
"scheduledAt": 1784896665989,
"scheduledTz": "America/New_York",
"oauthRegion": "USA",
"tiktokShopPhoto": {
"postType": "MULTI_PHOTO_ONE_ANCHOR",
"businessIds": [
"591",
"592"
],
"productLinks": [
{
"productId": "1732280564607717841",
"title": "Summer Vibes Cord",
"source": "SHOP"
}
]
}
}Content data
Content data
/v1/material/fetchAvailableoperationId: fetchPublicVideoData
Video data sync
Fetch public video views and engagement metrics from TikTok, Instagram, Douyin, Xiaohongshu, WeChat Channels, and YouTube.
Request fields
| Field | Type | Required | Description |
|---|---|---|---|
videoUrl | string(uri) | Yes | Public http/https URL of the content |
{
"videoUrl": "https://www.tiktok.com/@creator/video/7123456789012345678"
}{
"code": 0,
"data": {
"videoId": "7624922739500993822",
"uniqueId": "creator",
"playCount": 2109422,
"diggCount": 143027,
"commentCount": 1320,
"shareCount": 36150,
"collectCount": 17710,
"coverUrl": "https://cdn.example.com/cover.jpg",
"videoDesc": "caption #tag",
"releaseAt": 1775315687
},
"message": "success"
}Integration checklist
Ready to integrate?
Create or manage an API key in the LINGTU AI workspace.