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/jsonrequis - Header
Accept: application/jsonrequis - 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.