API-referentie

Webhook-endpoints

Een webhook-endpoint is een URL van jou die de gebeurtenissen van Gemlead ontvangt zodra ze plaatsvinden. Je kunt er 10 per account hebben. Lees Webhooks voor de gebeurtenissen, hun payloads en hoe je een handtekening verifieert.

Het webhook-endpoint-object

Een URL van jou waar Gemlead gebeurtenissen naartoe stuurt. Zie Webhooks voor de gebeurtenissen en hoe je ze verifieert.

Attributen

  • idstring
    Unieke ID van het endpoint.
  • objectstring
    Altijd webhook_endpoint.
  • urlstring
    De HTTPS-URL waar gebeurtenissen naartoe gaan.
  • descriptionstring of null
    Je notitie over het endpoint.
  • eventsarray van strings
    De gebeurtenistypen die ernaartoe gaan.
    lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff
  • statusstring
    Of er gebeurtenissen naartoe gaan.
    enableddisabled
  • filtersobject
    Welke gebeurtenissen het krijgt, op basis van de persona van de lead. Deze filters gelden voor elk gebeurtenistype.
  • disabled_reasonstring of null
    Waarom het is uitgeschakeld. manual als jij het uitzette, failing als Gemlead dat deed na 3 dagen op rij met fouten en minstens 8 mislukte pogingen. null zolang het aan staat.
    manualfailing
  • secretstring
    Het ondertekeningsgeheim, whsec_ gevolgd door 32 tekens. Alleen in de responses van aanmaken en geheim vernieuwen.
  • created_atstring
    Wanneer het endpoint is gemaakt, in ISO 8601.
  • updated_atstring
    Wanneer het endpoint voor het laatst is gewijzigd, in ISO 8601.
Het webhook-endpoint-object
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "url": "https://example.com/webhooks/gemlead",
  "description": "CRM sync",
  "events": ["lead.hot", "reply.received"],
  "status": "enabled",
  "filters": {
    "persona_ids": ["lvWBPnytpS"]
  },
  "disabled_reason": null,
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Webhook-endpoints opvragen

GET/v1/webhook_endpointsScope read

Geeft je webhook-endpoints terug, zonder hun geheimen.

Queryparameters

  • limitinteger
    Hoeveel objecten je terugkrijgt, van 1 tot 100. Standaard 25.
  • cursorstring
    De next_cursor van de vorige pagina, om de pagina daarna op te halen. Zie Paginering.

Resultaat

Een lijst van webhook-endpoint-objecten.

GET/v1/webhook_endpoints
curl https://gemlead.ai/api/v1/webhook_endpoints \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "object": "list",
  "data": [
    {
      "id": "wh3LpX9dKe",
      "object": "webhook_endpoint",
      "url": "https://example.com/webhooks/gemlead",
      "description": "CRM sync",
      "events": ["lead.hot", "reply.received"],
      "status": "enabled",
      "filters": {
        "persona_ids": ["lvWBPnytpS"]
      },
      "disabled_reason": null,
      "created_at": "2026-09-14T09:21:05.300Z",
      "updated_at": "2026-11-06T07:45:12.904Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Een webhook-endpoint maken

POST/v1/webhook_endpointsScope write

Registreert een URL voor een of meer gebeurtenistypen. Bewaar de secret uit de response, je ziet hem maar deze ene keer.

Bodyparameters

  • urlstringVerplicht
    Een HTTPS-URL die bereikbaar is op het publieke internet.
  • eventsarray van stringsVerplicht
    De gebeurtenistypen die verstuurd worden.
    lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff
  • descriptionstring
    Een notitie voor jezelf.
  • filtersobject
    Welke gebeurtenissen er gestuurd worden, op basis van de persona van de lead.

Resultaat

Het nieuwe webhook-endpoint-object met de secret.

Fouten

POST/v1/webhook_endpoints
curl -X POST https://gemlead.ai/api/v1/webhook_endpoints \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/webhooks/gemlead",
    "events": ["lead.hot", "reply.received"],
    "description": "CRM sync",
    "filters": {
      "persona_ids": ["lvWBPnytpS"]
    }
  }'
Response200
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "url": "https://example.com/webhooks/gemlead",
  "description": "CRM sync",
  "events": ["lead.hot", "reply.received"],
  "status": "enabled",
  "filters": {
    "persona_ids": ["lvWBPnytpS"]
  },
  "disabled_reason": null,
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z",
  "secret": "whsec_4QeX7nP2kR9tLm3Vb8YzC1dF6hJ0sWuA"
}

