Skip to main content

Descripción General

Cuando una solicitud falla, la API de Dodo Payments devuelve un código de estado HTTP y un cuerpo JSON que indica el error. Usa esta página para averiguar qué causó un error y cómo resolverlo. Cada respuesta de error incluye:
  • Un código de estado HTTP que indica la categoría general del error.
  • Un code que identifica el error exacto, por ejemplo UNSUPPORTED_COUNTRY.
  • Un message que explica el error en lenguaje sencillo. El message puede ser null, por ejemplo, para errores internos del servidor.
Basa el manejo de errores en code, no en message. Varios códigos devuelven más de un mensaje, según la causa. Usa estos códigos de error para:
  • Depurar problemas de integración.
  • Gestionar correctamente los errores en tu aplicación.
  • Mostrar comentarios útiles a tus clientes.
  • Mantener fiable el procesamiento de pagos.
Estos son errores de API y lógica empresarial. Para consultar los motivos de rechazo de tarjeta devueltos en un pago fallido (como INSUFFICIENT_FUNDS o CARD_DECLINED), consulta la referencia de Fallos de transacciones.

Códigos de error estándar de la API

La API utiliza estos códigos de estado HTTP para los errores:

Formato de la respuesta de error

El cuerpo de una respuesta de error contiene dos campos, code y message:

Referencia de códigos de error

Los códigos de error siguientes están agrupados por el área de la API con la que se relacionan. Cada entrada indica la condición que activa el error y el mensaje que devuelve la API. Los marcadores de posición, como {id}, representan valores que la API completa.

Autenticación y cuenta

  • UNAUTHORIZED
    • Activador: La solicitud no tiene una API key o esta no es válida (HTTP 401), o la API key no tiene el rol requerido por la acción (HTTP 403)
    • Mensaje: No tienes autorización para realizar esta acción
  • MERCHANT_NOT_LIVE
    • Activador: Una solicitud en modo live para una empresa que no tiene habilitados los pagos live (HTTP 403). Esto incluye una empresa que solo ha utilizado el modo test y una empresa cuyos pagos live aún no están habilitados porque la verificación no se ha completado. Las solicitudes en modo test no se ven afectadas.
    • Mensaje: Los pagos live no están habilitados para el merchant
  • BUSINESS_ARCHIVED
    • Activador: Cualquier solicitud dirigida al cliente para una empresa archivada (HTTP 403). Esto incluye checkout, enlaces de pago, la tienda, el Customer Portal y la activación de claves de licencia.
    • Mensaje: Esta empresa está archivada y ya no acepta solicitudes

