Développeurs
Requêtes & erreurs
La forme des requêtes et des réponses de l'API Ora, la signification de chaque erreur, et les limites de débit.
Requêtes et réponses
Section intitulée « Requêtes et réponses »- JSON en entrée, JSON en sortie. Envoyez
Content-Type: application/jsonavec un corps, et seulement avec un corps. - Enveloppe. Chaque réponse contient
"success": trueou"success": false. Vérifiez ce champ, pas seulement le code de statut. - Les montants en tokens sont des unités de base brutes, sous forme de chaînes de caractères décimales, car ils dépassent la capacité des nombres JavaScript :
"250000000000". Divisez par 10 à la puissance du nombre de décimales du token pour les afficher (la plupart des tokens de launchpads Solana utilisent 6 décimales, les tokens EVM 18). - Montants natifs. Les entrées nommées
…Solsont de simples nombres décimaux de l'actif de gas de la chain (0.5). Dans les réponses, les montants natifs bruts sont en lamports sur Solana et en wei sur les chains EVM. - Adresses. Les adresses Solana sont en base58, les adresses EVM en hexadécimal
0x. Dans un chemin,{address}et{mint}désignent le mint (Solana) ou le contrat (EVM) d'un token. - ID de requête. Chaque réponse porte un en-tête
X-Request-ID. Envoyez le vôtre (un UUID v4) pour relier un appel à vos logs ; Ora le transmet à chaque service sollicité. - Les horodatages sont au format ISO 8601, en UTC.
Un appel en échec répond avec "success": false et un champ error. Quand Ora relaie l'échec de l'un de ses services, error est un court code de référence (comme M4K8T) et message donne la raison en clair.
{ "success": false, "error": "M4K8T", "message": "…readable reason…"}| Statut | Signification | Que faire |
|---|---|---|
400 |
Le corps ou un paramètre est invalide. | Lisez error et message : ils nomment le champ concerné. Ne réessayez pas à l'identique. |
401 |
Pas de clé, une clé mal formée, ou une clé qui a été renouvelée ou révoquée. | Vérifiez l'en-tête et la clé. Ne réessayez pas en boucle : les clés refusées sont soumises à une limite de débit par IP. |
403 |
L'accès API est désactivé sur le compte. | Demandez au support Ora d'activer l'accès API. |
404 |
Introuvable, ou pas à vous. Ora ne révèle jamais si une ressource qui ne vous appartient pas existe. | Vérifiez l'ID ou l'adresse, et qu'il appartient bien à votre compte. |
409 |
La ressource n'est pas dans un état qui le permet (pas encore lancée, déjà en cours...). | Lisez l'état, puis agissez. |
429 |
Limite de débit atteinte. | Ralentissez : voir Limites de débit. |
502 |
Un service derrière l'API a échoué. | Réessayez avec une attente croissante. Si le problème persiste, envoyez le code error et le X-Request-ID au support Ora. |
503 |
Temporairement indisponible (une dépendance est en panne ou saturée). | Réessayez avec une attente croissante. |
Limites de débit
Section intitulée « Limites de débit »| Budget | Limite | Compté par | Couvre |
|---|---|---|---|
| Requêtes API | 100 par minute | Compte | Toutes les requêtes faites avec votre clé, flux compris (une par connexion). Distinct du budget propre à l'app : un script très actif ne ralentit jamais votre session dans l'app. |
| Clés refusées | 20 par minute | Adresse IP | Les requêtes dont la clé est mal formée ou inconnue (401). Au-delà, elles reçoivent un 429. |
Les fenêtres sont des fenêtres fixes d'une minute. Un 429 ne porte pas d'en-tête Retry-After : attendez, puis réessayez avec une attente exponentielle qui commence à 1 seconde et plafonne à 60. Étalez les traitements par lots dans le temps plutôt que de les envoyer en rafale.
export async function withRetry(fn, tries = 6) { for (let i = 0; ; i++) { try { return await fn(); } catch (err) { const retryable = err.status === 429 || err.status === 502 || err.status === 503; if (!retryable || i + 1 >= tries) throw err; await new Promise((r) => setTimeout(r, Math.min(60_000, 1000 * 2 ** i))); } }}// Reads only. Before retrying a write, check what already happened.