Skip to content
Translated page. The English version is the source of truth.

POST /apiv2/reports/webhooks

Bir URL kaydedin; durumu sürekli sorgulamak yerine bir rapor hazır olduğunda NETTS onu çağıracaktır.

Bu uç noktalar sipariş webhook'larından ayrıdır. Oraya kaydolmak sizi rapor bildirimlerine abone yapmaz ve bunun tersi de geçerlidir. İletim formatı — imza, başlıklar, yeniden deneme davranışı — tamamen aynıdır, bu nedenle biri için yazılmış bir işleyici diğeri için de çalışır.

Uç nokta temel URL'si

https://netts.io/apiv2/reports/webhooks

İstek Başlıkları

BaşlıkGerekliAçıklama
X-API-KEYevetKontrol panelinden alınan API anahtarı
X-Real-IPevetAnahtar beyaz listesinde yer alan bir adres

Birincil ve yedek

Hesap başına en fazla iki uç nokta. primary her şeyi alır. backup yalnızca birincil uç noktaya teslimatta deneme hakları tükendikten sonra kullanılır — ve birincilin değil, kendi gizli anahtarıyla imzalanır.

Kayıt

bash
curl -s -X POST 'https://netts.io/apiv2/reports/webhooks' \
  -H 'X-API-KEY: your-api-key' \
  -H 'X-Real-IP: 203.0.113.10' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://example.com/netts/reports", "role": "primary"}'
json
{
  "status": "success",
  "code": 10000,
  "data": {
    "id": 1,
    "url": "https://example.com/netts/reports",
    "role": "primary",
    "is_active": true,
    "created_at": "2026-09-06 17:05:12+00:00",
    "updated_at": "2026-09-06 17:05:12+00:00",
    "secret": "whsec_<64 hex characters>"
  }
}

Gizli anahtar yalnızca bir kez, burada gösterilir. Bir daha asla döndürülmez — ne liste uç noktası ne de okuma uç noktası tarafından. Aldığınızda kaydedin. Kaybolursa yenisini oluşturun:

bash
curl -s -X POST 'https://netts.io/apiv2/reports/webhooks/1/rotate-secret' \
  -H 'X-API-KEY: your-api-key' -H 'X-Real-IP: 203.0.113.10'

Yenileme işlemi anında yürürlüğe girer ve eski gizli anahtar doğrulamayı durdurur; bu nedenle kesintiye tahammülünüz yoksa önce yeni değeri dağıtın.

Yönetim

YöntemYolEylem
GET/apiv2/reports/webhooksgizli anahtarlar olmadan sizinkileri listeler
GET/apiv2/reports/webhooks/{id}bir tanesini okur
PATCH/apiv2/reports/webhooks/{id}url değiştirir veya is_active: false ile duraklatır
DELETE/apiv2/reports/webhooks/{id}kaldırır

URL genel HTTPS olmalıdır. Geri döngü (loopback), özel ve yerel bağlantı (link-local) adresleri ile URL içindeki kimlik bilgileri reddedilir. Reddedilen her şey gerekçesiyle birlikte 422 olarak döner. Kontrol, her teslimattan hemen önce tekrar çalıştırılır, bu nedenle daha sonra özel bir adrese çözümlenen bir uç nokta bildirim almayı durdurur.

Ne gönderiyoruz

json
{
  "event": "report.ready",
  "delivery_id": 4,
  "order_id": "REPxxxxxxxxxxxx",
  "order_type": "statement",
  "client_request_id": "stmt-2026-09-usdt",
  "status": "done",
  "format": "csv",
  "download_url": "/apiv2/reports/REPxxxxxxxxxxxx/download",
  "expires_at": "2026-10-06 15:48:04+00:00",
  "artifact": { "sha256": "…", "size_bytes": 696 },
  "confirmed_at": "2026-09-06T15:48:04Z"
}
AlanAçıklama
eventreport.ready — işleyiciniz için yönlendirme anahtarı
delivery_idTekilleştirme anahtarı. Ayrıca X-Netts-Delivery başlığı olarak da gönderilir
order_idRaporu sıraya aldığınızda size verilen sipariş numarası
order_typestatement veya balance_at_date
download_urlDosyayı almak için https://netts.io adresine göreli yol
artifact.sha256İndirdiğiniz dosyayı doğrulayabilmeniz için sağlama toplamı
confirmed_atUTC

