API de Comptabilité Distante
Dernière mise à jour : 10 mai 2026
Enregistrez des écritures depuis cURL, les Raccourcis iOS ou des scripts d'automatisation à l'aide d'un token API personnel. Le token est en écriture seule : il peut insérer des transactions et lire les listes de catégories / tags, mais ne peut ni lire ni supprimer aucune donnée de transaction.
1. Obtenir un token
Connectez-vous en tant qu'admin, ouvrez Paramètres → 🔑 API de Comptabilité Distante et cliquez sur « Générer un token ».
Le token en clair n'est affiché qu'une seule fois — copiez-le immédiatement. Le serveur ne stocke que son hachage SHA-256ㅋ ; en cas de perte, vous ne pouvez que le régénérer (ce qui invalide l'ancien).
Format du token : bb_<userId>_<secret>. Envoyez-le à chaque requête comme Authorization: Bearer <token>.
2. POST /api/ingest — insérer une transaction
Le corps de la requête est un objet JSON avec les champs suivants :
title(string, obligatoire) — nom de la transactionamount(number, obligatoire) — doit être positiftype(string, facultatif, par défautexpense) — l'un deexpense/income/prepaid_expense/pending_incomecategory(string, facultatif) — nom de la catégorienote(string, facultatif) — note librecreated_at(string, facultatif) — ISO 8601 ; par défaut maintenant
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — lister les catégories
Renvoie les noms de catégorie de l'admin dans l'ordre du menu déroulant du tableau de bord. La réponse ne contient que les noms — pas d'ids, user ids ou données de transaction.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — tags récemment utilisés
Renvoie les préfixes de tag les plus récemment mis à jour (les marqueurs #XXX intégrés aux titres). 20 par défaut ; utilisez ?limit= pour modifier (max 100).
Renvoie un tableau vide au lieu d'une erreur si la table tag_prefixes n'existe pas encore.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Codes d'erreur
Toutes les erreurs sont en JSON : { "error": "message" }.
401— autorisation manquante, token mal formé, révoqué ou non concordant402— abonnement expiré ; renouvellement requis pour écrire405— méthode non supportée (par ex. GET sur/api/ingest)501—SUPABASE_SERVICE_ROLE_KEYmanquant côté serveur500— autre erreur interne
6. Sécurité et limites
Par conception, le token ne peut écrire que dans sa propre organisation — il ne peut pas usurper d'autres orgs ni lire des données existantes :
user_idest toujours le propriétaire du token ; impossible à falsifierorg_idest toujours l'org du propriétaire ; les écritures inter-orgs sont impossibles- Les tokens ne sont émis qu'au rôle admin (manager / staff reçoivent 403)
- Les réponses ne révèlent jamais d'autres lignes — seul
{ id, created_at }est renvoyé - La révocation est immédiate ; régénérez à tout moment depuis les Paramètres
7. Exemple de Raccourci iOS
Ajoutez une action « Obtenir le contenu d'une URL », URL https://billbook.me/api/ingest, méthode POST, en-têtes Authorization: Bearer bb_... et Content-Type: application/json, et corps de la requête en JSON : {"title":"Café","amount":120,"type":"expense"}. Liez title et amount à l'entrée du Raccourci ou aux variables « Demander à chaque fois ».
Ce document est une référence rapide ; le code du backend fait foi pour le comportement réel.