Skip to content

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:

http
Authorization: Bearer {access_token}

2) Configuración del canal

http
GET /sales-channel/v1/{salesChannelSlug}/config

Devuelve 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}/maps

Notas de payload:

  • GET .../events devuelve payload simplificado: sin fees ni manual_promotions. sessions incluye id + 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_at en elements.seats[].rates[].meta

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_token es 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-rate

5) 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}}"