Duets and stitches
Duets and stitches made from a video.
- Upstream
/tiktok/v1/duet/detail/- Access
- Every plan
- Runs on
- LeanPool · android · tiktok · 47.6.3
- Pagination
{ cursor, has_more }- Client
os,app_flavour,app_versionoverrides- Billing
- Failed calls are free
- Older path
/v1/scrape/video/duets
Authorization
Your API key. Create one in API keys.
Query parameters
The numeric video ID. For example 7705852133855161377.
The cursor from the previous page. Omit it for the first page.
Items per page. For example 20.
Client and egress overrides
Optional. Leave them out to run as android · tiktok · 47.6.3 from the default pool. See Clients and versions.
android or ios. For example android.
Run as tiktok, lite, lite_coin, pro, studio, shop, tv, douyin. For example tiktok.
A release of that app. Defaults to the current default for (os, app_flavour). For example 47.6.3.
Two-letter country code for egress. For example US.
A supported city in that region. For example miami.
Response
A 200 returns JSON with stable field names. Every response carries x-credits-cost, x-credits-tier and x-credits-remaining.
Pagination
Pass cursor from the previous page and stop when has_more is false. Both sit at the top level of every page; the raw upstream cursor fields are still in the body. See Pagination.
{
"cursor": "1794158512000",
"has_more": true,
"items": [
"…"
]
}import os, requests
def pages(path, **params):
cursor = None
while True:
if cursor:
params["cursor"] = cursor
r = requests.get(f"https://api.tikultra.com{path}", params=params,
headers={"x-api-key": os.environ["TIKULTRA_KEY"]})
r.raise_for_status()
page = r.json()
yield page
if not page["has_more"]:
return
cursor = page["cursor"]
for page in pages("/v1/video/duets", aweme_id=7705852133855161377, count=50):
print(page["cursor"], page["has_more"])Errors
Errors return a JSON body with a stable code and cost 0 credits. See Errors and retries.