Compte

Référence API

Routes protégées par Sanctum. Utilisez l'ID numérique de la livraison dans les chemins ({delivery}).

Base URL

http://delyo.welink-ci.com/api/v1

Vue d'ensemble

Accès rapide à chaque endpoint.

Méthode Chemin Statut
GET /admin/health Live
POST /deliveries/quote Live
GET /deliveries Live
GET /deliveries/{delivery} Live
POST /deliveries Live
GET /deliveries/{delivery}/driver Live
GET /deliveries/{delivery}/track Live
GET /webhook Live
PUT /webhook Live

Détail des endpoints

Paramètres, exemples et réponses.

GET /api/v1/admin/health
Live

Santé plateforme

Vérifie que l'API répond. Réservé aux super administrateurs.

super-admin

Exemple

GET /api/v1/admin/health
curl -X GET "http://delyo.welink-ci.com/api/v1/admin/health" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/admin/health", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/admin/health');

Réponse

{
    "status": "ok"
}
POST /api/v1/deliveries/quote
Live

Estimer le tarif

Calcule le prix avant création. Mêmes champs géographiques que la création, sans destinataire.

delivery.create vendor

Corps de la requête

Champ Description Requis
pickup_address Adresse de retrait Requis
pickup_lat Latitude de retrait Requis
pickup_lng Longitude de retrait Requis
dropoff_address Adresse de livraison Requis
dropoff_lat Latitude de livraison Requis
dropoff_lng Longitude de livraison Requis
type Mode : express (immédiat) ou scheduled (planifié) — voir doc Modes de livraison Requis

Exemple

