☰ Menú · Errores
Primeros pasos

Errores

El código de estado HTTP indica el tipo de problema. El cuerpo JSON dice exactamente qué pasó y, si afecta a un campo, cuál.

JSON
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "consent: must be true: confirm the guest agreed to data processing",
    "param": "consent"
  },
  "request_id": "req_0d4d15b86c484738b46b"
}
error.typestring
Categoría general: invalid_request_error, authentication_error, permission_error, idempotency_error, rate_limit_error, api_error.
error.codestring
Código estable y legible por máquina, por ejemplo member_not_found. Toma decisiones según este campo, no según el mensaje.
error.messagestring
Una frase para el desarrollador. Puede cambiar; no la analices.
error.paramstring
El campo de la petición al que se refiere el error, si lo hay.
request_idstring
También viene en la cabecera X-Request-Id de cada respuesta. Inclúyelo cuando nos escribas.

Códigos de estado

EstadoSignificadoQué hacer
200, 201Éxito. 201 indica que se creó algo nuevo.
400La petición está mal formada o un campo no es válido.Corrige la petición. Si repites el mismo cuerpo, obtendrás la misma respuesta.
401Sin clave, clave desconocida o clave revocada.Revisa la clave.
402La petición es válida, pero no se puede ejecutar, por ejemplo por saldo insuficiente.Muestra el mensaje al cliente; el cuerpo trae los detalles.
403A la clave le falta el permiso que necesita esta llamada.Usa una clave con el permiso indicado en el mensaje.
404El socio, la transacción, el plato o el pedido no existe en este local.Revisa el identificador.
409Conflicto: número de tarjeta ocupado, cambio de estado no permitido o el saldo cambió durante la llamada.Lee el código. Con balance_conflict, reintenta con el mismo external_id.
429Demasiadas peticiones.Espera los segundos que indica Retry-After.
500, 502, 503Algo falló de nuestro lado.Reintenta con espera progresiva y el mismo external_id o Idempotency-Key. Nada se aplica dos veces.

Códigos frecuentes

CódigoCuándo
parameter_invalidFalta un campo o tiene un formato incorrecto. Mira param.
member_not_foundNingún socio coincide con el número de tarjeta, el código de barras, el teléfono o el id.
card_number_takenOtro socio de este local ya tiene este número de tarjeta.
insufficient_balanceredeem_amount supera el saldo de cashback. available trae el saldo.
redeem_not_supportedEl programa del socio no tiene saldo de cashback que canjear.
visit_not_supportedSe envió una visita para un programa de cashback. Envía un ticket con importe.
no_reward_availableEl socio no tiene ninguna recompensa ganada para canjear.
transaction_not_foundNo hay ninguna transacción con este external_id.
invalid_status_transitionEl pedido no puede pasar de su estado actual al que enviaste.
missing_scopeLa clave no tiene el permiso necesario.
hold_requiredEl local solo canjea cashback mediante reservas. Crea una con POST /v1/holds.
hold_expired, hold_captured, hold_releasedLa reserva ya no se puede usar. Crea una nueva.
register_id_requiredEl local numera los tickets por caja, así que register_id es obligatorio.
check_too_oldclosed_at es más antiguo de lo que acepta el local.
scan_requiredEl local solo acepta esto para una tarjeta que esta clave escaneó poco antes.
refund_exceeds_checkLa devolución supera lo que queda del ticket. refundable indica el resto.
adjustments_disabledEl local no permite ajustes de saldo a través de la API.
idempotency_key_reusedSe usó la misma Idempotency-Key con otro cuerpo.
rate_limitedDemasiadas peticiones desde esta clave.
Dudas sobre una integración: api@loyaltyfy.io. Respondemos en un día hábil.