Requiply
Desarrolladores

Referencia de la API REST

Todos los endpoints de la API REST pública v1 de Requiply con su método HTTP, los tipos de clave que aceptan y el método del SDK que los envuelve, además de las convenciones de las peticiones, la paginación, las fechas y los errores.

La API pública está bajo:

https://api.requiply.com/api/public/v1

Cada petición se autentica con Authorization: Bearer <api-key>; consulta Autenticación y claves de API. Los cuerpos de las peticiones y de las respuestas son JSON. El SDK de TypeScript envuelve todos los endpoints de abajo, y sus guías de recursos describen los campos en detalle.

Todavía no se ha publicado ningún documento OpenAPI. Los tipos de TypeScript del SDK son la descripción más precisa de cada petición y cada respuesta.

Endpoints

Los endpoints publicables aceptan los dos tipos de clave. Los endpoints secretos rechazan una clave publicable con un 403.

Método y rutaClavesMétodo del SDK
GET /org/infoPublicableorg.info()
GET /org/summarySecretaorg.summary()
GET /categories/listPublicablecategories.list()
GET /services/listPublicableservices.list()
GET /inventory/listPublicableinventory.list()
GET /inventory/groups/{id}Publicableinventory.getGroup()
GET /inventory/statusSecretainventory.status()
GET /bundles/listPublicablebundles.list()
GET /bundles/{id}Publicablebundles.get()

Los packs son conjuntos fijos de productos con un único descuento. Los dos endpoints de packs admiten los parámetros de consulta opcionales startDate y endDate; con los dos, cada pack indica availableQuantity, los packs completos libres en ese periodo. Solo listan packs completos y activos. Una clave secreta ve los packs siempre que la función de packs esté activada; una clave publicable, solo si además están activadas las recomendaciones External (externas). Si no, la lista está vacía y bundles/{id} responde 404. GET /inventory/groups/{id} también devuelve los bundles que contienen el grupo.

Disponibilidad, precios y reservas

Método y rutaClavesMétodo del SDK
POST /availability/calendarPublicableavailability.calendar()
POST /availability/itemsPublicableavailability.items()
POST /pricing/quotePublicablepricing.quote()
POST /bookings/createPublicable, solo solicitudes de reservabookings.create()
GET /bookings/listSecretabookings.list()
GET /bookings/{id}Secretabookings.get()
POST /bookings/{id}/notesSecretabookings.addNote()

Una clave publicable debe enviar "asRequest": true a POST /bookings/create; cualquier otra cosa recibe un 403 con data.reason: "request_only".

POST /pricing/quote y POST /bookings/create aceptan bundles: [{ bundleId, quantity }] junto a items; en ese caso, items puede estar vacío. Los presupuestos devuelven bundleDiscountAmount (ya incluido en total) y lineBundles, una entrada por cada pack con su precio para el periodo. Enviar packs cuando la función de packs está desactivada responde 403.

Clientes

Método y rutaClavesMétodo del SDK
POST /clients/lookupSecretaclients.lookup()
POST /clients/createSecretaclients.create()

Productos en venta y ventas

Método y rutaClavesMétodo del SDK
GET /sale-items/listSecreta; publicable mientras la organización vende a los clientessaleItems.list()
GET /sale-items/{id}Secreta; publicable mientras la organización vende a los clientessaleItems.get()
GET /sales/listSecretasales.list()
GET /sales/{id}Secretasales.get()
POST /sales/createSecretasales.create()

Estos endpoints responden 403 con data.reason: "feature_disabled" mientras Enable sales (activar ventas) está desactivado en Funciones o la organización no tiene el plan Advanced. Lo que ve una clave publicable, y cuándo recibe selling_disabled en su lugar, se explica en Ventas y productos en venta.

Informes

Todos los informes necesitan una clave secreta y reciben sus parámetros como parámetros de consulta.

Método y rutaMétodo del SDK
GET /reports/revenuereports.revenue()
GET /reports/bookings-summaryreports.bookingsSummary()
GET /reports/utilizationreports.utilization()
GET /reports/top-itemsreports.topItems()
GET /reports/top-clientsreports.topClients()
GET /reports/outstandingreports.outstanding()
GET /reports/overduereports.overdue()
GET /reports/pipelinereports.pipeline()

Convenciones

TemaRegla
ParámetrosLos endpoints GET reciben parámetros de consulta. Los endpoints POST reciben un cuerpo JSON.
PaginaciónLos endpoints de lista devuelven nextCursor. Vuelve a enviarlo como cursor para obtener la página siguiente; null significa que no hay más páginas. limit va de 1 a 100 (por defecto 25) en las listas de catálogo, disponibilidad y ventas, de 1 a 200 (por defecto 50) en bookings/list y de 1 a 500 (por defecto 100) en inventory/status.
Fechas y horasISO 8601. En los presupuestos, la creación de reservas y availability/items, una fecha y hora sin desfase horario (2026-07-01T10:00:00) se interpreta en la zona horaria de la organización, con el horario de verano incluido. Un valor con Z o con desfase se usa tal cual. Una fecha sin hora es medianoche.
IDLos productos, las categorías, los servicios, los productos en venta y las ventas usan UUID. Las reservas y los clientes usan números. Las reservas y las ventas también tienen el número que ve el personal en la app: pásalo con ?idKind=org.
DineroLos importes están en la unidad principal de la moneda de la organización (por ejemplo 1250.5), con el código de currency al lado.
SubalquileresLos productos de proveedores nunca se devuelven a una clave publicable ni se aceptan de ella. Una clave secreta los ve cuando los subalquileres están activados.

Errores

Una petición fallida responde con un estado HTTP de error y un cuerpo JSON:

{
  "statusCode": 409,
  "message": "Only 2 × Memory card 128 GB left",
  "data": { "reason": "out_of_stock", "saleItemId": "3f6c…", "availableQuantity": 2 }
}

message está pensado para las personas. Cuando la API da un motivo legible por máquina, está en data.reason, a veces con más campos en data. Toma las decisiones según data.reason, nunca según el texto del mensaje. Los motivos se listan en Gestión de errores.

EstadoCausa habitual
400Un campo que falta o está mal formado, como una fecha no válida o una lista items vacía.
401Falta la cabecera Authorization, o la clave es desconocida o está revocada.
403El tipo de clave no puede usar el endpoint, o hay una función o un permiso desactivados.
404La reserva, el producto, el cliente o la venta no existe en esta organización.
409La petición choca con el estado actual, por ejemplo un producto está archivado o agotado.
429La clave ha superado su límite de peticiones. Espera los segundos que indica Retry-After.

Una reserva que la organización no puede aceptar, por ejemplo porque los artículos están ocupados o la recogida queda fuera del horario, no es un error: POST /bookings/create responde 200 con success: false. Consulta Reservas.

Registrar una venta por REST

POST /sales/create recibe:

{
  "lines": [{ "saleItemId": "3f6c…", "quantity": 2 }],
  "clientId": 23,
  "paymentMethod": "payOnPickup",
  "soldAt": "2026-09-29T14:00:00Z",
  "note": "Counter sale"
}

Responde 201 con la sale, stockWarnings (los productos cuyo stock queda por debajo de cero; la venta se registra igualmente) y el payment con su enlace para un método online. Las reglas de los campos están en sales.create().

Copyright © 2026