Intégration
Retry-After, Idempotency-Key, curseurs et codes 4xx — le comportement stable à coder une fois.
Contrat OpenAPIÉmettre une clé d’APICompte Solo gratuit
Obtenir ma clé API (inscription gratuite)
Document complet, sans authentification, à donner à votre générateur de client.
Quatre gestes restent hors d’une clé, par choix. Émettre ou révoquer une clé. Inviter un membre. Changer d’offre ou toucher à la facturation. Exporter l’organisation (membres = données personnelles).
Aucun secret ne ressort en lecture : mot de passe HTTP, URL de webhook, AST navigateur. À la place, une empreinte qui change dès que la valeur change.
Par clé et par minute : 300 lectures et 60 écritures, comptées séparément. Un outil qui relit son parc ne doit pas épuiser le budget d’écriture.
Au-delà → 429 avec Retry-After en secondes. Honorez-le : réessayer à l’aveugle entretient la boucle.
# Pseudo-client
# if status == 429:
# sleep(int(headers["Retry-After"] or "1"))
# retry()Toute écriture accepte Idempotency-Key. La première réponse est mémorisée 24 h et rejouée si la même clé revient avec le même corps. Corps différent → 409. Les échecs ne sont pas mémorisés.
Choisissez une clé stable et humaine : deploy-2026-09-24-checkout, tf-pathly-scenario-home. Évitez un UUID aléatoire à chaque retry manuel.
curl -X POST https://api.pathlyhq.com/v1/scenarios \
-H "Authorization: Bearer $PATHLY_API_TOKEN" \
-H "Idempotency-Key: deploy-2026-09-24-checkout" \
-H "Content-Type: application/json" \
-d '{"type":"http","name":"Checkout","url":"https://www.example.com/cart","intervalSec":300}'Collections : limit (défaut 100, max 500) et cursor. Réponse : nextCursor (null sur la dernière page). Le curseur est opaque — le renvoyer tel quel.
curl
curl "https://api.pathlyhq.com/v1/runs?limit=100" \
-H "Authorization: Bearer $PATHLY_API_TOKEN"bash — parcourir toutes les pages
cursor=
while :; do
url="https://api.pathlyhq.com/v1/runs?limit=100"
[ -n "$cursor" ] && url="$url&cursor=$cursor"
page=$(curl -sS "$url" -H "Authorization: Bearer $PATHLY_API_TOKEN")
echo "$page" | jq -c '.items[]?'
cursor=$(echo "$page" | jq -r '.nextCursor // empty')
[ -z "$cursor" ] && break
doneToute erreur a la forme { "error": "…" } avec un message affichable. Un id d’une autre organisation rend 404, jamais 403 : « interdit » confirmerait son existence.
{
"error": "Missing scope scenarios:write"
}| Code | Signification | Geste attendu |
|---|---|---|
400 | Corps invalide, ou règle métier refusée | Corriger la requête, `details` nomme les champs fautifs |
401 | Clé absente, inconnue, révoquée ou expirée | Renouveler la clé |
403 | Portée insuffisante, ou fonction absente de l’offre | Élargir la clé, ou l’offre |
404 | Ressource inexistante dans cette organisation | La traiter comme supprimée |
409 | Clé d’idempotence réutilisée avec un autre corps | Changer de clé d’idempotence |
429 | Débit dépassé | Attendre le nombre de secondes indiqué par `Retry-After` |