PXSOLAgencias
Iniciar sesión

Documentación de la API

API REST para integrar tu sistema con Pxsol Agencias: buscá disponibilidad, cotizá y creá reservas desde tu propia plataforma.

Autenticación

Todos los endpoints piden una API key en el encabezado. La generás desde tu cuenta, en API Pública → Keys y Documentación.

Authorization: Bearer <api-key>

Una key puede estar acotada: a ciertos endpoints (si le falta el permiso, la respuesta es 403 con code FORBIDDEN_SCOPE y el permiso que hace falta en required_scope) y a un solo cliente de la agencia (en ese caso sólo ve y opera sus propias reservas; una reserva de otro cliente responde 404). Si no se acotó nada, la key accede a todo.

URL de integración

En los ejemplos, https://BASE-URL es la URL de la API. Te la entregamos junto con tus credenciales cuando activamos el acceso.

Los archivos traen una base de ejemplo: reemplazala por la URL que te damos con tus credenciales (en Postman alcanza con editar la variable base_url).

Entorno de prueba

Antes de integrar contra inventario real, probá con una clave de prueba. La generás desde tu cuenta, en API Pública → Nueva key → Prueba. Empieza con pk_test_ y opera exactamente los mismos endpoints.

Authorization: Bearer pk_test_…
  • Misma URL y mismas rutas: para pasar a producción cambiás la clave y nada más.
  • La disponibilidad es inventada y ninguna reserva llega a un proveedor real. Los rate_token empiezan con sbx:: y sólo los acepta una clave de prueba (y viceversa: una clave real los rechaza con 422).
  • Las reservas que crees aparecen en la pantalla de Reservas de tu cuenta, marcadas como prueba, y las podés cancelar desde ahí o por la API. No entran en informes, tesorería ni facturación.
  • Los correos al pasajero se envían igual, con [PRUEBA] en el asunto. Usá una dirección tuya.
  • Los webhooks disparan normalmente y traen test: true en el cuerpo.
  • Todavía no cubre servicios turísticos (/v1/services) ni el área /v1/admin: responden 422 con una clave de prueba.

Casos de error que podés forzar

Hotel que nunca tiene disponibilidad5b000000-0000-4000-8000-000000000004
Tarifa cuyo alta falla en el proveedorNRF-FAIL

Hoteles

Destinos

Reglas de precio

Búsqueda de disponibilidad

Cotizaciones

Reservas

Admin — Reservas

Pasajeros

Webhooks

Servicios Turísticos

Estado del servicio

Cómo leer los precios

CampoQué esPara qué lo usás
price.net · price.totalLa tarifa del proveedor: es tu COSTO.Conciliar con lo que te factura el proveedor. No mostrárselo al viajero: le estarías vendiendo al costo.
price.bar_referenceLa tarifa pública del hotel, cuando el proveedor la informa.Mostrar el precio de lista para comparar contra el tuyo. Es referencia, no un precio vendible.
pricing.purchase_priceTu precio de compra: la tarifa del proveedor más tus reglas de COSTO.Calcular tu margen y mandarlo como totalNet al reservar.
pricing.sale_priceTu precio de venta: el de compra más tus reglas de MARGEN.Es el precio que le mostrás a tu cliente, y el que va como totalAmount al reservar.
  • Los importes de pricing vienen en unidades menores (centavos) y sin decimal: sale_price 7229 son 72,29. La moneda es la de price.currency.
  • Al reservar mandá totalAmount = sale_price y totalNet = purchase_price. La API confía en esos números: no los recalcula, así que si mandás el precio del proveedor la reserva queda registrada sin margen.
  • Si una tarifa no se pudo cotizar, el campo pricing no viene (y las reglas que no se aplicaron se listan en pricing.skipped con el motivo). En ese caso no vendas esa tarifa: price es tu costo, no un precio de venta.

Imágenes

CampoEn el listado (POST /v1/availability)En la ficha (GET /v1/hotels/:id/availability)
hotels[].thumbnail_urlLa foto de portada del hotel.La misma.
hotels[].imagesHasta 5 fotos del hotel, la principal primero.La galería completa (28 fotos de promedio, hay hoteles con más de 600).
rooms[].imagesNo viene: este endpoint no devuelve fotos de habitación. Si las necesitás, pedilas con GET /v1/hotels/:id/availability.Sí: las fotos de cada habitación.
  • El tope del listado es para que la respuesta no se vuelva impracticable: con la galería completa, una búsqueda de 100 hoteles pesaría unos 740 KB. En la ficha no hay tope porque el hotel es uno.
  • rooms[].images no existe en el listado, y no es que el hotel no tenga fotos: el buscador consulta precios y disponibilidad, y las fotos de habitación las tiene el contenido del proveedor, que se pide hotel por hotel. Para obtenerlas, llamá a GET /v1/hotels/:id/availability con el hotel que el cliente eligió — ahí vienen las de cada habitación y además la galería completa del hotel.
  • La forma es siempre la misma en los dos: cada imagen trae url e is_primary, igual que las de GET /v1/hotels/:id. Un hotel sin fotos cargadas devuelve la lista vacía.

Estados de reserva

EstadoDescripciónPuede ir a
PENDINGReserva creada, pendiente de confirmaciónCONFIRMED, CANCELLED, CANCELLED_BY_CLIENT, EXPIRED
CONFIRMEDConfirmada por la agenciaCANCELLED, CANCELLED_BY_CLIENT, PAID, BLOCKED
BLOCKEDArchivada: el viaje terminó sin cobro ni factura registradosCONFIRMED, CANCELLED, PAID
PAIDPago recibido y confirmado(terminal)
CANCELLEDCancelada por la agencia(terminal)
CANCELLED_BY_CLIENTCancelada a solicitud del cliente(terminal)
EXPIREDExpirada automáticamente por vencimiento del hold(terminal)

Planes de comida

CódigoNombreDescripción
RORoom OnlySolo habitación
BBBed & BreakfastDesayuno incluido
HBHalf BoardMedia pensión (desayuno y cena)
FBFull BoardPensión completa (desayuno, almuerzo y cena)
AIAll InclusiveTodo incluido
UAIUltra All InclusiveUltra todo incluido

¿Querés integrarte?

Si ya sos cliente, generá tu API key desde tu cuenta. Si todavía no lo sos, escribinos y te ayudamos a evaluar la integración.

Entrar a mi cuenta
Documentación de la API — Pxsol Agencias