Deux points d’accès en lecture servent à suivre la dépense : GET / lit le solde du workspace de la clé, GET / lit ce qu’une requête précise a coûté. Ni l’un ni l’autre n’est facturé.
Lire le soldeLien vers la section Lire le solde
GET https://api.realmoon.ai/v1/creditsRenvoie le solde du porte-monnaie API du workspace auquel appartient la clé.
- Authentification : clé
sk-moon-…avec la portéeinference(voir Authentification). - Paramètres : aucun.
- Réponse : un objet
credits.
ExempleLien vers la section Exemple
curl https://api.realmoon.ai/v1/credits \
-H "Authorization: Bearer $MOONAI_API_KEY"import os
import httpx
from openai import OpenAI
client = OpenAI(base_url="https://api.realmoon.ai/v1", api_key=os.environ["MOONAI_API_KEY"])
credits = client.get("/credits", cast_to=httpx.Response).json()
print(credits["balance"])import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.realmoon.ai/v1', apiKey: process.env.MOONAI_API_KEY });
const credits = await client.get('/credits');
console.log(credits.balance);RéponseLien vers la section Réponse
{ "object": "credits", "balance": 1250000, "currency": "credits" }| Champ | Type | Description |
|---|---|---|
object | chaîne | Toujours credits. |
balance | entier | Solde en crédits : crédits payés, crédits offerts et crédit API inclus dans le forfait, réserve des requêtes en cours déjà déduite. Il peut être négatif. |
currency | chaîne | Toujours credits. |
Le solde remonte quand les requêtes en cours sont réglées à leur coût réel (voir Réserve puis coût réel). Un solde négatif bloque les nouvelles requêtes jusqu’à la prochaine recharge (402 ).
ErreursLien vers la section Erreurs
Seules les erreurs communes à toute l’API s’appliquent : 401 , 403 , 403 , 429 , 503 . Voir Erreurs.
Lire le coût d’une requêteLien vers la section Lire le coût d’une requête
GET https://api.realmoon.ai/v1/generation?id=gen-…Renvoie le coût final et les jetons comptés d’une requête du workspace de la clé.
- Authentification : clé
sk-moon-…avec la portéeinference, du même workspace que la requête. - Paramètre :
id, dans l’adresse. - Réponse : un objet
generation.
ParamètreLien vers la section Paramètre
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
id | chaîne | oui | Identifiant de la requête : gen- suivi de 32 caractères. |
Où trouver l’identifiant :
| Point d’accès | Identifiant |
|---|---|
/ | Le champ id de la réponse (ou de chaque morceau du flux), et l’en-tête X-Moon-Request-Id. |
| Images, voix, transcription, embeddings, OCR | L’en-tête X-Moon-Request-Id de la réponse. |
POST / | L’en-tête X-Moon-Request-Id de la réponse de lancement. L’id de la vidéo (video_…) n’est pas accepté ici. |
ExempleLien vers la section Exemple
curl "https://api.realmoon.ai/v1/generation?id=gen-0123456789abcdef0123456789abcdef" \
-H "Authorization: Bearer $MOONAI_API_KEY"import os
import httpx
from openai import OpenAI
client = OpenAI(base_url="https://api.realmoon.ai/v1", api_key=os.environ["MOONAI_API_KEY"])
raw = client.chat.completions.with_raw_response.create(
model="anthropic/claude-haiku-4.5",
messages=[{"role": "user", "content": "Bonjour"}],
)
request_id = raw.headers.get("x-moon-request-id")
cost = client.get(
"/generation",
cast_to=httpx.Response,
options={"params": {"id": request_id}},
).json()
print(cost["credits_charged"])import OpenAI from 'openai';
const client = new OpenAI({ baseURL: 'https://api.realmoon.ai/v1', apiKey: process.env.MOONAI_API_KEY });
const { response } = await client.chat.completions
.create({ model: 'anthropic/claude-haiku-4.5', messages: [{ role: 'user', content: 'Bonjour' }] })
.withResponse();
const requestId = response.headers.get('x-moon-request-id');
const cost = await client.get('/generation', { query: { id: requestId } });
console.log(cost.credits_charged);RéponseLien vers la section Réponse
{
"object": "generation",
"id": "gen-0123456789abcdef0123456789abcdef",
"model": "anthropic/claude-haiku-4.5",
"tokens_prompt": 12,
"tokens_completion": 41,
"credits_charged": 0,
"created_at": 1793836800
}La valeur de credits_charged est fictive.
| Champ | Type | Description |
|---|---|---|
object | chaîne | Toujours generation. |
id | chaîne | L’identifiant demandé. |
model | chaîne | Le modèle appelé, sous l’identifiant que vous avez envoyé. |
tokens_prompt | entier ou null | Jetons d’entrée comptés. null pour une image, une vidéo, une voix, une transcription ou un OCR. |
tokens_completion | entier ou null | Jetons de sortie comptés, raisonnement compris. null pour tous les médias, embeddings compris. |
credits_charged | entier | Coût final en crédits : réserve, règlement et remboursements additionnés. Jamais négatif. |
created_at | entier | Date de la requête, en secondes Unix. |
Quand relire le coûtLien vers la section Quand relire le coût
- Une requête réglée tout de suite (réponse complète avec son compte de jetons, média terminé) a son coût définitif dès la réponse.
- Une réponse interrompue, ou dont le compte de jetons manquait, peut encore être réglée au coût réel annoncé par le fournisseur pendant une vingtaine de minutes : relisez
/plus tard.v1/ generation - Une vidéo est réglée à la fin de la tâche : son coût se lit aussi dans
usage.creditsde l’objet vidéo (voir Vidéos). - Le détail d’une requête peut être supprimé après 90 jours :
/répond alorsv1/ generation 404. Les totaux par jour restent dans l’onglet « Utilisation » du portail.
ErreursLien vers la section Erreurs
| HTTP | code | Signification |
|---|---|---|
| 400 | missing_required_parameter | id absent (param: "id"). |
| 404 | null | generation : identifiant inconnu, d’un autre workspace, ou dont le détail a été supprimé. |
Les erreurs communes (clé, débit) sont dans Erreurs.
Voir aussiLien vers la section Voir aussi
- Coûts et porte-monnaie : réserve, règlement, recharges et factures.
- Limites : plafonds de dépense du workspace et des clés.
- Authentification : les en-têtes de réponse, dont
X-Moon-Request-Id.