Boss HubBoss HubDocs
Sürüm notlarıDurum
Sağlayıcı API/Free round kampanyaları

Free round kampanyaları

API · Operatör → Boss Hub
POST/v1/freerounds

Oyunculara ücretsiz dönüş veren kampanya oluşturur. Kampanyanın durumunu GET /v1/freerounds/{id} ile sorgular, kullanılmamış dönüşleri DELETE /v1/freerounds/{id} ile iptal edersiniz. Oyuncuları /v1/freerounds/{id}/players ile tek tek eklersiniz, listeler ve iptal edersiniz. promo modülü ve freerounds.write kapsamı gerekir; bu kapsam varsayılan olarak açık değildir, Boss Hub’dan isteyin.

Başlıklar

BaşlıkAçıklama
X-Operator-IdOperatör kimliğiniz
X-TimestampUnix saniye. ±30 sn dışı reddedilir
X-Signaturehex(HMAC_SHA256(secret, ts + "." + METHOD + "." + path?query + "." + body))
X-Request-IdPOST ve DELETE’te zorunlu. Aynı kimlik ve gövde ilk yanıtı döndürür; çift kampanya oluşmaz
X-Api-Keyİsteğe bağlı. Birden çok anahtarınız varsa doğru secret’ı seçer

Gövde parametreleri

namestringzorunlu
Kampanya adı, 2-120 karakter.
gamesstring[]zorunlu
1-50 oyun kodu. Her oyun yayında olmalı, free round desteklemeli ve sağlayıcısına erişiminiz olmalı; değilse GAME_NOT_ELIGIBLE.
spinsintegerzorunlu
Oyuncu başına dönüş sayısı, en az 1, en çok platform sınırı (varsayılan 200).
bet_valuedecimal(18,2)zorunlu
Dönüş başına bahis değeri: sıfırdan büyük, en çok iki ondalık. USD karşılığı platform sınırını (varsayılan 5.00 USD) aşamaz. Sağlayıcı free round bahis değerlerini sabitliyorsa (EGT) bunlardan biri olmalı; değilse BET_NOT_OFFERED ve details.offered geçerli değerleri verir.
currencyISO 4217zorunlu
USD, EUR, TRY. Kur tanımlı olmalı ve her oyun bu para birimini desteklemeli; değilse 422 CURRENCY_NOT_SUPPORTED.
playersstring[]zorunlu
Operatör tarafındaki oyuncu kimlikleri, 1-100.000, her biri en çok 100 karakter; istek gövdesi en çok 2 MB (aşağıda). Tekrarlanan kimlik bir hak olur. Henüz kaydı olmayan oyuncunun hakkı ilk launch’ta bağlanır.
site_idstring
Site kodu, örn. site_mrd01, en çok 64 karakter.
template_idstring | null
Promosyon şablonu, en çok 64 karakter. Etkin bir free round şablonu olmalı; değilse TEMPLATE_INVALID.
starts_atdate-time
Başlangıç zamanı, UTC ve Z ile (2026-12-01T00:00:00Z); +03:00 gibi ofset reddedilir. Verilmezse hemen başlar.
valid_daysinteger
Geçerlilik süresi, gün: 1-365, varsayılan 7.
referencestring | null
Sizin kampanya kimliğiniz, 1-100 karakter: harf, rakam, ., _, :, -. Ortam başına tekildir; aynı referansla yeniden denemek ikinci kampanya açmaz.
Bitiş: Kampanya starts_at + valid_days − 1 gün tarihinin UTC gün sonunda (23:59:59.999Z) biter: 01.12 başlangıç ve 7 gün, 07.12 demektir. Bitince veya iptal edilince campaign.finished webhook’u gider. Bitişi geçmişte kalan kampanya CAMPAIGN_IN_PAST alır.
Sınırlar: Platform sınırları her ortamda geçerlidir. Varsayılanlar: dönüş başı bahis en çok 5.00 USD, oyuncu başı en çok 200 dönüş, hak başına (oyuncu × kampanya) free round kazancı en çok 500 USD, bütçe uyarısı 10.000 USD. Boss Hub bu değerleri değiştirebilir. Sınır aşımı 422 VALIDATION_ERROR ve details.reason ile döner. Kazanç tavanını aşan kazançta yalnız kalan tutar ödenir. Tahmini maliyet (bet_value × spins × oyuncu, USD’ye çevrilmiş) bütçe uyarısını aşarsa kampanya draft ve approval_id ile döner, Sahibiniz portalda onaylayınca açılır.
Büyük oyuncu listesi: İstek gövdesi en çok 2 MB’tır (2.097.152 bayt). 36 karakterlik UUID kimliklerle bu yaklaşık 50.000 oyuncu eder; kısa kimliklerle 100.000 sınırına kadar çıkar. Daha büyük gövde 413 FILE_TOO_LARGE alır ve hiçbir şey yazılmaz: kampanya açılmaz, reference tüketilmez. Büyük kitleyi bölün: ya her parça için ayrı reference ile birkaç kampanya açın (örn. xmas-1, xmas-2), ya da kampanyayı ilk parçayla açıp kalanları POST /v1/freerounds/{id}/players ile istek başına 100 oyuncu ekleyin (hız limitine dikkat edin).
POST /v1/freerounds HTTP/1.1
Host: staging.example.com
Content-Type: application/json
X-Operator-Id: op_meridyen
X-Timestamp: 1762344000
X-Signature: c4e88a…02df
X-Request-Id: req_01HF3R1A

