Erreurs
L’enveloppe d’erreur unique de l’API et tous les codes d’erreur, avec leur statut HTTP et la bonne façon de les traiter.
Mis à jour le 13 août 2026
Chaque erreur, sur chaque endpoint, utilise une seule enveloppe :
{
"error": {
"code": "not_found",
"message": "Link not found",
"doc_url": "https://linkprofit.com/docs/api/errors"
}
}
Branchez sur error.code, affichez error.message aux humains. Les erreurs de
validation ajoutent un tableau details avec un message par champ :
{
"error": {
"code": "validation_failed",
"message": "Request failed validation",
"doc_url": "https://linkprofit.com/docs/api/errors",
"details": [
{ "path": "url", "message": "Destination URL is not a valid address" }
]
}
}
Codes d’erreur
| Code | HTTP | Signification | Que faire |
|---|---|---|---|
| unauthorized | 401 | Clé absente, inconnue, révoquée ou expirée | Vérifiez l’en-tête ; émettez une nouvelle clé |
| forbidden | 403 | Mauvais type de clé pour l’endpoint, ou opération non autorisée | Utilisez une clé d’espace de travail / partenaire, comme documenté |
| insufficient_scope | 403 | La clé n’a pas une portée requise | Créez une clé avec la portée nommée dans le message |
| plan_restricted | 403 | Le forfait n’inclut pas cette capacité | Passez au forfait supérieur ou retirez la fonction de la requête |
| not_found | 404 | La ressource n’existe pas — ou appartient à un autre locataire | Vérifiez l’identifiant ; les ressources d’autrui sont indiscernables des ressources absentes |
| invalid_request | 400 | JSON mal formé, curseur invalide, règle métier enfreinte | Corrigez la requête |
| validation_failed | 422 | Le corps ou la requête a échoué à la validation de schéma | Corrigez les champs listés dans details |
| conflict | 409 | Conflit d’état : slug déjà pris, Idempotency-Key réutilisée avec un corps différent | Choisissez une autre valeur ou une nouvelle clé d’idempotence |
| quota_exceeded | 422 | Un quota du forfait est épuisé (liens, domaines, clients) | Passez au forfait supérieur ou libérez du quota |
| rate_limited | 429 | Trop de requêtes pour cette clé | Attendez Retry-After secondes ; voir Limites de débit |
| not_configured | 503 | La capacité n’est pas configurée dans cet environnement | Réessayez plus tard ou contactez le support |
| internal | 500/502/504 | Erreur inattendue de la plateforme | Réessayez avec un délai croissant ; signalez si cela persiste |
| invalid_click_id | 422 | Le click_id est contrefait, altéré ou émis dans un autre espace de travail | Transmettez la valeur du paramètre d’identifiant de clic exactement telle qu’elle apparaissait dans l’adresse de destination |
| attribution_expired | 422 | Le clic est plus ancien que la fenêtre d’attribution de l’espace de travail | Rien à réessayer ; ajustez la fenêtre dans le tableau de bord si nécessaire |
Des règles de traitement qui paient
- Un 404 est aussi une isolation. Un identifiant appartenant à un autre
espace de travail répond
not_found, jamaisforbidden— l’API ne révèle pas si un identifiant étranger existe. - Ne réessayez que ce qui est sûr. Réessayez
internaletrate_limitedavec un délai croissant. Ne réessayez jamais aveuglémentconflictouvalidation_failed— c’est la requête elle-même qui est fausse. UtilisezIdempotency-Keypour rendre les mutations sûres à réessayer. GET /linksne renvoie jamais 404. Des filtres sans résultat renvoient une liste vide ; un 404 sur la collection serait ambigu.