API REST dropfleet.eu v1
Interface programmatique complète pour intégrer le dispatch logistique, la géolocalisation chauffeurs et la gestion des commandes dans vos systèmes métier.
Authentification
dropfleet.eu utilise deux mécanismes d'authentification selon l'acteur : sessions PHP sécurisées pour le back-office (dispatch/admin) et JWT RS256 pour la PWA chauffeur.
/login. Le cookie PHPSESSID est automatiquement inclus par le navigateur.JWT — Chauffeur PWA
La PWA chauffeur utilise un token JWT signé RS256, valide 8h, passé en header Authorization: Bearer <token>.
curl -X POST https://dropfleet.eu/api/v1/driver/auth \ -H "Content-Type: application/json" \ -d '{"email":"driver@votresociete.be","password":"motdepasse"}'
{
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 28800,
"driver": {
"id": 42,
"name": "Jean-Pierre Martin",
"tenant_id": 7
}
}
Utilisez ensuite ce token dans tous les appels PWA :
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
Codes d'erreur
Toutes les réponses d'erreur suivent le format JSON standardisé :
{
"error": "unauthorized",
"message": "Token JWT invalide ou expiré.",
"code": 401
}
| HTTP | Code erreur | Description |
|---|---|---|
400 | bad_request | Données manquantes ou invalides |
401 | unauthorized | Token JWT absent, invalide ou expiré |
403 | forbidden | Accès refusé — tenant ou rôle insuffisant |
404 | not_found | Ressource introuvable |
409 | conflict | Conflit d'état (commande déjà assignée, etc.) |
422 | validation_error | Échec de validation — voir champ errors |
429 | rate_limited | Quota dépassé — voir header Retry-After |
503 | service_unavailable | Service temporairement indisponible |
Rate limiting
Les limites sont appliquées par IP et par tenant. Les headers de réponse indiquent votre quota en temps réel.
| Endpoint | Limite | Fenêtre |
|---|---|---|
| Authentification driver | 10 requêtes | 1 minute |
| API publique commandes | 60 requêtes | 1 minute |
| Dispatch / Admin | 300 requêtes | 1 minute |
| GPS position update | 120 requêtes | 1 minute |
429 inclut le header Retry-After: 30 indiquant le délai d'attente en secondes.File d'attente dispatch
GET/dispatch/queue
Retourne toutes les commandes en attente d'assignation pour le tenant authentifié, triées par priorité.
| Paramètre | Type | Requis | Description |
|---|---|---|---|
status | string | Optionnel | Filtrer par statut : pending, assigned, in_transit |
limit | int | Optionnel | Nombre de résultats (défaut : 50, max : 200) |
offset | int | Optionnel | Pagination (défaut : 0) |
{
"total": 14,
"orders": [
{
"id": 1024,
"reference": "DF-2024-001024",
"status": "pending",
"recipient_name": "Dupont Marie",
"address": "Rue de la Loi 200, 1000 Bruxelles",
"created_at": "2024-03-15T09:22:41Z"
}
]
}
Flotte live
GET/dispatch/fleet
Positions GPS en temps réel de tous les chauffeurs actifs du tenant. Données fraîches à <30s.
{
"drivers": [
{
"id": 42,
"name": "Jean-Pierre Martin",
"status": "active",
"lat": 50.8503,
"lng": 4.3517,
"updated_at": "2024-03-15T10:14:33Z",
"stops_remaining": 7
}
]
}
Assigner une commande
POST/dispatch/assign
Assigne une commande à un chauffeur et l'ajoute à sa tournée active.
| Champ | Type | Requis | Description |
|---|---|---|---|
order_id | int | Requis | ID de la commande à assigner |
driver_id | int | Requis | ID du chauffeur cible |
position | int | Optionnel | Position dans la tournée (défaut : fin de liste) |
{
"ok": true,
"tour_position": 3,
"eta_minutes": 24,
"notification_sent": true
}
Optimisation de tournée
POST/dispatch/optimize-tour
Lance l'algorithme 2-opt (+ optionnel DeepSeek AI) pour recalculer l'ordre optimal des stops d'un chauffeur.
| Champ | Type | Requis | Description |
|---|---|---|---|
driver_id | int | Requis | ID du chauffeur |
use_ai | bool | Optionnel | Activer DeepSeek AI (défaut : false) |
{
"optimized": true,
"distance_saved_km": 12.4,
"time_saved_min": 18,
"stops": [1024, 1031, 1019, 1028]
}
KPIs temps réel
GET/dispatch/kpis
Indicateurs clés de performance du tenant pour la journée en cours.
{
"date": "2024-03-15",
"deliveries_total": 87,
"deliveries_completed": 64,
"deliveries_failed": 3,
"success_rate": 95.5,
"drivers_active": 5,
"avg_delivery_time_min": 22
}
Auth chauffeur (JWT)
POST/driver/auth
Authentifie un chauffeur et retourne un token JWT RS256 valide 8 heures.
| Champ | Type | Requis | Description |
|---|---|---|---|
email | string | Requis | Email du compte chauffeur |
password | string | Requis | Mot de passe |
Tournée chauffeur
GET/driver/tour
Retourne la tournée complète du chauffeur authentifié avec tous les stops, addresses et statuts.
{
"tour_id": 789,
"date": "2024-03-15",
"stops": [
{
"order_id": 1024,
"position": 1,
"address": "Rue de la Loi 200, 1000 Bruxelles",
"recipient": "Dupont Marie",
"phone": "+32 471 12 34 56",
"status": "pending",
"lat": 50.8466,
"lng": 4.3528
}
]
}
Mise à jour GPS
POST/driver/position
Envoie la position GPS du chauffeur. Appelé automatiquement toutes les 15 secondes par la PWA.
| Champ | Type | Requis | Description |
|---|---|---|---|
lat | float | Requis | Latitude WGS84 |
lng | float | Requis | Longitude WGS84 |
accuracy | float | Optionnel | Précision en mètres |
speed | float | Optionnel | Vitesse en km/h |
Confirmer un stop
POST/driver/stop-check
Marque un stop comme livré ou échoué. Déclenche les notifications client et les webhooks.
| Champ | Type | Requis | Description |
|---|---|---|---|
order_id | int | Requis | ID de la commande confirmée |
status | string | Requis | delivered ou failed |
note | string | Optionnel | Note du chauffeur (max 500 char) |
signature | string | Optionnel | Signature base64 PNG (max 50KB) |
photo | string | Optionnel | Photo de preuve base64 PNG (max 500KB) |
Créer une commande
POST/orders
Endpoint public (pas d'authentification requise) pour créer une commande via le formulaire client ou une intégration e-commerce.
| Champ | Type | Requis | Description |
|---|---|---|---|
tenant_id | int | Requis | ID de votre espace dropfleet |
recipient_name | string | Requis | Nom du destinataire |
address | string | Requis | Adresse de livraison complète |
phone | string | Optionnel | Téléphone de contact (format E.164) |
notes | string | Optionnel | Instructions spéciales (interphone, étage...) |
Statut d'une commande
GET/orders/{reference}
Retourne le statut et la position GPS du chauffeur pour le suivi temps réel côté client.
{
"reference": "DF-2024-001024",
"status": "in_transit",
"driver_name": "Jean-Pierre Martin",
"driver_lat": 50.8503,
"driver_lng": 4.3517,
"eta_minutes": 12,
"updated_at": "2024-03-15T10:14:33Z"
}
Admin — Flotte
GET/admin/fleet
Vue complète de la flotte : véhicules, chauffeurs actifs, capacités et SLA. Accès réservé au rôle admin.
Admin — Commandes
GET/admin/orders
Liste paginée de toutes les commandes du tenant avec filtres avancés (date, statut, chauffeur).
| Paramètre | Type | Requis | Description |
|---|---|---|---|
date_from | date | Optionnel | Date début (ISO 8601 : 2024-03-01) |
date_to | date | Optionnel | Date fin (ISO 8601) |
driver_id | int | Optionnel | Filtrer par chauffeur |
status | string | Optionnel | pending, assigned, delivered, failed |
export | string | Optionnel | csv ou pdf — retourne le fichier directement |
Webhooks
dropfleet peut notifier votre système en temps réel via des requêtes HTTP POST vers votre endpoint configuré. Configurez votre URL webhook depuis le back-office Admin.
X-Dropfleet-Signature: sha256=... pour vérification HMAC-SHA256. Répondez toujours en HTTP 200 dans les 5 secondes.| Événement | Description | Données principales |
|---|---|---|
order.created | Nouvelle commande créée | order_id, reference, address |
order.assigned | Commande assignée à un chauffeur | order_id, driver_id, eta_minutes |
order.delivered | Livraison confirmée | order_id, delivered_at, signature_url |
order.failed | Livraison échouée | order_id, reason, note |
driver.position | Mise à jour GPS chauffeur | driver_id, lat, lng, speed |
payment.completed | Paiement Mollie confirmé | payment_id, amount, plan |
{
"event": "order.delivered",
"timestamp": "2024-03-15T10:18:02Z",
"tenant_id": 7,
"data": {
"order_id": 1024,
"reference": "DF-2024-001024",
"delivered_at": "2024-03-15T10:17:55Z",
"driver_id": 42,
"signature_url": "https://dropfleet.eu/storage/sig/1024.png"
}
}