API-Referenz
Webhook-Endpoints
Ein Webhook-Endpoint ist eine URL von dir, die die Ereignisse von Gemlead in dem Moment empfängt, in dem sie eintreten. Du kannst 10 pro Konto haben. Unter Webhooks findest du die Ereignisse, ihre Payloads und wie du eine Signatur prüfst.
Das Endpoint-Objekt
Eine URL von dir, an die Gemlead Ereignisse sendet. Unter Webhooks findest du die Ereignisse und wie du sie prüfst.
Attribute
- idstringEindeutige Kennung des Endpoints.
- objectstringImmer
webhook_endpoint. - urlstringDie HTTPS-URL, an die Ereignisse gesendet werden.
- descriptionstring oder nullDeine Notiz zum Endpoint.
- eventsArray von stringsDie Ereignistypen, die an ihn gesendet werden.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstringOb Ereignisse an ihn gesendet werden.
enableddisabled - filtersobjectWelche Ereignisse er bekommt, nach der Persona des Leads. Die Filter gelten für jeden Ereignistyp.
- disabled_reasonstring oder nullWarum er deaktiviert ist.
manual, wenn du ihn ausgeschaltet hast,failing, wenn Gemlead das nach 3 Tagen mit Fehlern in Folge und mindestens 8 fehlgeschlagenen Versuchen getan hat.null, solange er aktiv ist.manualfailing - secretstringDas Signatur-Secret,
whsec_und 32 Zeichen. Nur in den Antworten von Erstellen und Secret erneuern. - created_atstringWann der Endpoint erstellt wurde, ISO 8601.
- updated_atstringWann sich der Endpoint zuletzt geändert hat, ISO 8601.
{
"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 auflisten
readGibt deine Webhook-Endpoints zurück, ohne ihre Secrets.
Query-Parameter
- limitintegerWie viele Objekte zurückgegeben werden, von 1 bis 100. Standardmäßig 25.
- cursorstringDer
next_cursorder vorherigen Seite, um die nächste Seite abzurufen. Siehe Paginierung.
Rückgabe
Eine Liste von Endpoint-Objekten.
curl https://gemlead.ai/api/v1/webhook_endpoints \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"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
}Webhook-Endpoint erstellen
writeRegistriert eine URL für einen oder mehrere Ereignistypen. Speichere das secret aus der Antwort, du siehst es nur dieses eine Mal.
Body-Parameter
- urlstringErforderlichEine HTTPS-URL, die im öffentlichen Internet erreichbar ist.
- eventsArray von stringsErforderlichDie zu sendenden Ereignistypen.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringEine Notiz für dich.
- filtersobjectWelche Ereignisse gesendet werden, nach der Persona des Leads.
Rückgabe
Das neue Endpoint-Objekt mit seinem secret.
Fehler
- Ein Pflichtparameter fehlt.
paramnennt ihn. - Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn. - Der Body enthält ein Feld, das dieser Endpoint nicht akzeptiert.
- 400url_invalidDie URL ist kein HTTPS, enthält Zugangsdaten oder zeigt auf eine private Adresse.
- Das Konto hat schon 10 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"]
}
}'{
"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"
}Webhook-Endpoint abrufen
readGibt einen Webhook-Endpoint zurück, ohne sein Secret.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Rückgabe
Ein Endpoint-Objekt.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
curl https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"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-Endpoint ändern
writeÄndert einen Endpoint. Setze status auf enabled, um einen Endpoint wieder einzuschalten, den Gemlead deaktiviert hat. Einschalten oder eine neue url setzt seinen Fehlerzähler zurück.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Body-Parameter
- urlstringEine neue HTTPS-URL.
- eventsArray von stringsDie zu sendenden Ereignistypen.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringEine Notiz für dich.
- statusstringDen Endpoint ein- oder ausschalten.
enableddisabled - filtersobjectWelche Ereignisse gesendet werden, nach der Persona des Leads.
Rückgabe
Das aktualisierte Endpoint-Objekt.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn. - Der Body enthält ein Feld, das dieser Endpoint nicht akzeptiert.
- 400url_invalidDie URL ist kein HTTPS, enthält Zugangsdaten oder zeigt auf eine private Adresse.
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"
}'{
"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-Endpoint löschen
writeLöscht einen Endpoint. Zustellungen, die noch auf einen neuen Versuch warten, werden verworfen.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Rückgabe
Ein Objekt mit der id des Endpoints und dem Wert true in deleted.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
curl -X DELETE \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"deleted": true
}Signatur-Secret erneuern
writeErsetzt das Secret des Endpoints sofort, das alte funktioniert nicht mehr. Zustellungen, die in der Zwischenzeit fehlschlagen, werden erneut versucht und mit dem neuen Secret signiert.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Rückgabe
Das Endpoint-Objekt mit seinem neuen secret.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
curl -X POST \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/roll_secret \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"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"
}Testereignis senden
writeSendet ein Beispielereignis vom ersten Ereignistyp des Endpoints, mit dem Wert true in data.test und IDs, die mit test_ beginnen. Ein Versuch, keine Wiederholung.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Rückgabe
Ein Zustellungsobjekt mit dem status und dem status_code, mit denen dein Endpoint geantwortet hat.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
curl -X POST \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/test \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"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"
}Das Zustellungsobjekt
Ein Ereignis, das an einen Endpoint gesendet wurde, mit seinen Versuchen und der letzten Antwort deines Servers.
Attribute
- idstringEindeutige Kennung der Zustellung.
- objectstringImmer
webhook_delivery. - endpoint_idstringDer Endpoint, an den sie gesendet wurde.
- event_idstringDas gesendete Ereignis, die
id, die dein Server erhalten hat. - event_typestringDer Typ des Ereignisses.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstring
pending, solange noch Versuche übrig sind, dannsucceededoderfailed.pendingsucceededfailed - attemptsintegerBisherige Versuche, höchstens 8.
- status_codeinteger oder nullDer HTTP-Status deiner letzten Antwort.
null, wenn es keine gab, nach einem Timeout oder einem Verbindungsfehler. - errorstring oder nullWas beim letzten Versuch schiefgelaufen ist, etwa der Status und der Anfang deiner Antwort, oder ein Timeout.
- testboolean
truefür ein Testereignis. - next_attempt_atstring oder nullWann der nächste Versuch fällig ist, solange
pending. - last_attempt_atstring oder nullWann der letzte Versuch stattfand.
- created_atstringWann die Zustellung erstellt wurde, ISO 8601.
{
"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"
}Zustellungen auflisten
readGibt die letzten Zustellungen des Endpoints zurück, die neuesten zuerst, Testereignisse eingeschlossen. Zustellungen werden 30 Tage aufbewahrt.
Pfadparameter
- idstringErforderlichDie ID des Webhook-Endpoints.
Query-Parameter
- limitintegerWie viele Zustellungen zurückgegeben werden, von 1 bis 100. Standardmäßig 25.
Rückgabe
Eine Liste von Zustellungsobjekten. Diese Liste hat keinen next_cursor, erhöhe limit, um mehr zu sehen.
Fehler
- Kein Webhook-Endpoint mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe/deliveries \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d limit=10{
"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
}