Erreurs
Chaque erreur porte un code, le même en REST et sur le WebSocket. Basez votre logique sur ce code : le texte du message peut évoluer, le code jamais.
En REST
{
"type": "https://fathomcharts.com/docs/errors#invalid-parameters",
"title": "Invalid parameters",
"status": 400,
"detail": "Invalid indicator parameters",
"code": "INVALID_PARAMETERS",
"instance": "req-1b",
"errors": [
{ "path": "/minimum", "message": "must be >= 1" }
]
}code: le code de l’erreur, listé ci-dessous ;detail: une explication lisible ;errors: pourINVALID_PARAMETERS, la liste des problèmes, avec l’emplacement du champ fautif (path) ;instance: l’identifiant de la requête, à communiquer au support si besoin.
Quand une requête historique ou un export dépasse votre budget, la réponse indique aussi son coût (computeUnits) et ce qu’il vous reste (remainingComputeUnits). Les réponses 429 portent un header Retry-After : le nombre de secondes à attendre.
Sur le WebSocket
Une subscription refusée ou interrompue reçoit un message error avec son sub. Seule cette subscription est fermée : la connexion et les autres subscriptions continuent.
{"sub":"bt","t":"error","code":"UNKNOWN_INDICATOR","message":"unknown indicator `big-trade`"}Un message que le serveur ne comprend pas (JSON invalide, type inconnu…) reçoit un error sans sub.
Avec le SDK, l’erreur d’une subscription arrête son itération avec une FathomChartsError qui porte le code reçu.
Les problèmes qui ferment toute la connexion (clé refusée, trop de connexions, client trop lent) ne passent pas par un message error mais par un close code.
Liste des codes
| Code | HTTP | Signification | Que faire |
|---|---|---|---|
INVALID_PARAMETERSInvalid parameters | 400 · 413 · 415 | Requête invalide : champ inconnu, manquant, du mauvais type ou hors limites (400), corps de plus de 16 Ko (413), ou corps qui n’est pas du JSON (415). | Corrigez la requête. Le champ errors liste chaque problème et son emplacement. |
UNKNOWN_INDICATORUnknown indicator | 404 | Cet indicateur n’existe pas. | Vérifiez l’identifiant dans le catalogue (GET /v1/indicators). |
UNKNOWN_INSTRUMENTUnknown instrument | 404 | Cet instrument n’est pas disponible. | Vérifiez le symbole avec GET /v1/instruments. Pour un contrat qui n’est pas diffusé en temps réel, précisez dataset. |
NOT_COVEREDRange not covered | 402 | Aucune donnée sur tout ou partie de la période demandée. | Réduisez la période. L’estimation liste les jours manquants (missingDays). |
WARMINGWarming up | 409 | Le calcul se prépare et n’est pas encore prêt. | Réessayez dans quelques instants. |
QUOTA_EXCEEDEDQuota exceeded | 429 · 409 | Limite de votre offre atteinte : compute budget ou volume d’export du mois (429), nombre de subscriptions ou de configurations personnalisées (WebSocket), ou 10 clés actives (409). | Consultez GET /v1/usage. Réduisez la période, attendez le mois suivant (Retry-After), fermez une subscription ou révoquez une clé. |
RATE_LIMITEDRate limited | 429 | Trop de requêtes en peu de temps. | Attendez le nombre de secondes indiqué par Retry-After. |
CAPACITYCapacity reached | 503 | Le service est momentanément saturé. | Réessayez avec un backoff exponentiel. |
CURSOR_EXPIREDCursor expired | 410 | Le cursor de page suivante (next) est trop ancien. | Relancez la requête depuis le début. |
UNAUTHORIZEDUnauthorized | 401 | Clé ou token absent, invalide, expiré ou révoqué, ou lien de connexion au portail expiré ou déjà utilisé. | Vérifiez le header Authorization, ou demandez un nouveau token ou un nouveau lien. |
FORBIDDENForbidden | 403 | Vous êtes bien authentifié, mais vous n’avez pas accès à ce que vous demandez : scope manquant sur la clé, instrument ou adresse IP non autorisés, ou offre qui ne couvre pas la demande. | Le message précise ce qui manque : ajustez la clé, ou ajoutez l’offre nécessaire. |
NOT_FOUNDNot found | 404 | Adresse inconnue, ou clé inexistante. | Vérifiez l’adresse et l’identifiant. |
CONFLICTConflict | 409 | Action impossible dans l’état actuel : clé déjà remplacée, offre déjà détenue, ou pays de facturation servi par un autre prestataire de paiement que celui du compte. | Vérifiez l’état actuel avant de recommencer. |
WITHDRAWAL_WAIVER_REQUIREDWithdrawal waiver required | 400 | Paiement lancé sans la renonciation au droit de rétractation, ou avec une ancienne version de son texte. | Rechargez l’espace compte, cochez la case, puis recommencez. |
SOURCE_DOWNSource down | — (WebSocket) | Les données de cet instrument sont momentanément indisponibles. | Réessayez plus tard. GET /v1/instruments donne l’état de chaque instrument. |
UPSTREAM_ERRORUpstream error | 502 | Un service dont nous dépendons a répondu de façon inattendue. | Réessayez avec un backoff exponentiel. |
INTERNALInternal error | 500 | Erreur de notre côté. | Réessayez. Si l’erreur persiste, contactez le support avec la valeur instance de la réponse. |