Skip to main content
Le SDK TypeScript permet au code TypeScript et JavaScript côté serveur d’accéder à l’API REST de Dodo Payments avec des types. Il inclut les définitions de types pour chaque requête et réponse, des erreurs typées, des nouvelles tentatives automatiques, des délais d’expiration et la pagination automatique.

Installation

Installez le package dodopayments avec votre gestionnaire de packages :

Démarrage rapide

Créez un client, puis créez une session de paiement :
Si vous omettez bearerToken, le client lit la variable d’environnement DODO_PAYMENTS_API_KEY. Si vous omettez environment, le client se connecte au mode réel. Une clé API de mode test fonctionne uniquement avec environment: 'test_mode'.
Conservez les clés API dans des variables d’environnement ou un gestionnaire de secrets. Ne les validez jamais dans le contrôle de version et ne les exposez jamais dans du code côté client.

Fonctionnalités principales

TypeScript First

Définitions de types pour chaque paramètre de requête et champ de réponse, affichées dans votre éditeur.

Auto-Pagination

Les méthodes de liste récupèrent la page suivante pour vous lorsque vous effectuez une itération avec for await...of.

Error Handling

Une classe d’erreur typée pour chaque statut d’erreur HTTP, avec le statut, les en-têtes et le corps de la réponse.

Smart Retries

Deux nouvelles tentatives par défaut, avec un backoff exponentiel, pour les erreurs de connexion et les codes de statut pouvant faire l’objet d’une nouvelle tentative.

Configuration

Variables d’environnement

Stockez votre clé API dans une variable d’environnement :
.env
Le client lit ces variables lorsque vous ne transmettez pas l’option correspondante : Si une URL de base est définie et que vous transmettez également environment, le constructeur génère une erreur « Ambiguous URL ». Pour utiliser environment dans ce cas, transmettez baseURL: null. Pour vérifier un webhook, transmettez le corps brut de la requête et les en-têtes à client.webhooks.unwrap(rawBody, { headers }). Cette méthode vérifie la signature avec votre clé de webhook et renvoie l’événement analysé. client.webhooks.unsafeUnwrap(rawBody) analyse le corps sans le vérifier ; utilisez-la donc uniquement pour les tests. Voir Webhooks.

Configuration du délai d’expiration

Les requêtes expirent après 1 minute par défaut. Définissez timeout, en millisecondes, sur le client ou pour une seule requête :
Lorsqu’une requête expire, le SDK génère APIConnectionTimeoutError. Les requêtes expirées font l’objet de nouvelles tentatives ; un appel peut donc durer plus longtemps que timeout avant d’échouer.

Configuration des nouvelles tentatives

Définissez maxRetries sur le client ou pour une seule requête :
Le SDK effectue de nouvelles tentatives pour les erreurs de connexion et les réponses dont le statut est 408, 409, 429 ou 500 et supérieur. Il effectue deux nouvelles tentatives par défaut, avec un backoff exponentiel.
Lorsqu’une requête échoue toujours, le SDK génère une sous-classe de DodoPayments.APIError. Chaque erreur possède les propriétés status, headers et error (le corps de la réponse). Vérifiez une classe spécifique avec instanceof, par exemple err instanceof DodoPayments.RateLimitError :

Opérations courantes

Les exemples de cette section utilisent client de la section Démarrage rapide.

Créer une session de paiement

Créez une session de paiement, puis redirigez le client vers le checkout_url renvoyé :
Chaque checkout_url fonctionne une fois et expire après 24 heures. Pour connaître toutes les options de session, consultez Sessions de paiement.

Gérer les clients

Créez un client avec une adresse e-mail et un nom, puis récupérez-le par son ID :

Gérer les abonnements

Créez un abonnement, facturez un abonnement à la demande et consultez l’historique d’utilisation d’un abonnement.
POST /subscriptions (la méthode subscriptions.create du SDK) est obsolète. Elle fonctionne toujours pour les intégrations existantes, mais les nouvelles intégrations doivent créer des abonnements via une session de paiement.
billing nécessite uniquement country, un code pays ISO à deux lettres. customer accepte { customer_id } pour associer un client existant, ou { email, name? } pour en créer un. charge est destiné aux abonnements à la demande, et product_price est exprimé dans la plus petite unité monétaire. retrieveUsageHistory renvoie une liste paginée que vous pouvez parcourir comme indiqué dans Pagination automatique.

