Documentation API TagadaOS
Connectez vos CRMs, formulaires et outils d'acquisition pour envoyer des leads directement dans TagadaOS. Démarrez en 3 étapes.
tgd_a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1
YOUR_KEY par votre clé.curl -X POST https://tagadaos-2.polsia.app/api/leads/webhook \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_KEY" \ -d '{ "leads": [{ "email": "test@exemple.com", "source": "seo", "name": "Test Lead", "phone": "+33600000000", "quality_score": 4 }] }'
{
"imported": 1,
"duplicates": 0,
"errors": []
}
Authentification
TagadaOS utilise deux mécanismes d'authentification selon le contexte.
Utilisé pour les endpoints /api/leads et /api/settings. Le token est obtenu via POST /api/auth/login et doit être passé dans le header Authorization: Bearer <token>.
Utilisée pour le webhook POST /api/leads/webhook. La clé est passée dans le header X-API-Key: <votre-clé>. Format : tgd_<64 hex chars>.
| Champ | Type | Requis | Description |
|---|---|---|---|
| string | Requis | Adresse email autorisée |
{
"email": "votre@email.com"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
{
"error": "Unauthorized"
}
curl -X POST https://tagadaos-2.polsia.app/api/auth/login \ -H "Content-Type: application/json" \ -d '{"email": "votre@email.com"}'
X-API-Key: tgd_a3f8b2c1d4e5f6a7...
| Propriété | Valeur |
|---|---|
| Format | tgd_<64 caractères hex> |
| Rate limit | 100 requêtes/minute par clé |
| Stockage | Hash SHA-256 (plaintext jamais persisté) |
| Révocation | Soft delete via DELETE /api/settings/api-keys/:id |
{
"error": "API key required"
}
{
"error": "Rate limit exceeded"
}
Leads API
CRUD complet sur les leads. Tous ces endpoints requièrent un JWT dans le header Authorization.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| q | string | — | Recherche plein texte (name, email, phone) |
| source | string | — | Filtrer par source : seo, coreg, sma |
| status | string | — | nouveau, en_attente, contacte, qualifie, converti, rejete |
| quality_min | integer | — | Score qualité minimum (1–10) |
| quality_max | integer | — | Score qualité maximum (1–10) |
| date_from | date | — | Date début ISO 8601 : 2025-01-01 |
| date_to | date | — | Date fin ISO 8601 |
| sort | string | created_at | Colonne de tri : created_at, quality_score, name, email |
| order | string | desc | asc ou desc |
| page | integer | 1 | Numéro de page |
| limit | integer | 20 | Résultats par page (max 100) |
{
"leads": [
{
"id": 1,
"email": "jean.dupont@exemple.com",
"name": "Jean Dupont",
"phone": "+33612345678",
"source": "seo",
"quality_score": 7,
"conversion_status": "contacte",
"notes": null,
"created_at": "2025-03-15T10:23:00.000Z",
"status_updated_at": "2025-03-16T08:00:00.000Z"
}
],
"total": 500,
"page": 1,
"limit": 20,
"pages": 25
}
curl -G https://tagadaos-2.polsia.app/api/leads \ -H "Authorization: Bearer YOUR_JWT" \ --data-urlencode "q=dupont" \ -d "source=seo&status=contacte&page=1&limit=20"
{
"id": 42,
"email": "jean.dupont@exemple.com",
"name": "Jean Dupont",
"phone": "+33612345678",
"source": "seo",
"quality_score": 7,
"conversion_status": "contacte",
"notes": "Rappeler jeudi matin",
"created_at": "2025-03-15T10:23:00.000Z",
"status_updated_at": "2025-03-16T08:00:00.000Z",
"history": [
{
"old_status": "nouveau",
"new_status": "contacte",
"changed_at": "2025-03-16T08:00:00.000Z"
}
]
}
curl https://tagadaos-2.polsia.app/api/leads/42 \ -H "Authorization: Bearer YOUR_JWT"
lead_status_history.| Champ | Type | Requis | Valeurs acceptées |
|---|---|---|---|
| conversion_status | string | Optionnel | nouveau, en_attente, contacte, qualifie, converti, rejete |
| notes | string | Optionnel | Texte libre (max 2000 caractères) |
{
"conversion_status": "qualifie",
"notes": "Très intéressé, budget confirmé"
}
{
"id": 42,
"conversion_status": "qualifie",
"notes": "Très intéressé, budget confirmé",
"status_updated_at": "2025-04-20T14:30:00.000Z"
}
curl -X PATCH https://tagadaos-2.polsia.app/api/leads/42 \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"conversion_status": "qualifie", "notes": "Budget confirmé"}'
| Champ | Type | Requis | Description |
|---|---|---|---|
| ids | integer[] | Requis | IDs des leads à modifier (max 500) |
| action | string | Requis | update_status ou delete |
| conversion_status | string | Si action=update_status | Nouveau statut |
{
"ids": [10, 11, 12],
"action": "update_status",
"conversion_status": "contacte"
}
{
"updated": 3
}
curl -X PATCH https://tagadaos-2.polsia.app/api/leads/bulk \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"ids":[10,11,12],"action":"update_status","conversion_status":"contacte"}'
Import & Export CSV
| Colonne CSV | Alias acceptés | Requis | Type |
|---|---|---|---|
email, e-mail, courriel | Requis | string (unique) | |
| name | name, nom, prénom, full_name | Optionnel | string |
| phone | phone, téléphone, tel | Optionnel | string |
| source | source, canal | Optionnel | seo / coreg / sma |
| quality_score | quality_score, score, qualité | Optionnel | integer 1–10 |
| conversion_status | conversion_status, statut, status | Optionnel | voir statuts valides |
email,name,phone,source,quality_score jean.dupont@exemple.com,Jean Dupont,+33612345678,seo,7 marie.martin@exemple.com,Marie Martin,,coreg,5
| Limite | Valeur |
|---|---|
| Lignes max | 10 000 lignes par fichier |
| Taille fichier max | ~15 MB |
| Encodage | UTF-8 recommandé |
| Séparateur | Virgule , ou point-virgule ; |
| Déduplification | Par email — upsert (mise à jour si existant) |
| Content-Type | multipart/form-data, champ : file |
{
"imported": 487,
"duplicates": 13,
"errors": [
{ "row": 24, "reason": "Email invalide" }
]
}
curl -X POST https://tagadaos-2.polsia.app/api/leads/import \ -H "Authorization: Bearer YOUR_JWT" \ -F "file=@leads.csv"
GET /api/leads plus une sélection par IDs. Fichier nommé leads_export_YYYY-MM-DD.csv.| Paramètre | Type | Description |
|---|---|---|
| ids | string | Export sélectif : ?ids=1,2,3 |
| source | string | Filtrer par source |
| status | string | Filtrer par statut |
| q | string | Recherche plein texte |
| date_from / date_to | date | Plage de dates |
Limite : 50 000 lignes · Content-Type : text/csv | ||
curl -G https://tagadaos-2.polsia.app/api/leads/export \ -H "Authorization: Bearer YOUR_JWT" \ -d "source=seo&status=converti" \ -o leads_export.csv
curl https://tagadaos-2.polsia.app/api/leads/export?ids=1,2,3,4 \ -H "Authorization: Bearer YOUR_JWT" \ -o selection.csv
Webhook d'ingestion
Point d'entrée principal pour l'intégration externe. Envoyez des lots de leads depuis n'importe quel CRM, formulaire ou script.
| Champ | Type | Requis | Description |
|---|---|---|---|
| leads | array | Requis | Tableau de leads (max 500) |
| leads[].email | string | Requis | Adresse email (clé de déduplification) |
| leads[].source | string | Optionnel | seo, coreg, sma |
| leads[].name | string | Optionnel | Nom complet du lead |
| leads[].phone | string | Optionnel | Numéro de téléphone |
| leads[].quality_score | integer | Optionnel | Score 1–10 |
{
"leads": [
{
"email": "alice@exemple.com",
"source": "seo",
"name": "Alice Martin",
"phone": "+33611223344",
"quality_score": 8
},
{
"email": "bob@exemple.com",
"source": "coreg"
}
]
}
{
"imported": 2,
"duplicates": 0,
"errors": []
}
{
"imported": 1,
"duplicates": 1,
"errors": [
{ "index": 2, "reason": "email manquant" }
]
}
| Code HTTP | Cause | Réponse |
|---|---|---|
401 | X-API-Key manquante ou invalide | {"error": "API key required"} |
429 | Rate limit dépassé (100 req/min) | {"error": "Rate limit exceeded"} |
400 | Payload invalide ou tableau vide | {"error": "Invalid payload"} |
413 | Batch > 500 leads | {"error": "Batch too large"} |
| Limite | Valeur |
|---|---|
| Leads par requête | 500 max |
| Rate limit | 100 requêtes/minute par clé API |
| Content-Type | application/json |
| Déduplification | Par email (upsert — pas de doublon) |
| Erreurs partielles | Les leads valides sont importés même si certains échouent |
curl -X POST https://tagadaos-2.polsia.app/api/leads/webhook \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_KEY" \ -d '{ "leads": [ {"email":"alice@exemple.com","source":"seo","name":"Alice","quality_score":8}, {"email":"bob@exemple.com","source":"coreg","phone":"+33600000000"} ] }'
# Exemple d'intégration depuis un CRM Python import requests API_KEY = "tgd_votre_clé_ici" WEBHOOK_URL = "https://tagadaos-2.polsia.app/api/leads/webhook" leads = [ {"email": "prospect@exemple.com", "source": "seo", "quality_score": 7}, # ... autres leads ] response = requests.post(WEBHOOK_URL, json={"leads": leads}, headers={"X-API-Key": API_KEY} ) print(response.json()) # {"imported": 1, "duplicates": 0, "errors": []}
Clés API
Créez, listez et révoquez les clés API depuis le dashboard ou via l'API (JWT requis).
| Champ | Type | Requis | Description |
|---|---|---|---|
| name | string | Requis | Nom descriptif de la clé (ex: "CRM Production") |
{ "name": "CRM Production" }
{
"id": 3,
"name": "CRM Production",
"key": "tgd_a3f8b2c1d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1",
"created_at": "2025-04-20T10:00:00.000Z"
}
key n'est retourné que dans cette réponse. Copiez-le immédiatement.curl -X POST https://tagadaos-2.polsia.app/api/settings/api-keys \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"name": "CRM Production"}'
[
{
"id": 1,
"name": "CRM Production",
"active": true,
"created_at": "2025-04-10T08:00:00.000Z",
"last_used_at": "2025-04-20T09:15:00.000Z"
}
]
curl https://tagadaos-2.polsia.app/api/settings/api-keys \ -H "Authorization: Bearer YOUR_JWT"
{ "success": true }
curl -X DELETE https://tagadaos-2.polsia.app/api/settings/api-keys/1 \ -H "Authorization: Bearer YOUR_JWT"