Vertical Viral

API Referansı

Vertical Viral API, tespit edilmekten tamamen kaçınmak için tasarlanmış başsız (headless) bir mimaridir. Asenkron çalışır: hedefinizi gönderirsiniz ve veri çıkarımı tamamen güvenli bir şekilde sonuçlandığında webhook aracılığıyla sunucularınıza POST ederiz.

Kimlik Doğrulama

Tüm API istekleri bir Bearer token kullanılarak doğrulanmalıdır. Gizli API anahtarınızı oluşturabileceğiniz yer: Geliştirici Paneli.

Gizli anahtarlarınızı asla paylaşmayın. Onları bir kasada saklayın. GitHub'a göndermeyin veya istemci tarafı koduna maruz bırakmayın (örneğin React veya Next.js public değişkenleri).

Authorization Başlığı
curl -X POST https://verticalviral.io/api/scrape/reelsanalyzer \
  -H "Authorization: Bearer vv_live_xt789..." \
  -H "Content-Type: application/json"

Instagram Reels Analyzer

Proxy ağımızda asenkron bir görünmez (stealth) oturum başlatır.

POSThttps://verticalviral.io/api/scrape/reelsanalyzer

İstek Gövdesi (Body)

target_usernamestring · required
Arama yapılacak tam Instagram kullanıcı adı (başında @ işareti olmadan). Örnek: nike
webhook_urlstring · required
Tamamlandığında veya başarısız olduğunda nihai JSON payload'unu POST edeceğimiz HTTPS sunucu uç noktanız. Bir JSON gövdesini kabul etmelidir.
depthinteger · optional
Taranacak Reels sayısı. Varsayılan 30'dur. Maksimum 150. Görünmezliği korumak için derin taramalar daha uzun sürer.
cURL Example
curl -X POST https://verticalviral.io/api/scrape/reelsanalyzer \
  -H "Authorization: Bearer " \
  -H "Content-Type: application/json" \
  -d '{
    "target_username": "mosbius",
    "webhook_url": "https://your-server.com/webhooks/vv",
    "depth": 50
  }'

Eşzamanlı Yanıt (200 OK)

Anlık yanıt görevin tespit edilemez kuyruğa başarıyla eklendiğini onaylar. Webhook tetiklendiğinde ilişkilendirmek için job_id'yi kaydetmelisiniz.

Response
{
  "status": "queued",
  "job_id": "job_8f2b3c4d5e",
  "message": "Extraction started. Data will be sent to your webhook."
}

Instagram Profile Scraper

Collects comprehensive target profile information (subscribers, business flag, public emails, and bio context).

POSThttps://verticalviral.io/api/scrape/profilescraper

İstek Gövdesi (Body)

target_usernamestring · required
The exact Instagram handle to analyze without the @ symbol.
webhook_urlstring · required
Tamamlandığında veya başarısız olduğunda nihai JSON payload'unu POST edeceğimiz HTTPS sunucu uç noktanız. Bir JSON gövdesini kabul etmelidir.

Instagram Comment Scraper

Parses up to 500 top-level comments and replies directly from an Instagram Post URL.

POSThttps://verticalviral.io/api/scrape/commentscraper

İstek Gövdesi (Body)

target_urlstring · required
The absolute URL of the Instagram Reel or Post to extract comments from.
webhook_urlstring · required
Tamamlandığında veya başarısız olduğunda nihai JSON payload'unu POST edeceğimiz HTTPS sunucu uç noktanız. Bir JSON gövdesini kabul etmelidir.

Instagram Media Downloader

Resolves a public post, reel or carousel to its original files and returns a signed download link for every item. This endpoint answers the request itself rather than calling a webhook, because a lookup takes seconds: there is no job_id and nothing to poll. The links point at our own infrastructure, so the media never passes through a third party, and each one serves the file with a Content-Disposition attachment header.

POSThttps://verticalviral.io/api/scrape/downloader

İstek Gövdesi (Body)

target_urlstring · required
The absolute URL of a public Instagram post, reel or carousel. Any slide's link works for a carousel. Private accounts and stories are not reachable.
test_modeboolean · optional
Runs the lookup without spending a credit, for wiring up an integration.

Response

items[]array
One entry per media item, in the order the slides were posted. Each carries type, width, height, ext, a signed url and a thumbnail. Videos come back as a single progressive MP4 with audio, never a silent video-only stream.
download_allstring | null
A single link that streams the whole gallery as a zip. Null for a post with one item.
expires_atunix seconds
When the signed links stop working, six hours after the call. Fetch the files before then, or call the endpoint again for fresh links.

Webhook Teslimatı

Tarama bittiğinde (genellikle 20-30 saniye), sunucularımız belirttiğiniz webhook_url'sine bir HTTP POST isteği atacaktır.

Payload Anahtar Alanları

status"completed" | "failed"
Eğer başarısız olursa, 'data' bloğu yerine bir error_message (hata_mesajı) dizgesi dahil edilir.
magnetism_scorefloat (0.0 - 10.0)
Kullanıcının varsayılan değerleri üzerindeki izlenme hızı ve etkileşim oranlarına dayalı olan, ilgili Reel için tescilli performans endeksimiz.
outlier_statusboolean
Eğer tekil bir Reel, profilin hesaplanan performans ortalamasının 2 katından daha fazla performans gösterirse 'true' olarak değerlendirilir.
Webhook POST Body Example
{
  "id": "job_8f2b3c4d5e",
  "status": "completed",
  "target": "mosbius",
  "data": {
    "profile_stats": {
      "followers": 145200,
      "extracted_emails": ["hello@mosbius.com"]
    },
    "reels": [
      {
        "shortcode": "C9Z8A7X",
        "views": 1245000,
        "likes": 89000,
        "magnetism_score": 9.8,
        "outlier_status": true
      }
    ]
  }
}

Hatalar ve Limitler

İstek durumunu belirten standart HTTP ağ yanıtları.

200OK - İstek başarıyla kuyruğa eklendi.
400Bad Request - Eksik zorunlu parametre veya geçersiz webhook URL.
401Unauthorized - Geçersiz veya eksik Bearer token.
429Too Many Requests - Oran sınırı aşıldı. (120 istek/dk).
Görünmezlik için üretildi. Ödemeler Lemon Squeezy güvencesinde.