Skip to content

Webhooks API

Webhooki v realnem času obvestijo vašo aplikacijo, ko se z vašimi poverilnicami kaj zgodi — ko je katera izdana, dostavljena, preklicana ali ogledana. Namesto da API poizvedujete, registrirate končno točko HTTPS in badges.ninja ji za vsak dogodek, na katerega ste naročeni, pošlje podpisan POST.

Vse upravljalske končne točke zahtevajo avtentikacijo prek glave X-Api-Key. Glejte Avtentikacija. Ustvarjanje ali brisanje končnih točk zahteva ključ z obsegom write; izpisovanje zahteva read. Glejte API ključi.

Registracija končne točke

POST /webhooks

Parametri

ParameterTipObveznoOpis
urlstringDaVaša končna točka HTTPS. Mora se začeti z https://.
eventsstring[]NeTipi dogodkov, na katere se naročate. Izpustite ali podajte ["*"], da prejemate vse dogodke.

Primer

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"]
  }'

Odziv

201 Created. Podpisna skrivnost se vrne samo enkrat — shranite jo zdaj; kasneje je ne morete več pridobiti.

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

Izpis končnih točk

GET /webhooks

Vrne vaše registrirane končne točke. Podpisne skrivnosti niso nikoli vključene.

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
    }
  ]
}

Brisanje končne točke

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"

Dostave na to končno točko se takoj ustavijo.

Tipi dogodkov

DogodekSproži se, ko …
credential.issuedJe poverilnica izdana prejemniku.
credential.deliveredJe obvestilo o poverilnici po e-pošti poslano prejemniku (posamično ali množično).
credential.revokedJe poverilnica preklicana.
credential.viewedJe javna stran poverilnice prejemnika ogledana prvič.

Vsebina dostave

Vsaka dostava je POST s telesom JSON te oblike:

json
{
  "id": "b1c2d3e4-...",
  "type": "credential.issued",
  "createdAt": 1787685415083,
  "data": { }
}
PoljeOpis
idEnolični id dostave (uporabite ga za odpravljanje podvajanja).
typeTip dogodka.
createdAtČasovni žig dogodka (milisekunde od epohe).
dataVsebina, specifična za dogodek (glejte spodaj).

data po tipu dogodka

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" }
}

Glave zahteve

Vsaka dostava nosi te glave:

GlavaOpis
X-Bws-EventTip dogodka (enak kot type v telesu).
X-Bws-DeliveryId dostave (enak kot id v telesu).
X-Bws-Signaturesha256=, ki mu sledi HMAC-SHA256 surovega telesa zahteve, s ključem vaše podpisne skrivnosti končne točke.
User-Agentbadges.ninja-webhooks/1

Preverjanje podpisov

Pred zaupanjem dostavi vedno preverite podpis. Izračunajte HMAC-SHA256 surovega telesa zahteve z uporabo podpisne skrivnosti vaše končne točke in ga (v konstantnem času) primerjajte z glavo X-Bws-Signature.

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);
}

Uporabite natanko tiste bajte, ki ste jih prejeli — če JSON najprej razčlenite in znova serializirate, se bajti spremenijo in podpis se poruši.

Ponovni poskusi in zanesljivost

  • Dostava velja za uspešno, ko vaša končna točka odgovori s statusom 2xx.
  • Neuspešne dostave se ponovijo nekajkrat. Končne točke, ki še naprej odpovedujejo, kopičijo failureCount; po 20 zaporednih neuspehih se končna točka samodejno onemogoči (active: false) in preneha prejemati dostave, dokler je ne popravite in registrirate nove končne točke.
  • Dostave lahko prispejo večkrat. Uporabite id X-Bws-Delivery (ali id iz telesa), da naredite svoj obravnavalnik idempotenten.
  • Odgovorite hitro (v približno 10 sekundah). Zahtevnejše delo opravite asinhrono po potrditvi.

Upravljanje webhookov v nadzorni plošči

Končne točke lahko upravljate tudi brez API — v stranski vrstici nadzorne plošče odprite Webhooks, da dodate, izpišete in izbrišete končne točke ter izberete, katere dogodke vsaka prejema.

badges.ninja Documentation