TopDepart

TopDepart · API publique v1

Documentation développeurs

Surface additive sous /api/v1. Les routes internes /api/* restent inchangées.

Authentification

Authorization: Bearer td_live_…

Scopes

companies:read, stations:read, trips:read, routes:read, bookings:read, bookings:write, tickets:verify, webhooks:manage

Endpoints

MéthodeCheminAuthDescription
GET/api/v1/companiesOptionnel
companies:read (si clé)
Catalogue compagnies actives
GET/api/v1/stationsOptionnel
stations:read
Catalogue gares (filtres country, city, company)
GET/api/v1/trips/search?from=&to=&date=Optionnel
trips:read
Recherche trajets (from/to requis)
GET/api/v1/routes/:idOptionnel
routes:read
Détail ligne + arrêts
POST/api/v1/bookingsRequis
bookings:write
Créer un hold (BookingGroup PENDING)
GET/api/v1/bookings/:idRequis
bookings:read
Détail groupe ou billet
GET/api/v1/tickets/:id/verifyRequis
tickets:verify
Statut billet (lecture seule)

Exemple — recherche trajets

curl -s "https://VOTRE_HOST/api/v1/trips/search?from=Abidjan&to=Bouaké&date=2026-07-20" \
  -H "Authorization: Bearer td_live_…"

Exemple — hold réservation

curl -s -X POST "https://VOTRE_HOST/api/v1/bookings" \
  -H "Authorization: Bearer td_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "tripId": "…",
    "passengers": [{ "name": "Awa Kouassi", "phone": "+2250700000000" }]
  }'

Réponse : groupe PENDING + places verrouillées. Paiement via le flux existant /api/payments/initiate. Correspondances multi-legs : /api/booking-groups.

Webhooks sortants

Événements : payment.confirmed, booking.confirmed, ticket.scanned, incident.created.

X-TopDepart-Event: payment.confirmed
X-TopDepart-Timestamp: 1710000000
X-TopDepart-Signature: sha256=<hmac_hex>
X-TopDepart-Delivery: <deliveryId>

# Vérification : HMAC-SHA256(secret, timestamp + "." + rawBody)

Enregistrement UI dashboard · retry automatique via POST /api/cron/process-webhooks (CRON_SECRET).

ChatBot WhatsApp

Assistant TopDépart (réservation, tarifs, suivi, QR, colis, CEDEAO) branché sur la base réelle. Doc détaillée : apps/web/docs/whatsapp-bot.md.

# Simulation locale (sans Meta)
curl -s -X POST "http://localhost:3000/api/whatsapp/demo" \
  -H "Content-Type: application/json" \
  -d '{"from":"2250700000000","text":"menu"}'

# Webhook Meta
GET  /api/whatsapp/webhook?hub.mode=subscribe&hub.verify_token=…&hub.challenge=…
POST /api/whatsapp/webhook   # Meta Cloud ou Twilio form

Rate limiting

Par clé API (rateLimit req/min) ou par IP (anonyme ~30/min). Réponse 429 + Retry-After.

Développeurs — API publique TopDepart