Pagos y checkout

  • CHECKOUT_SESSION_CONSUMED
    • Activador: La sesión de checkout ya generó un pago (HTTP 403). Crea una nueva sesión de checkout.
    • Mensaje: Ya se ha generado un pago con la sesión de checkout indicada.
  • MANUAL_RETRY_ALREADY_PAID
    • Activador: Reintento manual de una factura de renovación cuyo pago ya se realizó correctamente. Enviarlo de nuevo cobraría dos veces al cliente.
    • Mensaje: El pago de esta factura ya se realizó correctamente
  • MANUAL_RETRY_HARD_DECLINE
    • Activador: Un reintento manual cuando el último fallo de la factura es un rechazo definitivo o no tiene un código de error clasificado. Otro cargo en la misma tarjeta no puede realizarse correctamente, así que actualiza el método de pago.
    • Mensaje: El último fallo de esta factura es un rechazo definitivo, por lo que el reintento no puede realizarse correctamente (o) El último fallo de esta factura no se puede clasificar, por lo que no se puede reintentar
  • MANUAL_RETRY_IN_FLIGHT
    • Activador: Un reintento manual mientras un pago de la factura está processing o aún no tiene un estado registrado. Espera el resultado de ese pago en lugar de enviarlo de nuevo.
    • Mensaje: Un pago de esta factura aún está en curso
  • MANUAL_RETRY_LIMIT_REACHED
    • Activador: Un reintento manual después de agotar los 3 envíos de la factura o antes de que haya transcurrido el tiempo de espera (HTTP 429). El segundo envío espera 1 hora después del primero y el tercero espera 3 horas después del segundo. El cuerpo solo contiene code y message. Para saber cuándo se permite el siguiente envío, lee retry_available_at de GET /payments/{payment_id}/retry.
    • Mensaje: Se han agotado todos los reintentos manuales de esta factura (o) La opción de reintentar ahora aún no está disponible para esta factura
  • NO_ELIGIBLE_PAYMENT_METHODS
    • Activador: No queda ningún método de pago disponible después del filtrado (HTTP 422)
    • Mensaje: No se encontraron métodos de pago aptos
  • PAYMENT_NOT_PERMITTED
    • Activador: Un checkout o intento de pago de un cliente incluido en la blocklist del merchant (HTTP 403). El código y el mensaje no indican deliberadamente ninguna causa.
    • Mensaje: Este pago no se puede procesar.
  • PAYMENT_NOT_RETRYABLE
    • Activador: Un reintento manual de un pago que no admite reintentos manuales. El pago no tiene factura, su factura no es una renovación de suscripción abierta, ningún pago de la factura ha fallado todavía, la suscripción no tiene configurada la facturación recurrente (por ejemplo, una suscripción bajo demanda) o el cliente está en la blocklist.
    • Mensaje: Varía según el motivo, por ejemplo: Solo se pueden reintentar los pagos de renovación de suscripciones
  • PAYMENT_NOT_SUCCEEDED
    • Activador: Un intento de reembolsar o procesar un pago que no se ha realizado correctamente
    • Mensaje: El pago proporcionado no se ha realizado correctamente
  • PREVIOUS_PAYMENT_PENDING
    • Activador: Un intento de crear un cargo mientras el pago anterior está en un estado no terminal. También se devuelve para un reintento manual cuando el pago más reciente de la factura no es failed ni está en curso, por ejemplo, requires_customer_action o cancelled.
    • Mensaje: No se puede crear un nuevo cargo porque el pago anterior aún no se ha realizado correctamente (o) El pago más reciente de esta factura no ha fallado
  • UNSUCCESSFUL_PAYMENT_ID
    • Activador: El ID de pago hace referencia a un pago que no se ha realizado correctamente
    • Mensaje: El ID de pago tiene un estado fallido.

Connectors y BYOP

Estos errores se relacionan con connectors de pago propiedad del merchant (Bring Your Own Processor, o BYOP).
  • BYOP_CONNECTOR_DISABLED
    • Activador: Se actualiza el método de pago de una suscripción enviada a través de un connector BYOP deshabilitado. Dodo Payments no recurre a sus propios connectors, así que vuelve a habilitar primero el connector.
    • Mensaje: La suscripción se envía a través del connector propio del merchant (BYOP), que está deshabilitado actualmente
  • BYOP_CUSTOM_INVOICE_ADDRESS_MISSING
    • Activador: Un pago enviado a través del connector del merchant (BYOP) no tiene una dirección de factura personalizada
    • Mensaje: Se requiere una dirección de factura personalizada de BYOP cuando el pago se envía a través del connector del merchant
  • CONNECTOR_LABEL_ALREADY_EXISTS
    • Activador: Se crea un connector con una etiqueta que ya existe
    • Mensaje: Ya existe un connector con esta etiqueta. Elige otra etiqueta.

