Link Data Extract API
Use the Link Data API to extract structured data from public product or media links. Current supported sources include TikTok Shop product links, TikTok videos, YouTube videos, Facebook posts and reels, and Instagram posts and reels.
Keep API keys server-side
Never publish a Zora API key in frontend JavaScript, public chat, screenshots, or a Git repository. Call this API from your backend and send only the extracted data your app needs to the browser.
Base URL and Auth
Base URL: https://api.zora.io.vn
Authorization: Bearer YOUR_ZORA_API_KEY
or X-API-Key: YOUR_ZORA_API_KEY
Content-Type: application/json
Your key must be enabled for the Link Data routes. A valid key without route permission returns HTTP 403.
YouTube enrichment is server-managed
Clients do not send a YouTube Data API key. Zora uses the server-side YouTube key when extracting YouTube links, so customers only need to pass the target
url.
Health Check
curl "https://api.zora.io.vn/health"
A healthy production gateway returns HTTP 200 with ok: true. Thestatus field can still be degraded when a non-critical worker pool has an alert; Link Data calls can still be available.
Check Supported Platforms
curl "https://api.zora.io.vn/v1/capabilities" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY"
The current platform keys are tiktok_shop, tiktok_video,youtube, facebook, and instagram.
Extract Data from a Link
{
"url": "https://www.tiktok.com/view/product/1731522536665089026",
"tiktok_review_limit": 10,
"tiktok_sort": "latest",
"include_empty_reviews": false,
"include_audio_mp3": true
}
Request fields
| Field | Required | Default | Description |
|---|
url | Yes | - | TikTok Shop, TikTok video, YouTube, Facebook, or Instagram link. |
tiktok_review_limit | No | 10 | Maximum review count for each 5-star and 1-star group. Range: 1-100. |
tiktok_sort | No | latest | latest or recommended. |
include_empty_reviews | No | false | Whether to include reviews with no text content. |
include_audio_mp3 | No | true | For social video/audio links, include a best-effort Zora-hosted MP3 download URL under data.media.audio_download_links.mp3. |
async_mode | No | false | For TikTok Shop links, return cached data when available or a background job immediately on cache miss. |
force_async | No | false | For TikTok Shop links, queue a background refresh even when a cached result exists. |
TikTok Shop Example
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/view/product/1731522536665089026",
"tiktok_review_limit": 10,
"tiktok_sort": "latest",
"include_empty_reviews": false
}'
Product fields are returned under data.product, including name, description, shop, price, stock, sold count, rating statistics, image_urls, and video_urlswhen available. Review samples are returned under data.reviews.
TikTok Shop High-Concurrency Flow
For many different TikTok Shop product links, use async extraction. A cache hit returns the product and reviews immediately. A cache miss returns a job_id immediately, and your app polls the job endpoint for the completed result.
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.tiktok.com/view/product/1731522536665089026",
"tiktok_review_limit": 10,
"async_mode": true
}'
{
"ok": true,
"platform": "TikTok Shop",
"extraction_method": "TikTok Shop queued background extraction",
"data": {
"job": {
"job_id": "JOB_ID",
"status": "queued",
"product_id": "1731522536665089026"
},
"queue": {
"active": 12,
"max_active": 1000
},
"reviews": {
"five_star": [],
"one_star": []
}
}
}
curl "https://api.zora.io.vn/v1/extract/jobs/JOB_ID" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY"
To enqueue many TikTok Shop links with less HTTP overhead, call the batch endpoint. It returns one item per URL; each item is either a cached extraction response or a queued job response.
curl -X POST "https://api.zora.io.vn/v1/extract/batch" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"https://www.tiktok.com/view/product/1731522536665089026",
"https://www.tiktok.com/view/product/1731011498711550308"
],
"tiktok_review_limit": 10
}'
TikTok Video Example
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.tiktok.com/@scout2015/video/6718335390845095173"}'
TikTok video responses return common metadata under data.common, IDs underdata.ids, public counters under data.metrics, and media links underdata.media.image_urls, data.media.video_urls, anddata.media.download_links. Direct TikTok media URLs are best-effort and can expire.
MP3 Audio Download Links
For YouTube, TikTok video, Instagram reel/video, and Facebook reel/watch/video URLs, Zora can return a best-effort MP3 link. The response includes data.media.audio_download_links.mp3 and mirrors the same URL under data.media.download_links.mp3. MP3 files are generated and cached by Zora on first download, then served from /v1/extract/audio/... until the link expires.
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"include_audio_mp3": true
}
YouTube Example
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'
Supported YouTube formats include youtube.com/watch?v=..., youtu.be/..., and youtube.com/shorts/.... When available, Zora returns video metadata underdata.common and metrics such as view, like, comment, duration, channel ID, and channel subscriber data under data.metrics.
Facebook Example
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.facebook.com/reel/EXAMPLE_ID"}'
Supported Facebook formats include facebook.com/posts/...,facebook.com/share/..., facebook.com/reel/...,facebook.com/watch/?v=..., and public mobile Facebook URLs. Zora extracts OpenGraph metadata plus public crawler stats when Facebook exposes them. Typical fields are title, author, caption/description, thumbnail, public post ID, reaction count, comment count, share count, video view count, play count, published time, and duration.
{
"url": "https://www.facebook.com/reel/EXAMPLE_ID"
}
Instagram Example
curl -X POST "https://api.zora.io.vn/v1/extract" \
-H "Authorization: Bearer YOUR_ZORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.instagram.com/reel/EXAMPLE_ID/"}'
Supported Instagram formats include instagram.com/p/... andinstagram.com/reel/.... Zora extracts public OpenGraph metadata such as title, author when available, caption/description, thumbnail, content type, and best-effort like/comment/date text if Instagram includes those values in public metadata.
{
"url": "https://www.instagram.com/p/EXAMPLE_ID/"
}
JavaScript
const response = await fetch("https://api.zora.io.vn/v1/extract", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_ZORA_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
url: "https://www.tiktok.com/view/product/1731522536665089026",
tiktok_review_limit: 10,
tiktok_sort: "latest",
}),
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
const result = await response.json();
console.log(result);
Python
import requests
response = requests.post(
"https://api.zora.io.vn/v1/extract",
headers={"Authorization": "Bearer YOUR_ZORA_API_KEY"},
json={
"url": "https://www.tiktok.com/view/product/1731522536665089026",
"tiktok_review_limit": 10,
"tiktok_sort": "latest",
},
timeout=120,
)
response.raise_for_status()
print(response.json())
Successful Response
{
"ok": true,
"platform": "tiktok_shop",
"input_url": "https://www.tiktok.com/view/product/1731522536665089026",
"extraction_method": "...",
"data": {
"media": {
"audio_download_links": {
"mp3": "https://api.zora.io.vn/v1/extract/audio/abc123....mp3",
"status": "generated_on_first_download",
"content_type": "audio/mpeg",
"expires_at": "2026-07-02T00:00:00Z"
}
}
},
"limitations": []
}
Social link responses use data.common, data.ids,data.metrics, data.media, and data.raw_stats. MP3 export links are best-effort and may fail if the source platform blocks media access. Some TikTok, Facebook, and Instagram media URLs or metrics are best-effort because public metadata can vary by country, login state, privacy setting, and platform rollout.
Common Errors
| HTTP | Meaning |
|---|
400 | Invalid request or URL. |
401 | Missing or invalid API key. |
403 | The API key is valid but has not been granted access to this route. |
422 | The source link could not be extracted. |
429 | Rate limit exceeded. Retry after the indicated delay. |
502 / 504 | The source platform failed or responded too slowly. |