# Sandbox

> Ce que le Sandbox fait réellement : même moteur et même contrat que la Production, gratuit, borné par une dotation à vie de 2 000 unités par organisation.

Le Sandbox est l'environnement dans lequel vous intégrez l'API avant la Production. Il sert la même surface d'API que la Production, sur la même URL : c'est la clé qui décide de l'environnement. Les appels Sandbox passent par le même moteur de résolution ; ce qui change est la facturation, la dotation et les limites de débit.

## Ce qui est identique à la Production

- Les trois routes, les mêmes champs, les mêmes en-têtes et les mêmes codes d'erreur.
- Le même moteur et la même politique de résolution : un libellé résolu en Sandbox l'est par le même calcul qu'en Production.
- Les mêmes règles d'idempotence, de déduplication, de validation et de rétention.

## Ce qui diffère

| | Sandbox | Production |
|---|---|---|
| Préfixe de clé | `nry_mer_sbx_` | `nry_mer_live_` |
| Facturation | Aucune : `usage.billable` vaut toujours `false` | 0,005 € par enrichissement réussi, hors taxes |
| Borne | Dotation à vie de 2 000 unités par organisation | Pas de dotation |
| Débit | Rafale de 60 requêtes, 5 requêtes par seconde, par clé | Non publié : lisez `Noryo-RateLimit-Limit` |
| Accès | Clés créées dans Platform | Après examen d'un dossier par Noryo |

## La dotation de 2 000 unités

Le Sandbox porte une **dotation à vie de 2 000 unités par organisation**, pas par mois et pas par clé : toutes les clés Sandbox des workspaces d'une même organisation puisent dans la même dotation. Elle est posée à la création de l'organisation.

Un appel consomme les unités que son résultat porte, celles que la réponse annonce dans `usage.units` :

| Résultat | Unités consommées |
|---|---|
| `resolved` | 1 |
| `refresh_recalculated` | 1 |
| `partial`, `not_found` | 0 |
| Rejeu idempotent, rejeu par `external_transaction_id` | 0 |
| Erreur (`4xx`, `5xx`) | 0 |

Une fois la dotation épuisée, un appel qui aurait consommé une unité est refusé :

```json
{
  "type": "https://developer.noryo.app/errors/sandbox_quota_exhausted",
  "title": "Sandbox quota exhausted",
  "status": 402,
  "code": "sandbox_quota_exhausted",
  "detail": "The organization has used its Sandbox allowance. Move to Production to continue.",
  "request_id": "req_…"
}
```

Reprendre la même requête ne sert à rien : la dotation ne se recharge pas. Voir [sandbox_quota_exhausted](https://developer.noryo.app/fr-FR/errors/sandbox_quota_exhausted).

> **Attention** Chaque appel de création doit porter une `Idempotency-Key` ou un `external_transaction_id`. Sans eux, deux appels identiques consommeraient deux fois la dotation ; c'est l'une des raisons pour lesquelles l'API les refuse. Voir [Les deux identifiants](https://developer.noryo.app/fr-FR/merchant/identifiers).

## Deux mondes séparés

Sandbox et Production ne partagent rien : clés séparées, seaux de débit séparés, compteurs séparés. Un `enrichment_id` créé en Sandbox n'est pas lisible avec une clé de Production (et inversement) : la lecture rend `404`. Les clés d'idempotence et les `external_transaction_id` sont, eux aussi, propres à chaque environnement. Un appel Sandbox ne peut jamais facturer un compte de Production. Voir [Environnements](https://developer.noryo.app/fr-FR/merchant/authentication/environments).

## Obtenir une clé Sandbox

Les clés Sandbox se créent dans la page [Clés d'API](https://platform.noryo.app/keys) de Platform. Tant que Noryo n'a pas ouvert l'émission de clés Sandbox, la création est refusée avec le message `Sandbox access is not enabled yet.`. Voir [Clés API](https://developer.noryo.app/fr-FR/merchant/authentication/api-keys).

---

Page canonique : https://developer.noryo.app/fr-FR/merchant/sandbox