Reembolsos

  • EXISTING_REFUND_REQUEST_PROCESSING
    • Activador: Una solicitud de reembolso anterior aún se está procesando
    • Mensaje: Aún se está procesando una solicitud de reembolso con el estado “Pending”
  • LINE_ITEM_FULLY_REFUNDED
    • Activador: Se intenta reembolsar un line item que ya se ha reembolsado por completo
    • Mensaje: El line item {id} se ha reembolsado por completo y no se puede reembolsar más.
  • LINE_ITEM_NOT_FOUND
    • Activador: El ID del elemento no forma parte del pago indicado
    • Mensaje: No se encontró el line item {id} en el pago
  • LINE_ITEM_PRORATED
    • Activador: Se intenta reembolsar o actualizar un line item prorrateado
    • Mensaje: El line item {id} no se puede reembolsar porque está prorrateado
  • LINE_ITEM_REFUND_AMOUNT_TOO_HIGH
    • Activador: El importe del reembolso, incluidos los impuestos, es superior al importe pagado
    • Mensaje: El importe de reembolso solicitado para el line item {id}, incluidos los impuestos, es {amount}, que supera el importe pagado {amount}
  • LINE_ITEM_REFUND_AMOUNT_TOO_LOW
    • Activador: El importe del reembolso es inferior al umbral mínimo
    • Mensaje: El importe de reembolso solicitado para el line item {id} es {amount}, que es demasiado bajo
  • NOTHING_TO_REFUND
    • Activador: No queda ningún importe reembolsable porque todos los line items positivos ya se han reembolsado por completo
    • Mensaje: No queda ningún importe reembolsable. Todos los line items positivos se han reembolsado por completo.
  • PARTIAL_REFUND_NOT_ALLOWED
    • Activador: Se intenta realizar un reembolso parcial con un método de pago que solo admite reembolsos completos
    • Mensaje: Este método de pago no permite reembolsos parciales
  • PAYMENT_ALREADY_REFUNDED
    • Activador: Un reembolso duplicado
    • Mensaje: Este pago ya se ha reembolsado
  • PAYMENT_HAS_BEEN_REFUNDED
    • Activador: El pago se ha reembolsado por completo
    • Mensaje: El ID de pago se ha reembolsado por completo.
  • REFUND_AMOUNT_EXCEEDS_PAID_AMOUNT
    • Activador: El importe total del reembolso es superior al importe pagado
    • Mensaje: El importe de reembolso calculado es superior al importe pagado
  • REFUND_WINDOW_EXPIRED
    • Activador: El reembolso se solicita fuera del plazo permitido
    • Mensaje: No se pueden iniciar reembolsos {days} días después de crear el pago. Contacta con support@dodopayments.com.
  • ZERO_AMOUNT_PAYMENT_REFUND_NOT_ALLOWED
    • Activador: Se intenta reembolsar un pago de importe cero
    • Mensaje: No se puede reembolsar un pago con un importe monetario cero