Tüm zaman damgaları UTC formatındadır.

İmzayı doğrulama

X-Netts-Signature: sha256=<hex>
X-Netts-Timestamp: <unix seconds>
X-Netts-Delivery:  <delivery_id>

İmza, isteği alan uç noktanın gizli anahtarı ile hesaplanan "<timestamp>." + ham gövde üzerinde HMAC-SHA256'dır. Sabit zamanda karşılaştırın ve zaman damgası ±5 dakikalık aralığın dışına düşen her şeyi reddedin.

python
import hmac, hashlib, time

def verify(raw_body: bytes, sig_header: str, ts_header: str, secret: str) -> bool:
    if abs(time.time() - int(ts_header)) > 300:      # anti-replay
        return False
    signed = f"{ts_header}.".encode() + raw_body
    expected = "sha256=" + hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, sig_header)

İsteğin ulaştığı URL'nin gizli anahtarıyla imzalayın: birincil ve yedek farklı gizli anahtarlara sahiptir.

Teslimat en az bir kez yapılır

Düşen bir yanıt yeniden denemeye neden olur, bu nedenle aynı olay iki kez gelebilir.

  1. delivery_id ile tekilleştirin. Yinelenen istek sizin tarafınızda hiçbir işlem yapmamalıdır (no-op).
  2. Harekete geçmeden önce imzayı doğrulayın, sonrasında değil.
  3. Yalnızca olayı depoladıktan sonra 2xx yanıtı verin. Bunun dışındaki her şey veya zaman aşımı bir başarısızlık olarak kabul edilir ve yeniden denenir.

Tek bir uç noktaya yapılan yeniden denemeler 1 dakika, 5 dakika, 15 dakika, 1 saat, 6 saat ve 24 saat aralıklarla gerçekleşir — toplamda altı deneme, 31 saatin biraz üzerinde bir süreye yayılır. Bunlar tükendiğinde ve bir backup kaydettiyseniz, teslimat oraya geçer ve zamanlama yedeğin kendi gizli anahtarıyla baştan başlar. delivery_id süreç boyunca aynı kalır, bu nedenle birincilde başarısız olup yedekte başarılı olan bir olay yine de tek bir olaydır.

Yönlendirmeler takip edilmez.

İstek Limitleri

Tüm istemciler arasında paylaşılan, uç nokta başına saniyede 10 istek.

Hatalar

Kayıt işlemi 201, silme işlemi gövdesiz 204, diğer her şey 200 yanıtı verir.

HTTPAnlamı
401anahtar eksik veya geçersiz ya da kaynak IP beyaz listede değil
404hesabınızda böyle bir uç nokta yok
409istenen rol zaten alınmış — role primary is already taken
422URL reddedildi veya PATCH gövdesi değiştirilecek bir şey içermiyordu
429istek limiti aşıldı

Reddedilen bir URL, gerekçesi açıkça belirtilerek 422 olarak döner; böylece bunu adresi yazan kişiye gösterebilirsiniz:

json
{"status": "error", "code": -4, "msg": "url: Value error, invalid webhook_url: resolved address 127.0.0.1 is not public"}

İfadeler only https:// URLs are allowed, credentials in URL are not allowed ve resolved address <ip> is not public şeklindedir. Sonuncusu kayıt sırasında ve her teslimattan hemen önce tekrar çözümlenir; bu nedenle daha sonra özel bir adrese işaret eden bir alan adı bildirim almayı durdurur.

İlgili