Getting Started
Bienvenue dans l'API TrackFlow. Notre API REST vous permet de suivre des expéditions, recevoir des événements en temps réel via webhooks et intégrer le suivi dans n'importe quelle application. Toutes les requêtes se font sur HTTPS et toutes les réponses sont au format JSON.
https://api.trackflow.io/v1. Toutes les requêtes doivent être authentifiées avec une clé API.1. Récupérez votre clé API
Créez un compte, puis générez une clé API depuis votre tableau de bord développeur.
2. Faites votre première requête
Cette requête récupère le statut d'une expédition.
1curl https://api.trackflow.io/v1/shipments/shp_8f2k1 \2 -H "Authorization: Bearer sk_live_xxxxx"Authentication
TrackFlow utilise des clés API pour authentifier les requêtes. Passez votre clé secrète dans l'en-tête Authorization en utilisant le schéma Bearer.
1Authorization: Bearer sk_live_51H8xY...401 Unauthorized.Environnements
Les clés préfixées sk_test_ ciblent l'environnement de test ;sk_live_ cible la production.
API Keys
Gérez vos clés depuis le tableau de bord. Chaque clé peut être révoquée à tout moment et des clés restreintes peuvent limiter les permissions par ressource.
sk_live_…secretClé secrète de production. À garder côté serveur uniquement.
sk_test_…secretClé secrète de test. N'affecte aucune donnée réelle.
pk_live_…publishableClé publiable, utilisable côté client pour les ressources publiques.
Rotation d'une clé
1curl -X POST https://api.trackflow.io/v1/api-keys/roll \2 -H "Authorization: Bearer sk_live_xxxxx"REST API Overview
L'API TrackFlow suit les conventions REST : URLs orientées ressources, verbes HTTP standard et codes de statut explicites. Les corps de requête et de réponse sont en JSON.
Verbes HTTP
GETlectureRécupère une ressource ou une liste de ressources.
POSTcréationCrée une nouvelle ressource (expédition, webhook…).
PUTmise à jourRemplace entièrement une ressource existante.
DELETEsuppressionSupprime une ressource.
Ressources principales
/v1/shipments/v1/shipments/v1/webhooksShipment Tracking
Récupérez le statut et l'historique complet d'une expédition par son identifiant.
/v1/shipments/{id}Paramètres de chemin
idstringRequisIdentifiant unique de l'expédition (ex. shp_8f2k1).
Exemple de requête
1curl https://api.trackflow.io/v1/shipments/shp_8f2k1 \2 -H "Authorization: Bearer sk_live_xxxxx"Exemple de réponse
1{2 "id": "shp_8f2k1",3 "carrier": "ups",4 "tracking_number": "1Z999AA10123456784",5 "status": "in_transit",6 "estimated_delivery": "2026-06-25T18:00:00Z",7 "events": [8 {9 "status": "picked_up",10 "location": "Paris, FR",11 "timestamp": "2026-06-22T09:14:00Z"12 },13 {14 "status": "in_transit",15 "location": "Lyon, FR",16 "timestamp": "2026-06-22T16:42:00Z"17 }18 ]19}Webhook Events
Configurez une URL de webhook pour recevoir des événements en temps réel lorsque le statut d'une expédition change. Chaque événement est envoyé en POST avec une signature à vérifier.
Événements disponibles
shipment.createdeventUne expédition a été créée.
shipment.in_transiteventL'expédition est en cours d'acheminement.
shipment.deliveredeventL'expédition a été livrée.
shipment.exceptioneventUn incident de livraison est survenu.
Payload d'un événement
1{2 "id": "evt_2c9a",3 "type": "shipment.delivered",4 "created": 1779884400,5 "data": {6 "object": {7 "id": "shp_8f2k1",8 "status": "delivered",9 "delivered_at": "2026-06-25T15:32:00Z"10 }11 }12}TrackFlow-Signature avec votre secret de webhook pour confirmer l'authenticité de l'événement.Pagination
Les endpoints de liste utilisent une pagination par curseur. Utilisezlimit et starting_after pour parcourir les résultats.
limitintegerNombre d'éléments par page (1–100, défaut 25).
starting_afterstringID de l'objet après lequel commencer la page suivante.
1curl "https://api.trackflow.io/v1/shipments?limit=25&starting_after=shp_8f2k1" \2 -H "Authorization: Bearer sk_live_xxxxx"1{2 "object": "list",3 "has_more": true,4 "data": [ { "id": "shp_9a3b" }, { "id": "shp_9a3c" } ]5}Rate Limits
L'API limite les requêtes à 100 req/s en production et25 req/s en test. Les en-têtes de réponse indiquent votre quota restant.
X-RateLimit-LimitheaderNombre maximum de requêtes par fenêtre.
X-RateLimit-RemainingheaderRequêtes restantes dans la fenêtre actuelle.
X-RateLimit-ResetheaderTimestamp Unix de réinitialisation du quota.
429 Too Many Requests. Implémentez un backoff exponentiel.Error Codes
TrackFlow utilise les codes de statut HTTP conventionnels pour indiquer le succès ou l'échec.
200OKLa requête a réussi.
400Bad RequestRequête invalide, souvent un paramètre manquant.
401UnauthorizedClé API manquante ou invalide.
403ForbiddenLa clé n'a pas la permission requise.
404Not FoundLa ressource demandée n'existe pas.
429Too Many RequestsLimite de débit dépassée.
500Server ErrorUne erreur est survenue côté TrackFlow.
Format d'erreur
1{2 "error": {3 "type": "invalid_request_error",4 "code": "resource_missing",5 "message": "No such shipment: shp_unknown"6 }7}Request Examples
Création d'une nouvelle expédition à suivre.
/v1/shipments1curl -X POST https://api.trackflow.io/v1/shipments \2 -H "Authorization: Bearer sk_live_xxxxx" \3 -H "Content-Type: application/json" \4 -d '{5 "carrier": "ups",6 "tracking_number": "1Z999AA10123456784"7 }'Response Examples
Réponse renvoyée après la création réussie d'une expédition.
1{2 "id": "shp_9a3b",3 "object": "shipment",4 "carrier": "ups",5 "tracking_number": "1Z999AA10123456784",6 "status": "created",7 "created": 1779800000,8 "estimated_delivery": null9}SDK Examples
TrackFlow propose des SDK officiels pour les langages les plus courants. Installez le SDK correspondant à votre stack, puis initialisez-le avec votre clé API.
Installation
1npm install @trackflow/sdk1pip install trackflow1composer require trackflow/trackflow-phpTRACKFLOW_API_KEY si aucune n'est fournie.JavaScript
Utilisation du SDK dans le navigateur ou avec un bundler moderne (ESM).
1import { TrackFlow } from '@trackflow/sdk';23const client = new TrackFlow('sk_live_xxxxx');45async function track(id) {6 const shipment = await client.shipments.retrieve(id);7 console.log(shipment.status, shipment.estimated_delivery);8}910track('shp_8f2k1');Node.js
Exemple côté serveur avec gestion d'erreur et CommonJS.
1const { TrackFlow } = require('@trackflow/sdk');23const client = new TrackFlow(process.env.TRACKFLOW_API_KEY);45async function main() {6 try {7 const list = await client.shipments.list({ limit: 10 });8 for (const shipment of list.data) {9 console.log(shipment.id, '->', shipment.status);10 }11 } catch (err) {12 console.error('TrackFlow error:', err.message);13 }14}1516main();Python
Le SDK Python expose une interface synchrone simple.
1import trackflow23client = trackflow.Client(api_key="sk_live_xxxxx")45shipment = client.shipments.retrieve("shp_8f2k1")6print(shipment.status, shipment.estimated_delivery)78# Lister avec pagination9page = client.shipments.list(limit=25)10for s in page.data:11 print(s.id, s.status)PHP
Intégration avec l'autoloader Composer.
1<?php2require 'vendor/autoload.php';34use TrackFlow\Client;56$client = new Client('sk_live_xxxxx');78$shipment = $client->shipments->retrieve('shp_8f2k1');910echo $shipment->status . PHP_EOL;11echo $shipment->estimated_delivery . PHP_EOL;Go
Le client Go renvoie des erreurs idiomatiques à vérifier explicitement.
1package main23import (4 "fmt"5 "log"67 "github.com/trackflow/trackflow-go"8)910func main() {11 client := trackflow.NewClient("sk_live_xxxxx")1213 shipment, err := client.Shipments.Retrieve("shp_8f2k1")14 if err != nil {15 log.Fatal(err)16 }1718 fmt.Println(shipment.Status, shipment.EstimatedDelivery)19}cURL
Exemples bruts en ligne de commande, utiles pour le débogage rapide.
Récupérer une expédition
1curl https://api.trackflow.io/v1/shipments/shp_8f2k1 \2 -H "Authorization: Bearer sk_live_xxxxx"Créer un webhook
1curl -X POST https://api.trackflow.io/v1/webhooks \2 -H "Authorization: Bearer sk_live_xxxxx" \3 -H "Content-Type: application/json" \4 -d '{5 "url": "https://example.com/hooks/trackflow",6 "events": ["shipment.delivered", "shipment.exception"]7 }'