Requiply
SDK de TypeScript

Gestión de errores

Captura los fallos de la API, actúa según el código de motivo y gestiona las reservas rechazadas.

Las respuestas fallidas de la API lanzan RequiplyError:

import { RequiplyError } from '@requiply/api-sdk';

try {
  await requiply.sales.create({ lines: [{ saleItemId, quantity: 1 }], paymentMethod: 'liqpay' });
} catch (error) {
  if (error instanceof RequiplyError && error.reason === 'client_email_required') {
    console.error('LiqPay needs a client with an email');
  } else {
    throw error;
  }
}

Propiedades del error

PropiedadQué contiene
statusEl estado HTTP de la respuesta, por ejemplo 400, 403, 404, 409 o 429.
messageEl mensaje legible de la API, con el estado HTTP como alternativa. Muéstraselo a las personas, pero no tomes decisiones según su texto.
reasonEl motivo legible por máquina, cuando la API lo da, por ejemplo feature_disabled. Toma las decisiones según este valor.
dataLos campos adicionales que la API envió con el error, incluido reason.
detailsEl cuerpo de la respuesta ya interpretado, o el texto sin procesar de la respuesta cuando no es JSON.
retryAfterLos segundos que hay que esperar, según la cabecera Retry-After de un 429.

Motivos de error

reason lo devuelven las solicitudes de reserva hechas con claves publicables, los endpoints de Ventas y las líneas de venta de los presupuestos y las reservas:

reasonEstadoSignificado
request_only403Una clave publicable ha llamado a bookings.create() sin asRequest: true.
feature_disabled403Enable sales (activar ventas) está desactivado, o la organización no tiene el plan Advanced.
selling_disabled403Una clave publicable ha pedido productos en venta cuando la organización no vende a los clientes.
out_of_stock409Una clave publicable ha pedido más unidades de las que hay en el almacén. data.saleItemId indica el producto y data.availableQuantity, cuántas quedan.
invalid_lines400Una línea no tiene producto o tiene una cantidad que no es un número entero mayor que cero.
duplicate_line400El mismo producto aparece en dos líneas.
sale_item_not_found404Un producto no existe en esta organización.
sale_item_archived409Un producto está archivado y no se puede vender.
invalid_payment400paymentMethod no es un método conocido.
payment_method_unavailable400La organización no tiene ninguna integración activa para ese método de pago.
client_email_required400LiqPay envía la factura por email, así que la venta necesita un cliente con email.
sale_not_found404La venta no existe.

Pueden aparecer motivos nuevos, así que mantén siempre una rama alternativa. La mayoría de los demás errores, como un campo que falta o una reserva desconocida, solo llevan status y message.

Límites de peticiones

Cada clave puede hacer 100 peticiones por minuto. Las peticiones que superan ese límite lanzan un RequiplyError con status 429 y retryAfter en segundos. En los navegadores falta retryAfter, porque la API no expone la cabecera entre orígenes distintos; espera unos segundos antes de reintentar.

Las reservas rechazadas no son errores

bookings.create() no lanza una excepción cuando la organización no puede aceptar una reserva, por ejemplo porque los artículos están ocupados en esas fechas o la recogida queda fuera del horario. Se resuelve con success: false, un message y, a veces, un reason. Consulta Reservas.

Errores que no son RequiplyError

La validación del constructor y las API del entorno que faltan lanzan TypeError: un apiKey que falta o está vacío, que no haya fetch disponible, o una clave secreta usada en el navegador. Los fallos de red y las peticiones canceladas se rechazan con el error que lance tu implementación de fetch.

Copyright © 2026