Referência da API
Endpoints de webhook
Um endpoint de webhook é uma URL sua que recebe os eventos do Gemlead no momento em que acontecem. Você pode ter 10 por conta. Leia Webhooks para ver os eventos, os payloads e como verificar uma assinatura.
O objeto webhook endpoint
Uma URL sua para a qual o Gemlead envia eventos. Veja Webhooks para os eventos e como verificá-los.
Atributos
- idstringIdentificador único do endpoint.
- objectstringSempre
webhook_endpoint. - urlstringA URL HTTPS para a qual os eventos são enviados.
- descriptionstring ou nullA sua nota sobre o endpoint.
- eventsarray de stringsOs tipos de evento enviados para ele.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstringIndica se os eventos são enviados para ele.
enableddisabled - filtersobjectQuais eventos ele recebe, conforme a persona do lead. Os filtros valem para todos os tipos de evento.
- disabled_reasonstring ou nullPor que ele está desativado.
manualquando você o desativou,failingquando o Gemlead o desativou depois de 3 dias seguidos de falhas e pelo menos 8 tentativas com falha.nullenquanto está ativado.manualfailing - secretstringO segredo de assinatura,
whsec_seguido de 32 caracteres. Só aparece nas respostas de criação e de renovação do segredo. - created_atstringQuando o endpoint foi criado, em ISO 8601.
- updated_atstringQuando o endpoint mudou pela última vez, em 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"
}Listar endpoints de webhook
readRetorna seus endpoints de webhook, sem os segredos.
Parâmetros de consulta
- limitintegerQuantos objetos retornar, de 1 a 100. O padrão é 25.
- cursorstringO
next_cursorda página anterior, para obter a página seguinte. Veja Paginação.
Retorno
Uma lista de objetos webhook endpoint.
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
}Criar um endpoint de webhook
writeCadastra uma URL para um ou mais tipos de evento. Guarde o secret da resposta, pois é a única vez que ele aparece.
Parâmetros do corpo
- urlstringObrigatórioUma URL HTTPS que responde na internet pública.
- eventsarray de stringsObrigatórioOs tipos de evento a enviar.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringUma nota para você mesmo.
- filtersobjectQuais eventos enviar, conforme a persona do lead.
Retorno
O novo objeto webhook endpoint com o secret dele.
Erros
- Falta um parâmetro obrigatório.
paramdiz qual. - Um parâmetro tem um valor que a API não aceita.
paramdiz qual. - O corpo tem um campo que este endpoint não aceita.
- 400url_invalidA URL não é HTTPS, contém credenciais ou aponta para um endereço privado.
- A conta já tem 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"
}Obter um endpoint de webhook
readRetorna um endpoint de webhook, sem o segredo.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Retorno
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
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"
}Atualizar um endpoint de webhook
writeAltera um endpoint. Defina status como enabled para reativar um endpoint que o Gemlead desativou. Reativar o endpoint ou dar a ele uma nova url zera a contagem de falhas.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Parâmetros do corpo
- urlstringUma nova URL HTTPS.
- eventsarray de stringsOs tipos de evento a enviar.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - descriptionstringUma nota para você mesmo.
- statusstringAtiva ou desativa o endpoint.
enableddisabled - filtersobjectQuais eventos enviar, conforme a persona do lead.
Retorno
O objeto webhook endpoint atualizado.
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual. - O corpo tem um campo que este endpoint não aceita.
- 400url_invalidA URL não é HTTPS, contém credenciais ou aponta para um endereço privado.
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"
}Excluir um endpoint de webhook
writeExclui um endpoint. Os envios que ainda esperavam uma nova tentativa são descartados.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Retorno
Um objeto com o id do endpoint e deleted igual a true.
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
curl -X DELETE \
https://gemlead.ai/api/v1/webhook_endpoints/wh3LpX9dKe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "wh3LpX9dKe",
"object": "webhook_endpoint",
"deleted": true
}Renovar o segredo de assinatura
writeSubstitui o segredo do endpoint na hora, e o antigo para de funcionar. Os envios que falharem nesse meio-tempo são repetidos, assinados com o novo segredo.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Retorno
O objeto webhook endpoint com o novo secret.
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
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"
}Enviar um evento de teste
writeEnvia um evento de exemplo do primeiro tipo de evento do endpoint, com data.test igual a true e IDs começando com test_. Uma única tentativa, sem repetição.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Retorno
Um objeto webhook delivery com o status e o status_code que o seu endpoint respondeu.
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
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"
}O objeto webhook delivery
Um evento enviado a um endpoint, com as tentativas e a última resposta do seu servidor.
Atributos
- idstringIdentificador único do envio.
- objectstringSempre
webhook_delivery. - endpoint_idstringO endpoint para o qual ele foi enviado.
- event_idstringO evento enviado, o
idque o seu servidor recebeu. - event_typestringO tipo do evento.
lead.createdlead.hotreply.receivedreaction.receivedsam.suggestion.readysam.reply.sentsam.handoff - statusstring
pendingenquanto restam tentativas, depoissucceededoufailed.pendingsucceededfailed - attemptsintegerAs tentativas feitas até agora, no máximo 8.
- status_codeinteger ou nullO status HTTP da sua última resposta.
nullquando não houve resposta, depois de um timeout ou de um erro de conexão. - errorstring ou nullO que deu errado na última tentativa, como o status e o começo da sua resposta, ou um timeout.
- testboolean
truepara um evento de teste. - next_attempt_atstring ou nullQuando a próxima tentativa está prevista, enquanto
pending. - last_attempt_atstring ou nullQuando a última tentativa foi feita.
- created_atstringQuando o envio foi criado, em 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"
}Listar envios
readRetorna os envios mais recentes do endpoint, dos mais novos para os mais antigos, com os eventos de teste. Os envios ficam guardados por 30 dias.
Parâmetros de caminho
- idstringObrigatórioO ID do endpoint de webhook.
Parâmetros de consulta
- limitintegerQuantos envios retornar, de 1 a 100. O padrão é 25.
Retorno
Uma lista de objetos webhook delivery. Esta lista não tem next_cursor, aumente o limit para ver mais.
Erros
- Nenhum endpoint de webhook com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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
}