Documentation API

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

https://votre-tenant.giga-crm.com/api/v1

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, entreprise
  • company_id - Filtrer par entreprise
  • tags - 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 facture
  • status - Filtrer par statut (pending, completed, failed, refunded)
  • method - Filtrer par méthode (card, bank_transfer, cash, check)
  • date_from - Date de début
  • date_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 utilisateur
  • language - 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 utilisateur
  • team_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 compte
  • folder - Filtrer par dossier (inbox, sent, draft)
  • search - Recherche dans sujet et contenu
  • unread - 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ôle
  • status - 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'analyse
  • group_by - Grouper par (day, week, month)

Webhooks

Recevez des notifications en temps réel lors d'événements dans Giga-CRM.

Configuration

  1. Allez dans Paramètres > Intégrations > Webhooks
  2. Ajoutez votre URL endpoint
  3. Sélectionnez les événements à recevoir
  4. 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.