{
  "name": "Aralık Hoş Geldin",
  "site_id": "site_mrd01",
  "games": ["sultans-ember"],
  "spins": 20,
  "bet_value": 0.20,
  "currency": "USD",
  "players": ["u_88213"],
  "starts_at": "2026-12-01T00:00:00Z",
  "valid_days": 7,
  "reference": "crm-dec-welcome-88213"
}
201Kampanya oluşturuldu
{
  "id": "cmp_mrd_aralik",
  "name": "Aralık Hoş Geldin",
  "site_id": "site_mrd01",
  "template_id": null,
  "games": ["sultans-ember"],
  "spins": 20,
  "bet_value": 0.20,
  "currency": "USD",
  "players": ["u_88213"],
  "starts_at": "2026-12-01T00:00:00Z",
  "valid_days": 7,
  "reference": "crm-dec-welcome-88213",
  "status": "scheduled",
  "spins_used": 0,
  "won_total": 0.00
}
422Sınır aşıldı
{
  "code": "VALIDATION_ERROR",
  "message": "The submitted data is invalid.",
  "request_id": "req_01HF3R1B",
  "details": { "reason": "BET_OVER_LIMIT", "max_usd": "5.00" }
}

Kampanya durumu

GET /v1/freerounds/{id} kampanyanın güncel hâlini döndürür. POST ve GET yanıtları, istek gövdesindeki alanlara ek olarak şunları içerir:

AlanTürAçıklama
idstringKampanya kimliği. Callback’lerde campaign_id olarak geçer.
statusstringdraft, scheduled, active, finished, cancelled.
spins_usedintegerKullanılan dönüş sayısı.
won_totaldecimal(18,2)Toplam kazanç, kampanya para biriminde (iptal edilen haklar dahil).
approval_idstringYalnız bütçe uyarısını aşan kampanyada: draft döner, Sahip onayı bu kimlikle izlenir.
already_processedbooleanYalnız aynı reference ve aynı içerikle gelen tekrar isteğinin 200 yanıtında, true.

Tekrar güvenliği

reference gönderirseniz zaman aşımında aynı isteği güvenle yeniden deneyebilirsiniz. Aynı referans ve aynı içerik ilk kampanyayı 200 ve already_processed: true ile döndürür; kampanya bu arada iptal edilmiş olsa da aynı kampanya gelir; approval_id onay hâlâ bekliyorsa döner. İçerik karşılaştırılırken oyun ve oyuncu sırası, tekrarlanan oyuncu ve tutar yazımı (0.5, 0.50) fark etmez. Aynı referans farklı içerikle gelirse 409 REFERENCE_CONFLICT döner, kampanya açılmaz. Referans Test ve Canlı için ayrıdır. Kampanya yazılmadan önce doğrulama hatası alan istek referansı tüketmez. Tek istisna: hiçbir oyuncuya hak verilemezse (PLAYERS_REQUIRED) kampanya draft olarak kalır (reference verdiyseniz onunla); aynı referansla tekrar o taslağı döndürür, referanssız her deneme yeni taslak bırakır. Taslağı DELETE ile iptal edin. X-Request-Id kaydı süreyle silinir, reference silinmez.

