Errores

Interpreta las respuestas y recorre listas sin perder tu posición.

Errores

El error incluye un código estable y un mensaje en español. Decide con error.code, no comparando el texto del mensaje.

Forma de una respuesta de error
{
  "error": {
    "type": "validation",
    "code": "validation_failed",
    "message": "Solicitud inválida",
    "param": "email",
    "requestId": "req_ejemplo"
  }
}

param identifica el campo cuando aplica. Un recurso inexistente responde 404 con type: "not_found" y el código <recurso>_not_found, como customer_not_found, member_not_found, plan_not_found o subscription_not_found; en rutas anidadas el código nombra el recurso que falta. Conserva requestId para soporte sin registrar cuerpos, claves ni datos del cliente.

SituaciónQué hacer
Autenticación o permisosRevisa la clave, su entorno y la habilitación del negocio
ValidaciónCorrige el campo señalado antes de repetir
Recurso no encontradoComprueba el ID y el entorno
ConflictoConsulta el estado actual del recurso
HTTP 429Respeta Retry-After cuando esté presente
Error de red o HTTP 5xxReintenta con espera y la misma clave de idempotencia

Catálogo de códigos

Todos los code que puede responder la API, en /v1 y en /v1/client. En TypeScript son el tipo ApiErrorCode (BilleteError.code en el SDK, que suma network_error e invalid_response). Un código nuevo llega solo con una versión nueva de la API.

