tibidatibida Développeurs

REST pour agir,
webhooks pour réagir.

L'API publique tibida v1 : boutiques, catalogue, commandes, réservations et fidélité. Clés à portées granulaires, prix calculés côté serveur, webhooks signés.

Commencer Collection Postman
Démarrage rapide

En ligne en trois étapes

Les clés API sont délivrées par le commerçant, dans son Admin → Clés API. Chaque clé a ses portées et son périmètre de boutiques.

1

Obtenez une clé

Le commerçant crée une clé dans Admin → Clés API et vous la transmet. Elle commence par tib_live_.

2

Authentifiez-vous

Envoyez la clé dans l'en-tête Authorization: Bearer (ou X-API-Key).

3

Appelez l'API

Base : https://app.tibida.com/api/v1. Les prix sont toujours calculés côté serveur.

Votre premier appel

curl -s https://app.tibida.com/api/v1/outlets \
  -H "Authorization: Bearer VOTRE_CLE"

Créer une commande (idempotente)

curl -s -X POST https://app.tibida.com/api/v1/orders \
  -H "Authorization: Bearer VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"outlet_id":1,"customer_name":"Awa Diallo",
       "customer_phone":"+221771234567","type":"pickup",
       "items":[{"product_id":54,"qty":2}]}'
Référence

Endpoints

Généré depuis la spécification openapi.json (OpenAPI 3.1). Toutes les erreurs suivent l'enveloppe {"error": "<code>", "message": "…"}.

Chargement de la référence…
Temps réel

Webhooks

Recevez order.created, order.cancelled, reservation.created et reservation.cancelled. Chaque livraison est signée et peut être vérifiée.

En-têtes de livraison

En-têteContenu
Tibida-Eventnom de l'événement
Tibida-Timestampsecondes Unix
Tibida-SignatureHMAC-SHA256 hexadécimal
Tibida-Deliveryidentifiant unique de livraison

Règles de sécurité

Signature = HMAC_SHA256(secret, timestamp + "." + corps_brut). Rejetez tout horodatage vieux de plus de 5 minutes (anti-rejeu). 3 tentatives de livraison (0 s, 5 s, 30 s), délai d'attente 10 s.

Vérifier une signature

const crypto = require('crypto');

function verifyWebhook(secret, timestamp, rawBody, signature) {
  // Anti-rejeu : 5 minutes max
  if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(timestamp + '.' + rawBody, 'utf8')
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected, 'utf8'),
    Buffer.from(signature, 'utf8')
  );
}
import hmac, hashlib, time

def verify_webhook(secret: str, timestamp: str, raw_body: bytes, signature: str) -> bool:
    # Anti-rejeu : 5 minutes max
    if abs(time.time() - int(timestamp)) > 300:
        return False
    expected = hmac.new(
        secret.encode(), f'{timestamp}.'.encode() + raw_body, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)
function verifyWebhook(string $secret, string $timestamp, string $rawBody, string $signature): bool {
    // Anti-rejeu : 5 minutes max
    if (abs(time() - (int) $timestamp) > 300) return false;
    $expected = hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);
    return hash_equals($expected, $signature);
}
Fiabilité

Limites, idempotence, erreurs

Idempotent

Clé d'idempotence

Envoyez Idempotency-Key sur les POST de création (commandes, réservations, points). Rejouer la même clé avec le même corps renvoie la réponse d'origine, sans créer de doublon. Un corps différent → 422.

Par clé

Limite de débit

Chaque clé a sa propre limite (requêtes/minute, configurable par le commerçant). Dépassement → 429. Les clés de test sont plus strictement limitées.

Codes d'erreur courants

HTTPCodeSens
400parametres_invalideschamp manquant ou invalide
401cle_api_manquante · cle_api_invalide · cle_api_revoquee · cle_api_expireeauthentification
403portee_insuffisante · boutique_hors_perimetreautorisation (fail-closed)
404commande_introuvable · produit_introuvable …ressource inexistante ou hors périmètre
409commande_deja_annuleeconflit d'état
422cle_idempotence_reutiliseeclé d'idempotence réutilisée avec un autre corps
429limite_debit_depasseetrop de requêtes
Automatisation

Connectez vos outils

L'API v1 est du REST standard : elle fonctionne avec n'importe quel client HTTP. Utilisez la collection Postman ci-dessus ou appelez-la depuis Activepieces, n8n ou Make avec un nœud HTTP générique.

GET https://app.tibida.com/api/v1/products?outlet_id=1&limit=50
Authorization: Bearer VOTRE_CLE