Documentation API
Navigation
Introduction
L'API Giga-CRM vous permet d'intégrer notre plateforme CRM/ERP avec vos applications. API RESTful avec authentification via Sanctum et API Keys, responses JSON.
Base URL
Format des requêtes
- Toutes les requêtes doivent utiliser HTTPS
- Les données doivent être envoyées en JSON
- Header
Content-Type: application/json
requis - Header
Accept: application/json
requis - Les dates suivent le format ISO 8601
Authentification
Sanctum (Personal Access Tokens)
Pour les applications utilisateur, utilisez l'authentification Sanctum :
Login
POST /api/v1/auth/login
{ "email": "user@company.com", "password": "secure-password", "device_name": "API Client" }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/auth/login \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{ "email": "user@company.com", "password": "secure-password", "device_name": "API Client" }'
JavaScript
const response = await fetch('https://votre-tenant.giga-crm.com/api/v1/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({ email: 'user@company.com', password: 'secure-password', device_name: 'API Client' }) }); const data = await response.json(); const token = data.token;
PHP
$response = Http::post('https://votre-tenant.giga-crm.com/api/v1/auth/login', [ 'email' => 'user@company.com', 'password' => 'secure-password', 'device_name' => 'API Client' ]); $token = $response->json()['token'];
Python
import requests response = requests.post('https://votre-tenant.giga-crm.com/api/v1/auth/login', json={ 'email': 'user@company.com', 'password': 'secure-password', 'device_name': 'API Client' }, headers={ 'Content-Type': 'application/json', 'Accept': 'application/json' } ) token = response.json()['token']
Réponse
{ "token": "1|fHrYsQBxRVdvwxV8ctKKF7weNNnpTR5t0XQtZspA", "user": { "id": 1, "name": "John Doe", "email": "user@company.com" } }
API Keys
Pour des intégrations serveur-à-serveur, utilisez des API keys :
Header d'autorisation :
Authorization: Bearer your_api_key
⚠️ Sécurité
Ne jamais exposer vos clés API côté client. Utilisez-les uniquement depuis votre serveur.
Rate Limiting
Pour garantir la qualité du service, l'API applique des limites :
Plan | Requêtes/heure | Requêtes/jour |
---|---|---|
Standard | 1,000 | 10,000 |
Premium | 5,000 | 50,000 |
Enterprise | Illimité | Illimité |
Headers de rate limit
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 999 X-RateLimit-Reset: 1640995200
Endpoints
Leads
Lister les leads
GET /api/v1/leads
Paramètres optionnels :
page
- Numéro de page (défaut: 1)per_page
- Résultats par page (défaut: 20, max: 100)status
- Filtrer par statut (new, qualified, converted)score_min
- Score minimum (0-100)sort
- Tri (created_at, score, name)
Exemple de réponse :
{ "data": [ { "id": 1, "name": "Jean Dupont", "email": "jean.dupont@example.com", "phone": "+33612345678", "company": "Acme Corp", "score": 85, "ai_score": 92, "status": "qualified", "created_at": "2024-01-15T10:30:00Z" } ], "meta": { "current_page": 1, "total": 250, "per_page": 20 } }
Exemples :
cURL
curl -X GET "https://votre-tenant.giga-crm.com/api/v1/leads?status=qualified&score_min=70" \ -H "Authorization: Bearer your_token" \ -H "Accept: application/json"
JavaScript
const response = await fetch('https://votre-tenant.giga-crm.com/api/v1/leads?status=qualified&score_min=70', { headers: { 'Authorization': 'Bearer your_token', 'Accept': 'application/json' } }); const leads = await response.json();
PHP
$response = Http::withToken('your_token') ->get('https://votre-tenant.giga-crm.com/api/v1/leads', [ 'status' => 'qualified', 'score_min' => 70 ]); $leads = $response->json()['data'];
Python
import requests response = requests.get( 'https://votre-tenant.giga-crm.com/api/v1/leads', params={'status': 'qualified', 'score_min': 70}, headers={'Authorization': 'Bearer your_token'} ) leads = response.json()['data']
Créer un lead
POST /api/v1/leads
Body :
{ "name": "Marie Martin", "email": "marie.martin@example.com", "phone": "+33612345678", "company": "Tech Solutions", "job_title": "Directrice Marketing", "source": "website", "notes": "Intéressée par le plan Premium" }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/leads \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "name": "Marie Martin", "email": "marie.martin@example.com", "phone": "+33612345678", "company": "Tech Solutions", "job_title": "Directrice Marketing", "source": "website", "notes": "Intéressée par le plan Premium" }'
JavaScript
const lead = await fetch('https://votre-tenant.giga-crm.com/api/v1/leads', { method: 'POST', headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Marie Martin', email: 'marie.martin@example.com', phone: '+33612345678', company: 'Tech Solutions', job_title: 'Directrice Marketing', source: 'website', notes: 'Intéressée par le plan Premium' }) });
PHP
$lead = Http::withToken('your_token') ->post('https://votre-tenant.giga-crm.com/api/v1/leads', [ 'name' => 'Marie Martin', 'email' => 'marie.martin@example.com', 'phone' => '+33612345678', 'company' => 'Tech Solutions', 'job_title' => 'Directrice Marketing', 'source' => 'website', 'notes' => 'Intéressée par le plan Premium' ]);
Python
lead = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/leads', json={ 'name': 'Marie Martin', 'email': 'marie.martin@example.com', 'phone': '+33612345678', 'company': 'Tech Solutions', 'job_title': 'Directrice Marketing', 'source': 'website', 'notes': 'Intéressée par le plan Premium' }, headers={'Authorization': 'Bearer your_token'} )
Convertir un lead
POST /api/v1/leads/{id}/convert
Convertit un lead en contact et crée optionnellement une opportunité.
Body :
{ "create_opportunity": true, "opportunity_name": "Projet CRM Tech Solutions", "opportunity_value": 25000, "expected_close_date": "2024-03-31" }
Contacts
Lister les contacts
GET /api/v1/contacts
Paramètres optionnels :
search
- Recherche dans nom, email, entreprisecompany_id
- Filtrer par entreprisetags
- Filtrer par tags (séparés par virgule)include
- Inclure relations (company, activities)
Obtenir un contact
GET /api/v1/contacts/{id}
Retourne les détails complets d'un contact avec ses activités récentes.
Créer un contact
POST /api/v1/contacts
Body :
{ "name": "Pierre Durand", "email": "pierre.durand@example.com", "phone": "+33612345678", "company_id": 123, "job_title": "Directeur Commercial", "is_primary": true }
Entreprises
Créer une entreprise
POST /api/v1/companies
Body :
{ "name": "Nouvelle Entreprise SAS", "type": "client", "website": "https://example.com", "phone": "+33123456789", "address": "123 rue de la Paix", "city": "Paris", "postal_code": "75001", "country": "FR", "annual_revenue": 5000000, "employees_count": 50 }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/companies \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "name": "Nouvelle Entreprise SAS", "type": "client", "website": "https://example.com", "phone": "+33123456789" }'
JavaScript
const company = await fetch('https://votre-tenant.giga-crm.com/api/v1/companies', { method: 'POST', headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Nouvelle Entreprise SAS', type: 'client', website: 'https://example.com', phone: '+33123456789' }) });
PHP
$company = Http::withToken('your_token') ->post('https://votre-tenant.giga-crm.com/api/v1/companies', [ 'name' => 'Nouvelle Entreprise SAS', 'type' => 'client', 'website' => 'https://example.com', 'phone' => '+33123456789' ]);
Python
company = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/companies', json={ 'name': 'Nouvelle Entreprise SAS', 'type': 'client', 'website': 'https://example.com', 'phone': '+33123456789' }, headers={'Authorization': 'Bearer your_token'} )
Obtenir les factures d'une entreprise
GET /api/v1/companies/{id}/invoices
Obtenir les devis d'une entreprise
GET /api/v1/companies/{id}/quotes
Factures
Créer une facture
POST /api/v1/invoices
Body :
{ "company_id": 123, "invoice_date": "2024-01-15", "due_date": "2024-02-15", "items": [ { "description": "Abonnement Giga-CRM Premium", "quantity": 1, "unit_price": 299.00, "tax_rate": 20 } ], "currency": "EUR", "notes": "Paiement par virement sous 30 jours" }
Envoyer une facture par email
POST /api/v1/invoices/{id}/send-email
Envoie la facture par email au contact associé.
Body optionnel :
{ "cc": ["compta@example.com"], "message": "Message personnalisé pour le client..." }
Télécharger le PDF d'une facture
GET /api/v1/invoices/{id}/pdf
Obtenir les paiements d'une facture
GET /api/v1/invoices/{id}/payments
Devis
Créer un devis
POST /api/v1/quotes
Body :
{ "company_id": 123, "quote_date": "2024-01-15", "valid_until": "2024-02-15", "items": [ { "description": "Mise en place CRM", "quantity": 1, "unit_price": 5000.00, "tax_rate": 20 } ], "currency": "EUR" }
Convertir un devis en facture
POST /api/v1/quotes/{id}/convert
Convertit automatiquement le devis en facture.
Envoyer un devis par email
POST /api/v1/quotes/{id}/send-email
Télécharger le PDF d'un devis
GET /api/v1/quotes/{id}/pdf
Paiements
Lister les paiements
GET /api/v1/payments
Paramètres optionnels :
invoice_id
- Filtrer par facturestatus
- Filtrer par statut (pending, completed, failed, refunded)method
- Filtrer par méthode (card, bank_transfer, cash, check)date_from
- Date de débutdate_to
- Date de fin
Enregistrer un paiement
POST /api/v1/payments
Body :
{ "invoice_id": 123, "amount": 358.80, "payment_date": "2024-01-20", "method": "bank_transfer", "reference": "VIR-2024-001", "notes": "Virement reçu" }
Rembourser un paiement
POST /api/v1/payments/{id}/refund
Body :
{ "amount": 100.00, "reason": "Remboursement partiel suite à réclamation" }
Produits
Créer un produit
POST /api/v1/products
Body :
{ "name": "Licence CRM Premium", "sku": "CRM-PREM-001", "description": "Licence annuelle CRM Premium", "price": 299.00, "category": "Software", "commission_rate": 10, "stock_quantity": 100, "is_active": true }
Mettre à jour le stock
POST /api/v1/products/{id}/update-stock
Body :
{ "quantity": 50, "operation": "add" // ou "subtract", "set" }
Obtenir les catégories
GET /api/v1/products/categories
Calculer la commission
POST /api/v1/products/{id}/calculate-commission
Body :
{ "amount": 1000.00, "user_id": 42 }
Produits best-sellers
GET /api/v1/products/best-sellers
Paramètres optionnels :
period
- Période (month, quarter, year)limit
- Nombre de résultats (défaut: 10)
Projets
Créer un projet
POST /api/v1/projects
Body :
{ "name": "Migration CRM Client X", "description": "Migration complète vers Giga-CRM", "company_id": 123, "start_date": "2024-02-01", "end_date": "2024-03-31", "budget": 15000.00, "status": "planning" }
Obtenir les tâches d'un projet
GET /api/v1/projects/{id}/tasks
Obtenir les temps d'un projet
GET /api/v1/projects/{id}/time-entries
Ajouter un membre à l'équipe
POST /api/v1/projects/{id}/team-members
Body :
{ "user_id": 42, "role": "developer" }
Retirer un membre de l'équipe
DELETE /api/v1/projects/{id}/team-members
Body :
{ "user_id": 42 }
Mettre à jour la progression
POST /api/v1/projects/{id}/update-progress
Body :
{ "progress": 75 }
Statistiques du projet
GET /api/v1/projects/{id}/statistics
Tâches
Créer une tâche
POST /api/v1/tasks
Body :
{ "title": "Configuration initiale CRM", "description": "Paramétrer les modules de base", "project_id": 123, "assigned_to": 42, "priority": "high", "due_date": "2024-02-10", "estimated_hours": 8 }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/tasks \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "title": "Configuration initiale CRM", "description": "Paramétrer les modules de base", "project_id": 123, "assigned_to": 42, "priority": "high", "due_date": "2024-02-10" }'
JavaScript
const task = await fetch('https://votre-tenant.giga-crm.com/api/v1/tasks', { method: 'POST', headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json' }, body: JSON.stringify({ title: 'Configuration initiale CRM', description: 'Paramétrer les modules de base', project_id: 123, assigned_to: 42, priority: 'high', due_date: '2024-02-10' }) });
PHP
$task = Http::withToken('your_token') ->post('https://votre-tenant.giga-crm.com/api/v1/tasks', [ 'title' => 'Configuration initiale CRM', 'description' => 'Paramétrer les modules de base', 'project_id' => 123, 'assigned_to' => 42, 'priority' => 'high', 'due_date' => '2024-02-10' ]);
Python
task = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/tasks', json={ 'title': 'Configuration initiale CRM', 'description': 'Paramétrer les modules de base', 'project_id': 123, 'assigned_to': 42, 'priority': 'high', 'due_date': '2024-02-10' }, headers={'Authorization': 'Bearer your_token'} )
Mettre à jour la checklist
POST /api/v1/tasks/{id}/checklist
Body :
{ "checklist": [ {"text": "Créer les utilisateurs", "completed": true}, {"text": "Configurer les permissions", "completed": false}, {"text": "Importer les données", "completed": false} ] }
Démarrer le timer
POST /api/v1/tasks/{id}/start-timer
Démarre le chronomètre pour le suivi du temps.
Arrêter le timer
POST /api/v1/tasks/{id}/stop-timer
Arrête le chronomètre et enregistre le temps passé.
Mes tâches
GET /api/v1/my-tasks
Paramètres optionnels :
status
- Filtrer par statut (pending, in_progress, completed)due
- Filtrer par échéance (today, week, overdue)
Objectifs (OKR/KPI)
Créer un objectif
POST /api/v1/goals
Body :
{ "name": "Augmenter le CA de 20%", "description": "Objectif de croissance Q1 2024", "type": "okr", "target_value": 120000, "current_value": 100000, "unit": "EUR", "start_date": "2024-01-01", "end_date": "2024-03-31", "assigned_to": 42 }
Enregistrer une progression
POST /api/v1/goals/{id}/progress
Body :
{ "value": 105000, "notes": "Progression suite aux nouvelles signatures" }
Statistiques des objectifs
GET /api/v1/goals/statistics/summary
Paramètres optionnels :
period
- Période (current, quarter, year)team_id
- Filtrer par équipe
Missions
Créer une mission
POST /api/v1/missions
Body :
{ "name": "Campagne Prospection Q1 2024", "type": "prospecting", "description": "Prospection nouveaux clients secteur Tech", "start_date": "2024-01-15", "end_date": "2024-03-31", "status": "active", "audio_analysis_prompt": "Analyser la qualité de la prospection..." }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/missions \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "name": "Campagne Prospection Q1 2024", "type": "prospecting", "description": "Prospection nouveaux clients secteur Tech", "start_date": "2024-01-15", "end_date": "2024-03-31", "status": "active" }'
JavaScript
const mission = await fetch('https://votre-tenant.giga-crm.com/api/v1/missions', { method: 'POST', headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Campagne Prospection Q1 2024', type: 'prospecting', description: 'Prospection nouveaux clients secteur Tech', start_date: '2024-01-15', end_date: '2024-03-31', status: 'active' }) });
PHP
$mission = Http::withToken('your_token') ->post('https://votre-tenant.giga-crm.com/api/v1/missions', [ 'name' => 'Campagne Prospection Q1 2024', 'type' => 'prospecting', 'description' => 'Prospection nouveaux clients secteur Tech', 'start_date' => '2024-01-15', 'end_date' => '2024-03-31', 'status' => 'active' ]);
Python
mission = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/missions', json={ 'name': 'Campagne Prospection Q1 2024', 'type': 'prospecting', 'description': 'Prospection nouveaux clients secteur Tech', 'start_date': '2024-01-15', 'end_date': '2024-03-31', 'status': 'active' }, headers={'Authorization': 'Bearer your_token'} )
Assigner des leads à une mission
POST /api/v1/missions/{id}/assign-leads
Body :
{ "lead_ids": [123, 456, 789], "assigned_to": 42 }
Détacher des leads d'une mission
DELETE /api/v1/missions/{id}/detach-leads
Body :
{ "lead_ids": [123, 456] }
Marquer des leads comme complétés
POST /api/v1/missions/{id}/complete-leads
Body :
{ "lead_ids": [123, 456], "status": "completed" }
Statistiques de mission
GET /api/v1/missions/{id}/statistics
Cloner une mission
POST /api/v1/missions/{id}/clone
Body :
{ "name": "Campagne Prospection Q2 2024", "start_date": "2024-04-01", "end_date": "2024-06-30" }
Transcriptions Audio
L'API de transcription audio permet de transcrire automatiquement vos enregistrements et d'analyser leur conformité avec l'IA. Idéal pour le contrôle qualité et la formation.
Lister les transcriptions
GET /api/v1/audio-transcriptions
Paramètres optionnels :
page
- Numéro de page (défaut: 1)per_page
- Résultats par page (défaut: 20)status
- Filtrer par statut (pending, compliant, warning, violation)user_id
- Filtrer par utilisateurlanguage
- Filtrer par langue (fr, en, es, de, it)date_from
- Date de début (YYYY-MM-DD)date_to
- Date de fin (YYYY-MM-DD)score_min
- Score minimum (0-100)score_max
- Score maximum (0-100)
Exemple de réponse :
{ "data": [ { "id": 1, "audio_url": "https://storage.example.com/calls/12345.mp3", "filename": "call_12345.mp3", "transcription_text": "Bonjour, merci d'avoir appelé...", "language": "fr", "duration": 185, "compliance_score": 92, "compliance_status": "compliant", "violations": [], "analysis_result": { "summary": "Appel professionnel avec excellente écoute active", "key_points": [ "Présentation claire de l'offre", "Réponse adaptée aux besoins client" ] }, "user": { "id": 42, "name": "Marie Dupont" }, "created_at": "2024-01-25T14:30:00Z" } ], "meta": { "current_page": 1, "total": 150, "per_page": 20 } }
Obtenir une transcription
GET /api/v1/audio-transcriptions/{id}
Retourne les détails complets d'une transcription avec l'analyse de conformité.
Uploader un fichier audio
POST /api/v1/audio-transcriptions/upload
Upload et transcrit un fichier audio. Formats supportés : MP3, WAV, M4A, OGG, WEBM (max 100MB).
Headers requis :
Content-Type: multipart/form-data
Paramètres :
{ "audio": "[Fichier audio]", "language": "fr", "activity_id": 789 }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/audio-transcriptions/upload \ -H "Authorization: Bearer your_token" \ -F "audio=@/path/to/recording.mp3" \ -F "language=fr" \ -F "activity_id=789"
JavaScript
const formData = new FormData(); formData.append('audio', audioFile); formData.append('language', 'fr'); formData.append('activity_id', 789); const response = await fetch('https://votre-tenant.giga-crm.com/api/v1/audio-transcriptions/upload', { method: 'POST', headers: { 'Authorization': 'Bearer your_token' }, body: formData });
PHP
$response = Http::withToken('your_token') ->attach('audio', file_get_contents($audioPath), 'recording.mp3') ->post('https://votre-tenant.giga-crm.com/api/v1/audio-transcriptions/upload', [ 'language' => 'fr', 'activity_id' => 789 ]);
Python
with open('/path/to/recording.mp3', 'rb') as audio_file: files = {'audio': audio_file} data = {'language': 'fr', 'activity_id': 789} response = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/audio-transcriptions/upload', files=files, data=data, headers={'Authorization': 'Bearer your_token'} )
Relancer l'analyse
POST /api/v1/audio-transcriptions/{id}/reanalyze
Relance l'analyse de conformité avec les règles actuelles.
Lier à une activité
POST /api/v1/audio-transcriptions/{id}/link-activity
Body :
{ "activity_id": 789 }
Statut de transcription
GET /api/v1/audio-transcriptions/{id}/status
Télécharger l'audio
GET /api/v1/audio-transcriptions/{id}/download
Statistiques de conformité
GET /api/v1/audio-transcriptions/statistics/compliance
Paramètres optionnels :
period
- Période (today, week, month, year)user_id
- Filtrer par utilisateurteam_id
- Filtrer par équipe
Documents
Lister les modèles
GET /api/v1/documents/templates
Créer un modèle
POST /api/v1/documents/templates
Body :
{ "name": "Contrat de service", "category": "contract", "content": "Contrat entre \{\{company_name\}\} et \{\{client_name\}\}...", "variables": ["company_name", "client_name", "start_date", "amount"] }
Générer un document
POST /api/v1/documents/generate
Body :
{ "template_id": 123, "variables": { "company_name": "Giga-CRM", "client_name": "Tech Solutions", "start_date": "2024-02-01", "amount": "5000" }, "format": "pdf" }
Télécharger un document
GET /api/v1/documents/instances/{id}/download
Catégories de documents
GET /api/v1/documents/categories
Statistiques documents
GET /api/v1/documents/statistics
Emails
Lister les comptes email
GET /api/v1/emails/accounts
Lister les messages
GET /api/v1/emails/messages
Paramètres optionnels :
account_id
- Filtrer par comptefolder
- Filtrer par dossier (inbox, sent, draft)search
- Recherche dans sujet et contenuunread
- Afficher uniquement les non lus
Obtenir une conversation
GET /api/v1/emails/threads/{id}
Marquer comme lu
POST /api/v1/emails/threads/{id}/mark-read
Envoyer un email
POST /api/v1/emails/send
Body :
{ "to": ["client@example.com"], "cc": ["manager@company.com"], "subject": "Proposition commerciale", "body": "Bonjour,\n\nVeuillez trouver ci-joint notre proposition...", "attachments": [ { "filename": "proposition.pdf", "content": "base64_encoded_content", "type": "application/pdf" } ], "account_id": 123 }
Exemples :
cURL
curl -X POST https://votre-tenant.giga-crm.com/api/v1/emails/send \ -H "Authorization: Bearer your_token" \ -H "Content-Type: application/json" \ -d '{ "to": ["client@example.com"], "subject": "Proposition commerciale", "body": "Bonjour,\n\nVeuillez trouver notre proposition...", "account_id": 123 }'
JavaScript
const email = await fetch('https://votre-tenant.giga-crm.com/api/v1/emails/send', { method: 'POST', headers: { 'Authorization': 'Bearer your_token', 'Content-Type': 'application/json' }, body: JSON.stringify({ to: ['client@example.com'], subject: 'Proposition commerciale', body: 'Bonjour,\n\nVeuillez trouver notre proposition...', account_id: 123 }) });
PHP
$email = Http::withToken('your_token') ->post('https://votre-tenant.giga-crm.com/api/v1/emails/send', [ 'to' => ['client@example.com'], 'subject' => 'Proposition commerciale', 'body' => "Bonjour,\n\nVeuillez trouver notre proposition...", 'account_id' => 123 ]);
Python
email = requests.post( 'https://votre-tenant.giga-crm.com/api/v1/emails/send', json={ 'to': ['client@example.com'], 'subject': 'Proposition commerciale', 'body': 'Bonjour,\n\nVeuillez trouver notre proposition...', 'account_id': 123 }, headers={'Authorization': 'Bearer your_token'} )
Créer un modèle d'email
POST /api/v1/emails/templates
Body :
{ "name": "Email de bienvenue", "subject": "Bienvenue chez \{\{company_name\}\}", "body": "Bonjour \{\{contact_name\}\},\n\nBienvenue...", "variables": ["company_name", "contact_name"] }
Synchroniser les emails
POST /api/v1/emails/sync
Body optionnel :
{ "account_id": 123, "force": true }
Statistiques emails
GET /api/v1/emails/statistics
Utilisateurs
Lister les utilisateurs
GET /api/v1/users
Paramètres optionnels :
role
- Filtrer par rôlestatus
- Filtrer par statut (active, inactive)team_id
- Filtrer par équipe
Mon profil
GET /api/v1/profile
Mettre à jour mon profil
PUT /api/v1/profile
Body :
{ "name": "Jean Dupont", "phone": "+33612345678", "notification_preferences": { "email": true, "sms": false } }
Permissions d'un utilisateur
GET /api/v1/users/{id}/permissions
Assigner un rôle
POST /api/v1/users/{id}/assign-role
Body :
{ "role": "manager" }
Activité d'un utilisateur
GET /api/v1/users/{id}/activity
Statistiques utilisateur
GET /api/v1/users/{id}/statistics
Clés API
Lister mes clés API
GET /api/v1/api-keys
Créer une clé API
POST /api/v1/api-keys
Body :
{ "name": "Integration ERP", "abilities": ["leads:read", "leads:create", "contacts:read"], "expires_at": "2024-12-31" }
Liste des abilities disponibles
GET /api/v1/api-keys/abilities/list
Révoquer une clé API
DELETE /api/v1/api-keys/{id}
Statistiques
Vue d'ensemble
GET /api/v1/statistics/overview
Paramètres optionnels :
period
- Période (today, week, month, quarter, year)compare
- Comparer avec période précédente (true/false)
Statistiques factures
GET /api/v1/statistics/invoices
Paramètres optionnels :
period
- Période d'analysegroup_by
- Grouper par (day, week, month)
Webhooks
Recevez des notifications en temps réel lors d'événements dans Giga-CRM.
Configuration
- Allez dans Paramètres > Intégrations > Webhooks
- Ajoutez votre URL endpoint
- Sélectionnez les événements à recevoir
- Copiez la clé secrète pour vérifier les signatures
Événements disponibles
Leads
- lead.created
- lead.updated
- lead.converted
- lead.score_changed
Contacts
- contact.created
- contact.updated
- contact.deleted
Factures
- invoice.created
- invoice.sent
- invoice.paid
- invoice.overdue
Transcriptions
- transcription.created
- transcription.completed
- transcription.failed
- transcription.violation_detected
Missions
- mission.created
- mission.completed
- mission.leads_assigned
Autres
- project.completed
- task.completed
- document.signed
- goal.achieved
Format des webhooks
{ "id": "evt_1234567890", "type": "lead.created", "created": "2024-01-15T10:30:00Z", "data": { "object": { "id": 123, "name": "Jean Dupont", "email": "jean.dupont@example.com", // ... autres données } } }
Vérification de signature
Vérifiez l'authenticité des webhooks avec HMAC-SHA256 :
Exemples de vérification :
PHP
$payload = file_get_contents('php://input'); $signature = $_SERVER['HTTP_X_GIGACRM_SIGNATURE']; $expected = hash_hmac('sha256', $payload, $webhook_secret); if (!hash_equals($expected, $signature)) { http_response_code(401); exit('Invalid signature'); }
JavaScript (Node.js)
const crypto = require('crypto'); function verifyWebhook(payload, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(payload) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(signature), Buffer.from(expected) ); }
Python
import hmac import hashlib def verify_webhook(payload, signature, secret): expected = hmac.new( secret.encode(), payload.encode(), hashlib.sha256 ).hexdigest() return hmac.compare_digest(signature, expected)
Endpoints Webhook
Webhooks Stripe
POST /webhooks/stripe/{tenant}
Reçoit les événements Stripe (paiements, souscriptions, etc.)
Webhooks Ringover
POST /webhooks/ringover
Reçoit les événements Ringover (appels, SMS, enregistrements)
Webhooks Aircall
POST /webhooks/aircall
Reçoit les événements Aircall (appels, enregistrements)
Gestion d'erreurs
L'API utilise les codes HTTP standards et retourne des messages d'erreur détaillés.
Format d'erreur
{ "message": "Les données fournies sont invalides", "errors": { "email": ["Le champ email est requis"], "phone": ["Le format du téléphone est invalide"] } }
Codes d'erreur courants
Code HTTP | Signification |
---|---|
400 | Bad Request - Paramètres invalides |
401 | Unauthorized - Token invalide ou expiré |
403 | Forbidden - Permissions insuffisantes |
404 | Not Found - Ressource introuvable |
422 | Unprocessable Entity - Erreurs de validation |
429 | Too Many Requests - Rate limit dépassé |
500 | Internal Server Error |
Support API
Des questions sur l'API ? Notre équipe technique est là pour vous aider.