Skip to main content
El SDK de Python proporciona a las aplicaciones de Python acceso tipado a la REST API de Dodo Payments. Incluye un cliente síncrono, DodoPayments, y un cliente asíncrono, AsyncDodoPayments, ambos basados en httpx. Los parámetros de solicitud anidados son diccionarios tipados y las respuestas son modelos de Pydantic.

Instalación

Instala el SDK con pip:
Para usar aiohttp como backend HTTP para el cliente async, instala el extra aiohttp:
Para verificar las firmas de los webhooks con client.webhooks.unwrap(), instala también el extra webhooks: pip install "dodopayments[webhooks]".
El SDK requiere Python 3.9 o posterior. Usa la versión estable más reciente de Python para recibir actualizaciones de seguridad.

Inicio rápido

Cliente síncrono

Crea un cliente y, después, crea una sesión de checkout:
Si omites bearer_token, el cliente lee la variable de entorno DODO_PAYMENTS_API_KEY. Si omites environment, el cliente se conecta al modo live. Una clave de API del modo de prueba solo funciona con environment="test_mode".

Cliente asíncrono

AsyncDodoPayments tiene los mismos métodos que DodoPayments. Usa await en cada llamada:
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

Pythonic Interface

Argumentos de palabra clave para los parámetros, tipos TypedDict para objetos anidados y modelos de Pydantic para las respuestas.

Async/Await

AsyncDodoPayments para asyncio, con aiohttp como backend HTTP opcional.

Type Hints

Sugerencias de tipo en todos los métodos, para el autocompletado del editor y la comprobación de tipos con mypy.

Auto-Pagination

Los métodos de listado devuelven iteradores que obtienen la página siguiente mientras recorres los resultados.

Configuración

Variables de entorno

Guarda tu clave de API en una variable de entorno:
.env
El cliente lee estas variables cuando no pasas el argumento correspondiente: Si se establece DODO_PAYMENTS_BASE_URL y también pasas environment, el constructor genera un error de “URL ambigua”. Para usar environment en ese caso, pasa base_url=None. Para verificar un webhook, pasa el cuerpo sin procesar de la solicitud y los encabezados a client.webhooks.unwrap(payload, headers=headers). Comprueba la firma con tu clave de webhook y devuelve el evento analizado. client.webhooks.unsafe_unwrap(payload) analiza el cuerpo sin verificarlo, así que úsalo solo para pruebas. Consulta Webhooks.

Tiempos de espera

Las solicitudes agotan el tiempo de espera después de 1 minuto de forma predeterminada, con un tiempo de espera de conexión de 5 segundos. Pasa timeout en segundos o un httpx.Timeout para establecer límites independientes de lectura, escritura y conexión:
Cuando una solicitud agota el tiempo de espera, el SDK genera APITimeoutError. Las solicitudes cuyo tiempo de espera se agotó se reintentan, por lo que una llamada puede tardar más que timeout antes de fallar.

Reintentos

Establece max_retries en el cliente o en una sola solicitud con with_options():
El SDK reintenta los errores de conexión y las respuestas con estado 408, 409, 429 o 500 y superiores. De forma predeterminada, realiza dos reintentos con un retroceso exponencial. Cuando una solicitud sigue fallando, el SDK genera una subclase de dodopayments.APIError: Las excepciones de estado heredan de dodopayments.APIStatusError, que tiene los atributos status_code y response. APITimeoutError es una subclase de APIConnectionError.

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 checkout_url devuelta:
Cada checkout_url funciona una vez y caduca después de 24 horas. Para consultar todas las opciones de la sesión, visita Sesiones de Checkout.

Gestionar clientes

Crea un cliente con una dirección de correo electrónico y un nombre y, después, recupéralo por ID:

Gestionar suscripciones

Crea una suscripción, cobra una suscripción on-demand y consulta el historial de uso de una suscripción.
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. customer acepta {"customer_id": ...} para asociar un cliente existente o {"email": ..., "name": ...} para crear uno. charge es para suscripciones on-demand, e product_price está expresado en la unidad monetaria más pequeña. retrieve_usage_history devuelve una lista paginada que puedes recorrer como se muestra en Paginación.

Facturación basada en el uso

Ingerir eventos de uso

Envía eventos de uso para un cliente:
event_id es la clave de idempotencia, así que asigna un valor único a cada evento. Si el mismo event_id aparece dos veces en una solicitud, se rechaza toda la solicitud. Si un event_id ya se había ingerido, el evento nuevo se ignora. Una solicitud acepta hasta 1.000 eventos. timestamp utiliza de forma predeterminada la hora actual y se rechaza si es de hace más de 1 hora o si está más de 5 minutos en el futuro.

Enumerar y recuperar eventos

Recupera un evento individual por su event_id o enumera los eventos filtrados por cliente y nombre del evento:
usage_events.list también acepta los filtros meter_id, start y end.

Paginación

Paginación automática

Los métodos de listado devuelven un iterador que obtiene la página siguiente mientras recorres los resultados:

Paginación asíncrona

Con el cliente async, recorre los resultados con async for:

Paginación manual

Para trabajar con una página a la vez, lee items y llama a has_next_page() y get_next_page(). next_page_info() devuelve los parámetros para la siguiente solicitud:

Configuración del cliente HTTP

Para añadir un proxy, un transporte personalizado u otra configuración de httpx, pasa tu propio http_client. DefaultHttpxClient conserva los límites de conexión, el tiempo de espera y la configuración de redirecciones predeterminados del SDK:
Para usar un cliente HTTP diferente en una solicitud, llama a client.with_options(http_client=...).

Async con AIOHTTP

De forma predeterminada, el cliente async envía solicitudes con httpx. Para obtener una mejor concurrencia, instala el extra aiohttp y pasa DefaultAioHttpClient() como http_client:

Registro

El SDK registra eventos mediante el módulo logging de la biblioteca estándar. Para activar el registro, establece DODO_PAYMENTS_LOG en info:
Para obtener más detalles, establécelo en debug:

Integración con frameworks

Estos ejemplos crean una sesión de checkout desde un endpoint web y devuelven su URL.

FastAPI

Este endpoint usa el cliente async:

Django

Esta vista usa el cliente sync:

Recursos

GitHub Repository

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

API Reference

Cada endpoint, parámetro y respuesta.

Discord Community

Haz preguntas y conversa con otros desarrolladores.

Report Issues

Informa de errores o solicita funciones.

Soporte

Para obtener ayuda con el SDK de Python:

Contribuciones

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