विषय-सूची
1. प्रमाणीकरण
बेस URL:https://sladu.net
API Bearer टोकन (Laravel Sanctum) इस्तेमाल करता है। टोकन पाएँ:
POST /api/auth/token
Content-Type: application/json
{ "email": "you@example.com", "password": "your-password" }
→ 200 OK
{ "token": "1|abc...xyz", "user": { "id": 42, "role": "advertiser" } }
आगे के सभी अनुरोध:
Authorization: Bearer 1|abc...xyz Accept: application/json
2. कैंपेन (advertiser)
कैंपेन की सूची
GET /api/adv/campaigns
→ 200 OK
{
"campaigns": [
{
"id": 7, "name": "Casino RU CPM",
"vertical": "gambling", "format": "native",
"bid_type": "cpm", "bid_micro_cents": 200000,
"status": "active",
"daily_budget_cents": 5000,
"daily_spent_cents": 1234,
"created_at": "2026-06-15T12:00:00Z"
}
]
}
कैंपेन बनाएँ
POST /api/adv/campaigns
{
"name": "Casino RU CPM",
"vertical": "gambling",
"format": "native",
"bid_type": "cpm",
"bid_usd": 2.0,
"daily_budget_usd": 50,
"geo_include": ["ru","ua","kz"],
"languages": ["ru"]
}
→ 201 Created
{ "id": 8, "name": "Casino RU CPM", "status": "draft", ... }
सक्रिय / रोकें
POST /api/adv/campaigns/{id}/activate
POST /api/adv/campaigns/{id}/pause
3. क्रिएटिव
क्रिएटिव जोड़ें
POST /api/adv/campaigns/{campaign_id}/creatives
Content-Type: multipart/form-data
title=Получи $50 бонус
body=Регистрация за 1 минуту...
landing_url=https://your-offer.com/?sub1={click_id}
image=@banner.jpg # файл, для не-video
video_url=https://cdn.../ad.mp4 # для video / floating_video
cta_text=Зарегистрироваться
orientation=vertical # для floating_video
→ 201 Created
{
"id": 42, "status": "pending_moderation",
"tracking_token": "tt_video_xyz",
"moderation_eta_seconds": 120
}
AI शीर्षक जनरेशन (Claude)
POST /api/adv/campaigns/{id}/ai-generate
{
"offer": "Казино с бонусом 5000₽ на первый депозит",
"cta": "Зарегистрироваться",
"geo": "RU", "lang": "ru"
}
→ 200 OK
{
"variants": [
{ "title": "...", "body": "...", "hook_type": "fear" },
{ "title": "...", "body": "...", "hook_type": "curiosity" },
... (8 шт)
],
"image_prompts": [
{ "prompt": "...", "style": "photoreal" },
... (4 шт)
],
"usage": { "input_tokens": 350, "output_tokens": 1200 }
}
HeyGen AI वीडियो
POST /api/adv/heygen/generate
{
"campaign_id": 7,
"avatar_id": "Anna_public_3_20240108",
"voice_id": "...",
"script": "Привет! 👋 Если ты ищешь...",
"language": "ru",
"orientation": "vertical"
}
→ 200 OK
{ "ok": true, "job_id": 123, "status": "processing", "cost_cents": 100 }
GET /api/adv/heygen/status/{job_id}
→ 200 OK
{ "status": "completed", "video_url": "https://...", "duration_sec": 18 }
4. साइटें (publisher)
साइट जोड़ें
POST /api/pub/sites
{
"domain": "example.com",
"category": "adult_video", # см. /pub/sites/create - 29 категорий
"language": "ru",
"traffic_estimate_daily": 50000
}
→ 201 Created
{
"id": 42,
"domain": "example.com",
"verification_code": "SLADU-XYZ123ABC",
"status": "draft"
}
स्वामित्व जाँचें
POST /api/pub/sites/{id}/verify
→ 200 OK
{ "ok": true, "method": "meta", "status": "pending_review" }
# Если не нашли код - 422:
{ "ok": false, "error": "Не нашли verification code на странице..." }
5. ब्लॉक (publisher)
ब्लॉक बनाएँ
POST /api/pub/zones
{
"site_id": 42,
"name": "Главная боковая",
"format": "floating_video",
"fv_corner": "br", # br/bl/tr/tl
"fv_delay_sec": 3,
"fv_freq_cap_hours": 6,
"banner_width": 320,
"banner_height": 568
}
→ 201 Created
{
"id": 100,
"subid": "abc12345",
"widget_url": "https://sladu.net/w/abc12345.js",
"vast_url": "https://sladu.net/vast/abc12345.xml", # только для video
"status": "active"
}
6. आँकड़े
GET /api/adv/stats?from=2026-06-01&to=2026-06-23&group_by=day,campaign
→ 200 OK
{
"rows": [
{
"date": "2026-06-23", "campaign_id": 7,
"impressions": 12500, "clicks": 142, "ctr": 1.14,
"spent_cents": 2500, "conversions": 8,
"ecpa_cents": 312
},
...
]
}
उपलब्ध ग्रुपिंग:day, hour, campaign, creative, geo, device, site, zone.
7. S2S पोस्टबैक - इनकमिंग (आपके ट्रैकर से हमारी ओर)
जब आपके ट्रैकर (Voluum, BeMob, RedTrack, Keitaro) में कन्वर्ज़न दर्ज हो - यह URL मैक्रो के साथ भेजें:
POST https://sladu.net/postback/in
secret=ABC123&click_id={click_id}&payout=500&status=approved&txid={tx_id}
पैरामीटर:
secret- से/cabinet/profile → «Postback secret»click_id- वह UUID जो हमने भेजा थाlanding_urlमें मैक्रो के ज़रिए{click_id}payout- कन्वर्ज़न राशिसेंट में (500 = $5)status-approved/pending/rejectedtxid- ट्रांज़ैक्शन का यूनिक ID (डुप्लिकेट हटाना)sig(अनिवार्य) - HMAC हस्ताक्षर
HMAC हस्ताक्षर (नकली अनुरोधों से सुरक्षा)
फ़ॉर्मूला:
payload = "{click_id}|{payout}|{status}|{txid}"
sig = hash_hmac('sha256', payload, secret)
उदाहरण (PHP):
$secret = 'ABC123';
$payload = $clickId . '|' . $payout . '|' . $status . '|' . $txid;
$sig = hash_hmac('sha256', $payload, $secret);
// POST, подпись обязательна
$body = http_build_query([
'secret' => $secret, 'click_id' => $clickId, 'payout' => $payout,
'status' => $status, 'txid' => $txid, 'sig' => $sig,
]);
$ch = curl_init('https://sladu.net/postback/in');
// Секрет и подпись можно передать заголовками — тогда они не попадут в логи:
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-Sladu-Secret: ' . $secret,
'X-Sladu-Signature: ' . $sig,
]);
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true]);
$response = curl_exec($ch);
सही हस्ताक्षर के बिना अनुरोध अस्वीकृत होता है (401)। हस्ताक्षर सीक्रेट की जगह नहीं लेता: वह केवल विज्ञापनदाता की पहचान करता है।
8. S2S पोस्टबैक - आउटगोइंग (हमारी ओर से आप तक)
में/cabinet/profileURL टेम्पलेट दें, जैसे:
https://your-tracker.com/postback?cid={click_id}&payout={payout_cents}&status={status}&geo={geo}&device={device}
उपलब्ध मैक्रो:
{click_id}- क्लिक का UUID{payout_cents}- कन्वर्ज़न राशि{status}- approved/pending/rejected{geo}- देश का ISO कोड{device}- desktop/mobile/tablet{os},{browser},{vertical},{campaign_id}
पोस्टबैक retry लॉजिक के साथ भेजा जाता है: 5 प्रयास तक exponential backoff (5s, 30s, 5min, 30min, 2h)। सभी विफल रहें तो कन्वर्ज़न चिह्नित होता हैpostback_failed, हम अपने मेट्रिक्स में गिनना जारी रखते हैं।
9. OpenRTB 2.5 (DSP पार्टनर के लिए)
Sladu बाहरी DSP के लिएSSPके रूप में काम करता है। हर इम्प्रेशन - नीलामी। अगर आप अपना DSP हमारे इम्प्रेशन से जोड़ना चाहते हैं - यह endpoint है:
POST https://sladu.net/openrtb/bid
Content-Type: application/json
x-openrtb-version: 2.5
{
"id": "bid-request-uuid",
"imp": [{
"id": "1",
"bidfloor": 0.5,
"banner": { "w": 300, "h": 250 },
...
}],
"site": { "domain": "publisher.com", "cat": ["IAB7"] },
"device": { "ua": "...", "ip": "1.2.3.4", "geo": { "country": "RU" } },
"user": { "id": "hashed-cookie-id" }
}
← 200 OK
{
"id": "bid-request-uuid",
"seatbid": [{
"bid": [{
"id": "1",
"impid": "1",
"price": 1.5,
"adm": "...creative HTML...",
"nurl": "https://your-dsp/win-notify?...",
"crid": "creative-id"
}]
}]
}
नीलामी का टाइम-आउट - 200ms। QPS सीमा व्यक्तिगत है (डिफ़ॉल्ट 100 req/sec, इंटीग्रेशन टेस्ट पास करने के बाद बढ़ाते हैं)।
जोड़ने के लिए - लिखेंdsp@sladu.net, हम IP whitelist और टेस्ट endpoint देंगे।
10. Widget endpoints (डेवलपर्स के लिए)
ये वे endpoints हैं जिन्हें पब्लिशर साइटों पर हमारा JS विजेट कॉल करता है। कस्टम क्लाइंट बनाना हो तो ज़रूरत पड़ेगी:
GET /w/{subid}.js- विजेट खुद (JavaScript)GET /imp?z={subid}&fp={fingerprint}⊥={signals}- इम्प्रेशन अनुरोध, JSON में क्रिएटिव लौटाता हैGET /c/{impression_id}/{tracking_token}?ttc=&x=&y=&focus=&fp=⊥=- क्लिक ट्रैकिंग, लैंडिंग पर रीडायरेक्टGET /vast/{subid}.xml- video फ़ॉर्मेट के लिए VAST 4.0 XMLPOST /push/subscribe- web-push सब्सक्रिप्शनGET /openrtb/imptracker/{imp_id}- VAST impression pixel
11. VAST 4.0
VAST की पूरी डॉक्युमेंटेशन -/docs/vast। संक्षेप में: हर वीडियो ब्लॉक के लिए ऐसा URL होता हैhttps://sladu.net/vast/{subid}.xml, जिसे JW Player, video.js, IMA SDK और अन्य समझते हैं।
12. Rate limits और त्रुटियाँ
Rate limits
- API सामान्य:60 req/minप्रति टोकन
- AI क्रिएटिव जनरेशन:30 सेकंड में 1(Claude महंगा है)
- HeyGen generation: 5 सेकंड में 1प्रति उपयोगकर्ता
- OpenRTB /bid: व्यक्तिगत, देखेंधारा 9
सीमा पार - HTTP 429 + हेडरRetry-Afterसेकंड में।
उत्तर कोड
200 OK- सब ठीक201 Created- रिसोर्स बन गया400 Bad Request- वैलिडेशन त्रुटि, बॉडी में{"errors": {...}}401 Unauthorized- टोकन अमान्य / अनुपस्थित402 Payment Required- पैसा खत्म (AI ऑपरेशन के लिए)403 Forbidden- अधिकार नहीं (दूसरे का रिसोर्स)404 Not Found- रिसोर्स मौजूद नहीं429 Too Many Requests- rate limit500 Internal Server Error- हमारी त्रुटि, सपोर्ट को लिखें
API पर सवाल - Telegram में @sladu_supportयाapi@sladu.netपर। टेस्ट स्टैंड / sandbox -sandbox.sladu.net (अनुरोध पर)।