POST /api/v1/deliveries/quote
curl -X POST "http://delyo.welink-ci.com/api/v1/deliveries/quote" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"type":"express"}'
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries/quote", {
  method: "POST",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
    Content-Type: "application/json",
  },
  body: JSON.stringify({"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"type":"express"}),
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->post('http://delyo.welink-ci.com/api/v1/deliveries/quote', json_decode('{"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"type":"express"}', true));

Réponse

{
    "distance_km": 5.2,
    "base": 1000,
    "distance": 780,
    "surcharge": 500,
    "total": 2280,
    "formatted": {
        "total": "2 280 XOF"
    }
}
GET /api/v1/deliveries
Live

Lister les livraisons

Liste paginée des livraisons accessibles au compte. Vendeur : uniquement ses courses. Livreur : courses où il est assigné.

delivery.view vendor (ses courses), driver (les siennes), dispatcher, admin

Corps de la requête

Champ Description Requis
per_page Nombre par page (1–50, défaut 15) Optionnel
page Numéro de page Optionnel

Exemple

GET /api/v1/deliveries
curl -X GET "http://delyo.welink-ci.com/api/v1/deliveries" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/deliveries');

Réponse

{
    "data": [
        {
            "id": 1,
            "reference": "DEL-A1B2C3D4",
            "status": "assigned",
            "type": "express"
        }
    ],
    "links": [
        "first",
        "last",
        "prev",
        "next"
    ],
    "meta": {
        "current_page": 1,
        "per_page": 15,
        "total": 1
    }
}
GET /api/v1/deliveries/{delivery}
Live

Détail d'une livraison

Retourne le détail complet : adresses, destinataire, tarification, statut, vendeur et livreur. {delivery} = identifiant numérique.

delivery.view vendor (sa livraison), driver (assigné), dispatcher, admin

Exemple

GET /api/v1/deliveries/{delivery}
curl -X GET "http://delyo.welink-ci.com/api/v1/deliveries/{delivery}" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries/{delivery}", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/deliveries/{delivery}');

Réponse

{
    "data": {
        "id": 1,
        "reference": "DEL-A1B2C3D4",
        "status": "assigned",
        "type": "express",
        "pricing": {
            "total": 2280
        }
    }
}
POST /api/v1/deliveries
Live

Créer une livraison

Crée la course. Express : enchaîner avec GET /deliveries/{id}/driver pour l'attribution automatique. Planifié : configurer le webhook pour les notifications.

delivery.create vendor

Corps de la requête

Champ Description Requis
pickup_address Adresse de retrait Requis
pickup_lat Latitude de retrait Requis
pickup_lng Longitude de retrait Requis
dropoff_address Adresse de livraison Requis
dropoff_lat Latitude de livraison Requis
dropoff_lng Longitude de livraison Requis
recipient_phone Téléphone du destinataire Requis
recipient_name Nom du destinataire Optionnel
package_description Description du colis Optionnel
type Mode : express ou scheduled Requis
scheduled_at Date/heure de prise en charge souhaitée (ISO 8601, futur) — requis en pratique pour scheduled Optionnel

Exemple

POST /api/v1/deliveries
curl -X POST "http://delyo.welink-ci.com/api/v1/deliveries" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"recipient_phone":"+2250700000000","type":"express"}'
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries", {
  method: "POST",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
    Content-Type: "application/json",
  },
  body: JSON.stringify({"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"recipient_phone":"+2250700000000","type":"express"}),
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->post('http://delyo.welink-ci.com/api/v1/deliveries', json_decode('{"pickup_address":"Cocody, Abidjan","pickup_lat":5.36,"pickup_lng":-3.99,"dropoff_address":"Marcory, Abidjan","dropoff_lat":5.29,"dropoff_lng":-3.98,"recipient_phone":"+2250700000000","type":"express"}', true));

Réponse

{
    "data": {
        "id": 1,
        "reference": "DEL-A1B2C3D4",
        "status": "searching_driver",
        "type": "express"
    }
}
GET /api/v1/deliveries/{delivery}/driver
Live

Livreur (express)

Pour les livraisons express uniquement : interroge l'attribution automatique (polling). Retourne outcome, driver, zone. Planifié : outcome not_applicable — utilisez les webhooks.

delivery.view vendor (sa livraison)

Exemple

GET /api/v1/deliveries/{delivery}/driver
curl -X GET "http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/driver" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/driver", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/driver');

Réponse

{
    "data": {
        "id": 1,
        "type": "express",
        "status": "assigned"
    },
    "driver_search": {
        "outcome": "assigned",
        "message": "Un livreur a été trouvé dans votre zone.",
        "driver": {
            "id": 5,
            "name": "Kouadio Yao"
        },
        "pickup_zone": "plateau"
    }
}
GET /api/v1/deliveries/{delivery}/track
Live

Suivre une livraison

Suivi carte et timeline une fois le livreur assigné (tracking null sinon).

delivery.track | delivery.view vendor, driver, dispatcher, admin

Exemple

GET /api/v1/deliveries/{delivery}/track
curl -X GET "http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/track" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/track", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/deliveries/{delivery}/track');

Réponse

{
    "data": {
        "id": 1,
        "status": "assigned"
    },
    "tracking": {
        "phase": "heading_to_pickup",
        "driver": {
            "id": 5,
            "name": "Kouadio Yao"
        }
    },
    "status": "assigned",
    "status_label": "Assignée"
}
GET /api/v1/webhook
Live

Configuration webhook

Lit l'URL webhook enregistrée pour les livraisons planifiées.

delivery.create vendor

Exemple

GET /api/v1/webhook
curl -X GET "http://delyo.welink-ci.com/api/v1/webhook" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json"
const res = await fetch("http://delyo.welink-ci.com/api/v1/webhook", {
  method: "GET",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
  },
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->get('http://delyo.welink-ci.com/api/v1/webhook');

Réponse

{
    "data": {
        "url": "https:\/\/erp.example.com\/hooks\/delivery-os",
        "is_active": true,
        "has_secret": true
    },
    "events": [
        "delivery.scheduled.created",
        "delivery.driver.assigned",
        "delivery.status.updated"
    ]
}
PUT /api/v1/webhook
Live

Configurer le webhook

Enregistre l'URL appelée en POST pour chaque événement de livraison planifiée (signature HMAC optionnelle).

delivery.create vendor

Corps de la requête

Champ Description Requis
url URL HTTPS de réception Requis
secret Secret pour en-tête X-DeliveryOS-Signature Optionnel
is_active Activer ou suspendre les envois Optionnel

Exemple

PUT /api/v1/webhook
curl -X PUT "http://delyo.welink-ci.com/api/v1/webhook" \
  -H "Authorization: Bearer <votre_token>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://erp.example.com/hooks/delivery-os","secret":"votre-secret","is_active":true}'
const res = await fetch("http://delyo.welink-ci.com/api/v1/webhook", {
  method: "PUT",
  headers: {
    Authorization: "Bearer <votre_token>",
    Accept: "application/json",
    Content-Type: "application/json",
  },
  body: JSON.stringify({"url":"https://erp.example.com/hooks/delivery-os","secret":"votre-secret","is_active":true}),
});
$response = Http::withToken('<votre_token>')
    ->acceptJson()
    ->post('http://delyo.welink-ci.com/api/v1/webhook', json_decode('{"url":"https://erp.example.com/hooks/delivery-os","secret":"votre-secret","is_active":true}', true));

Réponse

{
    "data": {
        "url": "https:\/\/erp.example.com\/hooks\/delivery-os",
        "is_active": true
    },
    "events": [
        "delivery.scheduled.created",
        "delivery.driver.assigned",
        "delivery.status.updated"
    ]
}

Suite