200Aynı referans: ilk kampanya
{
  "id": "cmp_mrd_aralik",
  "name": "Aralık Hoş Geldin",
  "site_id": "site_mrd01",
  "template_id": null,
  "games": ["sultans-ember"],
  "spins": 20,
  "bet_value": 0.20,
  "currency": "USD",
  "players": ["u_88213"],
  "starts_at": "2026-12-01T00:00:00Z",
  "valid_days": 7,
  "reference": "crm-dec-welcome-88213",
  "status": "scheduled",
  "spins_used": 0,
  "won_total": 0.00,
  "already_processed": true
}
409Aynı referans, farklı içerik
{
  "code": "REFERENCE_CONFLICT",
  "message": "A campaign with different content was already created with this reference.",
  "request_id": "req_01HF3R1C",
  "details": { "reference": "crm-dec-welcome-88213" }
}

Kampanya iptali

DELETE /v1/freerounds/{id} kampanyayı ve bekleyen veya etkin bütün hakları iptal eder, 204 döndürür, gövde yoktur. Oyuncunun açık turu varsa o turun kazancı yine ödenir. campaign.finished webhook’u status: cancelled ile gider. Kampanya bu sırada başladıysa 409 CAMPAIGN_CHANGED: tekrar deneyin.

DELETE /v1/freerounds/cmp_mrd_aralik HTTP/1.1
Host: staging.example.com
X-Operator-Id: op_meridyen
X-Timestamp: 1762344300
X-Signature: 1fb2d7…6c9a
X-Request-Id: req_01HF3R2C

Oyuncu hakları

Kampanyadaki her oyuncunun kendi hakkı ve durumu vardır. Yalnız active hak dönüş verir; diğer durumdaki hakla gelen free round bahsi Boss Hub’da reddedilir, cüzdanınıza gelmez.

DurumAnlam
pendingKampanya taslak veya planlı; başlayınca active olur
activeDönüş kullanılabilir
usedDönüşler bitti ve oyuncunun açık free round turu kalmadı
expiredHakkın expires_at’i veya kampanyanın bitişi geçti
cancelledOyuncunun hakkı veya kampanyanın tamamı iptal edildi
failedHak yazıldı ama sağlayıcı oyuncuyu reddetti; neden fail_reason’da
  • Kampanya başına oyuncuya tek hak. Aynı istekte tekrarlanan oyuncu tek hak olur. Oyuncuyu yeniden eklemek hata vermez, exists ve mevcut hakkın durumunu döndürür; cancelled, expired veya used hak da yenilenmez. Oyuncuya yeniden dönüş vermek için yeni kampanya açın.
  • Oluştururken atlanan oyuncular: para birimi kampanyanın oyunlarında olmayan veya bahis değeri kendi para biriminde geçersiz kalan oyuncu kampanyaya yazılmaz ve yanıttaki players dizisinde yer almaz; neden döndürülmez. Yanıttaki players’ı isteğinizle karşılaştırın ya da oyuncu başına sonucu görmek için kampanyayı oluşturup oyuncuları POST /v1/freerounds/{id}/players ile ekleyin.

Oyuncu ekleme

POST /v1/freerounds/{id}/players taslak, planlı veya açık kampanyaya oyuncu ekler; istek başına en çok 100 oyuncu. Yanıt 200 ve oyuncu başına sonuçtur: added yeni hak, exists oyuncunun bu kampanyada zaten hakkı var (hak çoğalmaz, status mevcut hakkın durumu), failed hak verilmedi. failed nedenleri: CURRENCY_NOT_SUPPORTED oyuncunun para birimi kampanyanın hiçbir oyununda yok veya kur yok, BET_INVALID dönüş değeri oyuncunun para birimine çevrilince sıfıra iniyor, BET_NOT_OFFERED çevrilen değer sağlayıcının bahis değerlerinden biri değil, PROVIDER_REJECTED: … sağlayıcı oyuncuyu reddetti. Üst alanlar: added bu istekte yazılan yeni hak, failed bu istekte başarısız olan, total kampanyadaki geçerli hak sayısı (iptal ve başarısızlar hariç). Kaydı olan oyuncunun hakkı kendi para birimindedir; henüz kaydı olmayan oyuncununki kampanya para biriminde. Aynı X-Request-Id ilk yanıtı döndürür.

