Genel bakış
Katıl Bi API'si ile kendi sitende aldığın siparişleri otomatik olarak Katıl Bi'ye iletebilirsin: fiyatı sor, siparişi ver (tutar reklam bakiyenden bloke edilir), durumunu takip et, kanıtları ve kanıt görsellerini çek. Temel URL: https://katilbi.com/api/v1. Tüm yanıtlar JSON, tutarlar kuruş cinsindendir (1 ₺ = 100).
1. FiyatPOST /quoteTür + adet → toplam tutar, bakiye yeterli mi2. SiparişPOST /tasksKendi sipariş numaranı external_ref olarak gönder3. TakipGET /tasks?external_ref=…Durum, dolan adet, ilerleme yüzdesi4. KanıtlarGET /tasks/:id/submissionsKanıt görselleri (küçük / büyük / orijinal)Kanıtlarda görevi yapan kullanıcının kimliği paylaşılmaz; kanıtlar Kanıt #numara ile anılır.
Erişim izni
API erişimi başvuruyla açılır. Görev veren panelindeki API erişimi bölümünden ya da API entegrasyonu sayfasından talep gönder; Katıl Bi ekibi onaylayınca aynı bölümde anahtarını oluşturur ve webhook adresini tanımlarsın. Erişim kapatılırsa mevcut anahtarlar 403 api_disabled döner.
Kimlik doğrulama
Tüm istekler HTTPS üzerinden yapılır ve anahtarı Authorization: Bearer grv_live_… başlığında bekler. Anahtarı yalnızca sunucu tarafında sakla. grv_test_ ile başlayan test anahtarları sipariş açmaz.
curl https://katilbi.com/api/v1/balance \
-H "Authorization: Bearer grv_live_8f21..."Hata kodları & limitler
Anahtar başına dakikada 120 istek; aşıldığında 429 ve Retry-After başlığı döner. Hatalarda gövde {"message": "…", "code": "…"} biçimindedir.
401—Anahtar yok, geçersiz ya da iptal edilmiş403api_disabledHesapta API erişimi kapalı403platform_reviewKanıt kararını Katıl Bi ekibi veriyor (onay/red yapılamaz)404—Kayıt yok ya da senin değil422insufficient_balanceReklam bakiyesi siparişe yetmiyor422type_unavailable · order_failedTür sipariş için kapalı ya da sipariş açılamadı422(alan hataları)Doğrulama hatası: errors nesnesinde alan bazlı mesajlarSMM API (tek uç)
SMM panelleri (PerfectPanel ve türevleri) Katıl Bi'yi sağlayıcı olarak ekleyebilir. Panelin beklediği standart protokol desteklenir: tek uç, application/x-www-form-urlencoded gövde, key + action. Yukarıdaki REST uçlarından ayrıdır, Bearer başlığı kullanılmaz.
API URLhttps://katilbi.com/api/v2/api/v1 de aynı uca bakarAPI Keygrv_live_…Panel ayarındaki "API Key" alanınaPara birimiTRYrate = 1000 adedin fiyatıDesteklenen action değerleri: services · add · status · balance · cancel. Bir service Katıl Bi görev tipine, bir order Katıl Bi görevine karşılık gelir. Sipariş açılınca tutar reklam bakiyesinden bloke edilir ve görev yönetici onayına düşer (durum: Pending).
curl -X POST https://katilbi.com/api/v2 \ -d "key=grv_live_8f21..." \ -d "action=add" \ -d "service=14" \ -d "link=https://instagram.com/hesabim" \ -d "quantity=100" // {"order": 1042}
services—service, name, type, category, rate, min, maxaddservice, link, quantity, commentsorderstatusorder ya da orders (virgüllü)charge, start_count, status, remains, currencybalance—balance, currencycancelordersİptal talebi açılır, yönetici karar verirDurum karşılıkları: Pending (onay bekliyor) · In progress (yayında) · Completed · Partial (kısmen tamamlanıp iptal edildi) · Canceled. Hatalar standart biçimdedir: HTTP 200 + {"error": "..."}. refill desteklenmez; Katıl Bi'de kaldırılan çalışma kontenjan yeniden açılarak telafi edilir.
GET /task-types
Sipariş verilebilen görev türleri: slug, name, category, unit_price (kuruş), min_quantity (bu türde verilebilecek en az adet), duration.
[ { "slug": "google-maps-yorum", "name": "Google Maps: Yorum", "unit_price": 1400 } ]POST /quote
Sipariş vermeden önce tutarı ve bakiyenin yetip yetmediğini hesaplar. Gövde: type, quantity. Adet türün min_quantity değerinin altındaysa 422 below_min_quantity döner (aynı kural POST /tasks için de geçerlidir). Kademeli adet indirimi otomatik uygulanır.
{ "unit_price": 1400, "subtotal": 70000, "discount": 3500, "total": 66500, "ad_balance": 150000, "enough_balance": true }POST /tasks
Sipariş verir. Tutar reklam bakiyenden bloke edilir, sipariş Katıl Bi ekibinin onayına gider (pending_approval) ve onaylanınca yayına alınır. Kullanılmayan tutar iptal ya da tamamlanmada bakiyene iade edilir.
typestringGörev türü slug'ı (GET /task-types)titlestringKullanıcıya görünen başlık (5–120)quantityintegerKaç kişi yapsın (1–10.000)external_refstring?Kendi sipariş numaran. Aynı numara tekrar gönderilirse yeni sipariş açılmaz; ilk sipariş 200 ve idempotent_replay:true ile döner — ağ hatasında güvenle tekrar deneyebilirsinurlstring?Hedef bağlantıdescriptionstring?Açıklamastepsstring[]?Adım listesi (en fazla 10)proof_instructionsstring?Kanıt olarak ne yüklenmelitargetingobject?{os:["ios","android"], age_min, age_max, cities:[], min_level}curl -X POST https://katilbi.com/api/v1/tasks \ -H "Authorization: Bearer grv_live_..." -H "Content-Type: application/json" \ -d '{"type":"google-maps-yorum","title":"Kafe yorumu","quantity":50,"external_ref":"SIP-10231"}'
{ "id": 1838, "external_ref": "SIP-10231", "status": "pending_approval", "quantity": 50, "filled": 0, "progress": 0, "budget_total": 66500 }GET /tasks · GET /tasks/:id
Siparişlerini sayfalı listeler (?status=active&external_ref=SIP-10231&page=2&per_page=50) ya da tek siparişi döner.
statusenumpending_approval · active · paused · completed · rejected · cancelledstatus_labelstringTürkçe durumfilled / quantityintegerOnaylanan iş / hedef adetprogressintegerTamamlanma yüzdesi (0–100)pending · in_progress · rejectedintegerİncelemede kanıt · yapılmakta olan · reddedilenbudget_total / spent / leftintegerKuruş: toplam / harcanan / kalancancel_requestedbooleanİptal talebin karar bekliyorPOST /tasks/:id/status
Gövde action: pause, resume, cancel (iptal talebi oluşturur; Katıl Bi ekibi onaylayınca kalan tutar bakiyene iade edilir, isteğe bağlı reason), submit (taslağı onaya gönder).
GET /tasks/:id/submissions
Bir siparişin kanıtları, en yeniden eskiye (?status=approved). Görsel adresleri üç boyutta gelir:
proof_nostring"Kanıt #5821"statusenumpending · approved · rejectedfiles[].thumburlKüçük önizleme (480px)files[].urlurlİnceleme boyu (1280px)files[].originalurlOrijinal görselanswersarray?Anket görevlerinde cevaplarreject_reasonstring?Reddedildiyse nedeni{ "data": [ { "id": 5821, "proof_no": "Kanıt #5821", "external_ref": "SIP-10231", "status": "approved",
"files": [ { "thumb": "https://…", "url": "https://…", "original": "https://…" } ] } ],
"meta": { "page": 1, "last_page": 3, "total": 61 } }GET /submissions
Tüm siparişlerindeki kanıtlar: ?task_id=1838&status=pending&page=1.
GET /submissions/:id
Tek bir kanıtı döner (alanlar yukarıdakiyle aynı).
POST /submissions/:id/approve · reject
Yalnızca kanıt incelemesini kendin yaptığın siparişlerde kullanılır. Varsayılan olarak kanıtları Katıl Bi ekibi inceler; bu durumda 403 platform_review döner. Red için gövdede reason ve isteğe bağlı allow_retry.
GET /balance
{ "ad_balance": 53125, "locked_ad_balance": 290875, "currency": "TRY" }ad_balance sipariş için kullanılabilir bakiye, locked_ad_balance yayındaki siparişlere bloke edilmiş tutardır.
Olay tipleri
Panelden webhook adresi tanımladığında aşağıdaki olaylar JSON POST olarak gönderilir; gövde {event, created_at, data}. Olay geldiğinde ayrıntıyı ilgili uç noktadan çek.
task.approvedSipariş yayına alındıtask_id, statustask.rejectedSipariş reddedildi (tutar iade edildi)task_id, reasonsubmission.createdYeni kanıt geldisubmission_id, task_idtask.completedHedef adet tamamlandıtask_idİmza doğrulama
Her istek X-Gorevle-Signature başlığı taşır: ham gövdenin webhook gizli anahtarınla HMAC-SHA256 özeti (hex). Karşılaştırmayı sabit zamanlı yap.
$expected = hash_hmac('sha256', $rawBody, $webhookSecret); if (! hash_equals($expected, $_SERVER['HTTP_X_GOREVLE_SIGNATURE'] ?? '')) { http_response_code(401); exit; }