Skip to content

Webhooks API ​

Webhooks, kimlik bilgilerinize bir şey olduğunda — biri verildiğinde, teslim edildiğinde, iptal edildiğinde veya görüntülendiğinde — uygulamanızı gerçek zamanlı olarak bilgilendirir. API'yi sürekli yoklamak yerine bir HTTPS uç noktası kaydedersiniz ve badges.ninja, abone olduğunuz her olay için ona imzalı bir POST gönderir.

Tüm yönetim uç noktaları X-Api-Key başlığı aracılığıyla kimlik doğrulaması gerektirir. Bkz. Kimlik Doğrulama. Uç nokta oluşturmak veya silmek write kapsamına sahip bir anahtar gerektirir; listeleme read gerektirir. Bkz. API Anahtarları.

Bir Uç Nokta Kaydetme ​

POST /webhooks

Parametreler ​

ParametreTürZorunluAçıklama
urlstringEvetHTTPS uç noktanız. https:// ile başlamalıdır.
eventsstring[]HayırAbone olunacak olay türleri. Tüm olayları almak için atlayın veya ["*"] geçin.

Örnek ​

bash
curl -X POST https://api.badges.ninja/webhooks \
  -H "X-Api-Key: bws_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/hooks/badges",
    "events": ["credential.issued", "credential.delivered"]
  }'

Yanıt ​

201 Created. İmzalama gizli anahtarı yalnızca bir kez döndürülür — şimdi saklayın; onu bir daha alamazsınız.

json
{
  "id": "e4b19ff5-063d-4799-bd75-d03641be624f",
  "url": "https://example.com/hooks/badges",
  "events": ["credential.issued", "credential.delivered"],
  "secret": "2be6d335682c1658242fde3a523fd8a2493bab8c"
}

Uç Noktaları Listeleme ​

GET /webhooks

Kayıtlı uç noktalarınızı döndürür. İmzalama gizli anahtarları asla dahil edilmez.

json
{
  "webhooks": [
    {
      "id": "e4b19ff5-063d-4799-bd75-d03641be624f",
      "url": "https://example.com/hooks/badges",
      "events": ["credential.issued", "credential.delivered"],
      "active": true,
      "failureCount": 0,
      "createdAt": 1787685415083,
      "lastStatus": 200,
      "lastDeliveryAt": 1787685480777
    }
  ]
}

Bir Uç Noktayı Silme ​

DELETE /webhooks/{id}
bash
curl -X DELETE https://api.badges.ninja/webhooks/e4b19ff5-063d-4799-bd75-d03641be624f \
  -H "X-Api-Key: bws_your_api_key_here"

Uç noktaya teslimatlar hemen durur.

Olay Türleri ​

OlayŞu durumda tetiklenir…
credential.issuedBir alıcıya bir kimlik bilgisi verilir.
credential.deliveredBir kimlik bilgisinin bildirim e-postası alıcıya gönderilir (tekli veya toplu).
credential.revokedBir kimlik bilgisi iptal edilir.
credential.viewedBir alıcının herkese açık kimlik bilgisi sayfası ilk kez görüntülenir.

Teslimat Yükü ​

Her teslimat, şu şekle sahip bir JSON gövdesiyle gönderilen bir POST'tur:

json
{
  "id": "b1c2d3e4-...",
  "type": "credential.issued",
  "createdAt": 1787685415083,
  "data": { }
}
AlanAçıklama
idBenzersiz teslimat kimliği (yinelenenleri elemek için kullanın).
typeOlay türü.
createdAtOlay zaman damgası (epoch milisaniye).
dataOlaya özgü yük (aşağıya bakın).

Olay türüne göre data ​

credential.issued

json
{
  "awardId": "https://api.badges.ninja/certify-badge/award/<guid>",
  "badgeId": "https://api.badges.ninja/certify-badge/badge/<guid>",
  "badgeName": "Advanced Certification",
  "recipient": { "email": "jane@example.com", "name": "Jane Doe" },
  "issuedOn": "2026-08-25",
  "expires": null
}

credential.delivered

json
{
  "awardId": "https://api.badges.ninja/certify-badge/award/<guid>",
  "recipient": { "email": "jane@example.com", "name": "Jane Doe" },
  "badgeName": "Advanced Certification"
}

credential.revoked

json
{ "awardId": "https://api.badges.ninja/certify-badge/award/<guid>", "reason": "Issued in error" }

credential.viewed

json
{
  "awardId": "https://api.badges.ninja/certify-badge/award/<guid>",
  "recipient": { "email": "jane@example.com", "name": "Jane Doe" }
}

İstek Başlıkları ​

Her teslimat şu başlıkları taşır:

BaşlıkAçıklama
X-Bws-EventOlay türü (gövdedeki type ile aynı).
X-Bws-DeliveryTeslimat kimliği (gövdedeki id ile aynı).
X-Bws-Signaturesha256= ve ardından ham istek gövdesinin, uç nokta gizli anahtarınızla anahtarlanmış HMAC-SHA256'sı.
User-Agentbadges.ninja-webhooks/1

İmzaları Doğrulama ​

Bir teslimata güvenmeden önce her zaman imzayı doğrulayın. Ham istek gövdesinin HMAC-SHA256'sını uç noktanızın imzalama gizli anahtarını kullanarak hesaplayın ve bunu (sabit zamanda) X-Bws-Signature başlığıyla karşılaştırın.

js
import crypto from "node:crypto";

function verify(rawBody, signatureHeader, secret) {
  const expected = "sha256=" +
    crypto.createHmac("sha256", secret).update(rawBody, "utf8").digest("hex");
  const a = Buffer.from(signatureHeader);
  const b = Buffer.from(expected);
  return a.length === b.length && crypto.timingSafeEqual(a, b);
}

Aldığınız baytları tam olarak kullanın — JSON'u önce ayrıştırıp yeniden serileştirmek baytları değiştirir ve imzayı bozar.

Yeniden Denemeler ve Güvenilirlik ​

  • Uç noktanız bir 2xx durumuyla yanıt verdiğinde bir teslimat başarılı sayılır.
  • Başarısız teslimatlar kısa bir süre boyunca yeniden denenir. Sürekli başarısız olan uç noktalar bir failureCount biriktirir; 20 ardışık başarısızlıktan sonra bir uç nokta otomatik olarak devre dışı bırakılır (active: false) ve siz sorunu düzeltip yeni bir uç nokta kaydedene kadar teslimat almayı durdurur.
  • Teslimatlar birden fazla kez ulaşabilir. İşleyicinizi bağımsız (idempotent) hale getirmek için X-Bws-Delivery kimliğini (veya gövdedeki id'yi) kullanın.
  • Hızlı yanıt verin (~10 saniye içinde). Onayladıktan sonra ağır işleri asenkron olarak yapın.

Webhooks'u Kontrol Panelinden Yönetme ​

Uç noktaları API olmadan da yönetebilirsiniz — uç nokta eklemek, listelemek ve silmek ve her birinin hangi olayları alacağını seçmek için kontrol paneli kenar çubuğundaki Webhooks'u açın.

badges.ninja Documentation