Skip to main content
El Rust SDK proporciona a las aplicaciones Rust asíncronas acceso tipado a la REST API de Dodo Payments. Está creado con Tokio y reqwest, usa structs tipados de solicitud y respuesta, transmite resultados paginados y reintenta las solicitudes fallidas.

Instalación

Agrega el SDK a tu proyecto con Cargo:
O agrégalo manualmente a tu Cargo.toml:
El SDK requiere Rust 1.75 o posterior.

Inicio Rápido

Client::from_env() lee tu API key de la variable de entorno DODO_PAYMENTS_API_KEY. Crea un cliente y, después, crea una sesión de checkout:
Si DODO_PAYMENTS_API_KEY no está configurada, Client::from_env() devuelve un Error::Config. El cliente se conecta al live mode a menos que elijas otro entorno, como se muestra en Entornos. Una API key de test mode solo funciona en test mode.
Guarda las API keys en variables de entorno o en un gestor de secretos. Nunca las incluyas directamente en el código fuente.

Funciones principales

Async First

Creado con Tokio y reqwest, con async/await para cada solicitud.

Strong Typing

Structs tipados de solicitud y respuesta para realizar comprobaciones en tiempo de compilación.

Auto-Pagination

Transmite cada elemento de todas las páginas o avanza una página a la vez.

Configurable

Configura el entorno, la URL base, el tiempo de espera y el número de reintentos para cada cliente.

Configuración

Variables de entorno

Client::from_env() lee tu API key de DODO_PAYMENTS_API_KEY. Usa la URL de live mode a menos que configures DODO_PAYMENTS_BASE_URL:
El Rust SDK no lee DODO_PAYMENTS_WEBHOOK_KEY y no tiene ningún método que verifique las firmas de los webhooks. Para verificarlas, sigue Webhooks. También puedes configurar el cliente explícitamente. Client::new devuelve un Result, así que debes desenvolverlo con ? dentro de una función que devuelva dodopayments::Result:

Entornos

El SDK tiene dos entornos: La URL base predeterminada es https://live.dodopayments.com. Para seleccionar otro entorno, usa el enum Environment en lugar de una URL codificada directamente:
Para seguir leyendo la API key de DODO_PAYMENTS_API_KEY con from_env(), pero apuntar a otro entorno, reemplaza el entorno en la configuración:

Tiempos de espera

El tiempo de espera predeterminado de las solicitudes es de 30 segundos. Reemplázalo para un cliente con with_timeout:
El cliente reintenta los errores de conexión y las respuestas con estado 408, 409, 429 o 500 y superiores. De forma predeterminada, reintenta dos veces, con un backoff exponencial, y espera el encabezado Retry-After cuando la API envía uno. Para cambiar el número de reintentos, llama a with_max_retries en ClientConfig; por ejemplo, .with_max_retries(0) para desactivar los reintentos.

Operaciones comunes

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

Crear una sesión de checkout

Crea una sesión de checkout con una URL de retorno:
Redirige al cliente a session.checkout_url. Cada URL de checkout funciona una sola 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 email y un nombre, y después recupéralo por su ID:

Gestionar suscripciones

Crea una suscripción para un cliente existente.
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, una variante del enum CountryCode como CountryCode::Us. customer es un enum CustomerRequest: pasa AttachExistingCustomer para un cliente existente o NewCustomer para crear uno. Para cobrar una suscripción on-demand, llama a client.subscriptions().charge().subscription_id(...) con un cuerpo SubscriptionsChargeParams. Los campos de importe, como product_price, están expresados en la unidad monetaria más pequeña; por ejemplo, 2500 equivale a $25.00.

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 timestamp es None, el evento usa la hora actual.

Enumerar eventos de uso

Enumera los eventos filtrados por cliente y nombre del evento. Los filtros se incluyen en un objeto de consulta JSON:

Paginación

Los endpoints de listado devuelven una página tipada cuyo campo items contiene la página actual de resultados. Para transmitir cada elemento de todas las páginas, llama a into_stream:
Para avanzar una página a la vez, llama a get_next_page. Devuelve None después de la última página:

Gestión de errores

Cada método devuelve un dodopayments::Result<T>. Los errores son variantes del enum dodopayments::Error: Api para un estado de error de la API, Http para errores de transporte, Json para errores de serialización, Config para errores de configuración y MissingPathParam o MissingBody para solicitudes incompletas. Usa una coincidencia sobre él para gestionar los errores de la API por separado de los errores de transporte:

Endpoints no documentados

Para llamar a un endpoint que no tenga un método tipado, usa el builder de bajo nivel request. Este aplica la autenticación y la URL base. Para nombrar reqwest::Method, añade reqwest 0.12 a tus dependencias:

Recursos

GitHub Repository

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

Crates.io

El crate publicado y sus versiones.

API Reference

Cada endpoint, parámetro y respuesta.

Discord Community

Haz preguntas y conversa con otros desarrolladores.

Soporte

Para obtener ayuda con el Rust SDK:

Contribuir

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