Suscripciones y add-ons

  • ADDONS_IN_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Activador: Se intenta añadir add-ons a una suscripción con facturación basada en el uso
    • Mensaje: Las suscripciones no admiten add-ons para la facturación basada en el uso
  • ADDONS_NOT_ALLOWED_FOR_ON_DEMAND
    • Activador: Se intenta añadir add-ons a una suscripción bajo demanda
    • Mensaje: No se permiten add-ons para suscripciones bajo demanda
  • CANCEL_SCHEDULED_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Activador: Customer Portal intenta cancelar un cambio de plan programado mientras la empresa ha deshabilitado esa acción
    • Mensaje: El Customer Portal tiene deshabilitada la cancelación de cambios de plan programados.
  • CHARGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Activador: Se intenta cobrar una suscripción programada para cancelarse
    • Mensaje: Suscripción programada para cancelarse
  • CUSTOMER_HAS_EXISTING_SUBSCRIPTION
    • Activador: Se crea una suscripción para un cliente que ya tiene una, cuando la empresa no permite varias suscripciones por cliente
    • Mensaje: El cliente {id} ya tiene una suscripción. Para permitir varias suscripciones por cliente, cambia la configuración de la empresa
  • DO_NOT_BILL_NOT_ALLOWED_IN_CUSTOMER_PORTAL
    • Activador: Se utiliza el modo de prorrateo do_not_bill en un cambio de plan del Customer Portal
    • Mensaje: El modo de prorrateo do_not_bill no está permitido en el Customer Portal
  • DUPLICATE_ADDON_IDS_IN_REQUEST
    • Activador: El mismo addon_id aparece más de una vez en la solicitud
    • Mensaje: No se permiten IDs de add-ons duplicados
  • INACTIVE_SUBSCRIPTION_PLAN_CHANGE_NOT_SUPPORTED
    • Activador: Un cambio de plan en una suscripción inactiva
    • Mensaje: No se admiten cambios de plan para suscripciones inactivas
  • INVALID_PRORATION_MODE_WITH_NEXT_BILLING_DATE
    • Activador: Se utiliza un modo de prorrateo distinto de full_immediately con effective_at: next_billing_date
    • Mensaje: Con effective_at: next_billing_date solo se permite el modo de prorrateo full_immediately
  • MISSING_ADDON_IDS
    • Activador: La lista addon_id está vacía o contiene IDs desconocidos
    • Mensaje: Uno o más IDs de producto no existen: {id}
  • ON_DEMAND_PLAN_CHANGE_NOT_SUPPORTED
    • Activador: Un cambio de plan en una suscripción bajo demanda
    • Mensaje: No se admiten cambios de plan para suscripciones bajo demanda
  • ON_DEMAND_USAGE_BASED_BILLING_NOT_SUPPORTED
    • Activador: Se intenta usar una suscripción bajo demanda con facturación basada en el uso
    • Mensaje: Las suscripciones bajo demanda no se admiten para la facturación basada en el uso
  • ONE_TIME_PRODUCTS_NOT_ALLOWED_FOR_ON_DEMAND
    • Activador: Se añade un producto único a una suscripción bajo demanda
    • Mensaje: No se permiten productos únicos en suscripciones bajo demanda
  • PENDING_PLAN_CHANGE_EXISTS
    • Activador: Se solicita un nuevo cambio de plan mientras otro anterior aún espera el pago
    • Mensaje: Ya existe un cambio de plan pendiente para esta suscripción. Espera a que se complete el pago actual.
  • PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Activador: Un cambio de plan mediante Customer Portal mientras la empresa lo ha deshabilitado
    • Mensaje: El cambio de plan de suscripción mediante Customer Portal está deshabilitado.
  • PLAN_CHANGE_NOT_ALLOWED_FOR_SCHEDULED_CANCELLATION
    • Activador: Un cambio de plan en una suscripción programada para cancelarse
    • Mensaje: Suscripción programada para cancelarse
  • SCHEDULE_PLAN_CHANGE_FOR_CUSTOMER_PORTAL_DISABLED
    • Activador: Se programa un cambio de plan mediante Customer Portal mientras la empresa lo ha deshabilitado
    • Mensaje: La programación de cambios de plan está deshabilitada para esta empresa.
  • SCHEDULED_PLAN_CHANGE_EXISTS
    • Activador: Se crea un cambio de plan programado cuando ya existe uno
    • Mensaje: Ya existe un cambio de plan programado para esta suscripción. Cancela el cambio programado existente antes de crear uno nuevo.
  • SCHEDULED_PLAN_CHANGE_NOT_FOUND
    • Activador: Se hace referencia a un cambio de plan programado inexistente o se intenta cancelarlo
    • Mensaje: No se encontró ningún cambio de plan programado para esta suscripción.
  • SUBSCRIPTION_EXPIRED
    • Activador: Se factura una suscripción después de su fecha expires_at
    • Mensaje: La suscripción ha caducado; no se pueden crear nuevos cargos
  • SUBSCRIPTION_HAS_NO_PAYMENT_METHOD
    • Activador: Reintento manual de una suscripción que no tiene un método de pago guardado para cobrar fuera de sesión
    • Mensaje: Esta suscripción no tiene un método de pago guardado para realizar el cargo
  • SUBSCRIPTION_INACTIVE
    • Activador: El estado de la suscripción no es active
    • Mensaje: La suscripción no está activa (o) Esta suscripción no está live, por lo que no se puede programar una cancelación
  • SUBSCRIPTION_NOT_ON_DEMAND
    • Activador: Una acción bajo demanda en una suscripción que factura con un intervalo fijo
    • Mensaje: La suscripción ya no es bajo demanda
  • SUBSCRIPTION_PAYMENT_RETRY_LIMIT_EXCEEDED
    • Activador: Los reintentos de pago de la suscripción superaron el número máximo de intentos
    • Mensaje: Se superó el límite máximo de 10 reintentos para esta suscripción

Clientes y blocklist

  • CUSTOMER_ALREADY_BLOCKED
    • Activador: Se bloquea un cliente que ya está en la blocklist y no tiene suscripciones live pendientes de cancelar (HTTP 409)
    • Mensaje: Este cliente ya está en la blocklist
  • PORTAL_ACTION_NOT_PERMITTED
    • Activador: Un cliente bloqueado llama a una ruta de escritura de Customer Portal: cancelar, pausar, reanudar, cambiar de plan o actualizar el método de pago (HTTP 403). Las rutas de lectura permanecen abiertas. El código y el mensaje no indican deliberadamente ninguna causa.
    • Mensaje: Esta acción no está disponible.

