# Solde et coût d’une requête

> Référence de GET /v1/credits, qui donne le solde du porte-monnaie du workspace, et de GET /v1/generation, qui donne le coût final et les jetons d’une requête.

Deux points d’accès en lecture servent à suivre la dépense : `GET /v1/credits` lit le solde du workspace de la clé, `GET /v1/generation` lit ce qu’une requête précise a coûté. Ni l’un ni l’autre n’est facturé.

## Lire le solde

```http
GET https://api.realmoon.ai/v1/credits
```

Renvoie le solde du porte-monnaie API du workspace auquel appartient la clé.

- Authentification : clé `sk-moon-…` avec la portée `inference` (voir [Authentification](https://realmoon.ai/documentation/api/authentification/)).
- Paramètres : aucun.
- Réponse : un objet `credits`.

### Exemple

```bash title="cURL"
curl https://api.realmoon.ai/v1/credits \
  -H "Authorization: Bearer $MOONAI_API_KEY"
```

```python title="Python"
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"])
```

```javascript title="JavaScript"
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éponse

```json title="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](https://realmoon.ai/documentation/api/couts/#reserve)). Un solde négatif bloque les nouvelles requêtes jusqu’à la prochaine recharge (`402 insufficient_credits`).

### Erreurs

Seules les erreurs communes à toute l’API s’appliquent : `401 invalid_api_key`, `403 ip_not_allowed`, `403 missing_scope`, `429 rate_limit_exceeded`, `503 service_unavailable`. Voir [Erreurs](https://realmoon.ai/documentation/api/erreurs/#cle).

## Lire le coût d’une requête

```http
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ée `inference`, du même workspace que la requête.
- Paramètre : `id`, dans l’adresse.
- Réponse : un objet `generation`.

### 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 |
| --- | --- |
| `/v1/chat/completions` | 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 /v1/videos` | 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. |

### Exemple

```bash title="cURL"
curl "https://api.realmoon.ai/v1/generation?id=gen-0123456789abcdef0123456789abcdef" \
  -H "Authorization: Bearer $MOONAI_API_KEY"
```

```python title="Python"
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"])
```

```javascript title="JavaScript"
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éponse

```json title="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û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 `/v1/generation` plus tard.
- Une vidéo est réglée à la fin de la tâche : son coût se lit aussi dans `usage.credits` de l’objet vidéo (voir [Vidéos](https://realmoon.ai/documentation/api/videos/#suivre)).
- Le détail d’une requête peut être supprimé après 90 jours : `/v1/generation` répond alors `404`. Les totaux par jour restent dans l’onglet « Utilisation » du portail.

### Erreurs

| HTTP | `code` | Signification |
| --- | --- | --- |
| 400 | `missing_required_parameter` | `id` absent (`param: "id"`). |
| 404 | `null` | `generation not found` : identifiant inconnu, d’un autre workspace, ou dont le détail a été supprimé. |

Les erreurs communes (clé, débit) sont dans [Erreurs](https://realmoon.ai/documentation/api/erreurs/).

## Voir aussi

- [Coûts et porte-monnaie](https://realmoon.ai/documentation/api/couts/) : réserve, règlement, recharges et factures.
- [Limites](https://realmoon.ai/documentation/api/limites/#plafonds) : plafonds de dépense du workspace et des clés.
- [Authentification](https://realmoon.ai/documentation/api/authentification/#en-tetes) : les en-têtes de réponse, dont `X-Moon-Request-Id`.

---

Documentation Moon AI › API développeur › Solde et coût. Page : https://realmoon.ai/documentation/api/solde/. Modifiée le 5 novembre 2026.

© 2026 Stellarr Studio SAS. Tous droits réservés. Moon AI, Moon Blur et Stellarr Studio sont des marques déposées à l’INPI.
