Skip to main content
Il Python SDK consente alle applicazioni Python di accedere in modo tipizzato alla REST API di Dodo Payments. Include un client sincrono, DodoPayments, e un client asincrono, AsyncDodoPayments, entrambi basati su httpx. I parametri delle richieste annidati sono dizionari tipizzati e le risposte sono modelli Pydantic.

Installazione

Installa il SDK con pip:
Per usare aiohttp come backend HTTP per il client asincrono, installa l’extra aiohttp:
Per verificare le firme dei webhook con client.webhooks.unwrap(), installa anche l’extra webhooks: pip install "dodopayments[webhooks]".
Il SDK richiede Python 3.9 o versioni successive. Usa l’ultima versione stabile di Python per ricevere gli aggiornamenti di sicurezza.

Avvio rapido

Client sincrono

Crea un client, quindi crea una sessione di checkout:
Se ometti bearer_token, il client legge la variabile d’ambiente DODO_PAYMENTS_API_KEY. Se ometti environment, il client si connette alla modalità live. Una chiave API della modalità test funziona solo con environment="test_mode".

Client asincrono

AsyncDodoPayments dispone degli stessi metodi di DodoPayments. Usa await per ogni chiamata:
Conserva le chiavi API nelle variabili d’ambiente o in un secrets manager. Non eseguirne mai il commit nel version control.

Funzionalità principali

Pythonic Interface

Argomenti keyword per i parametri, tipi TypedDict per gli oggetti annidati e modelli Pydantic per le risposte.

Async/Await

AsyncDodoPayments per asyncio, con aiohttp come backend HTTP opzionale.

Type Hints

Type hints su ogni metodo, per il completamento automatico nell’editor e il type checking con mypy.

Auto-Pagination

I metodi list restituiscono iteratori che recuperano la pagina successiva durante l’iterazione.

Configurazione

Variabili d’ambiente

Salva la chiave API in una variabile d’ambiente:
.env
Il client legge queste variabili quando non passi l’argomento corrispondente: Se DODO_PAYMENTS_BASE_URL è impostato e passi anche environment, il costruttore genera un errore “Ambiguous URL”. Per usare environment in questo caso, passa base_url=None. Per verificare un webhook, passa il corpo grezzo della richiesta e gli header a client.webhooks.unwrap(payload, headers=headers). Il metodo controlla la firma con la chiave del webhook e restituisce l’evento analizzato. client.webhooks.unsafe_unwrap(payload) analizza il corpo senza verificarlo, quindi usalo solo per i test. Vedi Webhooks.

Timeout

Le richieste vanno in timeout dopo 1 minuto per impostazione predefinita, con un timeout di connessione di 5 secondi. Passa timeout in secondi oppure un httpx.Timeout per impostare limiti separati di lettura, scrittura e connessione:
Quando una richiesta va in timeout, il SDK genera APITimeoutError. Le richieste in timeout vengono ritentate, quindi una chiamata può impiegare più tempo di timeout prima di fallire.

Retry

Imposta max_retries sul client oppure su una singola richiesta con with_options():
Il SDK ritenta gli errori di connessione e le risposte con status 408, 409, 429 o 500 e superiori. Per impostazione predefinita, ritenta due volte con exponential backoff. Quando una richiesta continua a fallire, il SDK genera una sottoclasse di dodopayments.APIError: Le eccezioni relative allo status ereditano da dodopayments.APIStatusError, che dispone degli attributi status_code e response. APITimeoutError è una sottoclasse di APIConnectionError.

Operazioni comuni

Gli esempi di questa sezione usano client da Avvio rapido.

Creare una sessione di checkout

Crea una sessione di checkout, quindi reindirizza il cliente all’checkout_url restituito:
Ogni checkout_url funziona una sola volta e scade dopo 24 ore. Per tutte le opzioni della sessione, vedi Checkout Sessions.

Gestire i clienti

Crea un cliente con un indirizzo email e un nome, quindi recuperalo tramite ID:

Gestire le sottoscrizioni

Crea una sottoscrizione, addebita una sottoscrizione on-demand e leggi la cronologia di utilizzo di una sottoscrizione.
POST /subscriptions (il metodo subscriptions.create del SDK) è deprecato. Continua a funzionare per le integrazioni esistenti, ma le nuove integrazioni devono creare le sottoscrizioni tramite una Checkout Session.
billing richiede solo country, un codice paese ISO di due lettere. customer accetta {"customer_id": ...} per collegare un cliente esistente oppure {"email": ..., "name": ...} per crearne uno. charge è destinato alle sottoscrizioni on-demand, mentre product_price è espresso nell’unità più piccola della valuta. retrieve_usage_history restituisce un elenco paginato, che puoi iterare come mostrato in Paginazione.

Fatturazione basata sull’utilizzo

Acquisire eventi di utilizzo

Invia gli eventi di utilizzo per un cliente:
event_id è la chiave di idempotenza, quindi assegna a ogni evento un valore univoco. Se lo stesso event_id compare due volte nella stessa richiesta, l’intera richiesta viene rifiutata. Se un event_id è già stato acquisito, il nuovo evento viene ignorato. Una richiesta accetta fino a 1.000 eventi. timestamp viene impostato per impostazione predefinita sull’ora corrente e viene rifiutato se è precedente di oltre 1 ora o successivo di oltre 5 minuti rispetto all’ora corrente.

Elencare e recuperare gli eventi

Recupera un singolo evento tramite il relativo event_id oppure elenca gli eventi filtrati per cliente e nome dell’evento:
usage_events.list accetta anche i filtri meter_id, start e end.

Paginazione

Paginazione automatica

I metodi list restituiscono un iteratore che recupera la pagina successiva durante l’iterazione:

Paginazione asincrona

Con il client asincrono, esegui il ciclo con async for:

Paginazione manuale

Per lavorare con una pagina alla volta, leggi items e chiama has_next_page() e get_next_page(). next_page_info() restituisce i parametri per la richiesta successiva:

Configurazione del client HTTP

Per aggiungere un proxy, un transport personalizzato o altre impostazioni httpx, passa un tuo http_client. DefaultHttpxClient mantiene i limiti di connessione, il timeout e le impostazioni di redirect predefiniti del SDK:
Per usare un client HTTP diverso per una singola richiesta, chiama client.with_options(http_client=...).

Async con AIOHTTP

Per impostazione predefinita, il client asincrono invia le richieste con httpx. Per una maggiore concorrenza, installa l’extra aiohttp e passa DefaultAioHttpClient() come http_client:

Logging

Il SDK registra i log con il modulo della standard library logging. Per attivare il logging, imposta DODO_PAYMENTS_LOG su info:
Per maggiori dettagli, impostalo su debug:

Integrazione con i framework

Questi esempi creano una sessione di checkout da un endpoint web e ne restituiscono l’URL.

FastAPI

Questo endpoint usa il client asincrono:

Django

Questa view usa il client sincrono:

Risorse

GitHub Repository

Codice sorgente, release e lista completa dei metodi.

API Reference

Ogni endpoint, parametro e risposta.

Discord Community

Fai domande e parla con altri sviluppatori.

Report Issues

Segnala bug o richiedi funzionalità.

Supporto

Per ricevere assistenza sul Python SDK:

Contribuire

Per contribuire, leggi le linee guida per i contributi.
Ultima modifica il 26 settembre 2026