Een webhook-endpoint ophalen

GET/v1/webhook_endpoints/:idScope read

Geeft één webhook-endpoint terug, zonder het geheim.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Resultaat

Een webhook-endpoint-object.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
GET/v1/webhook_endpoints/:id
curl https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "url": "https://example.com/webhooks/gemlead",
  "description": "CRM sync",
  "events": ["lead.hot", "reply.received"],
  "status": "enabled",
  "filters": {
    "persona_ids": ["lvWBPnytpS"]
  },
  "disabled_reason": null,
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Een webhook-endpoint bijwerken

PATCH/v1/webhook_endpoints/:idScope write

Wijzigt een endpoint. Zet status op enabled om een endpoint dat Gemlead uitschakelde weer aan te zetten. Aanzetten of een nieuwe url geven zet de foutentelling weer op nul.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Bodyparameters

  • urlstring
    Een nieuwe HTTPS-URL.
  • eventsarray van strings
    De gebeurtenistypen die verstuurd worden.
    lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff
  • descriptionstring
    Een notitie voor jezelf.
  • statusstring
    Zet het endpoint aan of uit.
    enableddisabled
  • filtersobject
    Welke gebeurtenissen er gestuurd worden, op basis van de persona van de lead.

Resultaat

Het bijgewerkte webhook-endpoint-object.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
  • De body bevat een veld dat dit endpoint niet accepteert.
  • De URL is geen HTTPS, bevat inloggegevens of wijst naar een privéadres.
PATCH/v1/webhook_endpoints/:id
curl -X PATCH \
  https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "enabled"
  }'
Response200
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "url": "https://example.com/webhooks/gemlead",
  "description": "CRM sync",
  "events": ["lead.hot", "reply.received"],
  "status": "enabled",
  "filters": {
    "persona_ids": ["lvWBPnytpS"]
  },
  "disabled_reason": null,
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z"
}

Een webhook-endpoint verwijderen

DELETE/v1/webhook_endpoints/:idScope write

Verwijdert een endpoint. Leveringen die nog op een nieuwe poging wachten, vervallen.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Resultaat

Een object met de id van het endpoint en deleted op true.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
DELETE/v1/webhook_endpoints/:id
curl -X DELETE \
  https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "deleted": true
}

Het ondertekeningsgeheim vernieuwen

POST/v1/webhook_endpoints/:id/roll_secretScope write

Vervangt het geheim van het endpoint meteen, het oude werkt niet meer. Leveringen die in de tussentijd mislukken, worden opnieuw geprobeerd en met het nieuwe geheim ondertekend.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Resultaat

Het webhook-endpoint-object met de nieuwe secret.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
POST/v1/webhook_endpoints/:id/roll_secret
curl -X POST \
  https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/roll_secret \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "wh3LpX9dKe",
  "object": "webhook_endpoint",
  "url": "https://example.com/webhooks/gemlead",
  "description": "CRM sync",
  "events": ["lead.hot", "reply.received"],
  "status": "enabled",
  "filters": {
    "persona_ids": ["lvWBPnytpS"]
  },
  "disabled_reason": null,
  "created_at": "2026-09-14T09:21:05.300Z",
  "updated_at": "2026-11-06T07:45:12.904Z",
  "secret": "whsec_4QeX7nP2kR9tLm3Vb8YzC1dF6hJ0sWuA"
}

Een testgebeurtenis sturen

POST/v1/webhook_endpoints/:id/testScope write

Stuurt een voorbeeldgebeurtenis van het eerste gebeurtenistype van het endpoint, met data.test op true en ID's die met test_ beginnen. Eén poging, geen nieuwe pogingen.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Resultaat

