Descripción General
La API de Dodo Payments utiliza códigos de estado HTTP estándar y códigos de error personalizados para indicar el éxito o el fracaso de las solicitudes de la API. Cuando ocurre un error, la API devuelve un código de estado HTTP apropiado y una respuesta JSON que contiene información detallada sobre el error. Cada respuesta de error incluye:- Un código de estado HTTP que indica la categoría general del error
- Un código de error específico que identifica la naturaleza exacta del error
- Un mensaje de error legible por humanos que explica qué salió mal
- Detalles adicionales sobre el error cuando sea aplicable
- Depurar problemas de integración
- Implementar un manejo de errores adecuado en su aplicación
- Proporcionar retroalimentación significativa a los usuarios finales
- Mantener un sistema de procesamiento de pagos robusto
Códigos de Error de API Estándar
| Código de error | Estado HTTP | Descripción |
|---|---|---|
| 400 | Solicitud Incorrecta | La solicitud estaba mal formada o contenía parámetros inválidos |
| 401 | No Autorizado | La autenticación falló o la clave de API es inválida |
| 403 | Prohibido | La clave de API no tiene permiso para acceder al recurso solicitado |
| 404 | No Encontrado | El recurso solicitado no existe |
| 405 | Método No Permitido | El método HTTP no es compatible con este punto final |
| 409 | Conflicto | La solicitud entra en conflicto con el estado actual del recurso |
| 422 | Entidad No Procesable | La solicitud estaba bien formada pero contenía errores semánticos |
| 429 | Demasiadas Solicitudes | Se superó el límite de tasa |
| 500 | Error Interno del Servidor | Ocurrió un error inesperado en nuestros servidores |
| 502 | Puerta de Enlace Incorrecta | El servidor recibió una respuesta inválida de un servidor ascendente |
| 503 | Servicio No Disponible | El servicio está temporalmente no disponible |
| 504 | Tiempo de Espera de la Puerta de Enlace | El servidor agotó el tiempo de espera mientras esperaba una respuesta ascendente |
Formato de Respuesta de Error
Cuando ocurre un error, la API devuelve una respuesta JSON con la siguiente estructura:Referencia de Códigos de Error
-
ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT- Disparador: Activaciones de clave de licencia: nuevo límite < recuento de instancias existentes
- Mensaje: El nuevo límite de activación no puede ser menor que el recuento actual de instancias
-
ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED- Disparador: Intento de agregar complementos a suscripciones de facturación basadas en uso
- Mensaje: Los complementos en las suscripciones no son compatibles con la facturación basada en uso
-
ADDONS_NOT_ALLOWED_FOR_ON_DEMAND- Disparador: Intento de agregar complementos a suscripciones bajo demanda
- Mensaje: Los complementos no están permitidos para suscripciones bajo demanda
-
BRAND_MISMATCH- Disparador: Los artículos del carrito pertenecen a diferentes marcas
- Mensaje: Todos los artículos en el carrito de productos deben pertenecer a la misma marca
-
BRAND_NOT_ENABLED- Disparador: La marca está deshabilitada o no activa
- Mensaje: La marca proporcionada no está habilitada
-
BRAND_SUBMISSION_NOT_ENABLED- Disparador: La función de reenvío de verificación de marca no está habilitada
- Mensaje: La reenvío de verificación de marca no está habilitada
-
CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Disparador: Intento de cobrar una suscripción programada para cancelación
- Mensaje: Suscripción programada para cancelación
-
CHECKOUT_SESSION_CONSUMED- Disparador: La sesión de pago ya ha generado un pago
- Mensaje: La sesión de pago ya ha sido consumida
-
DISCOUNT_CODE_ALREADY_EXISTS- Disparador: Creación de código de descuento duplicado
- Mensaje: El código de descuento ya existe
-
DISCOUNT_CODE_EXPIRED- Disparador: Código de descuento pasado su
expires_atfecha - Mensaje: Código de descuento expirado
- Disparador: Código de descuento pasado su
-
DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED- Disparador: Descuento reutilizado después de que
usage_limitalcanzado - Mensaje: El límite de uso no puede ser menor que times_used / El código de descuento alcanzó el límite de uso
- Disparador: Descuento reutilizado después de que
-
DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND- Disparador: Código aplicado a suscripción bajo demanda
- Mensaje: El cupón de descuento no está disponible para suscripciones bajo demanda
-
DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT- Disparador: Código aplicado a producto(s) no relacionados
- Mensaje: El cupón de descuento no está disponible para este producto
-
DUPLICATE_LINE_ITEMS_IN_REQUEST- Disparador: El mismo
item_idaparece dos veces enitems[] - Mensaje: Se especificaron item_ids duplicados en el array de items
- Disparador: El mismo
-
DUPLICATE_METER_IDS_IN_REQUEST- Disparador: El mismo ID de medidor aparece varias veces en la solicitud
- Mensaje: No se permiten IDs de medidor duplicados
-
EXCHANGE_RATE_NOT_FOUND- Disparador: No hay tasa de FX para el par de divisas
from → to - Mensaje: No se encontró tasa de cambio para convertir de Currency a Currency
- Disparador: No hay tasa de FX para el par de divisas
-
EXISTING_REFUND_REQUEST_PROCESSING- Disparador: Solicitud de reembolso anterior aún está siendo procesada
- Mensaje: Una solicitud de reembolso con estado “Pendiente” aún se está procesando
-
INACTIVE_LICENSE_KEY- Disparador: Estado de clave ≠
ACTIVE - Mensaje: La clave de licencia no está activa
- Disparador: Estado de clave ≠
-
INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED- Disparador: Cambio de plan en suscripción inactiva
- Mensaje: Cambiar de planes no es compatible con suscripciones inactivas
-
INSUFFICIENT_WALLET_FUNDS- Disparador: Saldo de la billetera < monto de débito
- Mensaje: Fondos insuficientes en la billetera
-
INTEGER_CONVERSION_FAILURE- Disparador: Cualquier conversión de entero ↔ cadena/decimal que falla del lado del servidor
- Mensaje: Error de Conversión de Entero
-
INTERNAL_SERVER_ERROR- Disparador: Excepciones no capturadas; debe registrar detalles del lado del servidor
- Mensaje: Sin mensaje público (500 genérico)
-
INVALID_DISCOUNT_CODE- Disparador: El código no existe / no es aplicable
- Mensaje: Código de Descuento Inválido / El Código de Descuento no se puede aplicar a ningún producto en el carrito
-
INVALID_PERCENTAGE- Disparador: Monto porcentual > 100% (o 10,000 puntos básicos)
- Mensaje: El monto porcentual no puede ser más de 10000 / El monto del código de descuento no puede ser más de 100%
-
INVALID_QUANTITY- Disparador: Cantidad inválida especificada para precios basados en uso
- Mensaje: Solo se permite 1 cantidad en productos de precio basado en uso
-
INVALID_QUERY_PARAMS- Disparador: Parámetros de consulta mutuamente excluyentes / mal formados
- Mensaje: Los parámetros de consulta solo deben contener time_frame o (start, end)
-
INVALID_REQUEST_BODY- Disparador: JSON mal formado o violación de esquema
- Mensaje: Su cuerpo de solicitud es inválido. Por favor, verifique sus encabezados de solicitud y objeto.
-
INVALID_REQUEST_PARAMETERS- Disparador: Semántica incorrecta (por ejemplo, fecha en el pasado)
- Mensaje: No se puede cambiar next_billing_date a un tiempo pasado
-
INVALID_SUGGESTED_PRICE- Disparador: Precio PWYW < precio mínimo permitido
- Mensaje: El Precio Sugerido no puede ser menor que el precio mínimo. En caso de pagar lo que desee, el precio se considera como el monto mínimo aceptado
-
INVALID_TAX_ID- Disparador: Validación fallida de VAT/GST/TIN
- Mensaje: El ID de impuesto es inválido
-
LICENSE_KEY_LIMIT_REACHED- Disparador: Activaciones = límite
- Mensaje: Límite de activación de clave de licencia alcanzado
-
LICENSE_KEY_NOT_FOUND- Disparador: ID de instancia o ID de clave inválido
- Mensaje: Instancia de clave de licencia no encontrada o no pertenece a esta clave de licencia
-
LINE_ITEM_FULLY_REFUNDED- Disparador: Intento de reembolsar un artículo de línea que ya ha sido reembolsado completamente
- Mensaje: El artículo de línea ha sido reembolsado completamente y no puede ser reembolsado más.
-
LINE_ITEM_NOT_FOUND- Disparador: ID de artículo no parte del pago referenciado
- Mensaje: El artículo de línea no se encontró en el pago
-
LINE_ITEM_PRORATED- Disparador: Intento de reembolso o actualización en una línea prorrateada
- Mensaje: El artículo de línea no se puede reembolsar porque es prorrateado
-
LINE_ITEM_REFUND_AMOUNT_TOO_HIGH- Disparador: Monto de reembolso > monto pagado (impuesto incluido)
- Mensaje: El monto de reembolso solicitado para el artículo de línea incluyendo impuestos es que está por encima del monto pagado
-
LINE_ITEM_REFUND_AMOUNT_TOO_LOW- Disparador: Monto de reembolso por debajo del umbral mínimo
- Mensaje: El monto de reembolso solicitado para el artículo de línea es que es demasiado bajo
-
MAXIMUM_KEYS_REACHED- Disparador: Metadata / campos personalizados excedieron 50 pares
- Mensaje: Excede 50 pares clave-valor
-
MERCHANT_NOT_LIVE- Disparador: El negocio aún está en modo de prueba/sandbox
- Mensaje: El comerciante no está en vivo
-
METER_IS_DELETED- Disparador: Intento de usar un medidor eliminado
- Mensaje: El medidor ya ha sido eliminado
-
MISSING_ADDON_IDS- Disparador:
addon_idlista vacía o IDs desconocidos - Mensaje: Uno o más IDs de producto no existen:
- Disparador:
-
MISSING_METER_IDS- Disparador: Lista de ID de medidor vacía o contiene IDs inválidos
- Mensaje: Uno o más IDs de medidor no existen:
-
MISSING_PRODUCT_INFORMATION- Disparador: El producto existe pero falta información obligatoria
- Mensaje: El producto existe pero falta o es inválida otra información obligatoria
-
NEGATIVE_BALANCE_ADJUSTMENT- Disparador: Intento de hacer que el saldo de la billetera sea negativo
- Mensaje: No se permite hacer que el saldo de la billetera sea negativo
-
NO_ELIGIBLE_PAYMENT_METHODS- Disparador: Después de filtrar, no queda nada
- Mensaje: No se encontraron métodos de pago elegibles
-
NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS- Disparador: Intento de establecer una fecha de caducidad en una clave basada en suscripción
- Mensaje: No se puede establecer la fecha de caducidad para la clave de licencia basada en suscripción
-
NOT_FOUND- Disparador: 404 genérico para cualquier recurso faltante
- Mensaje: Elemento no encontrado (o más específico)
-
ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED- Disparador: Cambio de plan no permitido para bajo demanda
- Mensaje: Cambiar de planes no es compatible con suscripciones bajo demanda
-
ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED- Disparador: El negocio tiene la bandera de función desactivada
- Mensaje: Las suscripciones bajo demanda no están habilitadas para este negocio
-
ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED- Disparador: Intento de usar bajo demanda con facturación basada en uso
- Mensaje: Las Suscripciones Bajo Demanda no son compatibles con la Facturación Basada en Uso
-
PAY_AS_YOU_WANT_AMOUNT_REQUIRED- Disparador: Falta precio para producto PWYW
- Mensaje: El monto es obligatorio para el producto de paga lo que quieras
-
PAYMENT_ALREADY_REFUNDED- Disparador: Reembolso duplicado
- Mensaje: Este pago ya ha sido reembolsado
-
PAYMENT_HAS_BEEN_REFUNDED- Disparador: El pago ha sido completamente reembolsado
- Mensaje: El ID de pago ha sido completamente reembolsado.
-
PAYMENT_NOT_SUCCEEDED- Disparador: Intento de reembolsar/procesar un pago no exitoso
- Mensaje: El pago proporcionado no ha tenido éxito
-
PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION- Disparador: Cambio de plan intentado en suscripción programada para cancelación
- Mensaje: Suscripción programada para cancelación
-
PREVIOUS_PAYMENT_PENDING- Disparador: Intento de crear un cargo mientras el anterior está en estado no terminal
- Mensaje: No se puede crear un nuevo cargo ya que el pago anterior aún no ha tenido éxito
-
PRODUCT_CART_EMPTY- Disparador: Se envió un carrito de productos vacío
- Mensaje: product_cart está vacío
-
PRODUCT_IS_DELETED- Disparador: Producto eliminado suavemente
- Mensaje: Sin mensajes
-
REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT- Disparador: Monto de reembolso agregado > monto pagado
- Mensaje: El monto de reembolso calculado es mayor que el monto pagado
-
REFUND_WINDOW_EXPIRED- Disparador: Fuera de la ventana de reembolso permitida
- Mensaje: No se pueden iniciar reembolsos días después de la creación del pago. Contacte a [email protected].
-
REQUEST_AMOUNT_BELOW_MINIMUM- Disparador: Monto < mínimo del producto
- Mensaje: El monto no puede ser menor que el monto mínimo especificado para el producto
-
SUBSCRIPTION_EXPIRED- Disparador: Facturación pasada
ends_at - Mensaje: La suscripción ha expirado, no se pueden crear nuevos cargos
- Disparador: Facturación pasada
-
SUBSCRIPTION_INACTIVE- Disparador: Estado ≠
ACTIVE - Mensaje: La suscripción no está activa
- Disparador: Estado ≠
-
SUBSCRIPTION_NOT_ON_DEMAND- Disparador: Se esperaba bajo demanda pero se obtuvo intervalo fijo
- Mensaje: La suscripción ya no es bajo demanda
-
SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED- Disparador: Se superaron los intentos máximos de reintentos de pago de suscripción
- Mensaje: Se superó el límite máximo de reintentos de 10 intentos para esta suscripción
-
TOO_MANY_REQUESTS- Disparador: Límite de tasa 429
- Mensaje: Sin mensajes
-
TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT- Disparador: Total combinado del carrito < mínimo de la puerta de enlace
- Mensaje: Se requiere un monto mínimo de para procesar el pago
-
UNABLE_TO_EDIT_PRIMARY_BRAND- Disparador: Intento de actualizar la marca principal a través de la API regular
- Mensaje: La marca principal no se puede actualizar a través de este punto final de la API.
-
UNAUTHORIZED- Disparador: Sin clave de API o token / alcance inválido
- Mensaje: No está autorizado para realizar esta acción
-
UNSUPPORTED_ACTION- Disparador: Acción no compatible para el tipo de recurso
- Mensaje: Cambiar de planes para suscripciones basadas en uso no es compatible
-
UNSUPPORTED_BILLING_CURRENCY- Disparador: Suscripciones restringidas a USD
- Mensaje: La moneda de facturación que no sea USD no es compatible con las suscripciones
-
UNSUPPORTED_COUNTRY- Disparador: Geo aún no soportado
- Mensaje: País actualmente no soportado
-
UNSUPPORTED_CURRENCY- Disparador: Moneda de producto o complemento inválida
- Mensaje: La moneda no es actualmente compatible / Solo se admiten productos en USD e INR actualmente / Solo se admite USD e INR para el precio de complemento / Solo se puede solicitar USD o INR para billing_currency / Moneda no soportada / Moneda inesperada para suscripciones de tarjeta india
-
UNSUPPORTED_DISCOUNT_TYPE- Disparador: Descuentos de monto fijo, etc., aún no están activos
- Mensaje: Solo se admiten códigos de descuento porcentuales por ahora
-
UNSUPPORTED_PAYMENT_CURRENCY- Disparador: Moneda de pago bloqueada para conector
- Mensaje: La transacción en INR no es compatible con esta transacción
-
UNSUPPORTED_TAX_CATEGORY- Disparador: Cadena de categoría de impuestos no en enum
- Mensaje: Categoría actualmente no soportada
-
UNSUCCESSFUL_PAYMENT_ID- Disparador: ID de pago hace referencia a un pago no exitoso
- Mensaje: El ID de pago tiene un estado no exitoso.
-
ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED- Disparador: Intento de reembolsar un pago de monto cero
- Mensaje: No se puede reembolsar un pago con monto de moneda cero
Mejores Prácticas
- Siempre maneje los errores de manera adecuada en su aplicación
- Implemente un registro de errores adecuado
- Use mensajes de error apropiados para los usuarios finales
- Implemente lógica de reintento para errores transitorios
- Contacte al soporte para problemas no resueltos