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
    • 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_at fecha
    • Mensaje: Código de descuento expirado
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Disparador: Descuento reutilizado después de que usage_limit alcanzado
    • Mensaje: 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
    • 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_id aparece dos veces en items[]
    • Mensaje: Se especificaron item_ids duplicados en el array de items
  • 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
  • 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
  • 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_id lista vacía o IDs desconocidos
    • Mensaje: Uno o más IDs de producto no existen:
  • 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
  • SUBSCRIPTION_INACTIVE
    • Disparador: Estado ≠ ACTIVE
    • Mensaje: La suscripción no está activa
  • 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

  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 [email protected].