Een leveringsobject met de status en status_code waarmee je endpoint antwoordde.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
POST/v1/webhook_endpoints/:id/test
curl -X POST \
  https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/test \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "dL5qW1zXa8",
  "object": "webhook_delivery",
  "endpoint_id": "wh3LpX9dKe",
  "event_id": "evt_8kQ2vXr4LmT9wPz1Hc6YbN3d",
  "event_type": "lead.hot",
  "status": "succeeded",
  "attempts": 1,
  "status_code": 200,
  "error": null,
  "test": true,
  "next_attempt_at": null,
  "last_attempt_at": "2026-11-06T07:45:12.904Z",
  "created_at": "2026-11-06T07:45:12.904Z"
}

Het leveringsobject

Eén gebeurtenis die naar één endpoint is gestuurd, met de pogingen en het laatste antwoord van je server.

Attributen

  • idstring
    Unieke ID van de levering.
  • objectstring
    Altijd webhook_delivery.
  • endpoint_idstring
    Het endpoint waarnaar de levering is gestuurd.
  • event_idstring
    De verstuurde gebeurtenis, de id die je server ontving.
  • event_typestring
    Het type van de gebeurtenis.
    lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff
  • statusstring
    pending zolang er pogingen over zijn, daarna succeeded of failed.
    pendingsucceededfailed
  • attemptsinteger
    Pogingen tot nu toe, maximaal 8.
  • status_codeinteger of null
    De HTTP-status van je laatste antwoord. null als er geen was, na een time-out of een verbindingsfout.
  • errorstring of null
    Wat er bij de laatste poging misging, zoals de status en het begin van je antwoord, of een time-out.
  • testboolean
    true voor een testgebeurtenis.
  • next_attempt_atstring of null
    Wanneer de volgende poging gepland staat, zolang pending.
  • last_attempt_atstring of null
    Wanneer de laatste poging is gedaan.
  • created_atstring
    Wanneer de levering is gemaakt, in ISO 8601.
Het leveringsobject
{
  "id": "dR7mK2pVn4",
  "object": "webhook_delivery",
  "endpoint_id": "wh3LpX9dKe",
  "event_id": "evt_3Hn7QpW2xZk9LmR4tV8bYc1D",
  "event_type": "reply.received",
  "status": "pending",
  "attempts": 2,
  "status_code": 503,
  "error": "HTTP 503: Service Unavailable",
  "test": false,
  "next_attempt_at": "2026-11-06T08:18:10.000Z",
  "last_attempt_at": "2026-11-06T08:13:10.000Z",
  "created_at": "2026-11-06T08:12:10.000Z"
}

Leveringen opvragen

GET/v1/webhook_endpoints/:id/deliveriesScope read

Geeft de laatste leveringen van het endpoint terug, nieuwste eerst, testgebeurtenissen inbegrepen. Leveringen worden 30 dagen bewaard.

Padparameters

  • idstringVerplicht
    De ID van het webhook-endpoint.

Queryparameters

  • limitinteger
    Hoeveel leveringen je terugkrijgt, van 1 tot 100. Standaard 25.

Resultaat

Een lijst van leveringsobjecten. Deze lijst heeft geen next_cursor, verhoog limit om meer te zien.

Fouten

  • Geen webhook-endpoint met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/webhook_endpoints/:id/deliveries
curl -G \
  https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/deliveries \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -d limit=10
Response200
{
  "object": "list",
  "data": [
    {
      "id": "dR7mK2pVn4",
      "object": "webhook_delivery",
      "endpoint_id": "wh3LpX9dKe",
      "event_id": "evt_3Hn7QpW2xZk9LmR4tV8bYc1D",
      "event_type": "reply.received",
      "status": "pending",
      "attempts": 2,
      "status_code": 503,
      "error": "HTTP 503: Service Unavailable",
      "test": false,
      "next_attempt_at": "2026-11-06T08:18:10.000Z",
      "last_attempt_at": "2026-11-06T08:13:10.000Z",
      "created_at": "2026-11-06T08:12:10.000Z"
    },
    {
      "id": "dL5qW1zXa8",
      "object": "webhook_delivery",
      "endpoint_id": "wh3LpX9dKe",
      "event_id": "evt_8kQ2vXr4LmT9wPz1Hc6YbN3d",
      "event_type": "lead.hot",
      "status": "succeeded",
      "attempts": 1,
      "status_code": 200,
      "error": null,
      "test": true,
      "next_attempt_at": null,
      "last_attempt_at": "2026-11-06T07:45:12.904Z",
      "created_at": "2026-11-06T07:45:12.904Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}