Authentication
Tüm /api/v1/* endpointleri Bearer authentication ister. Key'i /profile/api-keys üzerinden oluştur ve Authorization header'ında geçir:
Authorization: Bearer xva_abc123def456...
Key formatı: xva_ + 32 byte base64url (toplam ~50 karakter). Sunucumuzda SHA-256 hash olarak saklanır — düz metin asla loglanmaz veya yedeklenmez. Key'i kaybedersen yenisini oluşturman gerekir.
Endpoints
/api/v1/postHerhangi bir desteklenen platformun (Twitter, Instagram, YouTube, TikTok, Reddit, Facebook, Pinterest, Amazon, Vimeo) post metaverisini + indirilebilir medya URL'lerini platform-bağımsız tek şemada döner.
Query parametreleri
| Ad | Tip | Açıklama |
|---|---|---|
url | string | Desteklenen herhangi bir platform post/video URL'i. |
Yanıt: 200 OK
{
"platform": "VIMEO",
"id": "76979871",
"url": "https://vimeo.com/76979871",
"text": "The New Vimeo Player...",
"authorName": "Vimeo Staff",
"durationSec": 62,
"posterUrl": "https://i.vimeocdn.com/...",
"needsServerProcessing": true,
"videoVariants": [
{ "qualityLabel": "1080p", "formatId": "best[height<=1080]/...", "contentType": "video/mp4" },
{ "qualityLabel": "720p", ... }
],
"imageUrls": []
}/api/v1/tweetYalnızca Twitter / X için kısayol. Diğer platformlar için /api/v1/post kullan.
Query parametreleri
| Ad | Tip | Açıklama |
|---|---|---|
url | string | Tweet URL'i (x.com veya twitter.com). Status ID otomatik tespit edilir. |
Yanıt: 200 OK
{
"id": "1789234567890",
"text": "Tweet metni...",
"authorName": "Elon Musk",
"authorScreenName": "elonmusk",
"authorAvatarUrl": "https://pbs.twimg.com/...",
"createdAt": "2026-04-27T08:00:00.000Z",
"durationSec": 84,
"posterUrl": "https://...",
"width": 1920,
"height": 1080,
"videoVariants": [
{
"qualityLabel": "1080p",
"url": "https://video.twimg.com/...",
"contentType": "video/mp4",
"bitrate": 2176000
},
{ "qualityLabel": "720p", "url": "...", ... }
],
"imageUrls": ["https://pbs.twimg.com/..."],
"isAnimatedGif": false
}/api/v1/downloadİki mod: (1) doğrudan CDN medya URL'ini proxy'ler (hızlı); (2) desteklenen bir platform sayfa linki verilirse (youtube.com, vimeo.com, amazon.com…) sunucuda yt-dlp ile indirir, MP4'e remux eder. Dosya stream halinde gelir, sunucumuzda iz kalmaz.
Query parametreleri
| Ad | Tip | Açıklama |
|---|---|---|
url | string | Doğrudan CDN medya URL'i VEYA desteklenen bir platform sayfa linki (youtube.com, vimeo.com, amazon.com…). |
format | string | Opsiyonel. yt-dlp format selector (ör. best[height<=1080]). Sayfa linki modunda geçerli. |
audio | string | Opsiyonel. mp3 verilirse yalnızca ses (320 kbps) çıkarılır. |
filename | string | Önerilen dosya adı. Sanitize edilir. |
Yanıt: 200 OK
Binary stream — dosya içeriği. Header'lar:
Content-Type: video/mp4 Content-Disposition: attachment; filename="tweet-1080p.mp4" Content-Length: 14523847 X-RateLimit-Limit: 10000 X-RateLimit-Remaining: 9847 X-RateLimit-Tier: PRO
Rate Limits
Her isteğin apiKeyId'ye göre 24 saatlik kayar pencere içinde sayılır.
| Tier | Günlük istek | Burst | Tipik kullanım |
|---|---|---|---|
| FREE | 100 | kısıtlı | Kişisel script, deneme |
| PRO | 10.000 | orta | Bot, küçük ölçek otomasyon |
| GOLD | 100.000 | geniş | B2B, yüksek hacim |
Limit aşıldığında 429 Too Many Requests dönülür. Her yanıtta X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Tier header'ları bulunur.
Kod örnekleri
curl
# Post metadata — any platform (Twitter, YouTube, Vimeo, Amazon…) curl -H "Authorization: Bearer xva_..." \ "https://demo.huntvideos.co/api/v1/post?url=https://vimeo.com/76979871" # Download from a platform page link (server-side yt-dlp → MP4) curl -H "Authorization: Bearer xva_..." \ "https://demo.huntvideos.co/api/v1/download?url=https://vimeo.com/76979871&format=best[height<=1080]&filename=clip.mp4" \ -o clip.mp4 # Or proxy a direct CDN media URL curl -H "Authorization: Bearer xva_..." \ "https://demo.huntvideos.co/api/v1/download?url=https://video.twimg.com/...&filename=tweet.mp4" \ -o tweet.mp4
JavaScript / Node.js
const res = await fetch(
"https://demo.huntvideos.co/api/v1/tweet?url=" + encodeURIComponent(tweetUrl),
{ headers: { Authorization: "Bearer xva_..." } }
);
if (!res.ok) throw new Error(`API ${res.status}: ${await res.text()}`);
const tweet = await res.json();
console.log(tweet.videoVariants[0].url);Python
import requests
r = requests.get(
"https://demo.huntvideos.co/api/v1/tweet",
params={"url": "https://x.com/user/status/123"},
headers={"Authorization": "Bearer xva_..."},
timeout=30,
)
r.raise_for_status()
tweet = r.json()
print(tweet["videoVariants"][0]["url"])PHP
$ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => "https://demo.huntvideos.co/api/v1/tweet?url=" . urlencode($tweetUrl), CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer xva_..."], ]); $response = json_decode(curl_exec($ch), true);
Hata kodları
| Status | Anlamı | Çözüm |
|---|---|---|
400 | Bad Request — eksik/hatalı parametre | url doğru formatta mı? |
401 | Unauthorized — key yok veya geçersiz | Authorization: Bearer xva_... başlığını kontrol et. |
403 | Forbidden — key pasif, süresi dolmuş veya host izinli değil | /profile/api-keys'den durumu gör. |
404 | Tweet bulunamadı (silinmiş ya da korumalı) | Sadece herkese açık tweet'ler kapsam içi. |
429 | Rate limit aşıldı | Tier'ını yükselt ya da pencerenin kapanmasını bekle. |
502 | Upstream hatası — X / Twitter geçici sorun | Birkaç saniye sonra yeniden dene. |
Webhooks
Çok yakında. Toplu thread arşivleme tamamlandığında veya zamanlanmış indirme bittiğinde sana POST callback gönderecek. İlgileniyorsan iletişime geç.
Sürüm notları
- v1.0.0 — Bearer auth, /api/v1/tweet ve /api/v1/download endpoint'leri, tier-based rate limits.