Skip to content

Webhookien API ​

Webhookit ilmoittavat sovelluksellesi reaaliajassa, kun todistuksillesi tapahtuu jotain — kun todistus myönnetään, toimitetaan, peruutetaan tai katsotaan. Sen sijaan, että kyselisit API:a, rekisteröit HTTPS-päätepisteen, ja badges.ninja lähettää sille allekirjoitetun POST-pyynnön jokaisesta tapahtumasta, jota tilaat.

Kaikki hallintapäätepisteet vaativat todennuksen X-Api-Key-otsikon kautta. Katso Todennus. Päätepisteiden luominen tai poistaminen vaatii avaimen, jolla on write-alue; luettelointi vaatii read-alueen. Katso API-avaimet.

Rekisteröi päätepiste ​

POST /webhooks

Parametrit ​

ParametriTyyppiPakollinenKuvaus
urlstringKylläHTTPS-päätepisteesi. Sen on alettava merkkijonolla https://.
eventsstring[]EiTilattavat tapahtumatyypit. Jätä pois tai anna ["*"] vastaanottaaksesi kaikki tapahtumat.

Esimerkki ​

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

Vastaus ​

201 Created. Allekirjoitussalaisuus palautetaan vain kerran — tallenna se nyt; et voi hakea sitä uudelleen.

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

Luettele päätepisteet ​

GET /webhooks

Palauttaa rekisteröidyt päätepisteesi. Allekirjoitussalaisuuksia ei koskaan sisällytetä.

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

Poista päätepiste ​

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"

Toimitukset päätepisteeseen pysähtyvät välittömästi.

Tapahtumatyypit ​

TapahtumaLaukeaa, kun…
credential.issuedTodistus myönnetään vastaanottajalle.
credential.deliveredTodistuksen ilmoitussähköposti lähetetään vastaanottajalle (yksittäin tai joukkona).
credential.revokedTodistus peruutetaan.
credential.viewedVastaanottajan julkinen todistussivu katsotaan ensimmäistä kertaa.

Toimituksen hyötykuorma ​

Jokainen toimitus on POST, jonka JSON-runko on tätä muotoa:

json
{
  "id": "b1c2d3e4-...",
  "type": "credential.issued",
  "createdAt": 1787685415083,
  "data": { }
}
KenttäKuvaus
idYksilöllinen toimitustunnus (käytä sitä kaksoiskappaleiden poistamiseen).
typeTapahtumatyyppi.
createdAtTapahtuman aikaleima (epoch-millisekuntia).
dataTapahtumakohtainen hyötykuorma (katso alla).

data tapahtumatyypin mukaan ​

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

Pyynnön otsikot ​

Jokainen toimitus sisältää nämä otsikot:

OtsikkoKuvaus
X-Bws-EventTapahtumatyyppi (sama kuin type rungossa).
X-Bws-DeliveryToimitustunnus (sama kuin id rungossa).
X-Bws-Signaturesha256= ja sen perässä raa'an pyyntörungon HMAC-SHA256, avaimena päätepistesalaisuutesi.
User-Agentbadges.ninja-webhooks/1

Allekirjoitusten vahvistaminen ​

Vahvista allekirjoitus aina ennen kuin luotat toimitukseen. Laske raa'an pyyntörungon HMAC-SHA256 päätepisteesi allekirjoitussalaisuudella ja vertaa sitä (vakioajassa) X-Bws-Signature-otsikkoon.

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

Käytä täsmälleen niitä tavuja, jotka vastaanotit — JSON:n jäsentäminen ja uudelleensarjallistaminen ensin muuttaa tavuja ja rikkoo allekirjoituksen.

Uudelleenyritykset ja luotettavuus ​

  • Toimitusta pidetään onnistuneena, kun päätepisteesi vastaa 2xx-tilalla.
  • Epäonnistuneet toimitukset yritetään uudelleen muutaman kerran. Päätepisteet, jotka jatkavat epäonnistumista, kartuttavat failureCount-arvoa; 20 peräkkäisen epäonnistumisen jälkeen päätepiste poistetaan automaattisesti käytöstä (active: false) ja lakkaa vastaanottamasta toimituksia, kunnes korjaat sen ja rekisteröit uuden päätepisteen.
  • Toimitukset voivat saapua useammin kuin kerran. Käytä X-Bws-Delivery-tunnusta (tai rungon id-arvoa) tehdäksesi käsittelijästäsi idempotentin.
  • Vastaa nopeasti (noin 10 sekunnin kuluessa). Tee raskas työ asynkronisesti kuittauksen jälkeen.

Webhookien hallinta koontinäytöllä ​

Voit myös hallita päätepisteitä ilman API:a — avaa Webhooks koontinäytön sivupalkista lisätäksesi, luetellaksesi ja poistaaksesi päätepisteitä sekä valitaksesi, mitä tapahtumia kukin vastaanottaa.

badges.ninja Documentation