Skip to main content
O Kotlin SDK dá às aplicações Kotlin acesso tipado à REST API do Dodo Payments. Ele usa tipos do Kotlin em toda a extensão: valores anuláveis para campos que podem estar ausentes, Sequence para iterar pelos resultados e funções suspend para chamadas assíncronas.

Instalação

Gradle (Kotlin DSL)

Adicione a dependência ao seu build.gradle.kts:
build.gradle.kts

Maven

Adicione a dependência ao seu pom.xml:
pom.xml
As versões do SDK adicionam suporte a alterações na API. Para encontrar a versão mais recente, consulte o Maven Central.
O SDK requer Java 8 ou posterior. Ele é executado na JVM e no Android e inclui regras keep do ProGuard e do R8.

Início Rápido

Crie um cliente e, em seguida, uma sessão de checkout:
fromEnv() se conecta ao modo live, a menos que DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl indique o contrário. Para usar o modo de teste, consulte Modo de teste. Uma chave de API do modo de teste funciona apenas no modo de teste.
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

Coroutines

Os métodos do cliente assíncrono são funções suspend que você chama a partir de uma corrotina.

Null Safety

Campos que podem estar ausentes são tipos anuláveis, não Optional.

Sequences

No cliente síncrono, autoPager() retorna um Sequence que busca mais páginas conforme você itera. No cliente assíncrono, ele retorna um Flow.

Immutable Models

As classes de modelo são imutáveis, e toBuilder() retorna um builder para uma cópia modificada.

Configuração

A partir de variáveis de ambiente

fromEnv() lê suas configurações a partir de variáveis de ambiente ou propriedades do sistema. As propriedades do sistema têm precedência:
A chave de API vem de DODO_PAYMENTS_API_KEY ou dodopayments.apiKey. O secret de assinatura do webhook vem de DODO_PAYMENTS_WEBHOOK_KEY ou dodopayments.webhookKey, e a URL base vem de DODO_PAYMENTS_BASE_URL ou dodopayments.baseUrl. Crie um único cliente e reutilize-o, pois cada cliente tem seu próprio pool de conexões e pools de threads. Para verificar um webhook, passe o corpo bruto da solicitação e os headers para client.webhooks().unwrap(UnwrapWebhookParams.builder().body(rawBody).headers(headers).build()), em que headers é um com.dodopayments.api.core.http.Headers. Ele verifica a assinatura usando sua chave de webhook e retorna o evento analisado ou lança DodoPaymentsWebhookException. Sem headers, unwrap não verifica a assinatura. client.webhooks().unsafeUnwrap(rawBody) analisa o corpo sem verificá-lo; portanto, use-o apenas para testes. Consulte Webhooks.

Configuração manual

Defina cada opção no builder:

Modo de teste

Para usar o modo de teste (https://test.dodopayments.com), chame testMode() no builder:

Timeouts e novas tentativas

Por padrão, o cliente tenta novamente duas vezes e atinge o timeout após 1 minuto. Ele tenta novamente em caso de erros de conexão e respostas com status 408, 409, 429 ou 500 e superiores, usando backoff exponencial. Defina os valores padrão no cliente ou passe RequestOptions para uma única chamada:

Operações comuns

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

Criar uma sessão de checkout

Crie uma sessão de checkout e redirecione o cliente para a URL de checkout retornada:
checkoutUrl() retorna um String? anulável. Cada URL de checkout funciona uma vez e expira após 24 horas. Para ver todas as opções de sessão, consulte Sessões de checkout.

Criar um produto

Crie um produto de assinatura mensal com preço de $29.99:
price está na menor unidade da moeda. discountBps define o desconto em pontos-base e substitui o campo discount, que foi descontinuado.

Ativar uma chave de licença

Ative uma chave de licença para um dispositivo ou instalação. Se a chave tiver atingido o limite de ativações, a API retornará 422 e o SDK lançará UnprocessableEntityException. Uma chave inativa retorna 403 (PermissionDeniedException), e uma chave desconhecida retorna 404 (NotFoundException):

Gerenciar assinaturas

Crie uma assinatura e, em seguida, faça a cobrança se ela for uma assinatura sob demanda.
POST /subscriptions (o método subscriptions().create() do SDK) está descontinuado. Ele ainda funciona para integrações existentes, mas as 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. Use AttachExistingCustomer para associar um cliente existente ou NewCustomer para criar um. charge é usado para assinaturas sob demanda, e productPrice está na menor unidade da moeda.

Faturamento baseado em uso

Registrar eventos de uso

Envie um evento de uso para um cliente. Os medidores que monitoram o eventName do evento o agregam:
O eventId é a chave de idempotência; portanto, atribua um valor exclusivo a cada evento. Uma solicitação aceita até 1.000 eventos.

Operações assíncronas

Cliente assíncrono

O cliente assíncrono tem os mesmos métodos que o cliente síncrono, mas a maioria deles são funções suspend. Chame-as a partir de uma corrotina:
Você também pode chamar client.async() em um cliente síncrono para obter sua versão assíncrona.

Tratamento de erros

Para um status de erro, o SDK lança uma subclasse de DodoPaymentsServiceException, que contém statusCode(), headers() e body(). As subclasses são BadRequestException (400), UnauthorizedException (401), PermissionDeniedException (403), NotFoundException (404), UnprocessableEntityException (422), RateLimitException (429), InternalServerException (5xx) e UnexpectedStatusCodeException para outros status, como 409:
Falhas de rede lançam DodoPaymentsIoException, e respostas que o SDK não consegue interpretar lançam DodoPaymentsInvalidDataException. Todas as exceções do SDK estendem DodoPaymentsException.

Tratamento funcional de erros

Use Result para o tratamento funcional de erros:
runCatching captura todas as exceções, incluindo exceções do SDK, e as retorna como um Result com falha.

Integração com Android

O Kotlin SDK é um SDK de servidor. Ele se autentica com sua chave de API secreta, e qualquer pessoa que tenha seu APK pode extrair uma chave compilada nele; portanto, nunca o use dentro de um app Android. Para receber pagamentos em um app Android:
  1. No seu servidor, crie a sessão de checkout com este SDK (consulte Integração com Ktor) e retorne seu checkout_url.
  2. No app, busque esse checkout_url do seu servidor e abra-o com o Android SDK, que não contém nenhuma chave de API.

Validação da resposta

Por padrão, o SDK lança DodoPaymentsInvalidDataException somente quando você lê uma propriedade com um tipo inesperado. Para verificar toda a resposta antecipadamente, ative a validação para uma solicitação ou chame validate() em uma resposta:

Recursos avançados

Configuração de proxy

Para enviar solicitações por meio de um proxy, passe um java.net.Proxy ao builder:

Configuração temporária

withOptions retorna um cliente com configurações modificadas que compartilha as conexões e os pools de threads do cliente original. O cliente original não é alterado:

Integração com Ktor

Crie o cliente uma vez e chame-o a partir de uma rota:

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 Kotlin SDK:

Como contribuir

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