Productos, carrito y marcas

  • BRAND_ALREADY_ARCHIVED
    • Activador: Se archiva una marca que ya está archivada
    • Mensaje: La marca ya está archivada
  • BRAND_ARCHIVED
    • Activador: Se actualiza una marca archivada, se envía para verificación o se etiqueta un producto, colección de productos o suscripción nuevos con ella
    • Mensaje: La marca está archivada (o) La marca está archivada y no se puede actualizar (o) La marca está archivada y no se puede enviar para verificación
  • BRAND_ARCHIVE_TARGET_REQUIRED
    • Activador: Se archiva una marca que aún contiene productos, suscripciones live o colecciones de productos sin un destino move_products_to
    • Mensaje: La marca tiene {count} producto(s). Define move_products_to con una marca de destino para volver a etiquetarlos. El mensaje indica suscripciones live o colecciones de productos cuando son estas las que impiden el archivado.
  • BRAND_MISMATCH
    • Activador: Los artículos del carrito pertenecen a marcas diferentes
    • Mensaje: Todos los artículos del carrito de productos deben pertenecer a la misma marca
  • BRAND_NOT_ENABLED
    • Activador: La marca está deshabilitada o no está activa
    • Mensaje: La marca proporcionada no está habilitada
  • BRAND_SUBMISSION_NOT_ENABLED
    • Activador: La función de reenvío de la verificación de marca no está habilitada
    • Mensaje: Brand verificatin resubmission is not enabled (escrito exactamente como lo devuelve la API)
  • CANNOT_ARCHIVE_PRIMARY_BRAND
    • Activador: Se archiva la marca principal, cuyo ID de marca es el ID de la empresa
    • Mensaje: La marca principal no se puede archivar
  • FILE_IN_USE
    • Activador: Se elimina un archivo de producto digital al que aún hacen referencia concesiones activas
    • Mensaje: El archivo digital está referenciado por concesiones activas
  • INVALID_BRAND_ARCHIVE_TARGET
    • Activador: move_products_to indica la marca que se está archivando, una marca archivada o una marca de otra empresa
    • Mensaje: move_products_to debe ser una marca de esta empresa que no esté archivada (o) move_products_to no puede ser la marca que archivas
  • INVALID_SUGGESTED_PRICE
    • Activador: Un precio sugerido de Pay What You Want es inferior al precio mínimo
    • Mensaje: El precio sugerido no puede ser inferior al precio mínimo. En Pay What You Want, el precio se considera el importe mínimo aceptado
  • LOCALIZED_PRICE_ALREADY_EXISTS
    • Activador: Ya existe un precio localizado para este producto y país o moneda
    • Mensaje: Ya existe un precio localizado para este producto y país/moneda
  • LOCALIZED_PRICE_DUPLICATES_BASE
    • Activador: El precio localizado duplica la moneda o el país base del producto
    • Mensaje: El precio localizado duplica la moneda/el país base del producto
  • LOCALIZED_PRICE_SHAPE_MISMATCH
    • Activador: La estructura del precio localizado no coincide con pricing_mode del producto
    • Mensaje: La estructura del precio localizado no coincide con el pricing_mode del producto
  • MISSING_PRODUCT_INFORMATION
    • Activador: El producto existe, pero falta información obligatoria
    • Mensaje: El producto {id} existe, pero falta otra información obligatoria o esta no es válida
  • PAY_AS_YOU_WANT_AMOUNT_REQUIRED
    • Activador: Falta el importe de un producto Pay What You Want
    • Mensaje: El importe es obligatorio para un producto Pay What You Want
  • PRODUCT_CART_EMTPY
    • Activador: Se envía un carrito de productos vacío
    • Mensaje: product_cart está vacío (el código de error se escribe deliberadamente como EMTPY para coincidir con el valor exacto que devuelve la API)
  • PRODUCT_COLLECTION_IS_DELETED
    • Activador: Se opera sobre una colección de productos que se ha eliminado
    • Mensaje: Sin mensaje
  • PRODUCT_COLLECTION_MUST_HAVE_PRODUCTS
    • Activador: Se elimina el último producto o el último grupo con productos de una colección
    • Mensaje: No se puede eliminar el último producto de una colección. Archiva la colección en su lugar. (o) No se puede eliminar el último grupo con productos. Archiva la colección en su lugar.
  • PRODUCT_IS_DELETED
    • Activador: El producto se ha eliminado
    • Mensaje: Sin mensaje
  • PRODUCT_PRICING_MODE_REQUIRED
    • Activador: Se añaden precios localizados antes de definir pricing_mode del producto
    • Mensaje: Debe definirse el pricing_mode del producto antes de añadir precios localizados
  • SLUG_ALREADY_TAKEN
    • Activador: El slug o la URL corta del producto solicitado ya está en uso
    • Mensaje: El slug ya está ocupado
  • UNABLE_TO_EDIT_PRIMARY_BRAND
    • Activador: Se intenta actualizar la marca principal mediante la API de marcas habitual
    • Mensaje: La marca principal no se puede actualizar mediante este endpoint de la API.

