Ir al contenido

Crear un endpoint

El endpoint es la dirección de su sistema que recibe los eventos. Registrarlo es un solo paso, en el panel o por la API. Esta guía recorre los dos caminos y termina verificando que las entregas están llegando.

  • Quién registra. Los webhooks los gestionan el dueño y los administradores, en el panel o con una clave de API de un miembro con ese rol. Los demás roles reciben 403 en toda ruta de webhooks, incluidas las de lectura.
  • Una dirección pública con https://. Las direcciones internas, localhost y http:// se rechazan, y la verificación se repite en cada entrega. Las reglas completas están en Adónde puede ir la entrega. Para probar desde su máquina, necesita exponer su servidor local en una dirección pública con https://, por ejemplo con un servicio de túnel.
  • Un servidor que verifica la firma. Deje listo el receptor antes, con el código de Verificar la firma. Responde 200 a una entrega firmada y 400 a todo lo demás.
  • Los eventos que usa. Elija en el Catálogo de eventos solo lo que su sistema va a tratar. Recibir un evento es recibir sus datos.

Cuántos endpoints puede tener la empresa depende del plan: vea Límites.

  1. Abra la página Configuración: haga clic en su nombre, arriba en la pantalla, y en Configuración. Desde el menú lateral, el camino es Configuración → Preferencias de la Empresa.
  2. Vaya a la pestaña API. El recuadro Webhooks está debajo de las claves.
  3. Haga clic en Nuevo endpoint.
  4. Complete la URL, una Descripción para reconocer después qué sistema recibe, y marque los Eventos. Todos los eventos incluye también los que entren en el catálogo después.
  5. Confirme con su contraseña y haga clic en Crear endpoint.

La pantalla siguiente muestra el secreto, que empieza con whsec_. Cópielo al servidor que recibe los eventos. En el panel, el dueño y los administradores pueden revelar el secreto de nuevo después, desde el menú del endpoint (Revelar secreto), confirmando la contraseña.

El panel pide la contraseña al crear y cada vez que cambian la URL o los eventos, porque son esos dos campos los que deciden adónde van los datos de la empresa.

La clave necesita:

PermisoPara qué
webhooks:createRegistrar el endpoint
<modulo>:read de cada eventoSuscribirse: sales:read para sale.*, clients:read para client.*, y así sucesivamente. Con ["*"], de todos los módulos
webhooks:updateEnviar el ping, rotar el secreto, activarlo y desactivarlo. Cambiar la URL o los eventos, reactivarlo, enviar el ping y rotar el secreto piden también el <modulo>:read de cada evento al que el endpoint está suscrito, aunque se haya creado en el panel
webhooks:readLeer el endpoint y el registro de entregas
Ventana de terminal
# 1. Registrar
# Genere la clave una vez y guárdela: en un reintento, repita con el mismo valor.
CREATE_KEY=$(uuidgen)
curl -X POST "https://api.fatureihoje.com/public/v1/webhook_endpoints" \
-H "Authorization: Bearer $FH_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $CREATE_KEY" \
-d '{
"url": "https://erp.suempresa.com/webhooks/faturei-hoje",
"description": "ERP de la tienda",
"events": ["sale.created", "sale.paid", "client.created"]
}'
# 2. Verificar la conexión, con el id que volvió arriba
ENDPOINT_ID="7f3a1c5e-9b2d-4f6a-8c0e-2b4d6f8a0c1e"
# Genere la clave una vez y guárdela: en un reintento, repita con el mismo valor.
PING_KEY=$(uuidgen)
curl -X POST "https://api.fatureihoje.com/public/v1/webhook_endpoints/$ENDPOINT_ID/ping" \
-H "Authorization: Bearer $FH_API_KEY" \
-H "Idempotency-Key: $PING_KEY"
# 3. Unos segundos después, ver cómo fue la entrega
curl "https://api.fatureihoje.com/public/v1/webhook_endpoints/$ENDPOINT_ID/deliveries?limit=5" \
-H "Authorization: Bearer $FH_API_KEY"

La respuesta del registro es 201 y trae el endpoint con el campo secret. Por la API, el secreto solo aparece en esta respuesta y en la rotación. Repetir el registro con la misma Idempotency-Key devuelve el endpoint sin el secreto, porque no queda guardado en claro, ni siquiera para la repetición. Si perdió la respuesta, rote el secreto con POST /public/v1/webhook_endpoints/{id}/rotate_secret, o revélelo en el panel.

El dueño y los administradores reciben un correo por cada endpoint creado.

El ping (POST /public/v1/webhook_endpoints/{id}/ping, o Enviar ping en el menú del endpoint en el panel) envía un evento ping real solo a ese endpoint, firmado y por el mismo camino que cualquier evento. No lleva datos de la empresa. No es un entorno de prueba: solo prueba que la dirección recibe y verifica la firma.

Después, abra el registro de entregas (GET /public/v1/webhook_endpoints/{id}/deliveries, o Ver entregas en el panel):

Lo que apareceQué significa
succeededSu servidor respondió 2xx. Listo
pending, con response_status_codeEl servidor respondió, pero no 2xx. Después viene otro intento
pending, con errorNo hubo respuesta (tiempo, DNS, TLS, conexión). El motivo está en el campo
failedSe acabaron los intentos, o la entrega se cerró sin enviarse. Vea Entregas y reintentos

Un 400 en el ping casi siempre es una firma que no coincidió de su lado: el secreto equivocado, o el cuerpo interpretado antes de la verificación. Vea Verificar la firma.

RespuestaPor qué
422 con param urlLa URL no es https://, no es pública, tiene usuario y contraseña, o no resuelve
422 con param eventsUn evento que no existe en el catálogo, o * junto con otro nombre
403 permission_missingFalta webhooks:create, o el <modulo>:read de algún evento elegido
403 plan_limit_reachedLa empresa llegó al límite de endpoints del plan
403 member_permission_deniedEl miembro detrás de la clave no es dueño ni administrador