playersstring[]zorunlu
Operatör tarafındaki oyuncu kimlikleri, 1-100. Tekrarlanan kimlik bir kez sayılır.
expires_atdate-time
Bu istekteki hakların bitişi, UTC ve Z ile. Gelecekte olmalı ve kampanya bitişini geçmemeli; verilmezse kampanya bitişi.
POST /v1/freerounds/cmp_mrd_aralik/players HTTP/1.1
Host: staging.example.com
Content-Type: application/json
X-Operator-Id: op_meridyen
X-Timestamp: 1762344600
X-Signature: 7d41a0…b3e2
X-Request-Id: req_01HF3R3D

{
  "players": ["u_90412", "u_88213", "u_77120"],
  "expires_at": "2026-12-05T23:59:59Z"
}
200Oyuncular eklendi
{
  "added": 1,
  "failed": 1,
  "total": 2,
  "items": [
    { "player_id": "u_90412", "result": "added", "status": "pending", "reason": null },
    { "player_id": "u_88213", "result": "exists", "status": "pending", "reason": null },
    { "player_id": "u_77120", "result": "failed", "status": null, "reason": "CURRENCY_NOT_SUPPORTED" }
  ]
}
Bütçe: Planlı veya açık kampanyaya eklemede tahmini maliyet (kampanyadaki oyuncular + istekteki kimlikler) platform bütçe uyarısını aşarsa istek 409 BUDGET_WARNING alır; bu eklemeyi Sahibiniz portalda yapar. Sağlayıcı planlı veya açık kampanyaya oyuncu eklemeyi desteklemiyorsa 409 FREEROUND_ADD_PLAYERS_UNSUPPORTED. Kampanya bu sırada taslaktan açıldıysa 409 CAMPAIGN_CHANGED: tekrar deneyin.

Oyuncu listesi

GET /v1/freerounds/{id}/players kampanyanın haklarını döndürür. Sonraki sayfa için yanıttaki next_cursor değerini cursor olarak gönderin; null ise liste bitti.

statusstring
pending, active, used, expired, cancelled, failed.
player_idstring
Tek oyuncunun hakkı.
cursorstring
Önceki yanıtın next_cursor değeri.
limitinteger
Sayfa boyu: 1-200, varsayılan 50.
AlanTürAçıklama
player_idstringOperatör tarafındaki oyuncu kimliği.
statusstringHakkın durumu, yukarıdaki tablo.
currencyISO 4217Hakkın para birimi: oyuncunun para birimi, kaydı yoksa kampanyanınki.
spins_leftintegerKalan dönüş.
won_totaldecimal(18,2)Bu haktan toplam kazanç, currency biriminde.
expires_atdate-timeHakkın bitişi: kendi tarihi yoksa kampanya bitişi.
cancelled_atdate-time | nullİptal anı.
fail_reasonstring | nullYalnız failed: sağlayıcının nedeni.
GET /v1/freerounds/cmp_mrd_hosgeldin/players?player_id=u_88213 HTTP/1.1
Host: staging.example.com
X-Operator-Id: op_meridyen
X-Timestamp: 1762344700
X-Signature: 0c5e19…94af
200Oyuncu listesi
{
  "items": [
    {
      "player_id": "u_88213",
      "status": "active",
      "currency": "USD",
      "spins_left": 38,
      "won_total": 38.40,
      "expires_at": "2026-11-30T23:59:59.999Z",
      "cancelled_at": null,
      "fail_reason": null
    }
  ],
  "next_cursor": null
}

Tek oyuncu iptali