Descuentos

  • DISCOUNT_ALREADY_USED_ON_SUBSCRIPTION
    • Activador: Se vuelve a aplicar un descuento que ya se ha utilizado en esta suscripción
    • Mensaje: Este descuento ya se ha utilizado en esta suscripción
  • DISCOUNT_CODE_ALREADY_EXISTS
    • Activador: Se crea un código de descuento que ya existe
    • Mensaje: El código de descuento ya existe
  • DISCOUNT_CODE_EXPIRED
    • Activador: El código de descuento ha superado su fecha expires_at
    • Mensaje: El código de descuento ha caducado
  • DISCOUNT_CODE_USAGE_LIMIT_EXCEEDED
    • Activador: El código de descuento se utiliza después de alcanzar su usage_limit
    • Mensaje: El límite de uso no puede ser inferior a times_used (o) El código de descuento ha alcanzado el límite de uso
    • Nota: Terminal. El código se ha agotado, así que no debes reintentarlo.
  • DISCOUNT_CONCURRENT_REDEMPTION
    • Activador: Otro canje del mismo código mantuvo bloqueado el límite de uso durante demasiado tiempo (HTTP 503)
    • Mensaje: El descuento se está canjeando simultáneamente; vuelve a intentarlo
    • Nota: Transitorio. Es posible que el código aún tenga capacidad, por lo que es seguro reintentar la solicitud. No muestres al cliente que el código está agotado.
  • DISCOUNT_CURRENCY_OPTION_INVALID
    • Activador: currency_options no válido al crear o actualizar
    • Mensaje: Un descuento fijo requiere al menos una opción de moneda con un valor predeterminado resoluble (o) No se permiten opciones de moneda duplicadas (o) Solo una opción de moneda puede marcarse como predeterminada
  • DISCOUNT_CUSTOMER_NOT_ELIGIBLE
    • Activador: El cliente no cumple customer_eligibility del código (first_time, existing o no está en la lista de permitidos de un código specific)
    • Mensaje: El cliente no cumple los requisitos para este código de descuento
  • DISCOUNT_MINIMUM_SUBTOTAL_NOT_MET
    • Activador: El subtotal del carrito es inferior a minimum_subtotal configurado para la moneda del checkout
    • Mensaje: El subtotal del carrito es inferior al subtotal mínimo requerido por el descuento
  • DISCOUNT_NOT_YET_ACTIVE
    • Activador: El código se utiliza antes de su fecha starts_at
    • Mensaje: El código de descuento aún no está activo (starts_at está en el futuro)
  • DISCOUNT_PER_CUSTOMER_USAGE_LIMIT_EXCEEDED
    • Activador: El cliente ya ha canjeado el código per_customer_usage_limit veces
    • Mensaje: Se superó el límite de uso por cliente para este código de descuento
  • DISCOUNT_NOT_APPLICABLE_TO_NEW_PRODUCT
    • Activador: Un cambio de plan a un producto al que no se aplica el descuento existente
    • Mensaje: El descuento no se aplica al producto del nuevo plan
  • DISCOUNT_NOT_AVAILABLE_FOR_ON_DEMAND
    • Activador: El código se aplica a una suscripción bajo demanda
    • Mensaje: El cupón de descuento no está disponible para suscripciones bajo demanda
  • DISCOUNT_NOT_AVAILABLE_FOR_PRODUCT
    • Activador: El código se aplica a productos que no cubre
    • Mensaje: El cupón de descuento no está disponible para este producto
  • INVALID_DISCOUNT_CODE
    • Activador: El código no existe o no se aplica a ningún producto del carrito
    • Mensaje: Código de descuento no válido (o) El código de descuento no se puede aplicar a ningún producto del carrito
  • INVALID_PERCENTAGE
    • Activador: El porcentaje es superior al 100 % (10.000 puntos básicos)
    • Mensaje: El porcentaje no puede ser superior a 10000 (o) El importe del código de descuento no puede ser superior al 100 %
  • UNSUPPORTED_DISCOUNT_TYPE
    • Activador: Un tipo de descuento no compatible. percentage y flat son compatibles; los descuentos por importe unitario no lo son.
    • Mensaje: Solo se admiten códigos de descuento porcentuales y fijos (o) Por ahora solo se admiten códigos de descuento porcentuales