CódigoQué significa
account_not_foundNo existe el negocio.
account_suspendedEste negocio no está recibiendo pagos: está pausado o suspendido, o tiene un reembolso vencido.
address_requiredFalta la dirección que pide el checkout.
amount_requiredEl producto sin variantes necesita un precio.
amount_too_largeEl importe total supera el máximo permitido.
api_key_expiredEsta clave API venció.
api_key_invalidLa clave API no es válida.
api_key_missingFalta la cabecera Authorization con tu clave secreta (Bearer).
api_version_invalidEsa versión de la API no existe; usa una versión vigente.
api_version_missingFalta la cabecera Billete-Version con la versión de la API de tu integración.
api_version_retiredEsa versión de la API ya se retiró; elige una vigente.
approval_not_openEsta solicitud ya terminó.
approval_not_pendingEsta solicitud ya no espera una decisión.
approval_own_requestOtra persona debe aprobar o rechazar tu solicitud; tú puedes cancelarla.
approval_request_not_foundNo existe la solicitud de aprobación.
auto_charge_offEsta suscripción no se cobra automáticamente.
billing_cycle_unavailableEste ciclo de pago no está disponible.
business_type_requiredElige primero el tipo de organización.
carrier_office_unavailableEsa oficina ya no recibe envíos; elige otra.
checkout_completedEste checkout ya fue pagado.
checkout_expiredEste checkout venció.
checkout_not_editableEste checkout no se puede modificar.
checkout_not_foundNo existe el checkout.
checkout_not_openSolo se pueden vencer checkouts abiertos.
checkout_selection_lockedEl producto o la variante fue eliminado. Puedes completar el pago con la selección actual, pero no modificarla.
claim_already_openYa tienes un reclamo abierto por este pago: síguelo desde el enlace que te enviamos por correo.
claim_closedEste reclamo ya está cerrado.
claim_limit_reachedYa no puedes abrir más reclamos por este pago: escribe directamente al negocio.
claim_messages_limitEste reclamo ya tiene demasiados mensajes: es momento de resolverlo.
claim_not_foundNo existe el reclamo.
coupon_already_usedYa usaste este cupón.
coupon_currency_mismatchEl cupón solo aplica a precios en otra moneda.
coupon_deletedEste cupón fue eliminado y no puede modificarse.
coupon_exhaustedEl cupón alcanzó su límite de usos.
coupon_existsYa existe un cupón con ese código.
coupon_expiredEl cupón venció.
coupon_first_purchase_onlyEste cupón es solo para tu primera compra.
coupon_inactiveEl cupón está desactivado.
coupon_minimum_not_metEl pedido no llega a la compra mínima del cupón.
coupon_not_applicableUn cupón no aplica a puestos agregados a mitad del periodo.
coupon_not_foundNo existe el cupón.
coupons_not_allowedEste negocio no acepta cupones de sus clientes.
currency_mismatchTodos los productos deben usar la misma moneda.
custom_field_invalidEl valor de un campo personalizado no es válido; param dice cuál.
custom_field_requiredFalta un campo personalizado obligatorio; param dice cuál.
customer_changedEl cliente cambió durante la operación; vuelve a intentarlo.
customer_existsYa existe un cliente con este externalId.
customer_not_foundNo existe el cliente.
customer_session_invalidLa sesión no es válida o venció.
customer_session_missingFalta la cabecera Authorization con el token de la sesión del cliente (Bearer).
delivery_proofs_limitLa entrega ya tiene el máximo de fotos.
email_requiredEl correo es obligatorio.
entity_not_applicableElige primero un tipo de organización con RIF propio.
event_not_foundNo existe el evento.
exchange_rate_changedEl amount enviado ya no es el que se cobra (venció la tasa BCV congelada o cambió el total): consulta de nuevo los métodos y muestra el nuevo monto.
exchange_rate_unavailableNo hay una tasa oficial vigente para ese par de monedas; inténtalo en unos minutos.
fallback_plan_nestedUn plan usado como respaldo no puede tener otro respaldo.
fallback_plan_not_freeEl respaldo debe ser un plan gratuito activo, en la misma moneda y sin respaldo propio.
feature_deletedEsta cuota fue eliminada y no puede modificarse.
feature_existsYa existe una cuota con esa clave.
feature_in_useAlgún plan incluye esta cuota o hay consumos reservados en ella: quítala de sus planes antes de eliminarla.
feature_not_foundNo existe la cuota.
feature_not_meteredEsa cuota no registra uso: solo las de consumo y de cantidad lo hacen.
feature_operation_not_allowedSolo las cuotas de consumo permiten operaciones.
feature_per_not_applicableSolo las cuotas de consumo y de cantidad se cuentan por miembro.
feature_release_requires_operationDevuelve el consumo mediante su operación original.
feature_reset_not_applicableSolo las cuotas de consumo se reinician.
feature_set_not_allowedSolo las cuotas de cantidad permiten fijar su uso.
feature_value_invalidEl valor de una cuota no es válido para su tipo.
file_emptyEl archivo está vacío.
file_not_foundNo existe el archivo.
file_too_largeCada archivo puede pesar hasta 10 MB.
file_type_not_allowedEl tipo de archivo no está permitido.
fulfillment_closedYa no se puede reportar un problema con esta entrega.
fulfillment_method_unavailableEste negocio no ofrece esa forma de entrega.
fulfillment_methods_conflictLos productos no comparten ninguna forma de entrega.
fulfillment_not_foundNo existe la entrega.
fulfillment_not_offeredEsta compra no necesita entrega.
fulfillment_not_pendingSolo puedes marcar como entregada una entrega por entregar.
fulfillment_not_shippingEsta entrega no va por agencia.
fulfillment_requiredElige cómo quieres recibir tu compra.
fulfillment_shipped_by_carrierUn envío se entrega en la oficina de la agencia: agrega su número de guía.
handover_code_invalidEste código QR no es el de esta compra.
idempotency_conflictRepite la solicitud.
idempotency_key_invalidIdempotency-Key debe tener entre 8 y 255 caracteres ASCII imprimibles.
idempotency_key_reusedEste Idempotency-Key ya se usó con una solicitud distinta.
idempotency_request_in_progressTodavía estamos procesando una solicitud con este Idempotency-Key.
insufficient_stockNo hay suficientes unidades disponibles de un producto.
internal_errorOcurrió un error interno; inténtalo de nuevo.
invalid_cursorEl cursor no es válido para este orden.
invalid_default_variantElige una sola variante principal activa.
invalid_jsonEl cuerpo debe ser JSON válido.
invalid_payment_detailsUn dato del método de pago no es válido; param dice cuál.
invalid_referenceUno de los recursos indicados no existe.
invalid_sortEsta lista no se puede ordenar así.
invalid_tokenEste enlace no es válido.
inventory_in_useHay unidades retenidas por pagos en verificación; espera a que terminen antes de cambiar su control de stock.
invoice_closedEste cobro ya no se puede pagar.
invoice_not_closableSolo se pueden marcar como incobrables cobros abiertos sin un pago en verificación.
invoice_not_foundNo existe el cobro.
invoice_not_openSolo se reenvían cobros abiertos.
invoice_not_voidableSolo se pueden anular cobros abiertos sin un pago en verificación.
invoice_paidEste cobro ya fue pagado.
invoice_resend_limitPuedes reenviar un cobro hasta cinco veces por hora. Inténtalo más tarde.
lookup_key_in_useYa tienes otro plan o producto con esa clave (lookupKey).
max_redemptions_below_redemptionsEl máximo de usos no puede ser menor que los usos que ya tiene el cupón.
member_not_foundNo existe el miembro.
member_over_limitEste miembro supera los puestos del plan.
member_recently_changedQuien se une al negocio o cambia de rol espera 48 horas para las acciones sensibles.
member_removedEste miembro fue quitado.
member_requiredIndica el miembro para consultar esta cuota.
method_requiredElige un método de pago.
name_requiredNombre: este campo es obligatorio.
notification_not_foundNo existe la notificación.
notification_preference_forbiddenNo puedes cambiar esta notificación.
onboarding_already_submittedLa verificación ya fue enviada.
onboarding_incompleteCompleta todos los datos requeridos antes de enviar.
onboarding_lockedLos datos del negocio ya fueron enviados a revisión; contacta a soporte para cambiarlos.
onboarding_not_submittedEl negocio todavía no envió su verificación.
operation_amount_exceededNo puedes confirmar más de lo reservado.
operation_expiredLa reserva venció y su capacidad fue devuelta.
operation_invalid_stateLa operación ya no está reservada.
operation_key_reusedEsta clave de operación ya se usó con otros datos.
operation_not_foundNo existe la operación.
parameter_missingFalta un parámetro en la ruta.
payload_too_largeEl cuerpo de la solicitud supera 1 MB.
payment_code_in_progressEstamos verificando el código; espera unos segundos.
payment_code_invalidEl código o la referencia no es válido o venció.
payment_code_not_expectedEste pago no está esperando un código.
payment_code_not_sentNo pudimos enviar otro código.
payment_in_progressEspera a que termine el pago antes de cambiar la selección.
payment_link_deletedEste enlace fue eliminado y no puede modificarse.
payment_link_not_foundNo existe el enlace de pago.
payment_link_unavailableEste enlace de pago ya no está disponible.
payment_method_unavailableEste negocio no ofrece ese método para este pago: no existe, no cobra en esa moneda, solo funciona en pruebas o el negocio no lo tiene.
payment_not_claimableSolo puedes abrir un reclamo por un pago confirmado.
payment_not_foundNo existe el pago.
payment_not_refundableSolo se pueden reembolsar pagos confirmados.
payments_unavailableNada puede cobrar ese método ahora: su proveedor no responde o está en mantenimiento. Inténtalo de nuevo en unos minutos.
payout_account_change_pendingYa hay un cambio de la cuenta de retiro pendiente: cancélalo antes de pedir otro.
payout_not_foundNo existe el retiro.
phone_requiredTeléfono: este campo es obligatorio.
plan_deletedEste plan fue eliminado y no puede modificarse.
plan_in_useEl plan tiene suscripciones en curso o es el respaldo de otro plan: desactívalo para no aceptar nuevas.
plan_inactiveEl plan está desactivado.
plan_not_foundNo existe el plan.
plan_seats_lockedNo puedes cambiar la forma de cobro de un plan con suscripciones.
portal_action_disabledEl negocio no permite hacer este cambio desde el portal.
portal_session_invalidEste enlace ya se abrió o venció.
product_deletedEste producto fue eliminado.
product_inactiveEste producto está desactivado.
product_not_foundNo existe el producto.
product_unavailableUno de los productos ya no existe.
production_already_enabledEl negocio ya opera en producción.
production_not_enabledCompleta la activación del negocio para usar producción.
provider_not_foundNo existe el proveedor.
quantity_decrease_requires_renewalPrograma la reducción de puestos para la renovación.
quantity_limit_exceededLa cantidad supera el máximo por compra.
quantity_not_adjustableEste plan no se cobra por puesto.
quantity_not_allowedEste plan no se cobra por puesto.
quantity_out_of_rangeLa cantidad está fuera del mínimo y el máximo de puestos del plan.
rate_limitedDemasiadas solicitudes seguidas; espera un momento e inténtalo de nuevo.
receipt_not_foundNo existe el recibo.
receipt_resend_limitPuedes enviar el recibo hasta cinco veces por hora. Inténtalo más tarde.
refund_amount_mismatchRegistra el importe completo de la devolución pendiente.
refund_approval_pendingEste pago ya tiene un reembolso esperando aprobación.
refund_destination_not_neededEsta compra no tiene una devolución esperando tus datos.
refund_exceeds_paymentEl reembolso supera lo que queda por reembolsar del pago.
refund_threshold_change_pendingYa hay un cambio de la aprobación de reembolsos pendiente: cancélalo antes de pedir otro.
renewal_invoiceEl cobro es la renovación de una suscripción y no se puede cerrar a mano.
representative_not_foundNo existe el representante.
representatives_limitSe alcanzó el máximo de representantes.
request_log_not_foundNo existe el registro.
resource_conflictYa existe un recurso con estos datos únicos.
role_admin_requiredSolo propietarios y administradores.
route_not_foundEste endpoint no existe.
saved_payer_not_foundNo existe el método de pago guardado.
seat_limit_reachedNo quedan puestos disponibles en el plan.
seats_in_useEl cambio deja menos puestos que miembros activos: quita miembros o acepta deshabilitarlos (disableExcessMembers).
subscription_change_in_progressEstamos verificando el pago de un cambio de esta suscripción.
subscription_endedLa suscripción ya terminó o se canceló.
subscription_existsEl cliente ya tiene una suscripción en curso a este plan.
subscription_not_cancelingEsta suscripción no tiene una cancelación programada.
subscription_not_foundNo existe la suscripción.
subscription_renewal_openPaga la renovación o programa el cambio para el próximo periodo.
subscription_suspendedLa suscripción está suspendida: paga su renovación para reactivarla o cancélala.
suspension_with_fallbackUn plan con suspensión no tiene plan de respaldo: elige uno de los dos.
tax_behavior_mismatchTodos los productos deben tratar los impuestos igual.
tax_id_prefixEl RIF no corresponde al tipo de organización.
too_many_attemptsDemasiados intentos de pago para este checkout.
tracking_deadline_passedEl plazo para agregar la guía ya terminó.
tracking_number_in_useEsa guía ya pertenece al envío de otro cliente.
tracking_verifyingEstamos verificando la guía que agregaste.
trial_not_applicableUn plan gratuito no necesita prueba.
trial_requiredLas suscripciones creadas por API empiezan con prueba gratis; vende planes pagos con un checkout.
trial_unavailableEste cliente ya usó la prueba gratis; el checkout ahora cobra el primer periodo.
unsubscribe_invalidEl enlace no es válido.
unused_credit_not_acceptedEste cambio pierde crédito no utilizado; acéptalo expresamente o prográmalo para la renovación.
validation_failedEl cuerpo o la consulta no cumple el esquema; param dice qué campo.
variant_deletedEsta variante fue eliminada y no puede modificarse.
variant_deletion_requiredElimina la variante explícitamente antes de quitarla del producto.
variant_not_foundNo existe la variante.
variant_pricing_requiredCon variantes, el precio y el stock se configuran por variante.
variant_requiredEl producto tiene variantes: elige una.
webhook_delivery_in_progressEste envío está en curso; podrás reenviarlo cuando termine.
webhook_delivery_not_foundNo existe el envío.
webhook_endpoint_deletedEste webhook fue eliminado y no puede modificarse.
webhook_endpoint_disabledEste webhook está desactivado: actívalo para enviarle eventos.
webhook_endpoint_not_foundNo existe el webhook.
webhook_signature_invalidLa firma del evento no es válida.
webhook_url_credentials_forbiddenLa URL del webhook no puede incluir credenciales.
webhook_url_https_requiredLa URL del webhook debe usar HTTPS.
webhook_url_invalidLa URL del webhook no es válida.
webhook_url_privateLa URL del webhook no puede apuntar a localhost.
webhook_url_protocolLa URL del webhook debe usar HTTP o HTTPS.
webhook_url_unresolvableNo pudimos resolver el dominio del webhook.

Registros en el dashboard

En Desarrolladores → Registros ves las solicitudes de los últimos 30 días a /v1 y las que hacen los navegadores de tus clientes en /v1/client (pagos, códigos y cambios del portal; no sus consultas), en el entorno que tengas abierto. Cada una muestra su estado, la ruta, la clave que la hizo, la versión de la API, su Idempotency-Key, la duración y lo que enviaste y respondimos. Filtra por estado (2xx, 4xx, 5xx), método y fecha, o busca por requestId, por el ID de un recurso o por parte de la ruta. El detalle de una transacción también lista las solicitudes que la tocaron.

Los cuerpos se guardan sin secretos ni datos personales: claves, tokens, correos, teléfonos, cédulas y RIF, cuentas bancarias, números de tarjeta, direcciones y nombres de personas se reemplazan por [REDACTED], igual que cualquier serie de seis dígitos o más. Un cuerpo de más de 64 KB, como una lista larga, no se guarda. Las solicitudes con una clave inexistente no se registran; las de una clave vencida o de un negocio suspendido o sin producción habilitada sí, para que veas por qué se rechazaron. Los ven propietarios, administradores y desarrolladores del negocio.