Intégrez OXO en quelques minutes
API REST publique pour créer, suivre et gérer vos colis depuis votre boutique ou ERP. Compatible YouCan, Shopify, WooCommerce, et tout système qui parle HTTP.
https://oxolivraison.com/api/v1Votre premier colis en 60 secondes
- 1Connectez-vous et générez une clé API depuis /integrations.
- 2Récupérez la liste des villes (vous aurez besoin d'un
ville_idou du nom). - 3Envoyez un POST avec votre clé API et les infos du colis.
curl -X POST https://oxolivraison.com/api/v1/colis \
-H "Authorization: Bearer oxo_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"destinataire": "Nadia Benali",
"telephone": "+212661123456",
"adresse": "12 Avenue Hassan II",
"ville": "Casablanca",
"produit": "Robe soirée",
"prix_cod": 350
}'{
"data": {
"id": "8f3e2d1b-...",
"code_barre": "OXO-A1B2-C3D4",
"statut": "cree",
"created_at": "2026-05-19T20:00:00.000Z"
}
}Bearer token
Toutes les requêtes nécessitent l'en-tête Authorization: Bearer oxo_live_…. La clé n'est affichée qu'une seule fois lors de sa création — stockez-la dans un coffre-fort secret (variable d'environnement, secret manager).
Authorization: Bearer oxo_live_a1b2c3d4e5f6.../v1/meVérifier la clé API
Retourne l'identité du marchand associé à votre clé. Pratique pour valider l'auth pendant l'intégration.
curl https://oxolivraison.com/api/v1/me -H "Authorization: Bearer oxo_live_..."{
"data": {
"id": "8320dc28-...",
"email": "vous@boutique.ma",
"nom": "Votre Boutique",
"role": "merchant",
"api_key_id": "4a76045b-..."
}
}/v1/villesLister les villes desservies
Retourne toutes les villes avec leurs IDs et tarifs. Utilisez le id ou le nom dans POST /colis.
{
"data": [
{ "id": "bbb...", "nom": "Casablanca", "tarif_standard": "25.00", "tarif_retour": "15.00" },
{ "id": "bbb...", "nom": "Rabat", "tarif_standard": "30.00", "tarif_retour": "18.00" }
]
}/v1/colisCréer un colis
Crée un nouveau colis associé à votre compte marchand. Le tarif est calculé automatiquement depuis la ville de livraison.
Corps de la requête (JSON)
destinatairetelephone+2126XXXXXXXX ou 06XXXXXXXX.adresseproduitville_idGET /villes).villeville_id). Ex: "Casablanca".prix_cod0 ou omis si pas de paiement à la livraison.taillestandard, moyen, lourd. Défaut : standard.poidsnotescode_barreRéponse 201 Created
{
"data": {
"id": "8f3e2d1b-7c4a-4f15-b3d8-1e2a9c6f0b75",
"code_barre": "OXO-A1B2-C3D4",
"statut": "cree",
"created_at": "2026-05-19T20:00:00.000Z"
}
}/v1/colisLister vos colis
Liste paginée de vos colis, triés par date de création décroissante.
Paramètres de requête
limitoffsetstatutcree, ramasse, en_hub, en_livraison, livre, retour, refuse.curl "https://oxolivraison.com/api/v1/colis?statut=en_livraison&limit=20" \
-H "Authorization: Bearer oxo_live_..."/v1/colis/{code}Récupérer un colis par code-barres
Retourne les détails complets d'un colis. Seul le propriétaire (marchand) peut consulter ses colis.
curl https://oxolivraison.com/api/v1/colis/OXO-A1B2-C3D4 \
-H "Authorization: Bearer oxo_live_..."Notifications en temps réel
Configurez un endpoint webhook depuis /integrations. OXO enverra un POST JSON signé HMAC-SHA256 à chaque changement de statut d'un colis.
En-têtes envoyés
X-OXO-Eventcolis.status_changed.X-OXO-Signaturesha256=<hex>.X-OXO-TimestampPayload colis.status_changed
{
"id": "c9c88263-f24d-4a4d-ad7f-3808e39d3397",
"event": "colis.status_changed",
"created_at": "2026-05-19T20:00:00.000Z",
"data": {
"colis": {
"code_barre": "OXO-A1B2-C3D4",
"destinataire": "Nadia Benali",
"telephone": "+212661123456",
"ville": "Casablanca",
"statut": "en_livraison",
"prix_cod": 350
},
"event_statut": "en_livraison",
"actor_role": "livreur",
"note": "Tournée du jour — Casablanca"
}
}Vérifier la signature (Node.js)
import crypto from 'node:crypto';
app.post('/webhook', (req, res) => {
const sig = req.headers['x-oxo-signature']; // "sha256=..."
const expected = 'sha256=' + crypto
.createHmac('sha256', process.env.OXO_WEBHOOK_SECRET)
.update(req.rawBody)
.digest('hex');
if (sig !== expected) return res.status(401).send('bad sig');
// traiter req.body
res.sendStatus(200);
});Codes de réponse
| Code | Signification |
|---|---|
| 200 / 201 | Succès |
| 400 | Requête malformée |
| 401 | Clé API manquante, invalide ou révoquée |
| 403 | Pas la permission (ex. clé d'un compte non-marchand) |
| 404 | Ressource introuvable |
| 422 | Validation échouée (champs invalides) |
| 429 | Trop de requêtes (rate limit) |
| 500 | Erreur serveur — contactez le support |
Format d'erreur
{ "error": "Description lisible du problème" }