API

API d'intégration Delivio

Créez des commandes depuis votre propre système, lisez leur statut, annulez-les.

Authentification

Créez la clé sur la page du client dans le panneau. Une clé appartient à un seul client ; le client concerné par la commande vient de la clé, pas du corps de la requête.

Authorization: Bearer dlv_live_xxxxxxxxxxxx_…

Créer une commande

L'adresse et le montant suffisent. Envoyer les coordonnées rend l'affectation du coursier et l'estimation d'arrivée plus précises.

curl -X POST https://delivio.talivio.com/api/v1/integration/orders \
  -H "Authorization: Bearer $DELIVIO_KEY" \
  -H "Idempotency-Key: siparis-1042" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "Moda Cad. 12/3",
    "customer_name": "Ada",
    "customer_phone": "+90 555 000 00 00",
    "total": 24000,
    "is_prepaid": true
  }'

Les montants sont des ENTIERS dans l'unité la plus petite (24000 = 240,00). Les nombres à virgule sont refusés.

Envoyez un Idempotency-Key : rejouer la même requête après une coupure ne créera pas une seconde commande.

{
  "data": { "id": 1042, "code": "S-1042", "status": 15, "…": "…" },
  "tracking_url": "https://delivio.talivio.com/t/…"
}

Lire le statut et annuler

curl https://delivio.talivio.com/api/v1/integration/orders/1042 -H "Authorization: Bearer $DELIVIO_KEY"

curl -X POST https://delivio.talivio.com/api/v1/integration/orders/1042/cancel \
  -H "Authorization: Bearer $DELIVIO_KEY" \
  -d 'reason=Müşteri vazgeçti'

Une fois qu'un coursier a pris la commande, l'annulation par API se ferme (409) : une requête de caisse ne peut pas faire demi-tour à un coursier déjà en route — annulez depuis le panneau.

Erreurs

HTTP code Signification
401 invalid_key La clé est invalide ou révoquée.
402 api_not_in_plan L'accès API n'est pas dans la formule.
404 La commande n'appartient pas au client de cette clé.
409 already_assigned Un coursier l'a prise ; annulez depuis le panneau.
422 La validation des champs a échoué, ou l'état de la commande ne le permet pas.
429 Limite de débit : 120 requêtes par minute.

Webhooks

Définissez votre point de terminaison sur la page du client dans le panneau. Nous envoyons un POST quand une commande est acceptée, récupérée, livrée et annulée.

POST /sizin-ucunuz
X-Delivio-Event: order.delivered
X-Delivio-Signature: t=1755680000,v1=9f2c…

{
  "event": "order.delivered",
  "sent_at": "2026-08-20T12:00:00+00:00",
  "order": { "id": 1042, "code": "S-1042", "status": 20, "…": "…" }
}

Chaque requête porte `X-Delivio-Signature: t=<unix>,v1=<hmac>`. Pour vérifier, calculez `hmac_sha256(votre_secret, "<t>." + corps_brut)` et comparez avec `v1` ; rejetez si `t` a plus de 5 minutes (rejeu).

// PHP
[$t, $v1] = sscanf($_SERVER['HTTP_X_DELIVIO_SIGNATURE'], 't=%d,v1=%s');
$expected = hash_hmac('sha256', $t.'.'.file_get_contents('php://input'), $secret);

if (! hash_equals($expected, $v1) || abs(time() - $t) > 300) {
    http_response_code(400);
    exit;
}

Si votre point de terminaison ne répond pas 2xx, nous réessayons après 10 s, 1 min, 5 min et 30 min. Après 20 échecs consécutifs, le point de terminaison est désactivé et le panneau en indique la raison.

L'ordre n'est PAS garanti : avec les nouvelles tentatives, « livrée » peut arriver avant « récupérée ». Fiez-vous au champ `status` du corps.