ThunderPhone 2.0 is live.Direct zelf aan de slag, vanaf 2 cent/min.Lees de aankondiging

Webhooks

Webhook-eindpunten

Beheer meerdere webhook-URL

Met het op eindpunten gebaseerde webhooksysteem kun je meerdere bestemmingen per organisatie registreren, elk met een eigen secret, een eigen status en een eigen abonnement op een subset van gebeurtenistypen. Dit is het aanbevolen model voor alle nieuwe integraties.

Vergelijk dit met de verouderde webhook met één URL, die voor achterwaartse compatibiliteit behouden blijft, maar slechts één URL per organisatie ondersteunt.

Eindpunten

MethodePadVereiste rolBeschrijving
GET/v1/developer/webhook-endpointsadmin+Eindpunten weergeven
POST/v1/developer/webhook-endpointsadmin+Een eindpunt maken
PATCH/v1/developer/webhook-endpoints/{endpoint_id}admin+Label / URL / gebeurtenissen / status bijwerken
DELETE/v1/developer/webhook-endpoints/{endpoint_id}admin+Een eindpunt verwijderen
POST/v1/developer/webhook-endpoints/{endpoint_id}/testadmin+Een ondertekende testaflevering verzenden

Eindpuntobject

{
  "id": "c4d5e6f7-...",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z"
}
VeldTypeBeschrijving
idUUIDEindpunt-id
labelstringWeergavenaam, 1–120 tekens
urlstringHTTPS-URL; http://localhost toegestaan voor ontwikkeling
eventsarray of stringGeabonneerde gebeurtenistypen (zie geldige waarden). Een lege array abonneert zich op alle gebeurtenissen, behalve de alleen-expliciete gebeurtenissen per beurt (telephony.turn / web.turn)
statusstringactive, disabled (handmatig gepauzeerd) of failing (automatisch ingesteld wanneer een aflevering het retrieschema van 24 uur doorloopt zonder ook maar één 2xx)
secret_hintstringEerste 4 en laatste 4 tekens van het ondertekeningssecret met een beletselteken (a1b2…9f0e) — genoeg om het opgeslagen secret lokaal te vergelijken zonder de volledige waarde bloot te leggen
created_at, updated_attimestamp

Geldige gebeurtenistypen

events wordt gevalideerd aan de hand van deze exacte set — waarden buiten de lijst retourneren 400. Zie Gebeurteniscatalogus voor de payloadstructuur van elk type.

  • telephony.incoming, telephony.complete, telephony.tool, telephony.turn
  • web.incoming, web.complete, web.tool, web.turn
  • call.graded
  • issue.reported
  • test-call.completed
  • alert.triggered

Eindpuntstatussen

  • active — afleveringen verlopen normaal.
  • disabled — handmatig gepauzeerd via PATCH. Er worden geen aanvragen verzonden. We wijzigen de status van een disabled eindpunt nooit; het terugzetten naar active bepaal je altijd zelf.
  • failing — automatisch ingesteld wanneer een aflevering naar het eindpunt het volledige retrieschema doorloopt (8 pogingen in 24 uur) zonder ooit een 2xx te ontvangen. Een falend eindpunt ontvangt geen verder verkeer. Zodra het eindpunt is hersteld, zet je met PATCH de status terug naar active; afleveringen waarvan het retrieschema nog niet is verlopen, gaan verder waar ze waren gebleven.

Eindpunten weergeven

cURL
curl https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Retourneert een array met eindpuntobjecten.


Een eindpunt maken

cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Production — Call events",
    "url":    "https://example.com/thunderphone/hook",
    "events": ["telephony.incoming", "telephony.complete"]
  }'
Python
result = requests.post(
    "https://api.thunderphone.com/v1/developer/webhook-endpoints",
    headers={"Authorization": "Bearer sk_live_YOUR_API_KEY"},
    json={
        "label":  "Production — Call events",
        "url":    "https://example.com/thunderphone/hook",
        "events": ["telephony.incoming", "telephony.complete"],
    },
).json()
secret = result["secret"]
endpoint_id = result["id"]

Aanvraagvelden

VeldTypeVereistBeschrijving
labelstringja1–120 tekens
urlstringjaHTTPS-URL (http alleen toegestaan voor localhost / 127.0.0.1)
eventsarrayneeLeeg/weggelaten abonneert op alle gebeurtenissen behalve telephony.turn / web.turn, waarvoor een expliciet abonnement vereist is. Gebruik de waarden uit Geldige gebeurtenistypen; duplicaten worden verwijderd

Retourneert 201 Created met het eindpuntobject plus een extra secret-veld op het hoogste niveau met de onbewerkte ondertekeningssleutel — een hexadecimale tekenreeks van 48 tekens:

{
  "id": "c4d5e6f7-…",
  "label": "Production — Call events",
  "url": "https://example.com/thunderphone/hook",
  "events": ["telephony.incoming", "telephony.complete"],
  "status": "active",
  "secret_hint": "a1b2…9f0e",
  "created_at": "2026-04-20T18:24:10.113Z",
  "updated_at": "2026-04-20T18:24:10.113Z",
  "secret": "a1b2c37e08d94f5b16a2c8d90e7f3a4b5c6d7e8f90a19f0e"
}

Een eindpunt bijwerken

cURL
curl -X PATCH https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label":  "Production — Call + Grade events",
    "events": ["telephony.incoming", "telephony.complete", "call.graded"]
  }'
VeldTypeBeschrijving
labelstring
urlstring
eventsarray
statusstringactive of disabled. Stel active in om een eindpunt opnieuw in te schakelen dat de server als failing heeft gemarkeerd

Retourneert 200 OK met het bijgewerkte eindpuntobject.


Een testlevering verzenden

Verzend een synthetische webhook.test-gebeurtenis naar één eindpunt via de normale leveringspipeline, inclusief canonieke JSON-serialisatie, X-ThunderPhone-Signature, leveringsregistratie en bijhouden van nieuwe pogingen. De test richt zich op het geselecteerde eindpunt, ongeacht het events-filter.

cURL
curl -X POST https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-.../test \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Het eindpunt ontvangt een envelop zoals:

{
  "data": {
    "message": "ThunderPhone webhook test",
    "sent_at": "2026-07-17T20:12:34.567890+00:00"
  },
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "type": "webhook.test"
}

De API retourneert 200 OK na de eerste poging, ook als de bestemming een fout retourneert. Controleer success, status, response_code en error voor de uitkomst van de levering:

{
  "success": true,
  "event_id": "2ad6507c-7d19-4498-9b2d-7e8f944ab5a1",
  "event_type": "webhook.test",
  "status": "delivered",
  "response_code": 204,
  "error": ""
}

webhook.test is synthetisch en kan niet worden toegevoegd aan het events- abonnement van een eindpunt. Als de eerste poging mislukt, volgt de levering hetzelfde schema voor nieuwe pogingen als normale gebeurtenisleveringen.


Een eindpunt verwijderen

cURL
curl -X DELETE https://api.thunderphone.com/v1/developer/webhook-endpoints/c4d5e6f7-... \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY"

Retourneert 204 No Content. Levering aan de URL stopt onmiddellijk; nieuwe pogingen die al bezig zijn, worden afgebroken.


Gerelateerd