Flujo API (canales)
Guía del contrato B2B autenticado para integradores externos.
Base URL
- Producción:
https://api.bticketing.com/api - Preproducción API:
https://api-pre.betickets.io/api - Preproducción Widget:
https://widget-pre.betickets.io - Prefijo API de canales:
/sales-channel/v1
1) Autenticación
Único endpoint público. Intercambia sales_channel_slug + widget_key por un Bearer token Sanctum.
http
POST /sales-channel/v1/auth/token
Content-Type: application/json
{
"sales_channel_slug": "teatro-calderon",
"widget_key": "wk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}Respuesta:
json
{
"success": true,
"data": {
"access_token": "1|abc...",
"token_type": "Bearer",
"sales_channel_slug": "teatro-calderon"
}
}TIP
El token anterior se revoca automáticamente al solicitar uno nuevo. Guarda siempre el token más reciente.
Todos los endpoints siguientes requieren:
httpAuthorization: Bearer {access_token}
2) Configuración del canal
http
GET /sales-channel/v1/{salesChannelSlug}/configDevuelve branding básico del canal (colores, logo, nombre).
3) Catálogo (eventos y sesiones)
http
GET /sales-channel/v1/{salesChannelSlug}/{lang}/events
GET /sales-channel/v1/{salesChannelSlug}/{lang}/events/{eventId}
GET /sales-channel/v1/{salesChannelSlug}/{lang}/events/{eventId}/sessions
GET /sales-channel/v1/{salesChannelSlug}/{lang}/events/{eventId}/sessions/{sessionId}
GET /sales-channel/v1/{salesChannelSlug}/{lang}/events/{eventId}/mapsNotas de payload:
GET .../eventsdevuelve payload simplificado: sinfeesnimanual_promotions.sessionsincluyeid+start_datetime.GET .../events/{eventId}/sessions/{sessionId}devuelve el detalle de sesión saneado:- sin
data.sales_channel - sin
session.venue - sin
session.start_date/session.end_date - sin
session.fees - sin
created_at/updated_atenelements.seats[].rates[].meta
- sin
4) Carrito / orden
http
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders
GET /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}
DELETE /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}POST .../orders:
order_tokenes opcional: si no se envía, el backend genera un UUID automáticamente.- Campos requeridos:
session_seat_id,rate_id.
Gestión de items
http
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items
DELETE /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items/{itemId}
# Bulk
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items-bulk
DELETE /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items/bulk
# Zonas no numeradas
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items/sector
# Cambio de tarifa
PUT /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/items/change-rate5) Descuentos
http
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/apply-voucher
DELETE /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/vouchers/{voucherCode}6) Confirmación de pago
El canal externo gestiona el cobro con su propia pasarela y notifica el resultado:
http
POST /sales-channel/v1/{salesChannelSlug}/{lang}/orders/{orderToken}/confirm-payment
{
"transaction_id": "ext_12345",
"amount": 125.50,
"payment_method": "card"
}Ver Flujo de pago para el detalle completo (validaciones, idempotencia, errores).
Ejemplo rápido (curl)
Producción:
bash
# 1. Obtener token
TOKEN=$(curl -s -X POST "https://api.bticketing.com/api/sales-channel/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"sales_channel_slug":"teatro-calderon","widget_key":"wk_xxxx"}' \
| jq -r '.data.access_token')
# 2. Config del canal
curl "https://api.bticketing.com/api/sales-channel/v1/teatro-calderon/config" \
-H "Authorization: Bearer $TOKEN"
# 3. Listar eventos
curl "https://api.bticketing.com/api/sales-channel/v1/teatro-calderon/es/events" \
-H "Authorization: Bearer $TOKEN"
# 4. Crear orden (sin order_token — backend lo genera)
curl -X POST "https://api.bticketing.com/api/sales-channel/v1/teatro-calderon/es/orders" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"session_seat_id":456,"rate_id":1}'Preproducción:
bash
curl -X POST "https://api-pre.betickets.io/api/sales-channel/v1/auth/token" \
-H "Content-Type: application/json" \
-d '{"sales_channel_slug":"teatro-calderon","widget_key":"wk_xxxx"}'
curl "https://api-pre.betickets.io/api/sales-channel/v1/teatro-calderon/es/events" \
-H "Authorization: Bearer {{access_token}}"