La API de entradas de Connect Manager recibe las entradas que vende una ticketera y las crea en el Ágora del local como entradas canjeables. La ticketera hace un POST a https://hub.connectmanager.es/api/v1/tickets con el token del local por cada entrada y por cada cambio de estado; Connect Manager responde al momento y crea, mantiene o anula la entrada en Ágora.
Esta guía es para los desarrolladores de la ticketera (Speakeasy, por ejemplo). La configuración del local en Connect Manager y en Ágora la hace el técnico de FOS o del distribuidor, y está en la guía de la integración de Speakeasy.
Qué necesitas#
| Qué | Detalle | Quién lo da |
|---|---|---|
| Dirección | https://hub.connectmanager.es/api/v1/tickets, método POST, cuerpo JSON. | FOS |
| Token del local | Una cadena de 48 caracteres. Cada local tiene el suyo y es el que decide en qué Ágora se crea la entrada. | FOS, por un canal privado |
| Workplace del local | El número del local en su instalación de Ágora, que va en workplace.id. | FOS |
| Consumiciones de cada entrada | Cuántas consumiciones incluye cada entrada que se vende, que va en included_products.included_drinks_quantity. | El local |
Autenticación#
El token va en la cabecera Authorization como Bearer. Sin token, con uno que no existe o con la integración del local desactivada, la respuesta es un 401.
POST /api/v1/tickets HTTP/1.1
Host: hub.connectmanager.es
Authorization: Bearer <token del local>
Content-Type: application/json
Accept: application/json
Enviar una entrada#
Un aviso por entrada y por cada cambio de estado. El mismo entry.id identifica siempre la misma entrada: el segundo aviso no crea otra, la actualiza.
{
"event_type": "ticket.updated",
"sent_at": "2026-07-22T18:05:00+02:00",
"entry": {
"id": "el7yuiyep0006msyw2pri1tem1LpJwSc",
"code": "P6J21FF2S",
"name": "Entrada general",
"quantity": 1,
"status": "activated",
"status_updated_at": "2026-07-22T18:04:30+02:00"
},
"workplace": { "id": 11, "name": "Discoteca" },
"validity": {
"valid_from": "2026-07-22T18:00:00+02:00",
"valid_until": "2026-07-23T04:00:00+02:00",
"timezone": "Europe/Madrid"
},
"included_products": { "included_drinks_quantity": 2 },
"amounts": {
"currency": "EUR",
"net_amount": 9.09,
"tax_rate": 10.0,
"tax_amount": 0.91,
"gross_amount": 10.0,
"total_amount": 10.0
},
"payment": {
"payment_id": "Cl7yuiyhy0007msyw4vfl5ai6YF4WZRn",
"payment_method": "card",
"payment_status": "completed"
}
}
Campos#
| Campo | Tipo | Obligatorio | Para qué sirve |
|---|---|---|---|
entry.id | texto, hasta 191 | Sí | Identificador de la entrada en la ticketera. Une todos los avisos de una misma entrada. |
entry.code | texto, hasta 100 | Sí | El código que se lee en barra. Es el código de la entrada en Ágora. |
entry.status | texto | Sí | Uno de pending, activated, used, cancelled, refunded, partially_refunded o expired. Ver «Estados». |
workplace.id | entero | Sí | El workplace del local. Si no es el del token, la entrada se rechaza con un 422. |
entry.name | texto, hasta 255 | No | El nombre de la entrada. Solo cuenta si el local tiene una regla por nombre. |
included_products.included_drinks_quantity | entero, 0 o más | No, pero recomendado | Las consumiciones incluidas. Con ellas se elige el tipo de entrada de Ágora. Si no se manda, cuenta como 0. |
validity.valid_from y validity.valid_until | fecha ISO 8601 | No | Desde y hasta cuándo se puede canjear. Hacen falta las dos; si no, vale lo que diga el tipo de entrada en Ágora. |
validity.timezone | zona IANA | No | La zona del evento, por ejemplo Europe/Madrid. Si no se manda o no existe, Madrid. |
entry.status_updated_at | fecha ISO 8601 | No, pero recomendado | Cuándo cambió el estado. Sirve para no aplicar un aviso viejo que llega tarde. Si no viene, se usa sent_at. |
sent_at | fecha ISO 8601 | No | Cuándo se envió el aviso. |
event_type | texto, hasta 40 | No | El tipo de aviso en la ticketera. Se guarda tal cual. |
entry.quantity | entero, 1 o más | No | Se guarda, pero en Ágora cada código es una sola entrada: para tres entradas, tres códigos. |
customer, amounts, payment, cancellation, usage | objetos | No | Se guardan en Connect Manager para conciliar. No llegan a Ágora. |
Estados#
entry.status | Qué pasa en Ágora |
|---|---|
activated | Se crea la entrada canjeable, con su tipo, su código y su validez. |
used, partially_refunded | Sigue válida. Si todavía no estaba en Ágora, se crea. |
cancelled, refunded | Si ya estaba en Ágora, se vuelve a mandar caducada y deja de poder canjearse. Si no había llegado, no se manda. |
pending | No se manda: espera a que se pague. |
expired | No se manda: Ágora ya la caduca por su validez. |
Una entrada que ya se ha canjeado en barra no se puede anular.
Respuestas#
| Código | Cuerpo | Qué hacer |
|---|---|---|
| 200 | {"success": true, "message": "Ticket received successfully", "entry_id": "…"} | Nada: está recibida. Crearla en Ágora va por detrás. |
| 401 | {"success": false, "error": "Unauthorized"} | Revisar el token. No reintentar con el mismo. |
| 422 | {"success": false, "error": "Validation error", "fields": ["entry.code"]} | Corregir los campos de fields y volver a mandar. |
| 429 | Demasiadas peticiones | Esperar y reintentar. El límite es de 600 avisos por minuto por token. |
| 5xx | Error del servidor | Reintentar más tarde con el mismo aviso. |
Orden, repeticiones y reintentos#
- Repetir un aviso no duplica nada: la entrada se identifica por
entry.id. Si el aviso no cambia lo que hay en Ágora, no se vuelve a mandar. - Los avisos pueden llegar desordenados: uno con
status_updated_atanterior al último aplicado se guarda en el histórico pero no cambia la entrada. Así, un «activated» que llega tarde no resucita una entrada cancelada. - Un Ágora apagado no frena la venta: el 200 llega aunque el local no tenga conexión. Connect Manager reintenta crear la entrada en Ágora y, si sigue fallando, la deja en error para reenviarla desde el panel.
sequenceDiagram
participant T as Ticketera
participant CM as Connect Manager
participant AG as Ágora del local
T->>CM: POST /api/v1/tickets (Bearer)
CM->>CM: Valida el token, los campos y el workplace
CM-->>T: 200 recibida
CM->>AG: Crea, mantiene o anula la entrada
AG-->>CM: Correcto o error (se reintenta)
Modo prueba#
Las integraciones nuevas empiezan en modo prueba: los avisos se validan, se guardan y responden igual que en producción, pero nada se crea en Ágora. FOS revisa las entradas recibidas y apaga el modo prueba cuando todo llega bien. Las entradas que se mandaron en modo prueba no pasan a Ágora al apagarlo: si alguna era una venta de verdad, hay que volver a mandarla.
Errores frecuentes#
| Síntoma | Causa | Solución |
|---|---|---|
| 401 con un token que antes funcionaba | Se ha generado un token nuevo o se ha desactivado la integración del local. | Pedir a FOS el token vigente. |
422 con workplace.id | El workplace no es el del local del token. | Mandar el workplace que dio FOS para ese local. |
422 con entry.status | Un estado que no está en la lista. | Usar uno de los siete estados de la tabla. |
| La entrada se canjea con las consumiciones equivocadas | No se mandó included_drinks_quantity, o se mandó un número sin tipo de entrada en Ágora. | Mandar las consumiciones y avisar a FOS de los números nuevos. |
| Una entrada cancelada sigue valiendo | El aviso de cancelación es anterior a otro ya aplicado, o la entrada ya se canjeó. | Mandar la cancelación con su status_updated_at real. |
Preguntas frecuentes#
¿Hay que esperar a que la entrada esté en Ágora para responder al cliente?#
No. El 200 llega en cuanto Connect Manager guarda el aviso; crear la entrada en Ágora va por detrás y tarda unos segundos.
¿Puedo mandar el mismo aviso dos veces?#
Sí. La entrada se identifica por entry.id y un aviso que no cambia nada no se vuelve a mandar a Ágora.
¿Qué datos personales llegan a Ágora?#
Ninguno. A Ágora solo van el tipo de entrada, el código y la validez. El cliente, los importes y el pago se guardan en Connect Manager para conciliar.
¿Un token sirve para varios locales?#
No. Cada local tiene su integración y su token, y el workplace tiene que ser el de ese local.
¿Cómo se anula una entrada?#
Mandando el mismo entry.id con el estado cancelled o refunded. Si ya estaba en Ágora, deja de valer.
Fuentes#
- Connect Manager: especificación «Envío de entradas a Ágora» que se entrega a las ticketeras y comportamiento de la API de entradas, versión del 04-11-2026.
- Guía del integrador de Ágora, apartado «Entradas»: importación de entradas con su tipo, su código y su validez.
- Connect Manager: guía de la integración de Speakeasy.