Documentation Index
Fetch the complete documentation index at: https://developers.flowestate.app/llms.txt
Use this file to discover all available pages before exploring further.
Esta página cubre el API de gestión de suscripciones a webhooks. Para el formato de las entregas entrantes (headers, firmas, política de reintentos) ver la guía de Webhooks.
Listar tipos de eventos
Scope: webhooks:manage. Devuelve la lista completa de tipos de eventos a los que puedes suscribirte, más una agrupación de UI.
Response 200
{
"events": [
"lead.created", "lead.updated", "lead.stage_changed",
"lead.assigned", "lead.unassigned",
"lead.won", "lead.lost", "lead.deleted",
"lead.note_added", "lead.communication_logged",
"project.created", "project.updated", "project.deleted",
"unit.created", "unit.updated", "unit.status_changed"
],
"groups": {
"Leads": ["lead.created", "lead.updated", "lead.stage_changed", "lead.assigned", "lead.unassigned", "lead.won", "lead.lost", "lead.deleted", "lead.note_added", "lead.communication_logged"],
"Projects": ["project.created", "project.updated", "project.deleted"],
"Units": ["unit.created", "unit.updated", "unit.status_changed"]
}
}
Usa el objeto groups para construir un dropdown ordenado en tu UI de integración. El array events es la lista plana para validación.
Listar suscripciones
GET /webhooks/subscriptions
Scope: webhooks:manage. Lista las suscripciones gestionadas por el cliente que llama (solo integraciones Zapier / Make / API — las suscripciones gestionadas desde el panel quedan exclusivamente bajo el panel).
Response 200
{
"data": [
{
"id": "wh_...",
"target_url": "https://hook.example.com/incoming",
"events": ["lead.created"],
"external_id": "make-scenario-42",
"managed_by": "make",
"is_active": true,
"created_at": "2026-04-29T18:04:15.000Z"
}
]
}
Crear una suscripción
POST /webhooks/subscriptions
Scope: webhooks:manage.
Request body
{
"target_url": "https://hook.example.com/incoming",
"event": "lead.created",
"external_id": "make-scenario-42",
"name": "Make: leads nuevos"
}
| Campo | Requerido | Notas |
|---|
target_url | sí | URL HTTPS para recibir los eventos. |
event | sí | Un solo tipo de evento por suscripción. |
external_id | no | Muy recomendado. Ver nota de idempotencia abajo. |
name | no | Etiqueta humana, ≤ 255 caracteres. |
Pasa siempre external_id cuando puedas — típicamente es el ID del scenario / zap / flow de tu lado. Si la suscripción ya existe para ese external_id, la llamada es idempotente y devuelve 200 con el registro existente en lugar de 409. Esto es lo que hace seguros los reintentos de Make / Zapier ante replays.
Response 201 (suscripción nueva)
{
"id": "wh_...",
"target_url": "https://hook.example.com/incoming",
"event": "lead.created",
"external_id": "make-scenario-42",
"managed_by": "make",
"secret": "<secret hex>",
"supported_events": ["lead.created", "..."]
}
El
secret se devuelve
solo al momento de la creación. Guárdalo — lo necesitas para verificar las firmas de los webhooks (ver
Verificar la firma). Si lo pierdes, elimina la suscripción y crea una nueva.
Response 200 (replay idempotente)
Cuando el external_id ya existe para este cliente, recibes la suscripción existente con el mismo body pero sin secret. Tu secret guardado de la creación original sigue siendo válido.
Errores
403 FORBIDDEN — falta el scope webhooks:manage, o se alcanzó el límite del plan para webhook endpoints.
Obtener una suscripción
GET /webhooks/subscriptions/{id}
Scope: webhooks:manage. Suscripción individual.
Eliminar una suscripción
DELETE /webhooks/subscriptions/{id}
Scope: webhooks:manage. Borrado duro de las suscripciones de plataformas externas.
Las suscripciones gestionadas desde el panel solo se pueden borrar desde la UI de FlowEstate — el API devuelve 403 para esos casos. Esto protege a los usuarios de que conectores de terceros eliminen accidentalmente suscripciones que no crearon.
Response 200
{ "id": "wh_...", "deleted": true }