DELETE /v1/freerounds/{id}/players/{player_id} oyuncunun kullanılmamış dönüşlerini iptal eder ve 204 döndürür. Açık turun kazancı yine ödenir. Yalnız pending ve active hak iptal edilir; diğerleri 409 GRANT_CLOSED alır, details.status hakkın durumudur. Hakkı sağlayıcının yürüttüğü kampanyada iptal sağlayıcıya da iletilir; sağlayıcı tek oyuncu iptalini desteklemiyorsa 409 PROVIDER_CANCEL_UNSUPPORTED döner, kampanyanın tamamını iptal edebilirsiniz.

DELETE /v1/freerounds/cmp_mrd_hosgeldin/players/u_88213 HTTP/1.1
Host: staging.example.com
X-Operator-Id: op_meridyen
X-Timestamp: 1762344800
X-Signature: 5a9d33…e170
X-Request-Id: req_01HF3R4E

Cüzdana etkisi

  • Free round bahsi bet ile gelir: is_freeround: true, campaign_id dolu, amount: 0. Bakiyeyi düşmeyin. Dönüş değeri freeround_bet_value alanındadır.
  • Kazanç normal win ile gelir, bakiyeye ekleyin.
  • Sağlayıcının Boss Hub kampanyası dışında kendi yürüttüğü free round’u da gelir: bahiste ve kazançta is_freeround: true, campaign_id: null; freeround_bet_value ve freeround_grant_id gelmeyebilir; kazanç bahissiz bir turda gelebilir ve Boss Hub kampanya kazanç tavanı uygulamaz. Bkz. Bahissiz kazanç.
  • Bahis OK olunca dönüş hakkı azalır, rollback OK olunca geri gelir. Rollback nakit iade etmez.
  • İptal edilen veya süresi dolan hakla bahis size gelmez: Boss Hub reddeder.

Hata kodları

KodHTTPAnlam
INVALID_SIGNATURE401İmza doğrulanamadı
TIMESTAMP_SKEW401X-Timestamp ±30 sn dışında
IP_NOT_ALLOWED403IP izin listesinde değil
SCOPE_MISSING403freerounds.write kapsamı yok
SCOPE_DENIED403Kampanya anahtarınızın kapsamı dışında; site_id sitelerinizden biri değil veya site anahtarınızın sitesi değil
MODULE_DISABLED403promo modülü kapalı
NOT_FOUND404Kampanya yok veya diğer ortamda; oyuncunun bu kampanyada hakkı yok (tek oyuncu iptali)
REQUEST_ID_CONFLICT409Aynı X-Request-Id, farklı gövde
REQUEST_IN_PROGRESS409Aynı X-Request-Id hâlâ işleniyor
REFERENCE_CONFLICT409Aynı reference, farklı içerik
CAMPAIGN_CLOSED409Kampanya iptali, oyuncu ekleme ve tek oyuncu iptali: kampanya bitmiş veya zaten iptal edilmiş
CAMPAIGN_CHANGED409Kampanya bu sırada durum değiştirdi (başladı veya açıldı); tekrar deneyin
GRANT_CLOSED409Tek oyuncu iptali: hak pending veya active değil
BUDGET_WARNING409Oyuncu ekleme: tahmini maliyet bütçe uyarısını aşıyor
FREEROUND_ADD_PLAYERS_UNSUPPORTED409Oyuncu ekleme: sağlayıcı açık kampanyaya oyuncu eklemiyor
PROVIDER_CANCEL_UNSUPPORTED409Tek oyuncu iptali: sağlayıcı desteklemiyor
VALIDATION_ERROR422Eksik veya geçersiz alan (details.fields) ya da kural ihlali (details.reason: SPINS_OVER_LIMIT, BET_INVALID, BET_OVER_LIMIT, BET_NOT_OFFERED, GAME_NOT_ELIGIBLE, TEMPLATE_INVALID, CAMPAIGN_IN_PAST, PLAYERS_REQUIRED, EXPIRES_INVALID)
INVALID_CURSOR422Oyuncu listesi: cursor önceki yanıttan gelmiyor
CURRENCY_NOT_SUPPORTED422Para birimi için kur yok veya bir oyun desteklemiyor (details.game)
RATE_LIMITED429Hız limiti aşıldı
← Öncekiİşlem akışıSonraki →Jackpot havuzları
Free round kampanyaları · Dokümanlar · Boss Hub