Knowledge base

Tìm nhanh trong tài liệu Zora

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

text
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
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

http
GET /v1/capabilities
curl
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

http
POST /v1/extract
json
{ "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

FieldRequiredDefaultDescription
urlYes-TikTok Shop, TikTok video, YouTube, Facebook, or Instagram link.
tiktok_review_limitNo10Maximum review count for each 5-star and 1-star group. Range: 1-100.
tiktok_sortNolatestlatest or recommended.
include_empty_reviewsNofalseWhether to include reviews with no text content.
include_audio_mp3NotrueFor social video/audio links, include a best-effort Zora-hosted MP3 download URL under data.media.audio_download_links.mp3.
async_modeNofalseFor TikTok Shop links, return cached data when available or a background job immediately on cache miss.
force_asyncNofalseFor TikTok Shop links, queue a background refresh even when a cached result exists.

TikTok Shop Example

curl
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
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 }'
json
{ "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
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
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
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.

json
{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "include_audio_mp3": true }

YouTube Example

curl
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
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.

json
{ "url": "https://www.facebook.com/reel/EXAMPLE_ID" }

Instagram Example

curl
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.

json
{ "url": "https://www.instagram.com/p/EXAMPLE_ID/" }

JavaScript

js
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

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

json
{ "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

HTTPMeaning
400Invalid request or URL.
401Missing or invalid API key.
403The API key is valid but has not been granted access to this route.
422The source link could not be extracted.
429Rate limit exceeded. Retry after the indicated delay.
502 / 504The source platform failed or responded too slowly.