API Reference

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.

Base URL : https://dropfleet.eu/api/v1
Format : JSON
TLS 1.3 obligatoire
Obtenir une clé API

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.

Session PHP — Dispatch & Admin : authentification via cookie de session après login sur /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
curl -X POST https://dropfleet.eu/api/v1/driver/auth \
  -H "Content-Type: application/json" \
  -d '{"email":"driver@votresociete.be","password":"motdepasse"}'
Réponse
{
  "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expires_in": 28800,
  "driver": {
    "id": 42,
    "name": "Jean-Pierre Martin",
    "tenant_id": 7
  }
}

Utilisez ensuite ce token dans tous les appels PWA :

HTTP Header
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

Codes d'erreur

Toutes les réponses d'erreur suivent le format JSON standardisé :

JSON
{
  "error": "unauthorized",
  "message": "Token JWT invalide ou expiré.",
  "code": 401
}
HTTPCode erreurDescription
400bad_requestDonnées manquantes ou invalides
401unauthorizedToken JWT absent, invalide ou expiré
403forbiddenAccès refusé — tenant ou rôle insuffisant
404not_foundRessource introuvable
409conflictConflit d'état (commande déjà assignée, etc.)
422validation_errorÉchec de validation — voir champ errors
429rate_limitedQuota dépassé — voir header Retry-After
503service_unavailableService 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.

EndpointLimiteFenêtre
Authentification driver10 requêtes1 minute
API publique commandes60 requêtes1 minute
Dispatch / Admin300 requêtes1 minute
GPS position update120 requêtes1 minute
En cas de rate limit, la réponse HTTP 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ètreTypeRequisDescription
statusstringOptionnelFiltrer par statut : pending, assigned, in_transit
limitintOptionnelNombre de résultats (défaut : 50, max : 200)
offsetintOptionnelPagination (défaut : 0)
Réponse 200
{
  "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.

Réponse 200
{
  "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.

ChampTypeRequisDescription
order_idintRequisID de la commande à assigner
driver_idintRequisID du chauffeur cible
positionintOptionnelPosition dans la tournée (défaut : fin de liste)
Réponse 200
{
  "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.

ChampTypeRequisDescription
driver_idintRequisID du chauffeur
use_aiboolOptionnelActiver DeepSeek AI (défaut : false)
Réponse 200
{
  "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.

Réponse 200
{
  "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.

ChampTypeRequisDescription
emailstringRequisEmail du compte chauffeur
passwordstringRequisMot de passe

Tournée chauffeur

GET/driver/tour

Retourne la tournée complète du chauffeur authentifié avec tous les stops, addresses et statuts.

Réponse 200
{
  "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.

ChampTypeRequisDescription
latfloatRequisLatitude WGS84
lngfloatRequisLongitude WGS84
accuracyfloatOptionnelPrécision en mètres
speedfloatOptionnelVitesse 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.

ChampTypeRequisDescription
order_idintRequisID de la commande confirmée
statusstringRequisdelivered ou failed
notestringOptionnelNote du chauffeur (max 500 char)
signaturestringOptionnelSignature base64 PNG (max 50KB)
photostringOptionnelPhoto 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.

ChampTypeRequisDescription
tenant_idintRequisID de votre espace dropfleet
recipient_namestringRequisNom du destinataire
addressstringRequisAdresse de livraison complète
phonestringOptionnelTéléphone de contact (format E.164)
notesstringOptionnelInstructions 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.

Réponse 200
{
  "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ètreTypeRequisDescription
date_fromdateOptionnelDate début (ISO 8601 : 2024-03-01)
date_todateOptionnelDate fin (ISO 8601)
driver_idintOptionnelFiltrer par chauffeur
statusstringOptionnelpending, assigned, delivered, failed
exportstringOptionnelcsv 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.

Chaque requête webhook inclut le header X-Dropfleet-Signature: sha256=... pour vérification HMAC-SHA256. Répondez toujours en HTTP 200 dans les 5 secondes.
ÉvénementDescriptionDonnées principales
order.createdNouvelle commande crééeorder_id, reference, address
order.assignedCommande assignée à un chauffeurorder_id, driver_id, eta_minutes
order.deliveredLivraison confirméeorder_id, delivered_at, signature_url
order.failedLivraison échouéeorder_id, reason, note
driver.positionMise à jour GPS chauffeurdriver_id, lat, lng, speed
payment.completedPaiement Mollie confirmépayment_id, amount, plan
Payload webhook
{
  "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"
  }
}