Endpoints personalizados
Vincent Depassier · 17 de septiembre de 2026
Un endpoint personalizado es una URL pública que defines en API Gateway → Endpoints y que ejecuta una Automatización. Es la forma en que un sistema externo llega a tu workspace sin tener ninguna credencial de Praxsuite: el webhook de una pasarela de pago, un formulario en un sitio que no controlas, el callback de un socio.
https://gateway.praxsuite.com/{workspaceId}/endpoint/{endpointId}/{workspaceId}/webhook/{endpointId} es la forma vieja de la misma ruta y sigue funcionando.
Auth: ninguna de las habituales. Ni API key ni JWT. Un endpoint autentica a quien lo llama con una firma HMAC que tú configuras — o, si no configuras ninguna, queda abierto a cualquiera que conozca la URL.
Dos modos
Un endpoint es Async o Sync, y se elige al crearlo. Esa es toda la diferencia de comportamiento.
| Async ("webhook") | Sync ("endpoint") |
Responde con |
| Lo que haya producido el nodo Response de la automatización |
Automatizaciones | Las que quieras, suscritas | Exactamente una, asignada en la vista Gateway |
Quien llama espera la corrida | No | Sí |
Para qué | Recibir eventos | Servir una API propia |
Mandar un evento
POST /{workspaceId}/endpoint/{endpointId}
Content-Type: application/jsonEl cuerpo llega tal cual a la automatización. No hay forma obligatoria: lo que postee quien manda es lo que ve la automatización, en {{request.body}}.
Async responde con el evento registrado:
{ "received": true, "eventId": "…" }Las automatizaciones corren después, en segundo plano. Que una falle no cambia el 200 que quien llamó ya recibió; mira API Gateway → Logs y el historial de corridas de la automatización.
Sync mantiene la conexión abierta, ejecuta la única automatización vinculada, y devuelve exactamente lo que escribió su nodo Response — cuerpo, content type y las cabeceras personalizadas que haya puesto. El payload lo decide tu automatización; el gateway no lo envuelve.
El cuerpo del pedido tiene un tope de 10 MB. Más que eso es 413.
Verificación de firma
Se configura por endpoint: un algoritmo, un secreto, la cabecera a leer y un formato.
Algoritmos: HMAC-SHA256, HMAC-SHA512, o ninguno.
Formatos:
Formato | Qué se firma | Valor de la cabecera | Compatible con |
Por defecto | El cuerpo crudo | Hex, opcionalmente con prefijo | GitHub y la mayoría de los webhooks genéricos |
Timestamp-punto-payload |
|
| Stripe, Slack |
El nombre de la cabecera lo eliges tú, así que un endpoint puede leer X-Hub-Signature-256, Stripe-Signature, o lo que use quien manda.
Una firma inválida es 401. Un endpoint configurado para verificar pero al que le falta el secreto es 500, no un pase silencioso.
Verificación por desafío
Varias plataformas verifican la URL de un webhook antes de mandarle nada, llamándola con un desafío que esperan recibir de vuelta.
GET /{workspaceId}/endpoint/{endpointId}?hub.mode=subscribe&hub.verify_token=…&hub.challenge=…Si el endpoint tiene un verify token configurado y coincide, la respuesta es hub.challenge como text/plain. Este es el handshake de Meta / Facebook / Instagram, y sirve para cualquier cosa que siga la misma convención.
Estado | Causa |
|
|
| La verificación por desafío no está habilitada en este endpoint, o el token no coincide |
| No existe el endpoint, o no está activo |
Caché de respuesta (sólo Sync)
A un endpoint Sync se le puede dar una política de caché, y entonces sus respuestas traen:
ETag: "…"
Cache-Control: …
X-Cache: HIT | MISSDevuelve el ETag como If-None-Match y una entrada todavía vigente responde 304 Not Modified — sin correr la automatización, sin cuerpo, sólo cabeceras. Es el desenlace más barato que tiene este endpoint, y vale la pena que tu cliente lo pida.
El validador se manda también en un MISS, así que la primera respuesta ya se puede revalidar en la llamada siguiente en vez de volver a ejecutarse.
Una respuesta cuyo cuerpo sea una URL de archivo firmada no se cachea nunca: repetirla más tarde entregaría un enlace que ya venció.
Errores
La forma plana —{ "error": "…" }.
Estado | Causa |
| El pedido no se pudo aceptar como evento |
| Falló la verificación de firma |
| Verify token que no coincide, o verificación por desafío no habilitada |
| No existe el endpoint en este workspace, o está inactivo |
| Cuerpo de más de 10 MB |
| La verificación de firma está configurada pero falta su secreto |
Ver también
API Gateway → Endpoints en la documentación, para crear uno, asignarle automatizaciones y configurar las reglas de origen que aplican a quien llame desde un navegador.