Hujjatlar
Bitta base URL, bearer avtorizatsiya, har javobda JSON. O'n daqiqada productionga chiqasiz.
base urlhttps://api.saveapi.org/v1
Har havolaga bitta GET. Istalgan ochiq post havolasini /v1/download ga yuboring va medias[] ni o'qing — har yozuv manbaning o'z CDN'idagi to'g'ridan-to'g'ri fayl havolasi, o'sha javobning ichida. Na ikkinchi so'rov, na format parametri: manba bir nechta tayyor variant bergan joyda ularning hammasi formats[] da birga keladi.
curl -s -G "https://api.saveapi.org/v1/download" \
-H "Authorization: Bearer sk_live_xxxx" \
--data-urlencode "url=https://www.tiktok.com/@zachking/video/6768504823336815877"Rasmiy SDK'lar
Python va JavaScript/TypeScript uchun yengil klientlar: o'sha endpointlar va javob shakli, tiplar bilan; xato barqaror kodli SaveAPIError bo'lib keladi. Faqat qayta urinish yordam beradigan xatolar qayta yuboriladi — UPSTREAM_TIMEOUT, UPSTREAM_ERROR va Retry-After dan keyin RATE_LIMITED; shaxsiy, o'chirilgan yoki qo'llanmaydigan havola hech qachon.
from saveapi import SaveAPI, SaveAPIError
api = SaveAPI("sk_live_...") # or set SAVEAPI_KEY
try:
post = api.download("https://www.tiktok.com/@zachking/video/6768504823336815877")
print(post["medias"][0]["url"])
except SaveAPIError as error:
print(error.code) # PRIVATE_CONTENT, MEDIA_NOT_FOUND, ...import { SaveAPI, SaveAPIError } from "saveapi";
const api = new SaveAPI({ apiKey: "sk_live_..." }); // or SAVEAPI_KEY
try {
const post = await api.download("https://www.tiktok.com/@zachking/video/6768504823336815877");
console.log(post.medias[0].url);
} catch (error) {
if (error instanceof SaveAPIError) console.log(error.code);
}MIT litsenziyasi, Telegram bot va faylni yuklab olish namunalari bilan: github.com/akhroruz/saveapi-sdk
Har so'rov qancha kredit
Har endpoint chaqirilishidan oldin narxini aytadi. Yuklab olish har muvaffaqiyatli natija uchun hisoblanadi; qolgan hammasi bepul.
Ming kredit Pro tarifida $0.09, Mega tarifida $0.066 turadi — bitta oddiy yuklash sentning ulushiga tushadi.
Aniq summa har javobda credits.spent ichida, qolgan balans esa X-Credits-Remaining sarlavhasida keladi. O'z hisobingizni yuritish shart emas.
Xato kodlari
Har xato bir xil konvertda keladi. Qarorni code bo'yicha qiling, message bo'yicha emas — matn o'zgarishi mumkin, kodlar o'zgarmaydi.
{
"success": false,
"error": {
"code": "INVALID_URL",
"message": "The url must be a public http(s) link to a post"
}
}Endpointlar
Chapdan endpoint tanlang. Har biri oddiy GET, kalit sarlavhada — status so'rash ham, job id ham yo'q.
/v1/download
1.5 kreditdanHavolani to'g'ridan-to'g'ri media URL'lar, muallif va sarlavha metadatasiga aylantiradi.
urlmajburiystringlimit_mbixtiyoriynumberfull_metaixtiyoriybooleancurl -s -G "https://api.saveapi.org/v1/download" \
-H "Authorization: Bearer sk_live_xxxx" \
--data-urlencode "url=https://www.tiktok.com/@zachking/video/6768504823336815877"{
"success": true,
"platform": "tiktok",
"type": "video",
"source_url": "https://www.tiktok.com/@zachking/video/6768504823336815877",
"video_id": "6768504823336815877",
"medias": [
{
"type": "video",
"url": "https://v16m.tiktokcdn-us.com/...",
"ext": "mp4",
"quality": null,
"width": 0,
"height": 0,
"size_mb": 4.19,
"watermark": false
}
],
"music": {
"type": "audio",
"url": "https://v16-ies-music.tiktokcdn-us.com/...",
"ext": "mp3",
"quality": null,
"width": 0,
"height": 0,
"size_mb": null,
"watermark": null
},
"meta": {
"title": "They rejected my application to Hogwarts but I still found a way to be a wizard. 🧹#illusion #magic #harrypotter",
"text": "They rejected my application to Hogwarts but I still found a way to be a wizard. 🧹#illusion #magic #harrypotter",
"author": "Zach King",
"author_url": "https://www.tiktok.com/@zachking",
"thumbnail": "https://p19-common-sign.tiktokcdn-us.com/...",
"duration": 18,
"views": 2382320428,
"published_at": 1575915337,
"username": "zachking",
"author_avatar": "https://p16-common-sign.tiktokcdn-us.com/...",
"author_verified": null,
"likes": 63400000,
"comments": 296700,
"shares": 2400000,
"saves": 1900000,
"location": null,
"region": "US",
"music": {
"title": "original sound",
"author": "Zach King",
"duration": 18,
"cover": "https://p16-common-sign.tiktokcdn-us.com/...",
"original": true
}
},
"formats": [
{ "format": "nowm", "label": "No watermark", "type": "video", "size_mb": 4.19, "exact": true, "watermark": false, "url": "https://v16m.tiktokcdn-us.com/..." },
{ "format": "hd", "label": "HD, no watermark", "type": "video", "size_mb": 3.0, "exact": true, "watermark": false, "url": "https://v16-notes.tiktokcdn-us.com/..." },
{ "format": "wm", "label": "With watermark", "type": "video", "size_mb": 4.25, "exact": true, "watermark": true, "url": "https://v16m.tiktokcdn-us.com/..." },
{ "format": "mp3", "label": "Audio (mp3)", "type": "audio", "size_mb": null, "exact": false, "url": "https://v16-ies-music.tiktokcdn-us.com/..." }
],
"recommended_format": "nowm",
"credits": { "spent": 1.5, "remaining": 99988.5 }
}curl -s -G "https://api.saveapi.org/v1/download" \
-H "Authorization: Bearer sk_live_xxxx" \
--data-urlencode "url=https://www.tiktok.com/@zachking/video/6768504823336815877"Avtorizatsiya
Har bir so'rov Authorization sarlavhasida maxfiy kalitni olib boradi. Kalitlar muddatsiz, lekin xohlagan vaqtda bekor qilib, yangilash mumkin.
Authorization: Bearer sk_live_xxxxxxxxxxxxAuthorization sarlavhasini qo'ya olmaydigan mijozlar uchun X-API-Key: sk_live_… ham qabul qilinadi.
Javob
Har bir muvaffaqiyatli so'rov bir xil shaklda qaytadi. medias[] ichida to'g'ridan-to'g'ri fayllar turadi — doim kamida bitta, karuselda bir nechta. meta da manba bergan bo'lsa sarlavha, muallif, muqova va davomiylik keladi, credits esa so'rov qancha turgani va qancha qolganini ko'rsatadi.
{
"success": true,
"platform": "tiktok",
"type": "video",
"source_url": "https://www.tiktok.com/@zachking/video/6768504823336815877",
"video_id": "6768504823336815877",
"medias": [
{
"type": "video",
"url": "https://v16m.tiktokcdn-us.com/...",
"ext": "mp4",
"quality": null,
"width": 0,
"height": 0,
"size_mb": 4.19,
"watermark": false
}
],
"music": {
"type": "audio",
"url": "https://v16-ies-music.tiktokcdn-us.com/...",
"ext": "mp3",
"quality": null,
"width": 0,
"height": 0,
"size_mb": null,
"watermark": null
},
"meta": {
"title": "They rejected my application to Hogwarts but I still found a way to be a wizard. 🧹#illusion #magic #harrypotter",
"text": "They rejected my application to Hogwarts but I still found a way to be a wizard. 🧹#illusion #magic #harrypotter",
"author": "Zach King",
"author_url": "https://www.tiktok.com/@zachking",
"thumbnail": "https://p19-common-sign.tiktokcdn-us.com/...",
"duration": 18,
"views": 2382320428,
"published_at": 1575915337,
"username": "zachking",
"author_avatar": "https://p16-common-sign.tiktokcdn-us.com/...",
"author_verified": null,
"likes": 63400000,
"comments": 296700,
"shares": 2400000,
"saves": 1900000,
"location": null,
"region": "US",
"music": {
"title": "original sound",
"author": "Zach King",
"duration": 18,
"cover": "https://p16-common-sign.tiktokcdn-us.com/...",
"original": true
}
},
"formats": [
{ "format": "nowm", "label": "No watermark", "type": "video", "size_mb": 4.19, "exact": true, "watermark": false, "url": "https://v16m.tiktokcdn-us.com/..." },
{ "format": "hd", "label": "HD, no watermark", "type": "video", "size_mb": 3.0, "exact": true, "watermark": false, "url": "https://v16-notes.tiktokcdn-us.com/..." },
{ "format": "wm", "label": "With watermark", "type": "video", "size_mb": 4.25, "exact": true, "watermark": true, "url": "https://v16m.tiktokcdn-us.com/..." },
{ "format": "mp3", "label": "Audio (mp3)", "type": "audio", "size_mb": null, "exact": false, "url": "https://v16-ies-music.tiktokcdn-us.com/..." }
],
"recommended_format": "nowm",
"credits": { "spent": 1.5, "remaining": 99988.5 }
}Bitta kalit har doim ham bo'lavermaydi. formats[] faqat manbaning o'zi bir nechta tayyor variant beradigan joyda paydo bo'ladi — bugun bu VK, TikTok va Likee — va har bir yozuvda to'g'ridan-to'g'ri havola va aniq hajmi turadi, ya'ni kerakligini o'z tomoningizda filtrlaysiz. Na ikkinchi so'rov, na format parametri bor. Qolgan platformalarda bu kalit umuman bo'lmaydi va javob medias[] dir:
"formats": [
{ "format": "mp4_144", "label": "144p", "type": "video", "size_mb": 0.76, "url": "https://..." },
{ "format": "mp4_480", "label": "480p", "type": "video", "size_mb": 7.9, "url": "https://..." },
{ "format": "mp4_1080", "label": "1080p", "type": "video", "size_mb": 36.37, "url": "https://..." }
],
"recommended_format": "mp4_1080"Javob sarlavhalari
Har javobda tarifingiz, qolgan balans va rate limit oynasi keladi. Kredit tugashidan oldin ogohlantirish uchun X-Credits-Remaining ni o'qing.
X-Plan: pro
X-Credits-Remaining: 99988
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59Rate limit
Chegara har kalit uchun, daqiqasiga. Har kalitning o'z chegarasi bor — bir servis boshqasidan issiqroq bo'lsa trafikni kalitlar orasida bo'ling.
Chegaradan oshsangiz Retry-After sarlavhali 429 RATE_LIMITED keladi — shuncha soniya kutib qayta yuboring. Rad etilgan chaqiruvlar hisobdan yechilmaydi.
HTTP/1.1 429 Too Many Requests
Retry-After: 23
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0Kredit va to'lov
Muvaffaqiyatli yuklab olish 1.5 kredit turadi — Instagram story 5, Rutube 3, chunki ikkalasi bizga qimmatga tushadi. Qolgan endpointlar bepul. Kredit paket bo'lib sotib olinadi va sotib olingan kundan 30 kun amal qiladi. Ro'yxatdan o'tganda beriladigan bepul 1 000 kredit hech qachon kuymaydi.
Manba rad etgan havola — yopiq, o'chirilgan yoki ichida media yo'q — 0.1 kredit turadi: qidiruv bajarilgan, javob bo'sh chiqqan. Qolgan hammasi bepul: buzuq havola, notanish sayt, chegara, manbaning kechikishi va bizning xatomiz.
Narxlar
Har so'rov o'z narxida: yuklab olish 1.5 kredit, Instagram story 5, Rutube 3. Manba rad etgan havola — yopiq yoki o'chirilgan — 0.1 kredit. Pullik kreditlar sotib olingandan 30 kun amal qiladi.
Qotib qoldingizmi yoki nimadir yetishmayaptimi?