Objetos y tipos
Todos los objetos que devuelve la API, campo a campo, con sus tipos y sus valores posibles.
Última actualización: 23 de agosto de 2026
La referencia de campos. Si buscas cómo se usa cada endpoint, están en las páginas de referencia; esto es el diccionario.
Dos reglas generales antes de empezar:
- Todo campo marcado como anulable puede llegar
null. No es un descuido nuestro, es un dato que la sala no ha rellenado. - Pueden aparecer campos nuevos sin previo aviso. Ignora los que no conozcas en vez de fallar al deserializar.
Money
Cualquier importe de la API.
| Campo | Tipo | Notas |
|---|---|---|
amount | entero | Céntimos. 1250 son 12,50 € |
currency | cadena | Código ISO 4217. "EUR" |
Nunca decimales. El porqué está en convenciones.
Page
La envoltura de todos los listados.
| Campo | Tipo | Notas |
|---|---|---|
data | array | Los elementos de esta página |
hasMore | booleano | Si queda algo detrás |
nextCursor | cadena | null | Lo que pides para la siguiente página |
Venue
La sala. GET /venues.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | |
name | cadena | Nombre público |
slug | cadena | Identificador legible |
host | cadena | Dominio público. Con él se componen las URLs de imagen |
timezone | cadena | null | IANA ("Europe/Madrid") |
Event
El evento. GET /events, GET /events/{id}.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | |
venueId | cadena | null | |
type | enum | single · multiPerformance · recurring |
status | enum | draft · published |
title | cadena | |
subtitle | cadena | null | |
slug | cadena | null | |
shortDescription | cadena | null | |
imageId | cadena | null | Imagen principal. Ver imágenes |
posterImageId | cadena | null | Cartel vertical |
featured | booleano | Destacado por la sala |
minimumAge | cadena | null | Texto ya resuelto ("18", "Todos los públicos") |
promoter | cadena | null | |
nextPerformanceAt | fecha | null | Próxima fecha con venta abierta |
performanceCount | entero | Cuántas fechas tiene |
priceFrom | Money | null | El «desde X €» del cartel |
ticketing.mode | enum | internal · external · free |
ticketing.externalUrl | cadena | null | A dónde va la venta si es externa |
ticketing.maxPerOrder | entero | null | Tope de entradas por pedido |
publishedAt | fecha | null | |
createdAt | fecha | |
updatedAt | fecha | El campo que compara updatedSince |
Performance
La fecha concreta que se vende. GET /performances, GET /performances/{id}.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | |
eventId | cadena | null | |
venueId | cadena | null | |
name | cadena | null | Nombre propio de la fecha, si lo tiene |
status | enum | active · cancelled |
doorsAt | fecha | null | Apertura de puertas |
startsAt | fecha | Hora de inicio. Es lo que ordena el listado |
endsAt | fecha | null | |
capacity | entero | null | Aforo. null = sin tope más allá del stock |
sold | entero | Entradas vendidas |
available | entero | null | Plazas libres. null cuando capacity es null |
createdAt | fecha | |
updatedAt | fecha |
TicketType
La tarifa. Aparece dentro de GET /performances/{id}/availability.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | Es el ticketTypeId que se manda al vender |
eventId | cadena | null | |
performanceId | cadena | null | null en los abonos |
performanceIds | array de cadenas | Fechas que cubre. Solo tiene contenido en los abonos |
scope | enum | performance · pass |
name | cadena | |
description | cadena | null | |
price | Money | |
status | enum | active · soldOut · hidden |
channel | enum | online · boxOffice · both |
zone | objeto | null | { key, name } de la zona de aforo |
maxPerOrder | entero | null | |
availableFrom | fecha | null | Inicio de la ventana de venta |
availableUntil | fecha | null | Fin de la ventana de venta |
includes | array | { key, name, quantity } — consumiciones, ropero… |
Availability
El elemento del array availability, en el mismo endpoint.
| Campo | Tipo | Notas |
|---|---|---|
ticketTypeId | cadena | Cruza con TicketType.id |
name | cadena | |
price | Money | |
available | entero | Unidades libres, con el aforo ya aplicado |
onSale | booleano | Dentro de ventana y con unidades |
Order
El pedido. GET /orders, POST /orders, /confirm, /cancel.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | Uso interno |
reference | cadena | Lo que identifica el pedido de cara fuera. TK-TEMPO-20260823-AB12 |
venueId | cadena | null | |
status | enum | pending · paid · cancelled · failed · refunded |
source | enum | online · boxOffice · api |
paymentMethod | enum | cash · cardTerminal · redsys · stripe · free · demo · pending |
customer.email | cadena | null | |
customer.name | cadena | null | |
customer.phone | cadena | null | |
lines | array de OrderLine | |
subtotal | Money | Entradas, sin gastos de gestión |
serviceFee | Money | Gastos de gestión |
total | Money | Lo que se cobra |
ticketsIssued | booleano | Si ya existen las entradas |
reservationExpiresAt | fecha | null | Cuándo caduca la reserva |
paidAt | fecha | null | |
createdAt | fecha | |
updatedAt | fecha |
OrderLine
| Campo | Tipo | Notas |
|---|---|---|
eventId | cadena | null | |
performanceId | cadena | null | |
ticketTypeId | cadena | null | |
eventName | cadena | Congelado en el momento de la venta |
ticketTypeName | cadena | Congelado en el momento de la venta |
performanceStartsAt | fecha | null | |
unitPrice | Money | |
quantity | entero | |
lineTotal | Money |
Si la sala renombra un evento, los pedidos ya vendidos siguen diciendo lo que el comprador compró. Es lo correcto para una factura, y explica que a veces no coincidan con el catálogo actual.
Ticket
La entrada emitida. GET /tickets, /check-in, y dentro de la respuesta de /confirm.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | |
code | cadena | El código de la entrada. Lo que hay en el QR |
orderId | cadena | null | |
orderReference | cadena | null | Presente cuando el endpoint puede resolverlo |
eventId | cadena | null | |
performanceId | cadena | null | |
ticketTypeId | cadena | null | |
venueId | cadena | null | |
status | enum | valid · used · void |
source | enum | null | online · boxOffice · api |
holder | objeto | null | null en las entradas al portador |
holder.name | cadena | null | |
holder.lastName | cadena | null | |
holder.documentType | enum | null | dni · nie · passport · other |
holder.documentNumber | cadena | null | |
email | cadena | null | |
pricePaid | Money | |
checkedInAt | fecha | null | Cuándo entró |
includes | array | { key, name, quantity, used } |
createdAt | fecha |
El objeto Ticket no lleva la firma que hace válida la entrada, y ningún endpoint la devuelve. Ver entradas y control de acceso.
Attendee
La persona. GET /attendees.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | |
email | cadena | Clave natural de la persona |
name | cadena | null | |
phone | cadena | null | |
marketingConsent | booleano | Fíltralo antes de mandar nada comercial |
orderCount | entero | Pedidos en toda la organización |
totalSpent | Money | Gasto acumulado |
createdAt | fecha | |
updatedAt | fecha |
SalesSummary
El bloque de recaudación de GET /reports/sales. Aparece en summary, en previousSummary y en cada día de timeline.
| Campo | Tipo | Notas |
|---|---|---|
orders | entero | |
tickets | entero | |
ticketRevenue | Money | Ingresos por entradas |
vat | Money | IVA de las entradas |
serviceFees | Money | Gastos de gestión |
total | Money | |
averageOrder | Money | Ticket medio |
byChannel.online | ChannelSlice | Web de venta de la sala |
byChannel.boxOffice | ChannelSlice | Mostrador |
byChannel.api | ChannelSlice | Tu integración |
En timeline, cada elemento lleva además date ("2026-08-01").
ChannelSlice
| Campo | Tipo |
|---|---|
orders | entero |
tickets | entero |
total | Money |
Error
| Campo | Tipo | Notas |
|---|---|---|
error | enum | Código estable. La lista en errores |
details | objeto | Opcional. Solo lo que ayuda a corregir la llamada |
WebhookEvent
El sobre de una entrega de webhook.
| Campo | Tipo | Notas |
|---|---|---|
id | cadena | evt_…. Deduplícalo |
type | enum | order.paid, ticket.checkedIn… |
createdAt | fecha | |
data | objeto | { order }, { ticket }, { event } o { performance } |
El objeto dentro de data es exactamente el mismo que devuelve la API. Ver webhooks.
Tipos de TypeScript
@tickeep/client exporta todos estos tipos, así que no hace falta que los transcribas:
import type {
Attendee, Availability, CheckInResult, Order, Page,
Performance, Ticket, TicketType, TickeepEvent, Venue,
} from '@tickeep/client'
TickeepEvent y no Event porque Event ya existe en el DOM y la colisión se paga en cada archivo. Ver cliente de TypeScript.
Seguir por aquí
Formatos, nombres, fechas, dinero y cabeceras: lo que se repite en todas las respuestas y no vuelve a explicarse en cada endpoint.
Salas, eventos, fechas y disponibilidad. Los endpoints de lectura con los que se construye una cartelera.
El flujo de venta en dos tiempos: reservar, cobrar y emitir. Con los cuatro endpoints que lo componen y qué hace cada uno.