API v1

Dokümantasyon

Tek bir HTTP isteğiyle Cloudflare Turnstile token’ı al. SDK yok, ek kütüphane yok.

GET https://resolver.guru/v1/api

Hızlı başlangıç

  1. 1Konsolu aç ve bir hesap numarası oluştur. Her hesaba hazır bir API anahtarı verilir.
  2. 2Bakiye yükle.
  3. 3Aşağıdaki isteği kendi anahtarınla gönder; cevapta token gelir.
cURL
curl -G "https://resolver.guru/v1/api" \
  --data-urlencode "key=xxxxxxxxxxxx" \
  --data-urlencode "sitekey=0x4AAAAAAA..." \
  --data-urlencode "url=https://example.com/login"

Kimlik doğrulama

Her istekte API anahtarını key parametresiyle, diğer parametrelerle birlikte adresin sonunda gönder. Anahtarlarını konsolun API anahtarları bölümünden oluşturup iptal edebilirsin.

Anahtar adresin bir parçası olduğu için, istek adreslerini kaydeden araçlarda (log, hata izleme) görünebilir. Bu kayıtları paylaşma; anahtarın sızdığını düşünürsen konsoldan iptal edip yenisini oluştur.

Query
https://resolver.guru/v1/api?key=xxxxxxxxxxxx&sitekey=…&url=…

Anahtarını tarayıcıda çalışan koda (frontend) koyma. İstekleri her zaman kendi sunucundan gönder.

Token isteği

İstek GET ile gönderilir; parametreler adresin sonuna sorgu dizesi (query string) olarak eklenir. Değerleri URL-encode etmeyi unutma (örnekteki kütüphaneler bunu kendisi yapar).

ParametreTürZorunluAçıklama
sitekeystringEvetHedef sayfadaki Turnstile widget’ının data-sitekey değeri. Genelde 0x4AAAA… ile başlar.
urlstringEvetWidget’ın bulunduğu sayfanın tam adresi (https://…).
actionstringHayırWidget’ta data-action varsa aynı değer. Yoksa gönderme.
cdatastringHayırWidget’ta data-cdata varsa aynı değer. Yoksa gönderme.
curl -G "https://resolver.guru/v1/api" \
  --data-urlencode "key=xxxxxxxxxxxx" \
  --data-urlencode "sitekey=0x4AAAAAAA..." \
  --data-urlencode "url=https://example.com/login" \
  --data-urlencode "action=login" \
  --data-urlencode "cdata=abc123"

sitekey’i nerede bulurum?

Hedef sayfanın HTML’inde cf-turnstile sınıflı öğeye ya da turnstile.render(…) çağrısına bak:

HTML
<div class="cf-turnstile"
     data-sitekey="0x4AAAAAAA..."   // → sitekey
     data-action="login"            // → action
     data-cdata="abc123"></div>     // → cdata

Cevap

Başarılı cevap 200 döner:

200 OK
{
  "status": "success",
  "token": "0.Rk9aXw3QpL7mT2vB8nYc...",
  "solve_time": 1.21
}
statussuccess ya da error
tokenTurnstile token’ı. Formuna ya da isteğine ekleyeceğin değer.
solve_timeÇözüm süresi (saniye).

Her cevapta kalan bakiyen X-Balance başlığında (USD) gelir.

Hata durumunda status: "error", makinece okunur bir error kodu ve açıklama döner:

402 Payment Required
{
  "status": "error",
  "error": "insufficient_balance",
  "message": "Your balance is too low. Top up in the console."
}

Hata kodları

KodHTTPAnlamıÜcret
missing_api_key401key parametresi yok.Alınmaz
invalid_api_key401Anahtar geçersiz ya da iptal edilmiş.Alınmaz
sitekey_required400sitekey gönderilmedi.Alınmaz
invalid_url400url tam bir http(s) adresi değil.Alınmaz
insufficient_balance402Bakiye yetersiz. Konsoldan yükle.Alınmaz
too_many_concurrent429Hesabında aynı anda çok fazla istek var. Kısa süre sonra tekrar dene.Alınmaz
solve_failed422Bu deneme çözülemedi. Tekrar denenebilir.Alınmaz
timeout504Çözüm çok uzun sürdü. Tekrar denenebilir.Alınmaz
solver_unavailable504Servis geçici olarak ulaşılamıyor.Alınmaz
solver_not_configured503Servis geçici olarak kullanılamıyor.Alınmaz

Örnekler

Gerçek anahtarını konsoldan kopyalayıp xxxxxxxxxxxx yerine yaz.

import requests

def solve(sitekey, url, action=None, cdata=None):
    params = {"key": "xxxxxxxxxxxx", "sitekey": sitekey, "url": url}
    if action: params["action"] = action
    if cdata: params["cdata"] = cdata

    res = requests.get(
        "https://resolver.guru/v1/api",
        params=params,
        timeout=100,
    )
    data = res.json()
    if data["status"] != "success":
        raise RuntimeError(data["error"])
    return data["token"]

token = solve("0x4AAAAAAA...", "https://example.com/login")

Token’ı kullanma

Token’ı, hedef sitenin formunda Turnstile’ın gönderdiği alana koy. Varsayılan alan adı cf-turnstile-response’dur.

Turnstile token’ları yaklaşık 300 saniye geçerlidir ve yalnızca bir kez kullanılabilir. Token’ı aldıktan hemen sonra kullan; her gönderim için yeni token iste.

Ücret ve limitler

  • Fiyat: 1.000 token başı $0.30 (token başı $0.00030). Abonelik yok.
  • Sadece başarılı çözümler ücretlendirilir. Hata dönen isteklerde bakiyenden bir şey düşmez.
  • Aynı anda hesap başına en çok 20 istek işlenir; fazlası 429 döner.
  • Bir çözüm en fazla 90 saniye sürebilir. İstemci tarafında zaman aşımını en az 100 saniye yap.
  • solve_failed, timeout ve 429 için birkaç saniye bekleyip 2–3 kez yeniden denemek yeterlidir.
Takıldığın bir yer mi var?