Claves de licencia

  • ACTIVATION_LIMIT_LESS_THAN_CURRENT_AMOUNT
    • Activador: El nuevo límite de activación de una clave de licencia es inferior a su número actual de instancias
    • Mensaje: El nuevo límite de activación no puede ser inferior al número actual de instancias
  • INACTIVE_LICENSE_KEY
    • Activador: El estado de la clave de licencia no es active
    • Mensaje: La clave de licencia no está activa
  • LICENSE_KEY_LIMIT_REACHED
    • Activador: El número de activaciones ha alcanzado el límite de activación
    • Mensaje: Se alcanzó el límite de activación de la clave de licencia
  • LICENSE_KEY_NOT_FOUND
    • Activador: El ID de instancia o el ID de clave de licencia no es válido
    • Mensaje: No se encontró la instancia de la clave de licencia o no pertenece a esta clave de licencia
  • NO_EXPIRY_ON_SUBSCRIPTION_LICENSE_KEYS
    • Activador: Se intenta establecer una fecha de caducidad en una clave de licencia basada en una suscripción
    • Mensaje: No se puede establecer una fecha de caducidad para una clave de licencia basada en una suscripción

Facturación basada en el uso y medidores

  • DUPLICATE_METER_IDS_IN_REQUEST
    • Activador: El mismo ID de medidor aparece más de una vez en la solicitud
    • Mensaje: No se permiten IDs de medidor duplicados
  • INVALID_QUANTITY
    • Activador: Una cantidad distinta de 1 para un producto con precios basados en el uso
    • Mensaje: Solo se permite una cantidad de 1 en productos con precios basados en el uso
  • METER_IS_DELETED
    • Activador: Se intenta utilizar un medidor eliminado
    • Mensaje: El medidor ya se ha eliminado
  • MISSING_METER_IDS
    • Activador: La lista de IDs de medidores está vacía o contiene IDs no válidos
    • Mensaje: Uno o más IDs de medidor no existen: {id}

Facturación basada en créditos

  • CREDIT_ENTITLEMENT_IS_DELETED
    • Activador: Se opera sobre una concesión de crédito que se ha eliminado
    • Mensaje: La concesión de crédito ya se ha eliminado
  • CREDIT_ENTITLEMENT_NAME_ALREADY_EXISTS
    • Activador: Se crea una concesión de crédito con un nombre que ya existe
    • Mensaje: Ya existe una concesión de crédito con este nombre
  • OVERAGE_LIMIT_EXCEEDED
    • Activador: Un uso o una deducción de crédito superaría el límite de exceso configurado
    • Mensaje: Se superó el límite de exceso

Wallet

  • INSUFFICIENT_WALLET_FUNDS
    • Activador: El saldo de Wallet es inferior al importe del débito
    • Mensaje: Fondos insuficientes en Wallet
  • NEGATIVE_BALANCE_ADJUSTMENT
    • Activador: Se intenta que el saldo de Wallet sea negativo
    • Mensaje: No se permite que el saldo de Wallet sea negativo

