Skip to main content
O Rust SDK oferece acesso tipado à REST API do Dodo Payments para aplicações Rust assíncronas. Ele é criado com Tokio e reqwest, usa structs tipadas de request e response, transmite resultados paginados e tenta novamente requests com falha.

Instalação

Adicione o SDK ao seu projeto com Cargo:
Ou adicione manualmente ao seu Cargo.toml:
O SDK requer Rust 1.75 ou posterior.

Início Rápido

Client::from_env() lê sua API key da variável de ambiente DODO_PAYMENTS_API_KEY. Crie um cliente e, em seguida, uma sessão de checkout:
Se DODO_PAYMENTS_API_KEY não estiver definida, Client::from_env() retorna um Error::Config. O cliente se conecta ao live mode, a menos que você escolha outro ambiente, conforme mostrado em Ambientes. Uma API key de test mode funciona somente no test mode.
Mantenha as API keys em variáveis de ambiente ou em um secrets manager. Nunca as deixe hardcoded no código-fonte.

Recursos principais

Async First

Criado com Tokio e reqwest, com async/await para cada request.

Strong Typing

Structs tipadas de request e response para verificações em tempo de compilação.

Auto-Pagination

Transmita cada item entre as páginas ou avance uma página por vez.

Configurable

Defina o ambiente, a URL base, o timeout e a quantidade de tentativas para cada cliente.

Configuração

Variáveis de ambiente

Client::from_env() lê sua API key de DODO_PAYMENTS_API_KEY. Ele usa a URL do live mode, a menos que você defina DODO_PAYMENTS_BASE_URL:
O Rust SDK não lê DODO_PAYMENTS_WEBHOOK_KEY e não tem um método que verifique assinaturas de webhook. Para verificá-las, siga Webhooks. Você também pode configurar o cliente explicitamente. Client::new retorna um Result, portanto use unwrap com ? dentro de uma função que retorna dodopayments::Result:

Ambientes

O SDK tem dois ambientes: A URL base padrão é https://live.dodopayments.com. Para selecionar outro ambiente, use o enum Environment em vez de uma URL hardcoded:
Para continuar lendo a API key de DODO_PAYMENTS_API_KEY com from_env(), mas direcionar para outro ambiente, substitua o ambiente na configuração:

Timeouts

O timeout padrão de request é de 30 segundos. Substitua-o para um cliente com with_timeout:
O cliente tenta novamente erros de conexão e responses com status 408, 409, 429 ou 500 e superiores. Por padrão, ele tenta novamente duas vezes, com exponential backoff, e aguarda o header Retry-After quando a API envia um. Para alterar a quantidade de tentativas, chame with_max_retries em ClientConfig, por exemplo .with_max_retries(0) para desativar as tentativas.

Operações comuns

Os exemplos nesta seção usam client de Início rápido.

Criar uma sessão de checkout

Crie uma sessão de checkout com uma URL de retorno:
Redirecione o cliente para session.checkout_url. Cada URL de checkout funciona uma vez e expira após 24 horas. Para ver todas as opções de sessão, consulte Checkout Sessions.

Gerenciar clientes

Crie um cliente com um endereço de email e um nome e, em seguida, recupere-o pelo ID:

Gerenciar assinaturas

Crie uma assinatura para um cliente existente.
POST /subscriptions (o método subscriptions().create() do SDK) está deprecated. Ele continua funcionando para integrações existentes, mas novas integrações devem criar assinaturas por meio de uma Checkout Session.
billing requer apenas country, uma variante de enum CountryCode, como CountryCode::Us. customer é um enum CustomerRequest: passe AttachExistingCustomer para um cliente existente ou NewCustomer para criar um. Para cobrar uma on-demand subscription, chame client.subscriptions().charge().subscription_id(...) com um body SubscriptionsChargeParams. Campos de valor, como product_price, estão na menor unidade da moeda (por exemplo, 2500 equivale a $25.00).

Faturamento baseado em uso

Ingerir eventos de uso

Envie eventos de uso para um cliente:
O event_id é a chave de idempotência; portanto, atribua um valor exclusivo a cada evento. Se timestamp for None, o evento usará o horário atual.

Listar eventos de uso

Liste eventos filtrados por cliente e nome do evento. Os filtros ficam em um objeto de query JSON:

Paginação

Os endpoints de listagem retornam uma página tipada cujo campo items contém a página atual de resultados. Para transmitir todos os itens de todas as páginas, chame into_stream:
Para avançar uma página por vez, chame get_next_page. Ele retorna None após a última página:

Tratamento de erros

Cada método retorna um dodopayments::Result<T>. As falhas são variantes do enum dodopayments::Error: Api para um status de erro da API, Http para erros de transporte, Json para erros de serialização, Config para erros de configuração e MissingPathParam ou MissingBody para requests incompletos. Faça o match para tratar erros da API separadamente dos erros de transporte:

Endpoints não documentados

Para chamar um endpoint que não tem um método tipado, use o builder de baixo nível request. Ele aplica a autenticação e a URL base. Para nomear reqwest::Method, adicione reqwest 0.12 às suas dependências:

Recursos

GitHub Repository

Código-fonte, releases e a lista completa de métodos.

Crates.io

O crate publicado e suas versões.

API Reference

Cada endpoint, parâmetro e response.

Discord Community

Faça perguntas e converse com outros desenvolvedores.

Suporte

Para obter ajuda com o Rust SDK:

Contribuição

Para contribuir, leia as diretrizes de contribuição.
Última modificação em 26 de setembro de 2026