Erreurs, pagination et quotas
Le corps des erreurs, les codes de statut que vous rencontrerez, les réponses liées aux quotas, la pagination des endpoints de liste, la casse variable des identifiants dans les réponses et le décompte de l'utilisation de l'API.
Ces conventions valent pour toute l’API REST. MCP gère les erreurs à sa façon, comme l’explique la Vue d’ensemble de MCP.
Le corps des erreurs
Presque toutes les erreurs sont un objet JSON contenant un seul message lisible par un humain :
{"error": "Conversation not found"}
Il n’existe pas de codes d’erreur généraux destinés aux machines. Quelques familles d’erreurs ajoutent un champ supplémentaire :
| Champ supplémentaire | Quand | Exemple |
|---|---|---|
reason | Limites de quota et de plan (429) | {"error":"Quota exceeded","reason":"credit_count"} |
code | Blocages liés aux garde-fous et à la résidence des données sur les endpoints d’exécution | {"error":"...","code":"SENSITIVE_DATA_BLOCKED"} |
error_code | Blocages liés aux données sensibles et erreurs de serveur MCP sur les endpoints de conversation | {"error":"...","error_code":"..."} |
Les codes de résidence des données sont EU_INFERENCE_REQUIRED, ZERO_RETENTION_REQUIRED, NO_PROVIDER_ASSIGNED et NO_ENDPOINT_AVAILABLE. Certains échecs d’authentification renvoient un simple statut avec un corps vide : ne partez donc pas du principe que toute réponse d’erreur peut être analysée comme du JSON.
Codes de statut
| Statut | Signification | Corps habituel |
|---|---|---|
200 / 201 / 204 | Succès | La ressource, ou rien pour 204 |
400 | JSON invalide ou champ refusé par la validation ; également les modèles restreints et les blocages liés à la résidence des données ou aux garde-fous sur les endpoints d’exécution | {"error":"<binding error text>"} |
401 | Aucune clé API valide | {"error":"Invalid API key"}, ou un corps vide lorsqu’aucune clé n’a été reconnue |
403 | La clé n’a pas l’autorisation nécessaire, la route n’est pas accessible aux clés, le compte n’est pas actif ou la requête provient d’une région non prise en charge | {"error":"This api key does not have any of the required permissions. You need at least one of: ..."} |
404 | Introuvable, ou invisible pour le propriétaire de la clé | {"error":"Conversation not found"} (certaines routes renvoient un corps vide) |
429 | Quota de l’espace de travail ou limite du plan atteint | {"error":"Quota exceeded","reason":"..."} |
500 / 503 | L’opération a échoué, par exemple parce qu’aucun modèle n’a été sélectionné ou à cause d’une erreur du fournisseur | {"error":"<message>"} |
Les statuts exacts de chaque endpoint sont indiqués sur la page de référence REST correspondante. Les erreurs d’authentification sont détaillées dans Clés API et authentification.
Quotas
Les routes qui lancent un travail payant (exécutions, conversations, génération de médias, transcription, téléversements dans les bases de connaissances et traitement de fichiers) vérifient d’abord le plan et les crédits de l’espace de travail. Si la vérification échoue, elles renvoient :
HTTP 429
{"error": "Quota exceeded", "reason": "credit_count"}
reason | Signification |
|---|---|
credit_count | L’espace de travail a consommé ses crédits. Un administrateur peut en racheter dans l’application. |
user_count | Une limite sur le nombre d’utilisateurs prévue par le plan de l’espace de travail. |
subscription | L’abonnement de l’espace de travail ne le permet pas. |
trial_expired | La période d’essai est terminée. |
unknown | La limite n’a pas pu être identifiée. |
Ici, un 429 n’est pas une limite de débit : réessayer immédiatement ne servira à rien. Signalez-le à une personne qui peut agir. Les crédits et les plans sont présentés dans Utilisation, crédits et facturation.
Limites de débit
Aucune limite de débit par clé ou par utilisateur n’est publiée. Le volume traité dépend du plan et des crédits de votre espace de travail, signalés par la réponse 429 Quota exceeded décrite ci-dessus. Les appels synchrones longs (un modèle lent, une longue transcription) durent le temps du travail à effectuer : prévoyez un délai d’expiration généreux dans votre client HTTP.
Pagination
Les endpoints de liste paginés acceptent deux paramètres de requête :
| Paramètre | Valeur par défaut | Signification |
|---|---|---|
page | 1 | Numéro de page, à partir de 1. |
size | 10 | Nombre d’éléments par page. |
Les métadonnées de pagination se trouvent dans les headers de la réponse, pas dans le corps. Le corps est un simple tableau JSON.
| Header | Signification |
|---|---|
X-Page | La page reçue. |
X-Page-Size | La taille de page appliquée. |
X-Total-Count | Le nombre total d’éléments, toutes pages confondues. |
Certains endpoints de liste renvoient tout lorsque vous n’envoyez aucun paramètre de pagination (par exemple GET /ai_model). La référence de chaque endpoint précise lesquels.
curl -i "https://api.stickyprompts.com/api/v1/conversation?page=2&size=25" \
-H "Authorization: Bearer $STICKY_API_KEY"
# X-Page: 2
# X-Page-Size: 25
# X-Total-Count: 137import os
import requests
BASE = "https://api.stickyprompts.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['STICKY_API_KEY']}"}
def all_conversations(size=50):
page = 1
while True:
r = requests.get(f"{BASE}/conversation", headers=HEADERS,
params={"page": page, "size": size})
r.raise_for_status()
yield from r.json()
if page * size >= int(r.headers["X-Total-Count"]):
break
page += 1const BASE = "https://api.stickyprompts.com/api/v1";
const headers = { Authorization: `Bearer ${process.env.STICKY_API_KEY}` };
async function* allConversations(size = 50) {
for (let page = 1; ; page++) {
const res = await fetch(`${BASE}/conversation?page=${page}&size=${size}`, { headers });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
yield* await res.json();
if (page * size >= Number(res.headers.get("X-Total-Count"))) break;
}
}Les outils MCP paginent différemment, avec les arguments limit et offset et un total_count dans le résultat. Voir la Référence des outils.
Identifiants et casse des champs
- La plupart des ressources utilisent des identifiants numériques. De nombreux endpoints acceptent aussi un
slugde 8 caractères à la place de l’identifiant ; les pages de référence indiquent lesquels. - La plupart des enregistrements comportent quatre champs de base dont les clés commencent par une majuscule :
ID,CreatedAt,UpdatedAtetDeletedAt. Les autres champs sont en snake_case, et quelques-uns en camelCase (par exempleisUsersur les messages,userIdetprojectIdsur les conversations). - Certaines réponses construites à la main, comme les résultats d’exécution de prompts, utilisent à la place
idetcreated_aten minuscules. - Les valeurs de crédits et les montants typés en décimal (par exemple
credits_used,multiplier) arrivent sous forme de chaînes JSON, comme"0.4213". Analysez-les avec un type décimal, pas avec un flottant.
{
"ID": 5120,
"CreatedAt": "2026-09-28T09:13:58Z",
"DeletedAt": null,
"slug": "aB3dE5gH",
"userId": 77,
"next_message_ai_model_id": 42,
"credits_used": "0.4213"
}
Dans votre client, mappez les champs explicitement plutôt que de vous fier à une seule convention de nommage.
Identifiant de corrélation
Chaque réponse comporte un header X-Correlation-ID. Enregistrez-le avec vos propres logs de requêtes. Si vous avez besoin d’aide sur un appel précis, indiquez-le dans votre message à hello@stickyprompts.com.
Restriction géographique
Les requêtes provenant d’une région que le service ne dessert pas sont refusées, en REST comme en MCP :
HTTP 403
{"error": "access from your region is not supported"}
Décompte de l’utilisation
Les appels API et MCP passent par le même circuit d’exécution, de quotas et de facturation que l’application web. L’utilisation est attribuée au propriétaire de la clé et à son espace de travail, exactement comme s’il avait effectué la même opération dans l’application, et consomme les mêmes crédits. Il n’existe pas de grille tarifaire distincte pour l’API, et l’utilisation de l’API n’est pas présentée séparément de celle de l’application. Les réponses d’exécution n’indiquent ni le nombre de tokens ni le coût ; les administrateurs de l’espace de travail consultent l’utilisation dans Utilisation, crédits et facturation.