Moneda, impuestos y región

  • EXCHANGE_RATE_NOT_FOUND
    • Activador: No existe un tipo de cambio para el par de monedas
    • Mensaje: No se encontró el tipo de cambio para convertir de {currency} a {currency}
  • INVALID_TAX_ID
    • Activador: El VAT, GST o TIN no superó la validación
    • Mensaje: El ID fiscal no es válido
  • REQUEST_AMOUNT_BELOW_MINIMUM
    • Activador: El importe es inferior al mínimo establecido para el producto
    • Mensaje: El importe no puede ser inferior al importe mínimo especificado para el producto
  • TOTAL_PAYMENT_AMOUNT_BELOW_MINIMUM_AMOUNT
    • Activador: El total combinado del carrito es inferior al importe mínimo requerido para procesar un pago
    • Mensaje: Se requiere un importe mínimo de {display_str} para procesar el pago
  • UNSUPPORTED_BILLING_CURRENCY
    • Activador: La moneda de facturación solicitada no es compatible con esta suscripción
    • Mensaje: Las suscripciones no admiten monedas de facturación distintas de USD
  • UNSUPPORTED_COUNTRY
    • Activador: El país no es compatible
    • Mensaje: El país {country_name} no es compatible actualmente
  • UNSUPPORTED_CURRENCY
    • Activador: La moneda del producto o add-on no es una moneda en la que Dodo Payments pueda realizar cargos. Los precios base se pueden establecer en cualquier moneda facturable, por lo que este error normalmente indica que el código de moneda no es válido o no es compatible.
    • Mensaje: La moneda no es compatible actualmente (o) Actualmente solo se admiten productos en USD e INR (o) Para el precio del add-on solo se admiten USD e INR (o) Para billing_currency solo se pueden solicitar USD o INR (o) Moneda no compatible (o) Moneda inesperada para suscripciones con tarjeta india
  • UNSUPPORTED_TAX_CATEGORY
    • Activador: La categoría fiscal no es uno de los valores compatibles
    • Mensaje: La categoría {category} no es compatible actualmente

Validación y solicitudes

  • DUPLICATE_LINE_ITEMS_IN_REQUEST
    • Activador: El mismo item_id aparece más de una vez en items[]
    • Mensaje: Se especificaron item_ids duplicados en la matriz items
  • INVALID_QUERY_PARAMS
    • Activador: Parámetros de consulta mutuamente excluyentes o con formato incorrecto
    • Mensaje: Los parámetros de consulta solo deben contener time_frame o (start, end) (o) El inicio del intervalo no puede ser posterior al final
  • INVALID_REQUEST_BODY
    • Activador: JSON con formato incorrecto o incumplimiento del esquema
    • Mensaje: El cuerpo de tu solicitud no es válido. Comprueba los encabezados y el objeto de la solicitud.
  • INVALID_REQUEST_PARAMETERS
    • Activador: Valores de parámetros válidos en cuanto al formato, pero no en cuanto al significado, como una fecha pasada
    • Mensaje: No se puede cambiar next_billing_date a un momento pasado
  • MAXIMUM_KEYS_REACHED
    • Activador: Los metadatos o campos personalizados superan los 50 pares clave-valor
    • Mensaje: Se superan los 50 pares clave-valor

General y sistema

  • INTEGER_CONVERSION_FAILURE
    • Activador: Falla una conversión del lado del servidor entre un entero y una cadena o decimal, por ejemplo, cuando el total del carrito es demasiado grande para procesarlo
    • Mensaje: Error de conversión de enteros (o) El total del carrito es demasiado grande para procesarlo. Reduce la cantidad o selecciona otra moneda de facturación.
  • INTERNAL_SERVER_ERROR
    • Activador: Un error inesperado del servidor. Registra los detalles de la solicitud por tu parte.
    • Mensaje: Sin mensaje público (500 genérico; message suele ser null)
  • NOT_FOUND
    • Activador: 404 genérico para cualquier recurso que falte
    • Mensaje: Elemento no encontrado (o un mensaje más específico que indique qué falta)
  • TOO_MANY_REQUESTS
    • Activador: Se superó un límite de frecuencia (HTTP 429)
    • Mensaje: Sin mensaje
  • UNSUPPORTED_ACTION
    • Activador: Una acción que el tipo de recurso no admite
    • Mensaje: No se admiten cambios de plan para suscripciones con facturación basada en el uso

Prácticas recomendadas

Sigue estas prácticas al gestionar errores de la API:
  1. Gestiona todas las respuestas de error en tu aplicación y basa el flujo en code, no en message.
  2. Registra el estado HTTP, code y message de cada solicitud fallida.
  3. Muestra a los usuarios finales un mensaje redactado para ellos en lugar del message sin procesar de la API.
  4. Reintenta únicamente los errores transitorios, como las respuestas 429 y 5xx o DISCOUNT_CONCURRENT_REDEMPTION, después de una espera.
  5. Contacta con soporte para los errores que no puedas resolver.

Soporte

Para obtener más ayuda con los códigos de error o los problemas de integración, contacta con el equipo de soporte en support@dodopayments.com.
Última modificación el 26 de septiembre de 2026