Skip to main content
O SDK Python oferece às aplicações Python acesso tipado à API REST do Dodo Payments. Ele conta com um cliente síncrono, DodoPayments, e um cliente assíncrono, AsyncDodoPayments, ambos baseados em httpx. Os parâmetros de solicitação aninhados são dicionários tipados, e as respostas são modelos Pydantic.

Instalação

Instale o SDK com pip:
Para usar aiohttp como backend HTTP do cliente assíncrono, instale o extra aiohttp:
Para verificar assinaturas de webhook com client.webhooks.unwrap(), instale também o extra webhooks: pip install "dodopayments[webhooks]".
O SDK requer Python 3.9 ou posterior. Use a versão estável mais recente do Python para receber atualizações de segurança.

Início rápido

Cliente síncrono

Crie um cliente e, em seguida, crie uma sessão de checkout:
Se você omitir bearer_token, o cliente lerá a variável de ambiente DODO_PAYMENTS_API_KEY. Se você omitir environment, o cliente se conectará ao modo live. Uma chave de API do modo de teste funciona somente com environment="test_mode".

Cliente assíncrono

AsyncDodoPayments tem os mesmos métodos que DodoPayments. Use await em cada chamada:
Mantenha as chaves de API em variáveis de ambiente ou em um gerenciador de secrets. Nunca faça commit delas no controle de versão.

Recursos principais

Pythonic Interface

Argumentos nomeados para parâmetros, tipos TypedDict para objetos aninhados e modelos Pydantic para respostas.

Async/Await

AsyncDodoPayments para asyncio, com aiohttp como backend HTTP opcional.

Type Hints

Type hints em todos os métodos, para preenchimento automático no editor e verificação de tipos com mypy.

Auto-Pagination

Os métodos de listagem retornam iteradores que buscam a próxima página enquanto você itera.

Configuração

Variáveis de ambiente

Armazene sua chave de API em uma variável de ambiente:
.env
O cliente lê estas variáveis quando você não passa o argumento correspondente: Se DODO_PAYMENTS_BASE_URL estiver definido e você também passar environment, o construtor gerará um erro de “Ambiguous URL”. Para usar environment nesse caso, passe base_url=None. Para verificar um webhook, passe o corpo bruto da solicitação e os headers para client.webhooks.unwrap(payload, headers=headers). Ele verifica a assinatura com sua chave de webhook e retorna o evento analisado. client.webhooks.unsafe_unwrap(payload) analisa o corpo sem verificá-lo, portanto use-o apenas para testes. Consulte Webhooks.

Timeouts

As solicitações atingem o timeout após 1 minuto por padrão, com um timeout de conexão de 5 segundos. Passe timeout em segundos ou um httpx.Timeout para limites separados de leitura, gravação e conexão:
Quando uma solicitação atinge o timeout, o SDK gera APITimeoutError. As solicitações que atingem o timeout são repetidas, portanto uma chamada pode levar mais tempo que timeout antes de falhar.

Repetições

Defina max_retries no cliente ou em uma única solicitação com with_options():
O SDK repete solicitações com erros de conexão e respostas com status 408, 409, 429 ou 500 e superiores. Por padrão, ele tenta novamente duas vezes, com backoff exponencial. Quando uma solicitação ainda falha, o SDK gera uma subclasse de dodopayments.APIError: As exceções de status herdam de dodopayments.APIStatusError, que possui os atributos status_code e response. APITimeoutError é uma subclasse de APIConnectionError.

Operações comuns

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

Criar uma sessão de checkout

Crie uma sessão de checkout e redirecione o cliente para o checkout_url retornado:
Cada checkout_url funciona uma vez e expira após 24 horas. Para consultar todas as opções de sessão, veja Sessões de checkout.

Gerenciar clientes

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

Gerenciar assinaturas

Crie uma assinatura, cobre uma assinatura sob demanda e leia o histórico de uso de uma assinatura.
POST /subscriptions (o método subscriptions.create do SDK) está deprecated. Ele ainda funciona para integrações existentes, mas novas integrações devem criar assinaturas por meio de uma Sessão de checkout.
billing requer apenas country, um código de país ISO de duas letras. customer aceita {"customer_id": ...} para associar um cliente existente ou {"email": ..., "name": ...} para criar um. charge é destinado a assinaturas sob demanda, e product_price está na menor unidade da moeda. retrieve_usage_history retorna uma lista paginada, que você pode percorrer conforme mostrado em Paginação.

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 o mesmo event_id aparecer duas vezes em uma solicitação, toda a solicitação será rejeitada. Se um event_id já tiver sido ingerido, o novo evento será ignorado. Uma solicitação aceita até 1.000 eventos. timestamp assume como padrão o horário atual e é rejeitado se estiver mais de 1 hora no passado ou mais de 5 minutos no futuro.

Listar e recuperar eventos

Recupere um único evento pelo event_id ou liste eventos filtrados por cliente e nome do evento:
usage_events.list também aceita os filtros meter_id, start e end.

Paginação

Paginação automática

Os métodos de listagem retornam um iterador que busca a próxima página enquanto você itera:

Paginação assíncrona

Com o cliente assíncrono, faça um loop com async for:

Paginação manual

Para trabalhar com uma página por vez, leia items e chame has_next_page() e get_next_page(). next_page_info() retorna os parâmetros da próxima solicitação:

Configuração do cliente HTTP

Para adicionar um proxy, um transporte personalizado ou outras configurações de httpx, passe seu próprio http_client. DefaultHttpxClient mantém os limites de conexão, o timeout e as configurações de redirecionamento padrão do SDK:
Para usar um cliente HTTP diferente em uma única solicitação, chame client.with_options(http_client=...).

Async com AIOHTTP

Por padrão, o cliente assíncrono envia solicitações com httpx. Para obter melhor simultaneidade, instale o extra aiohttp e passe DefaultAioHttpClient() como http_client:

Logging

O SDK registra logs usando o módulo logging da biblioteca padrão. Para ativar o logging, defina DODO_PAYMENTS_LOG como info:
Para obter mais detalhes, defina-o como debug:

Integração com frameworks

Estes exemplos criam uma sessão de checkout a partir de um endpoint web e retornam sua URL.

FastAPI

Este endpoint usa o cliente assíncrono:

Django

Esta view usa o cliente síncrono:

Recursos

GitHub Repository

Código-fonte, versões e a lista completa de métodos.

API Reference

Cada endpoint, parâmetro e resposta.

Discord Community

Faça perguntas e converse com outros desenvolvedores.

Report Issues

Relate bugs ou solicite recursos.

Suporte

Para obter ajuda com o SDK Python:

Contribuição

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