Saltar al contenido principal

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
Entender estos códigos de error y sus significados es crucial para:
  • 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
Las siguientes secciones proporcionan información detallada sobre los códigos de estado HTTP estándar y los códigos de error específicos que puede encontrar al usar la API de Dodo Payments.

Códigos de Error de API Estándar

Código de errorEstado HTTPDescripción
400Solicitud IncorrectaLa solicitud estaba mal formada o contenía parámetros inválidos
401No AutorizadoLa autenticación falló o la clave de API es inválida
403ProhibidoLa clave de API no tiene permiso para acceder al recurso solicitado
404No EncontradoEl recurso solicitado no existe
405Método No PermitidoEl método HTTP no es compatible con este punto final
409ConflictoLa solicitud entra en conflicto con el estado actual del recurso
422Entidad No ProcesableLa solicitud estaba bien formada pero contenía errores semánticos
429Demasiadas SolicitudesSe superó el límite de tasa
500Error Interno del ServidorOcurrió un error inesperado en nuestros servidores
502Puerta de Enlace IncorrectaEl servidor recibió una respuesta inválida de un servidor ascendente
503Servicio No DisponibleEl servicio está temporalmente no disponible
504Tiempo de Espera de la Puerta de EnlaceEl 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:
{
  "code": "UNSUPPORTED_COUNTRY",
  "message": "Country AI currently not supported"
}

