1. Accès par plan
- • GET prospects, offres, devis/factures, stats
- • 100 requêtes/heure
- • Toute requête POST / PATCH / DELETE renvoie 403
- • Tout Business + création / modification / suppression
- • Prospects, offres, devis/factures, IA, rendez-vous
- • 500 requêtes/heure
2. Authentification
Toutes les requêtes incluent un Bearer token dans le header Authorization.
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects
Génère ta clé depuis Paramètres → Clés API.
3. Endpoints
/prospectsBusiness + PlatinumListe des prospects (filtres : status, country, limit, offset).
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects?limit=50
/prospects/{id}Business + PlatinumDétail d'un prospect.
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID
/prospects/{id}/proposalsBusiness + PlatinumOffres commerciales d'un prospect.
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/proposals
/documentsBusiness + PlatinumListe devis/factures (filtres : type, status).
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/documents?type=invoice&status=paid
/statsBusiness + PlatinumStatistiques (period=month|quarter|year).
curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/stats?period=month
/prospectsPlatinum uniquementCréer un prospect. Réservé au plan Platinum.
{ "name": "Jane Doe", "company": "Acme", "email": "jane@acme.io", "budget": 5000, "currency": "EUR" }curl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"name":"Jane Doe","company":"Acme"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/prospects/{id}Platinum uniquementMettre à jour un prospect. Réservé au plan Platinum.
{ "status": "won", "budget": 8000 }curl -X PATCH -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"status":"won"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/prospects/{id}Platinum uniquementSupprimer un prospect. Réservé au plan Platinum.
curl -X DELETE -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID
/prospects/{id}/proposalsPlatinum uniquementCréer une offre. Réservé au plan Platinum.
{ "title": "Refonte site", "amount": 3500, "currency": "EUR" }curl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"title":"Refonte"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/proposals/proposals/{id}Platinum uniquementMettre à jour une offre. Réservé au plan Platinum.
{ "status": "sent" }curl -X PATCH -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"status":"sent"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/proposals/ID/prospects/{id}/documentsPlatinum uniquementCréer un devis ou une facture. Réservé au plan Platinum.
{ "type": "invoice", "amount": 2500, "currency": "EUR" }curl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"type":"invoice","amount":2500}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/documents/emails/generatePlatinum uniquementGénérer un email IA personnalisé. Réservé au plan Platinum.
{ "prospect_id": "...", "template": "first_contact" }curl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"prospect_id":"..."}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/emails/generate/whatsapp/generatePlatinum uniquementGénérer un message WhatsApp IA. Réservé au plan Platinum.
{ "prospect_id": "...", "template": "relance douce" }curl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"prospect_id":"..."}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/whatsapp/generate4. Exemples cURL par plan
Choisis la section qui correspond à ton plan. Les requêtes d'écriture depuis une clé Business renvoient un 403 plan_forbidden_write.
Exemples Business (lecture seule)
/prospectscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects?limit=50
/prospects/{id}curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID
/prospects/{id}/proposalscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/proposals
/documentscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/documents?type=invoice&status=paid
/statscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/stats?period=month
Exemples Platinum (lecture + écriture)
/prospectscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects?limit=50
/prospects/{id}curl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID
/prospects/{id}/proposalscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/proposals
/documentscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/documents?type=invoice&status=paid
/statscurl -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/stats?period=month
/prospectscurl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" \
-d '{"name":"Jane Doe","company":"Acme"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/prospects/{id}curl -X PATCH -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"status":"won"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/prospects/{id}curl -X DELETE -H "Authorization: Bearer sk_live_xxx" \ https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID
/prospects/{id}/proposalscurl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"title":"Refonte"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/proposals/proposals/{id}curl -X PATCH -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"status":"sent"}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/proposals/ID/prospects/{id}/documentscurl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"type":"invoice","amount":2500}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/prospects/PROSPECT_ID/documents/emails/generatecurl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"prospect_id":"..."}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/emails/generate/whatsapp/generatecurl -X POST -H "Authorization: Bearer sk_live_xxx" \
-H "Content-Type: application/json" -d '{"prospect_id":"..."}' \
https://propulse-ton-freelance.lovable.app/api/public/v1/whatsapp/generate5. Exemples de code
import requests
r = requests.get(
"https://propulse-ton-freelance.lovable.app/api/public/v1/prospects",
headers={"Authorization": "Bearer sk_live_xxx"}
)
print(r.json())const r = await fetch(
"https://propulse-ton-freelance.lovable.app/api/public/v1/prospects",
{ headers: { Authorization: "Bearer sk_live_xxx" } }
);
console.log(await r.json());6. Codes d'erreur & messages actionnables
Chaque erreur renvoie un JSON structuré : { error, code, upgrade_url?, docs_url?, retry_after_seconds?, limit_per_hour? }. code — pour afficher un message traduit et proposer l'action correspondante à l'utilisateur.
| HTTP | code | Signification & action recommandée |
|---|---|---|
| 401 | invalid_key | Clé API invalide ou révoquée. Régénère une clé dans Paramètres → Clés API. |
| 403 | plan_no_api_access | Le plan ne donne pas accès à l'API. Message conseillé : « Cette action nécessite un plan Business ou Platinum — passer à un plan supérieur ». |
| 403 | plan_forbidden_write | Requête d'écriture (POST/PATCH/DELETE) depuis une clé Business. Message conseillé : « Cette action nécessite le plan Platinum — upgrade ». L'URL de l'action est fournie dans upgrade_url. |
| 400 | — | Champ manquant ou invalide. Corrige la payload. |
| 404 | — | Ressource introuvable. |
| 429 | rate_limited | Quota horaire atteint (100/h Business · 500/h Platinum). Le body inclut retry_after_seconds & limit_per_hour. Message conseillé : « Limite de requêtes atteinte, réessaie dans X minutes — voir les rate limits ». Le header HTTP Retry-After. |
| 500 | internal_error | Erreur serveur temporaire. Réessaie ou contacte le support. |
{
"error": "This action requires the Platinum plan. Business API keys are read-only.",
"code": "plan_forbidden_write",
"upgrade_url": "https://propulse-ton-freelance.lovable.app/app/upgrade",
"docs_url": "https://propulse-ton-freelance.lovable.app/docs/api"
}HTTP/1.1 429 Too Many Requests
Retry-After: 3600
{
"error": "Rate limit exceeded (100/hour). Retry in a few minutes.",
"code": "rate_limited",
"retry_after_seconds": 3600,
"limit_per_hour": 100,
"docs_url": "https://propulse-ton-freelance.lovable.app/docs/api#rate-limits"
}7. Limites par endpoint (rate limits détaillés)
Toutes les requêtes de la v1 partagent un même compteur horaire par compte (endpoint interne api_v1) : 100 req/h en Business, 500 req/h en Platinum. Le compteur est décrémenté par chaque requête authentifiée, quel que soit le verbe.
| Méthode | Endpoints | Business (lecture seule) | Platinum |
|---|---|---|---|
| GET | /prospects, /prospects/:id, /prospects/:id/proposals, /prospects/:id/documents, /proposals/:id, /documents, /stats | ✅ 100 req/h | ✅ 500 req/h |
| POST | /prospects, /prospects/:id/proposals, /prospects/:id/documents, /emails/generate, /whatsapp/generate | ❌ 403 plan_forbidden_write | ✅ 500 req/h |
| PATCH | /prospects/:id, /proposals/:id | ❌ 403 plan_forbidden_write | ✅ 500 req/h |
| DELETE | /prospects/:id | ❌ 403 plan_forbidden_write | ✅ 500 req/h |
HTTP/1.1 429 Too Many Requests
Retry-After: 3600
{
"error": "Rate limit exceeded (100/hour). Retry in a few minutes.",
"code": "rate_limited",
"retry_after_seconds": 3600,
"limit_per_hour": 100,
"docs_url": ".../docs/api#rate-limits"
}HTTP/1.1 403 Forbidden
{
"error": "This action requires the Platinum plan. Business API keys are read-only.",
"code": "plan_forbidden_write",
"upgrade_url": ".../app/upgrade",
"docs_url": ".../docs/api"
}- Respecte l'en-tête Retry-After plutôt que de retenter immédiatement.
- Applique un backoff exponentiel (2s → 4s → 8s → …) sur les erreurs 429 et 500.
- Batche les lectures : préfère un GET /prospects?limit=100 à 100 GET /prospects/:id.
- Cache côté client les réponses GET /stats.