Skip to main content
El SDK de Kotlin proporciona a las aplicaciones Kotlin acceso tipado a la API REST de Dodo Payments. Usa tipos de Kotlin en todo momento: valores anulables para campos que pueden faltar, Sequence para iterar resultados y funciones suspend para llamadas asíncronas.

Instalación

Gradle (Kotlin DSL)

Agrega la dependencia a tu build.gradle.kts:
build.gradle.kts

Maven

Agrega la dependencia a tu pom.xml:
pom.xml
Las versiones del SDK incorporan compatibilidad con cambios en la API. Para encontrar la versión más reciente, consulta Maven Central.
El SDK requiere Java 8 o una versión posterior. Se ejecuta en la JVM y en Android, e incluye reglas de conservación para ProGuard y R8.

Inicio Rápido

Crea un cliente y, después, una sesión de checkout:
fromEnv() se conecta al modo activo, a menos que DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl indiquen lo contrario. Para usar el modo de prueba, consulta Modo de prueba. Una clave de API del modo de prueba solo funciona en el modo de prueba.
Guarda las claves de API en variables de entorno o en un gestor de secretos. Nunca las incluyas en el control de versiones.

Funciones principales

Coroutines

Los métodos del cliente asíncrono son funciones suspend que llamas desde una coroutine.

Null Safety

Los campos que pueden faltar son tipos anulables, no Optional.

Sequences

En el cliente síncrono, autoPager() devuelve un Sequence que obtiene más páginas a medida que iteras. En el cliente asíncrono, devuelve un Flow.

Immutable Models

Las clases de modelo son inmutables, e toBuilder() devuelve un builder para una copia modificada.

Configuración

Desde variables de entorno

fromEnv() lee tu configuración de las variables de entorno o de las propiedades del sistema. Las propiedades del sistema tienen prioridad:
La clave de API proviene de DODO_PAYMENTS_API_KEY o dodopayments.apiKey. El secreto de firma del webhook proviene de DODO_PAYMENTS_WEBHOOK_KEY o dodopayments.webhookKey, y la URL base de DODO_PAYMENTS_BASE_URL o dodopayments.baseUrl. Crea un cliente y reutilízalo, porque cada cliente tiene su propio grupo de conexiones y sus propios grupos de hilos. Para verificar un webhook, pasa el cuerpo sin procesar de la solicitud y los encabezados a client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), donde headers es un com.dodopayments.api.core.http.Headers. Comprueba la firma con tu clave de webhook y devuelve el evento analizado, o lanza DodoPaymentsWebhookException. Sin encabezados, unwrap no verifica la firma. client.webhooks().unsafeUnwrap(rawBody) analiza el cuerpo sin verificarlo, así que úsalo únicamente para pruebas. Consulta Webhooks.

Configuración manual

Establece cada opción en el builder:

Modo de prueba

Para usar el modo de prueba (https://test.dodopayments.com), llama a testMode() en el builder:

Tiempos de espera y reintentos

De forma predeterminada, el cliente reintenta dos veces y agota el tiempo de espera después de 1 minuto. Reintenta los errores de conexión y las respuestas con estado 408, 409, 429 o 500 y superiores, con retroceso exponencial. Establece los valores predeterminados en el cliente o pasa RequestOptions a una sola llamada:

Operaciones comunes

Los ejemplos de esta sección usan el client de Inicio rápido.

Crear una sesión de checkout

Crea una sesión de checkout y, después, redirige al cliente a la URL de checkout devuelta:
checkoutUrl() devuelve un String? anulable. Cada URL de checkout funciona una sola vez y caduca después de 24 horas. Para consultar todas las opciones de sesión, visita Sesiones de checkout.

Crear un producto

Crea un producto de suscripción mensual con un precio de $29.99:
price está expresado en la unidad monetaria más pequeña. discountBps establece el descuento en puntos básicos y reemplaza el campo obsoleto discount.

Activar una clave de licencia

Activa una clave de licencia para un dispositivo o una instalación. Si la clave ha alcanzado su límite de activaciones, la API devuelve 422 y el SDK lanza UnprocessableEntityException. Una clave inactiva devuelve 403 (PermissionDeniedException), y una clave desconocida devuelve 404 (NotFoundException):

Gestionar suscripciones

Crea una suscripción y, después, cóbrala si es una suscripción bajo demanda.
POST /subscriptions (el método subscriptions().create() del SDK) está obsoleto. Sigue funcionando para integraciones existentes, pero las integraciones nuevas deben crear suscripciones mediante una Sesión de checkout.
billing solo requiere country, un código de país ISO de dos letras. Usa AttachExistingCustomer para asociar un cliente existente o NewCustomer para crear uno. charge es para suscripciones bajo demanda, e productPrice está expresado en la unidad monetaria más pequeña.

Facturación basada en el uso

Registrar eventos de uso

Envía un evento de uso para un cliente. Los medidores que registran su eventName lo agregan:
El eventId es la clave de idempotencia, así que asigna un valor único a cada evento. Una solicitud acepta hasta 1.000 eventos.

Operaciones asíncronas

Cliente asíncrono

El cliente asíncrono tiene los mismos métodos que el cliente síncrono, pero la mayoría son funciones suspend. Llámalas desde una coroutine:
También puedes llamar a client.async() en un cliente síncrono para obtener su versión asíncrona.

Gestión de errores

Para un estado de error, el SDK lanza una subclase de DodoPaymentsServiceException que tiene statusCode(), headers() y body(). Las subclases son BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) y UnexpectedStatusCodeException para otros estados, como 409:
Los fallos de red lanzan DodoPaymentsIoException, y las respuestas que el SDK no puede interpretar lanzan DodoPaymentsInvalidDataException. Todas las excepciones del SDK extienden DodoPaymentsException.

Gestión funcional de errores

Usa Result para la gestión funcional de errores:
runCatching captura todas las excepciones, incluidas las excepciones del SDK, y las devuelve como un Result fallido.

Integración con Android

El Kotlin SDK es un server SDK. Se autentica con tu secret API key, y cualquiera que tenga tu APK puede extraer una clave compilada en él, así que nunca lo uses dentro de una aplicación Android. Para aceptar pagos en una aplicación Android:
  1. En tu servidor, crea la sesión de checkout con este SDK (consulta Integración con Ktor) y devuelve su checkout_url.
  2. En la aplicación, obtén ese checkout_url desde tu servidor y ábrelo con el Android SDK, que no contiene ninguna API key.

Validación de respuestas

De forma predeterminada, el SDK lanza DodoPaymentsInvalidDataException únicamente cuando lees una propiedad con un tipo inesperado. Para comprobar toda la respuesta de antemano, habilita la validación para una solicitud o llama a validate() en una respuesta:

Funciones avanzadas

Configuración del proxy

Para enviar solicitudes a través de un proxy, pasa un java.net.Proxy al builder:

Configuración temporal

withOptions devuelve un cliente con ajustes modificados que comparte las conexiones y los pools de hilos del cliente original. El cliente original no cambia:

Integración con Ktor

Crea el cliente una vez y llámalo desde una ruta:

Recursos

GitHub Repository

Código fuente, versiones y la lista completa de métodos.

API Reference

Cada endpoint, parámetro y respuesta.

Discord Community

Haz preguntas y habla con otros desarrolladores.

Report Issues

Informa de errores o solicita funciones.

Soporte

Para obtener ayuda con el Kotlin SDK:

Contribuciones

Para contribuir, lee las directrices de contribución.
Última modificación el 26 de septiembre de 2026