Referencia de Códigos de Error

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Trigger: Activaciones de licencias: nuevo límite < recuento de instancias existentes
    • Message: El nuevo límite de activaciones no puede ser menor que el recuento actual de instancias
  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Intento de agregar complementos a suscripciones de facturación por uso
    • Message: No se admiten complementos en suscripciones para facturación por uso
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Trigger: Intento de agregar complementos a suscripciones on-demand
    • Message: No se permiten complementos para suscripciones on demand
  • BRAND_MISMATCH
    • Trigger: Los artículos del carrito pertenecen a diferentes marcas
    • Message: Todos los artículos en el carrito de productos deben pertenecer a la misma marca
  • BRAND_NOT_ENABLED
    • Trigger: La marca está deshabilitada o no está activa
    • Message: La marca proporcionada no está habilitada
  • BRAND_SUBMISSION_NOT_ENABLED
    • Trigger: La función de reenvío de verificación de marca no está habilitada
    • Message: El reenvío de verificación de marca no está habilitado
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Intento de cobrar suscripción programada para cancelación
    • Message: Suscripción programada para cancelación
  • CHECKOUT_SESSION_CONSUMED
    • Trigger: La sesión de checkout ya generó un pago
    • Message: La sesión de checkout ya fue consumida
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Trigger: Creación de código de descuento duplicado
    • Message: El código de descuento ya existe
  • DISCOUNT_CODE_EXPIRED
    • Trigger: Código de descuento pasado su expires_at fecha
    • Message: El código de descuento expiró
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Trigger: Descuento reutilizado después de que usage_limit se alcanzó
    • Message: El límite de uso no puede ser menor que times_used / El código de descuento alcanzó el límite de uso
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Trigger: Código aplicado a suscripción on-demand
    • Message: El cupón de descuento no está disponible para suscripciones on demand
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Trigger: Código aplicado a producto(s) no relacionado(s)
    • Message: El cupón de descuento no está disponible para este producto
  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Trigger: Mismo item_id aparece dos veces en items[]
    • Message: Se especificaron item_ids duplicados en el array de items
  • DUPLICATE_METER_IDS_IN_REQUEST
    • Trigger: Mismo ID de medidor aparece múltiples veces en la solicitud
    • Message: No se permiten IDs de medidor duplicados
  • EXCHANGE_RATE_NOT_FOUND
    • Trigger: No hay tipo de cambio FX para el par de divisas from → to
    • Message: No se encontró tasa de cambio para convertir de Currency a Currency
  • EXISTING_REFUND_REQUEST_PROCESSING
    • Trigger: Solicitud de reembolso anterior aún en proceso
    • Message: Una solicitud de reembolso con estado “Pending” aún está en proceso
  • INACTIVE_LICENSE_KEY
    • Trigger: Estado de clave ≠ ACTIVE
    • Message: La clave de licencia no está activa
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: Cambio de plan en suscripción inactiva
    • Message: No se admite cambiar planes para suscripciones inactivas
  • INSUFFICIENT_WALLET_FUNDS
    • Trigger: Saldo de billetera < monto de débito
    • Message: Fondos insuficientes en la billetera
  • INTEGER_CONVERSION_FAILURE
    • Trigger: Cualquier conversión entero ↔ cadena/decimal que falla del lado del servidor
    • Message: Error de conversión de entero
  • INTERNAL_SERVER_ERROR
    • Trigger: Excepciones no capturadas; debe registrar detalles del lado del servidor
    • Message: No hay mensaje público (500 genérico)
  • INVALID_DISCOUNT_CODE
    • Trigger: El código no existe / no es aplicable
    • Message: Código de descuento inválido / El código de descuento no puede aplicarse a ningún producto en el carrito
  • INVALID_PERCENTAGE
    • Trigger: Monto porcentual > 100% (o 10,000 puntos básicos)
    • Message: El monto porcentual no puede ser más de 10000 / El monto del código de descuento no puede ser superior al 100%
  • INVALID_QUANTITY
    • Trigger: Cantidad inválida especificada para precios basados en uso
    • Message: Solo se permite 1 cantidad en productos con precio basado en uso
  • INVALID_QUERY_PARAMS
    • Trigger: Parámetros de consulta mutuamente exclusivos / mal formados
    • Message: Los parámetros de consulta deben contener solo time_frame o (start, end)
  • INVALID_REQUEST_BODY
    • Trigger: JSON malformado o violación de esquema
    • Message: El cuerpo de su solicitud no es válido. Verifique los encabezados y el objeto de la solicitud.
  • INVALID_REQUEST_PARAMETERS
    • Trigger: Semántica incorrecta (por ejemplo, fecha en el pasado)
    • Message: No se puede cambiar next_billing_date a una fecha pasada
  • INVALID_SUGGESTED_PRICE
    • Trigger: Precio PWYW < precio mínimo permitido
    • Message: El precio sugerido no puede ser inferior al precio mínimo. En el caso de pay what you want, el precio se considera el monto mínimo aceptado
  • INVALID_TAX_ID
    • Trigger: Falló la validación de VAT/GST/TIN
    • Message: El ID fiscal no es válido
  • LICENSE_KEY_LIMIT_REACHED
    • Trigger: Activaciones = límite
    • Message: Se alcanzó el límite de activaciones de la clave de licencia
  • LICENSE_KEY_NOT_FOUND
    • Trigger: ID de instancia o ID de clave inválido
    • Message: No se encontró la instancia de la clave de licencia o no pertenece a esta clave
  • LINE_ITEM_FULLY_REFUNDED
    • Trigger: Intento de reembolsar un ítem ya completamente reembolsado
    • Message: El artículo ya se ha reembolsado completamente y no puede reembolsarse más.
  • LINE_ITEM_NOT_FOUND
    • Trigger: El ID del artículo no forma parte del pago referenciado
    • Message: No se encontró el artículo en el pago
  • LINE_ITEM_PRORATED
    • Trigger: Reembolso o actualización intentando aplicarse a una línea prorrateada
    • Message: El artículo no puede reembolsarse porque está prorrateado
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Trigger: Monto de reembolso > monto pagado (incluido impuestos)
    • Message: El monto solicitado para el artículo , incluyendo impuestos, es , lo cual excede el monto pagado
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Trigger: Monto de reembolso por debajo del umbral mínimo
    • Message: El monto solicitado para el artículo es , lo cual es demasiado bajo
  • MAXIMUM_KEYS_REACHED
    • Trigger: Metadatos / campos personalizados excedieron 50 pares
    • Message: Supera los 50 pares clave-valor
  • MERCHANT_NOT_LIVE
    • Trigger: El negocio aún está en modo de prueba/sandbox
    • Message: El comerciante no está en producción
  • METER_IS_DELETED
    • Trigger: Intento de usar un medidor eliminado
    • Message: El medidor ya ha sido eliminado
  • MISSING_ADDON_IDS
    • Trigger: Lista addon_id vacía o IDs desconocidos
    • Message: Uno o más IDs de producto no existen:
  • MISSING_METER_IDS
    • Trigger: Lista de IDs de medidor vacía o contiene IDs inválidos
    • Message: Uno o más IDs de medidor no existen:
  • MISSING_PRODUCT_INFORMATION
    • Trigger: El producto existe pero falta información obligatoria
    • Message: El producto existe, pero falta otra información obligatoria o es inválida
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Trigger: Intento de dejar el saldo de la billetera negativo
    • Message: No se permite que el saldo de la billetera sea negativo
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Trigger: Después de filtrar, no queda nada
    • Message: No se encontraron métodos de pago elegibles
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Trigger: Intento de establecer vencimiento en clave basada en suscripción
    • Message: No se puede establecer fecha de vencimiento para clave de licencia basada en suscripción
  • NOT_FOUND
    • Trigger: 404 genérico por cualquier recurso faltante
    • Message: Elemento no encontrado (o más específico)
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Trigger: No se permite intercambio de planes para on-demand
    • Message: No se admite cambiar planes para suscripciones on demand
  • ON_DEMAND_SUBSCRIPTIONS_NOT_ENABLED
    • Trigger: El negocio tiene la bandera de funciones desactivada
    • Message: Las suscripciones on demand no están habilitadas para este negocio
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Trigger: Intento de usar on-demand con facturación por uso
    • Message: Las suscripciones On Demand no son compatibles con facturación por uso
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Trigger: Falta precio para producto PWYW
    • Message: El monto es obligatorio para productos pay as you want
  • PAYMENT_ALREADY_REFUNDED
    • Trigger: Reembolso duplicado
    • Message: Este pago ya ha sido reembolsado
  • PAYMENT_HAS_BEEN_REFUNDED
    • Trigger: El pago ha sido totalmente reembolsado
    • Message: El ID de pago ha sido reembolsado completamente.
  • PAYMENT_NOT_SUCCEEDED
    • Trigger: Intento de reembolsar/procesar pago fallido
    • Message: El pago proporcionado no se ha completado con éxito
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Trigger: Cambio de plan intentado en suscripción programada para cancelación
    • Message: Suscripción programada para cancelación
  • PREVIOUS_PAYMENT_PENDING
    • Trigger: Intento de crear cargo mientras el anterior está en estado no terminal
    • Message: No se puede crear un nuevo cargo porque el pago anterior aún no tuvo éxito
  • PRODUCT_CART_EMPTY
    • Trigger: Carrito de productos vacío enviado
    • Message: product_cart está vacío
  • PRODUCT_IS_DELETED
    • Trigger: Producto borrado suavemente
    • Message: Sin mensajes
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Trigger: Monto agregado de reembolsos > monto pagado
    • Message: El monto calculado del reembolso es mayor que el monto pagado
  • REFUND_WINDOW_EXPIRED
    • Trigger: Fuera de la ventana permitida de reembolso
    • Message: No se pueden iniciar reembolsos días después de la creación del pago. Contacte a support@dodopayments.com.
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Trigger: Monto < mínimo del producto
    • Message: El monto no puede ser menor que el monto mínimo especificado para el producto
  • SUBSCRIPTION_EXPIRED
    • Trigger: Facturación posterior a ends_at
    • Message: Suscripción expirada no puede crear nuevos cargos
  • SUBSCRIPTION_INACTIVE
    • Trigger: Estado ≠ ACTIVE
    • Message: La suscripción no está activa
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Trigger: Se esperaba on-demand pero se obtuvo intervalo fijo
    • Message: La suscripción ya no es on demand
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Trigger: Reintentos de pago de suscripción exceden intentos máximos
    • Message: Se superó el límite máximo de reintentos de 10 intentos para esta suscripción
  • TOO_MANY_REQUESTS
    • Trigger: Límite de tasa 429
    • Message: Sin mensajes
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Trigger: Total combinado del carrito < mínimo del gateway
    • Message: Se requiere un monto mínimo de para procesar el pago
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Trigger: Intento de actualizar la marca principal a través de la API regular
    • Message: La marca principal no se puede actualizar mediante este endpoint de API.
  • UNAUTHORIZED
    • Trigger: No hay clave API o token / alcance inválido
    • Message: No está autorizado para realizar esta acción
  • UNSUPPORTED_ACTION
    • Trigger: Acción no compatible para el tipo de recurso
    • Message: No se admite cambiar planes para suscripciones basadas en uso
  • UNSUPPORTED_BILLING_CURRENCY
    • Trigger: Suscripciones restringidas a USD
    • Message: No se admite moneda de facturación distinta al USD para suscripciones
  • UNSUPPORTED_COUNTRY
    • Trigger: Geo aún no soportado
    • Message: El país actualmente no está soportado
  • UNSUPPORTED_CURRENCY
    • Trigger: Moneda de producto o complemento inválida
    • Message: La moneda no es compatible actualmente / Solo se admiten productos en USD e INR actualmente / Solo se admite USD e INR para el precio del complemento / Solo se puede solicitar USD o INR para billing_currency / Moneda no compatible / Moneda inesperada para suscripciones con tarjeta india
  • UNSUPPORTED_DISCOUNT_TYPE
    • Trigger: Descuentos de monto fijo, etc., aún no activos
    • Message: Por ahora solo se admiten códigos de descuento porcentuales
  • UNSUPPORTED_PAYMENT_CURRENCY
    • Trigger: Moneda de pago bloqueada para el conector
    • Message: No se admite transacción en INR para esta transacción
  • UNSUPPORTED_TAX_CATEGORY
    • Trigger: Cadena de categoría fiscal no está en el enum
    • Message: La categoría actualmente no está soportada
  • UNSUCCESSFUL_PAYMENT_ID
    • Trigger: El ID de pago hace referencia a un pago no exitoso
    • Message: El ID de pago tiene un estado no exitoso.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Trigger: Intento de reembolsar un pago con monto cero
    • Message: No se puede reembolsar un pago con monto monetario cero

Mejores Prácticas

  1. Siempre maneje los errores de manera adecuada en su aplicación
  2. Implemente un registro de errores adecuado
  3. Use mensajes de error apropiados para los usuarios finales
  4. Implemente lógica de reintento para errores transitorios
  5. Contacte al soporte para problemas no resueltos

Soporte

Para obtener ayuda adicional con códigos de error o problemas de integración, comuníquese con nuestro equipo de soporte en support@dodopayments.com.