Référence de l'API
Base : https://app.durum.ai/api/v1 Auth : en-tête Authorization: Bearer durum_sk_live_… Toutes les routes sont en GET (lecture seule) et retournent { "data": … }.
Paramètres de période communs : from et to au format YYYY-MM-DD (optionnels).
Index auto-documenté
GET /v1 (sans route) retourne la liste des routes disponibles et le scope requis.
Dashboard
| Route | Scope | Paramètres |
|---|---|---|
GET /dashboard/kpis | read:dashboard | from, to |
GET /dashboard/daily | read:dashboard | from, to |
GET /dashboard/breakdowns | read:dashboard | from, to, dim = source|campaign|product|rep |
Publicités
| Route | Scope | Paramètres |
|---|---|---|
GET /ads/spend | read:ads | from, to |
GET /ads/campaigns | read:ads | from, to |
GET /ads/rules | read:ads | — vos règles d'ads automatisées |
GET /ads/rules/runs | read:ads | rule_id, limit — historique d'exécution d'une règle |
Attribution
| Route | Scope | Paramètres |
|---|---|---|
GET /attribution | read:attribution | from, to |
GET /attribution/health | read:attribution | — |
GET /attribution/report | read:attribution | from, to |
Événements
| Route | Scope | Paramètres |
|---|---|---|
GET /events | read:events | type, from, to, limit (max 200), cursor, rep |
GET /events/summary | read:events | from, to |
Pagination : events retourne 50 lignes par défaut ; utilisez cursor (timestamp ISO de la dernière ligne) pour la page suivante.
Ventes & Finance
| Route | Scope | Paramètres |
|---|---|---|
GET /sales/summary | read:sales | from, to |
GET /sales/reps | read:sales | from, to |
GET /sales/cycle | read:sales | from, to |
GET /finance/pnl | read:finance | from, to — les champs de marge sont retirés |
Funnel
| Route | Scope | Paramètres |
|---|---|---|
GET /funnel | read:funnel | from, to |
Contacts & Appels
| Route | Scope | Paramètres |
|---|---|---|
GET /contacts | read:contacts | from, to, limit (max 500), offset, search |
GET /contacts/calls | read:calls | email |
GET /contacts/customers | read:contacts | — |
GET /contacts/purchases | read:contacts | from, to |
ICP & Pixels
| Route | Scope | Paramètres |
|---|---|---|
GET /icp/criteria | read:icp | — |
GET /capi/pixels | read:capi | — — vos pixels Meta connectés (IDs, défaut) ; les tokens ne sont jamais retournés |
Écriture (actions)
Les écritures utilisent PUT avec un corps JSON. Elles exigent un scope write:*.
| Route | Scope | Corps |
|---|---|---|
PUT /goals | write:goals | { "goals": { … } } — remplace vos objectifs KPI |
PUT /sale-rule | write:settings | { "sale_rule": { … } } — règle de comptage des ventes |
PUT /icp | write:icp | { "icp": { … } } — vos critères ICP |
POST /ads/rules/enable | write:ads | { "rule_id": "…", "enabled": true } — activer/désactiver une règle |
POST /ads/rules/dry-run | write:ads | { "rule_id": "…", "dry_run": true } — mode simulation (n'agit pas sur Meta) |
POST /ads/rules/delete | write:ads | { "rule_id": "…" } — supprimer une règle |
bash
curl -X PUT "https://app.durum.ai/api/v1/goals" \
-H "Authorization: Bearer durum_sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"goals": {"revenue_target": 100000}}'Codes de réponse
| Code | Signification |
|---|---|
200 | OK — { "data": … } |
401 | Clé API manquante ou invalide |
403 | insufficient_scope — la clé n'a pas le scope requis |
404 | Route inconnue |
429 | Débit dépassé (voir en-têtes X-RateLimit-*) |
Exemple
bash
curl "https://app.durum.ai/api/v1/attribution?from=2026-06-01&to=2026-06-30" \
-H "Authorization: Bearer durum_sk_live_VOTRE_CLE"json
{ "data": [ { "ad_name": "…", "attributed_revenue": 12400, "spend": 3100, "roas": 4.0 } ] }