Pour commencer
Listes et filtres
Ce que renvoient les endpoints de liste, comment les paginer et les filtrer, et comment traiter les identifiants.
Chaque endpoint de liste renvoie ses éléments du plus récent au plus ancien, une page à la fois, sous la même forme. Produits, tarifs, clients, abonnements, factures, sessions, événements, livraisons de webhooks et notifications fonctionnent tous ainsi.
Pages
Une liste renvoie un objet à deux champs :
items: la page, du plus récent au plus ancien.[]quand rien ne correspond.next_cursor: une chaîne pour obtenir la page suivante, ounullsur la dernière. Traitez-la comme opaque.
{
"items": [
{ "id": "x9QbL2sK", "status": "active", "created_at": 1727600000 }
],
"next_cursor": "eDlRYkwyc0s"
}Deux paramètres de requête contrôlent la pagination :
limit: combien d'éléments renvoyer, de 1 à 100. Par défaut : 50. Une valeur en dehors de 1 à 100 renvoie422avec le codeinvalidet un élémenterrorspourlimit.cursor: lenext_cursorde la page précédente. Envoyez les mêmes filtres et le mêmelimitavec.
La pagination ne saute ni ne répète jamais un élément, même quand beaucoup d'éléments partagent un created_at. Pour les événements, voir Rattraper les événements manqués.
const base = "https://api.abuna.app/v1/apps/8ddhXCDW/customers?limit=100";
const headers = { Authorization: "Bearer sk_test_..." };
const customers = [];
let cursor = null;
do {
const url = base + (cursor ? "&cursor=" + encodeURIComponent(cursor) : "");
const page = await (await fetch(url, { headers })).json();
customers.push(...page.items);
cursor = page.next_cursor;
} while (cursor);La liste des tarifs inclut les tarifs archivés. Un tarif archivé a un horodatage dans archived_at.
Identifiants
Traitez chaque identifiant comme une chaîne opaque. Ne l'analysez pas, et ne présumez ni de sa longueur ni de ses caractères : les objets créés avant le lancement peuvent avoir des identifiants plus longs que les nouveaux.
Ne triez pas non plus par identifiant. La seule exception est les identifiants d'événement, qui se trient dans l'ordre où les événements se sont produits. Voir Ordre des événements.
Filtres
Envoyez les filtres comme paramètres de requête. L'API ignore un filtre vide. Un status qu'elle ne connaît pas renvoie 422 avec le code invalid.
- Factures :
statusvautopen,paid,voidouoverdue.searchcorrespond à une partie du numéro, du nom ou de l'e-mail, sans tenir compte de la casse.fromettobornent la date d'émission en secondes Unix.customer_idest l'ID d'un client. - Sessions :
typevautcheckout,payment,plan_change,cancelouportal.statusvautopen,completedouexpired.subscription_idest l'ID d'un abonnement. - Clients :
searchcorrespond à une partie du nom ou de l'e-mail, sans tenir compte de la casse. - Abonnements :
statusvautpending,active,past_dueoucanceled.customer_idest l'ID d'un client.emailcorrespond à une partie de l'e-mail du client, sans tenir compte de la casse. - Événements :
typeest un type d'événement, commeinvoice.paid. - Livraisons de webhooks :
typeest un type d'événement.statusvautpending,delivering,deliveredoufailed. - Notifications :
subscription_idest l'ID d'un abonnement.statusvautpending,sending,sent,failedouwithdrawn.
Les filtres se combinent, une liste ne renvoie donc que les éléments qui correspondent à tous.
curl "https://api.abuna.app/v1/apps/8ddhXCDW/subscriptions?status=active&customer_id=Cu5tM8rA" \
-H "Authorization: Bearer sk_test_..."Étapes suivantes
- AbonnementsDémarrez, listez, lisez, mettez à jour, annulez, conservez et changez la formule de l'abonnement d'un client à un tarif.
- Factures et paiementsPériodes de facturation, leurs factures et les paiements associés, et comment lister et lire les factures.
- SessionsEnvoyez un client vers une page hébergée pour démarrer un abonnement, payer une facture, changer de formule, annuler ou ouvrir son espace client. Puis listez, lisez et expirez ces sessions.
- ÉvénementsLe journal de tout ce qui s'est passé dans une application, et chaque type d'événement.