Operaciones de reservas
Lista y consulta las reservas de tu cuenta con sus productos, participantes y pagos por API v1 o MCP.
Una reserva (order) es lo que queda registrado cuando alguien compra en tu motor de reservas o cuando das de alta una venta desde el panel: comprador, participantes, lo reservado (actividades, alojamientos, packs, alquileres o tienda), pagos y estado. list-orders y get-order sirven para consultar esas reservas ya hechas, no para crearlas.
Reservar no es una operación de esta página: no hay create-order. El motor de reservas es quien crea las reservas cuando el cliente completa la compra. Si lo que necesitas es comprobar qué días y con cuántas plazas se puede reservar un producto (el paso previo, con el enlace al motor de reservas ya incluido), esas son las operaciones de Operaciones de disponibilidad, calendario y precios.
Si vienes de la API pública anterior de Buky, la consulta de reservas con filtros de base de datos (paginación, rango de fechas, estado) está documentada aparte en API pública — Reservas (orders). Esta página cubre la v1 nueva.
Operaciones de esta página: list-orders, get-order (ambas de solo lectura).
Las bases comunes (autenticación, GET frente a POST, prueba en seco, errores HTTP, límites) están en API v1 — Introducción y primeros pasos.
list-orders: lista reservas con filtros y totales
Es una operación de solo lectura: vale con cualquier token. Devuelve las reservas que cumplen los filtros, en vista compacta, más un desglose de importes por estado y origen.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/list-orders?from=2026-01-01T00:00:00.000Z&to=2026-09-15T23:59:59.999Z&pending_payment=true&limit=20" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «Enséñame las reservas con pago pendiente de este año» o «Reservas del 1 de enero al 15 de septiembre con pago pendiente».
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
from | fecha | opcional | Inicio del rango (ISO) sobre cuándo se hizo la reserva (createdAt). |
to | fecha | opcional | Fin del rango sobre createdAt (inclusive). |
booked_from / booked_to | fecha | opcional | Rango sobre las fechas disfrutadas de la reserva (entrada/salida), no sobre cuándo se compró. Para «qué reservas hay este día concreto». |
status | enum | opcional | pending (carrito), active o cancelled. Por defecto, todos. |
origin | enum | opcional | manual (alta desde el panel), booking (automática desde el motor de reservas) o channel (importada de un canal externo). Por defecto, todos. |
pending_payment | booleano | opcional | true → solo reservas con pago pendiente. |
q | texto | opcional | Busca por el nombre del comprador (contiene, sin tildes). |
client | texto | opcional | Nombre, email o identificador de un cliente final: reservas donde es comprador o participante. Se resuelve contra tu ficha de Operaciones de clientes. |
session | texto | opcional | Identificador (24 hex) de una sesión: solo las reservas con alguna plaza en esa sesión. |
full | booleano | opcional | true → el documento completo de cada reserva (pagos, participantes, extras). Por defecto, la vista compacta. Úsalo con cuidado: es pesado. |
limit | número | opcional | Máximo de resultados, las más recientes primero. Se aplica después de filtrar. |
customer_id | texto | opcional | Se toma del token. Solo hace falta con tokens multicuenta. |
Qué devuelve
Ejemplo real, recortado, de las últimas reservas:
{
"success": true,
"operation": "list-orders",
"count": 5,
"total": 32,
"breakdown": {
"by_status": {
"active": { "count": 16, "total_cents": 65800, "pending_cents": 58400 },
"cancelled": { "count": 16, "total_cents": 229800, "pending_cents": 221000 }
},
"by_origin": {
"manual": { "count": 10, "total_cents": 59200, "pending_cents": 58000 },
"booking": { "count": 12, "total_cents": 16400, "pending_cents": 1400 },
"channel": { "count": 10, "total_cents": 220000, "pending_cents": 220000 }
},
"total_cents": 295600,
"pending_cents": 279400
},
"items": [
{ "_id": "69a6cbb0afbedf1dee60bce3", "name": "Laura Gómez", "total": 1000, "amount_pending": 0, "status": "active", "origin": "booking", "createdAt": "2026-03-03T11:53:20.971Z", "start": "2026-03-24T11:00:00.000Z", "end": "2026-03-24T12:00:00.000Z", "bookings_count": 1 },
{ "_id": "69a6c304c076529dd7891487", "name": "Marcos Ibáñez", "total": 10000, "amount_pending": 10000, "status": "active", "origin": "manual", "createdAt": "2026-03-03T11:16:20.952Z", "start": null, "end": null, "bookings_count": 0 },
"…"
],
"warnings": []
}| Campo | Significado |
|---|---|
count | Reservas devueltas en esta página (después de aplicar limit). |
total | Total de reservas que cumplen los filtros, sin recortar por limit. Si es mayor que count, hay más de las que ves. |
breakdown | Totales por estado, por origen y por el cruce de ambos: número de reservas, importe total y pendiente (en céntimos), sobre todo lo filtrado, no solo la página visible. |
items | Cada reserva en vista compacta: comprador (name), importes en céntimos, status, origin, fecha de creación (createdAt), fechas disfrutadas (start/end) y número de plazas reservadas (bookings_count). Con full:true, el documento completo de cada una, como el item de get-order. |
warnings | Avisos de la consulta, si los hay. |
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
session no es un identificador válido (24 hex) | success: false con error: "invalid_session_id" y el motivo en details. |
Consejos
from/tofiltran por cuándo se compró;booked_from/booked_tofiltran por cuándo se disfruta. No son intercambiables: para «reservas de mañana» usabooked_from/booked_to.- Pide
full:truesolo si necesitas los pagos o los participantes de varias reservas a la vez; para una sola,get-orderes más ligero y siempre trae el documento fresco.
get-order: detalle completo de una reserva
Es una operación de solo lectura: vale con cualquier token. Devuelve el documento completo y actualizado de una reserva a partir de su identificador, que sale de list-orders.
Cómo llamarla
curl "https://api.bukyapp.com/v1/ops/get-order?order=69a6cbb0afbedf1dee60bce3" \
-H "Authorization: Bearer bk_TU_TOKEN"Por MCP: «Dame el detalle de la reserva 69a6cbb0afbedf1dee60bce3» (normalmente después de pedir una lista y elegir una).
Parámetros
| Parámetro | Tipo | Nivel | Qué hace |
|---|---|---|---|
order (alias id, order_id) | texto | obligatorio | Identificador (24 hex) de la reserva. Sale de list-orders. Esta entidad no se busca por nombre: hace falta el identificador exacto. |
Qué devuelve
Ejemplo real, recortado, de una reserva de una actividad:
{
"success": true,
"operation": "get-order",
"_id": "69a6cbb0afbedf1dee60bce3",
"resolved": { "id": "69a6cbb0afbedf1dee60bce3", "reason": "lookup directo por _id" },
"item": {
"_id": "69a6cbb0afbedf1dee60bce3",
"status": "active",
"origin": "booking",
"name": "Laura Gómez",
"surname": "Ruiz",
"email": "laura@example.com",
"phone": "600 000 000",
"total": 1000,
"amountToPay": 1000,
"amountPending": 0,
"createdAt": "2026-03-03T11:53:20.971Z",
"start": "2026-03-24T11:00:00.000Z",
"end": "2026-03-24T12:00:00.000Z",
"buyer": "69a6cbb1afbedf1dee60bd06",
"products": [
{
"product_id": "64245a449362b0005fbd7119",
"product_type": "activity",
"product_title": { "es": "Actividad con personal estricto" },
"total": 1000,
"pax": [ { "name": "Laura Gómez", "surname": "Ruiz" } ],
"bookings": ["69a6cbb1afbedf1dee60bcf7"]
}
],
"payments": [
{ "mode": "redsys", "status": "completed", "total": 1000, "date": "2026-03-03T11:54:40.247Z" }
]
},
"warnings": []
}| Campo | Significado |
|---|---|
_id | Identificador de la reserva consultada. |
resolved | Cómo se localizó la reserva. Con esta entidad siempre es un lookup directo por _id, sin ambigüedad posible. |
item.status | pending, active o cancelled. |
item.origin | manual, booking o channel. |
item.name, surname, email, phone | Datos del comprador. |
item.total, amountToPay, amountPending | Importe total, a cobrar y pendiente, en céntimos. |
item.start, item.end | Fechas disfrutadas: primera entrada y última salida de sus reservas. |
item.buyer | Identificador del cliente final comprador; su ficha está en Operaciones de clientes. |
item.products | Lo reservado: producto, tipo, precio, participantes (pax) y las plazas (bookings) que ocupa. |
item.payments | Pagos asociados a la reserva: medio, estado e importe. |
Errores propios de esta operación
| Situación | Respuesta |
|---|---|
Falta order (y sus alias id/order_id) | success: false con error: "order_intent_required". |
| El identificador no existe, no es tuyo o está borrado | success: false con error: "order_not_found". |
Consejos
- Usa siempre
get-orderpara confirmar «cómo quedó» una reserva después de un pago o un cambio:list-orderses la vista compacta, esta es la fresca y completa. - El identificador no se adivina por nombre de cliente: primero
list-orders(conqoclient) para localizarla, luegoget-ordercon su_id.