Facturation basée sur l’utilisation

Ingérer des événements d’utilisation

Envoyez des événements d’utilisation pour un client :
event_id est la clé d’idempotence ; attribuez donc une valeur unique à chaque événement. Si le même event_id apparaît deux fois dans une requête, l’ensemble de la requête est rejeté. Si un event_id a déjà été ingéré, le nouvel événement est ignoré. Une requête accepte jusqu’à 1 000 événements. timestamp prend par défaut l’heure actuelle et est rejeté s’il remonte à plus d’une heure dans le passé ou se situe à plus de 5 minutes dans le futur.

Récupérer des événements d’utilisation

Récupérez un événement unique grâce à son event_id, ou listez les événements filtrés par client, nom d’événement et période :
usageEvents.list accepte également meter_id et renvoie une liste paginée.

Configuration du proxy

Pour envoyer des requêtes via un proxy, transmettez les paramètres de proxy de votre environnement d’exécution dans fetchOptions.

Node.js (avec Undici)

Transmettez un ProxyAgent undici en tant que dispatcher :

Bun

Définissez l’option proxy :

Deno

Créez un client HTTP avec Deno.createHttpClient et transmettez-le en tant que client :

Journalisation

Définissez le niveau de journalisation avec l’option client logLevel ou la variable d’environnement DODO_PAYMENTS_LOG. L’option du client remplace la variable d’environnement.
Au niveau debug, le SDK journalise chaque requête et réponse HTTP, y compris les en-têtes et les corps. Certains en-têtes d’authentification sont masqués, mais des données sensibles présentes dans les corps peuvent rester visibles.
Les niveaux de journalisation, du plus détaillé au moins détaillé, sont les suivants :
  • 'debug' : messages de débogage, informations, avertissements et erreurs.
  • 'info' : informations, avertissements et erreurs.
  • 'warn' : avertissements et erreurs. Il s’agit de la valeur par défaut.
  • 'error' : erreurs uniquement.
  • 'off' : aucune journalisation.
Par défaut, le SDK journalise vers console. Pour utiliser pino, winston ou une autre bibliothèque de journalisation, transmettez votre logger en tant qu’option logger ; logLevel contrôle toujours les messages qui lui sont transmis. Les messages de journalisation sont uniquement destinés au débogage et leur format peut changer d’une version à l’autre.

Migration depuis le SDK Node.js

Si vous utilisez l’ancien SDK Node.js, suivez le guide de migration pour effectuer la mise à niveau. Le SDK actuel utilise l’API fetch intégrée au lieu de node-fetch, nécessite Node.js 20, TypeScript 4.9 et Jest 28 ou une version ultérieure, et inclut un outil de migration qui met à jour la plupart de votre code.

View Migration Guide

Découvrez comment migrer du SDK Node.js vers le SDK TypeScript

Pagination automatique

Les méthodes de liste renvoient des résultats paginés. Effectuez une itération avec for await...of pour obtenir les éléments de chaque page. Le SDK demande la page suivante lorsqu’il en a besoin :
Pour travailler avec une page à la fois, lisez page.items et appelez hasNextPage() et getNextPage() :
Pour définir la taille de la page, transmettez page_size à la méthode de liste, par exemple client.payments.list({ page_size: 50 }).

Prérequis

Le SDK prend en charge TypeScript 4.9 ou une version ultérieure ainsi que les environnements d’exécution suivants :
  • Navigateurs web (versions à jour de Chrome, Firefox, Safari, Edge et autres)
  • Node.js 20 LTS ou versions ultérieures (non arrivées en fin de vie)
  • Deno 1.28.0 ou version ultérieure
  • Bun 1.0 ou version ultérieure
  • Cloudflare Workers
  • Vercel Edge Runtime
  • Jest 28 ou version ultérieure avec l’environnement "node" (l’environnement "jsdom" n’est pas pris en charge)
  • Nitro 2.6 ou version ultérieure
React Native n’est pas pris en charge.

Ressources

GitHub Repository

Code source, versions et liste complète des méthodes.

API Reference

Chaque endpoint, paramètre et réponse.

Discord Community

Posez vos questions et échangez avec d’autres développeurs.

Report Issues

Signalez des bugs ou demandez des fonctionnalités.

Assistance

Pour obtenir de l’aide concernant le SDK TypeScript :

Contribution

Pour contribuer, consultez les directives de contribution.
Dernière modification le 26 septembre 2026