API

API de integración de Delivio

Crea pedidos desde tu propio sistema, consulta su estado y cancélalos.

Autenticación

Crea la clave en la página del cliente dentro del panel. Cada clave pertenece a un solo cliente; a qué cliente corresponde el pedido lo determina la clave, no el cuerpo de la petición.

Authorization: Bearer dlv_live_xxxxxxxxxxxx_…

Crear un pedido

Con la dirección y el importe basta. Enviar las coordenadas hace más precisos la asignación del repartidor y el tiempo estimado.

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
  }'

Los importes son ENTEROS en la unidad menor (24000 = 240,00). Los decimales se rechazan.

Envía una Idempotency-Key: repetir la misma petición tras un corte de conexión no creará un segundo pedido.

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

Consultar el estado y cancelar

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'

En cuanto un repartidor coge el pedido, la cancelación por API se cierra (409): una petición del TPV no puede hacer volver a un repartidor que ya va de camino; cancela desde el panel.

Errores

HTTP code Significado
401 invalid_key La clave no es válida o está revocada.
402 api_not_in_plan El acceso a la API no está en el plan.
404 El pedido no pertenece al cliente de esta clave.
409 already_assigned Un repartidor lo ha cogido; cancela desde el panel.
422 La validación de los campos ha fallado o el estado del pedido no lo permite.
429 Límite de peticiones: 120 por minuto.

Webhooks

Configura tu endpoint en la página del cliente dentro del panel. Enviamos un POST cuando un pedido se acepta, se recoge, se entrega y se cancela.

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, "…": "…" }
}

Cada petición lleva `X-Delivio-Signature: t=<unix>,v1=<hmac>`. Para verificarla, calcula `hmac_sha256(tu_secreto, "<t>." + cuerpo_bruto)` y compáralo con `v1`; recházala si `t` tiene más de 5 minutos (repetición).

// 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 tu endpoint no responde 2xx, reintentamos a los 10 s, 1 min, 5 min y 30 min. Tras 20 fallos seguidos el endpoint se desactiva y el panel indica el motivo.

El orden NO está garantizado: con los reintentos, «entregado» puede llegar antes que «recogido». Fíate del campo `status` del cuerpo.