La livraison repose sur une seule chaîne : un client possède des missions, une mission affecte des consultants via des affectations, et chaque mission porte un budget que vous pouvez comparer au réalisé. Ce guide parcourt toute la chaîne dans l’ordre.
1. Créer un client
POST /clients HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json
{ "name": "Acme Corp", "status": "customer", "industry": "Manufacturing" }
Renvoie 201 Created avec un ClientResponse. status vaut prospect ou customer (par défaut customer). Conservez l’id renvoyé.
2. Ouvrir une mission
Une mission appartient à un client et passe par draft, active, completed ou cancelled.
POST /missions HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json
{
"client_id": "0190a1c2-...",
"name": "Apollo",
"start_date": "2026-01-01",
"end_date": "2026-06-30"
}
Renvoie 201 Created avec un MissionResponse. Modifiez-la avec PUT /missions/{id}, qui accepte aussi le status vers lequel vous souhaitez la faire évoluer.
3. Affecter un consultant
Une affectation relie un consultant à une mission sur une plage de dates, avec un tarif facturable facultatif. Voir Gérer les personnes pour créer le consultant.
POST /assignments HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json
{
"mission_id": "0190a1c2-...",
"consultant_id": "0190a1c2-...",
"start_date": "2026-01-01",
"billing_rate": "900.00"
}
Renvoie 201 Created avec une AssignmentResponse. status vaut active, completed ou cancelled. Le billing_rate revient à null pour les appelants avec le rôle consultant (voir Rôles et permissions). Une affectation active est ce qui passe le statut du consultant à active et déverrouille ses lignes de feuille de temps (voir Suivre le temps).
4. Définir le budget
Un budget déclare le mode de vente et le chiffre d’affaires / coût prévisionnels. Seul un administrateur peut le définir.
PATCH /missions/{id}/budget HTTP/1.1
Authorization: Bearer <access_token>
Content-Type: application/json
{
"sale_mode": "time_and_materials",
"budget_revenue": "100000.00",
"budget_cost": "60000.00"
}
sale_mode vaut time_and_materials (par défaut) ou fixed_price.
5. Consulter le budget face au réalisé
GET /missions/{id}/budget HTTP/1.1
Authorization: Bearer <access_token>
Renvoie un MissionBudgetResponse qui compare le prévisionnel, le réalisé et la projection :
{
"sale_mode": "time_and_materials",
"health": "on_track",
"reasons": [],
"progress_percent": 42.0,
"budget": { "revenue": "100000.00", "cost": "60000.00", "margin": "40000.00" },
"actuals": { "revenue": "41000.00", "cost": "25000.00", "margin": "16000.00" },
"forecast": { "revenue": "98000.00", "cost": "59000.00", "margin": "39000.00" },
"variance": { "revenue": "-2000.00", "cost": "-1000.00", "margin": "-1000.00" },
"days_worked": "46"
}
health vaut unknown, on_track, at_risk ou over. cost et margin sont null pour les appelants avec le rôle consultant ; revenue est toujours visible. Pour comparer plusieurs missions à la fois, utilisez GET /kpi/mission-budgets?ids=... (voir Lire les indicateurs).
Points d’entrée en un coup d’œil
| Action | Méthode | Chemin | Succès |
|---|---|---|---|
| Créer un client | POST | /clients | 201 |
| Lister / récupérer des clients | GET | /clients, /clients/{id} | 200 |
| Créer une mission | POST | /missions | 201 |
| Modifier une mission | PUT | /missions/{id} | 200 |
| Créer une affectation | POST | /assignments | 201 |
| Modifier une affectation | PUT | /assignments/{id} | 200 |
| Définir le budget | PATCH | /missions/{id}/budget | 200 |
| Consulter le budget | GET | /missions/{id}/budget | 200 |
Une fois les affectations en place, les flux du quotidien Suivre le temps et Gérer les frais se rattachent tous deux à la mission.