# Relire un enrichissement passé

`GET /merchant/v1/enrichments/{enrichment_id}` — Merchant API · [Référence API](https://developer.noryo.app/fr-FR/merchant/reference)

Authentification : `bearerCredential` (http bearer).

Rend le résultat stocké. La lecture est gratuite et ne facture jamais rien.

L'objet `retrieval` dit ce que **cette lecture** coûte ; l'objet `original` dit
ce que l'enrichissement a coûté au moment où il a eu lieu. Deux questions différentes, deux objets.

## Paramètres

| Nom | Dans | Requis | Type | Description |
| --- | --- | --- | --- | --- |
| `enrichment_id` | path | oui | string | `enr_` suivi d'un UUID de version 4, tel que Noryo le rend. Toute autre forme rend `404`. Motif : `^enr_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`. |

## Réponses

| Statut | Description |
| --- | --- |
| `200` | Le résultat stocké. |
| `400` | `invalid_request` (hôte inconnu) ou `invalid_idempotency_key` : une lecture n'a besoin d'aucune `Idempotency-Key`, mais celle qui est envoyée est tout de même validée. |
| `401` | `invalid_api_key`. Absent, mal formé, inconnu, révoqué — **toujours le même code**. Toute distinction serait un oracle. |
| `403` | `insufficient_scope`, `account_inactive`, `production_not_enabled`. |
| `404` | Identifiant inconnu — **ou identifiant appartenant à quelqu'un d'autre**. Les deux sont délibérément indiscernables. |
| `410` | `result_content_expired`. Le contenu a dépassé sa rétention de 90 jours. L'identité, la ligne de registre et l'écriture comptable survivent ; seul le contenu a disparu. |
| `429` | `rate_limited`. Rien n'a été calculé et rien n'a été facturé. |
| `500` | `internal_error`. Le corps ne dit rien de l'incident ; citez le `request_id` au support. Reprendre avec la même `Idempotency-Key` est sans risque. |

### `200` — `StoredEnrichment`

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `enrichment_id` | string | — | Exemple : `"enr_7f3c1e20-…"`. |
| `merchant` | Merchant \| null | — | — |
| `merchant.name` | string | — | Exemple : `"McDonald's"`. |
| `merchant.category` | string | — | Exemple : `"alimentation.restaurant"`. |
| `merchant.logo_url` | string · uri | — | — |
| `merchant.location` | object \| null | — | **Toujours présent**, `null` s'il est inconnu. Absent et inconnu se ressemblent trop pour qu'on demande à un client de les distinguer. |
| `merchant.location.city` | string | — | Exemple : `"PARIS"`. |
| `merchant.location.postal_code` | string | — | Exemple : `"75018"`. |
| `merchant.confidence` | number · 0–1 | — | Un **score de confiance du modèle** de 0 à 1. Il ne doit **pas** être interprété comme une probabilité calibrée de justesse — Noryo a mesuré que son ordonnancement n'est pas monotone au-dessus de 0.95. Voir le guide. |
| `enrichment` | object | — | — |
| `enrichment.status` | string | — | `resolved` — identité complète et au-dessus du seuil de politique. `partial` — quelque chose manque ou est sous le seuil. `not_found` — le moteur a répondu, et sa réponse est « personne ». Valeurs : `resolved`, `partial`, `not_found`, `refresh_recalculated`. |
| `enrichment.reason` | string | — | — |
| `enrichment.environment` | string | — | Valeurs : `sandbox`, `production`. |
| `enrichment.source` | string | — | — |
| `enrichment.customized` | boolean | — | `true` quand une **règle de votre organisation** (Platform → Règles) a changé cette réponse — par exemple un nom d’affichage ou une catégorie. Le résultat Noryo lui-même est conservé intact, et une règle ne s’applique jamais hors de votre organisation ni de l’environnement de la clé. `false` sinon. Un `POST` est rendu avec les règles publiées à cet instant, et un rejeu idempotent rend ce même corps ; un `GET` applique les règles publiées **maintenant**. |
| `enrichment.rules` | array<object> | — | **Facultatif** — présent seulement quand `customized` vaut `true` : les règles qui ont changé cette réponse, chacune avec la version appliquée. Le champ que chaque règle a changé se lit dans les journaux de Platform. |
| `enrichment.rules[].id` | string · uuid | — | — |
| `enrichment.rules[].version` | integer ≥ 1 | — | — |
| `retrieval` | object | — | Ce que cette lecture coûte. Toujours gratuite. |
| `retrieval.billable` | boolean = false | — | — |
| `retrieval.units` | integer = 0 | — | — |
| `original` | object | — | Ce que l'enrichissement a coûté au moment où il a eu lieu. |
| `original.billable` | boolean | — | — |
| `original.units` | integer | — | — |

## Erreurs nommées par le contrat

- [`invalid_idempotency_key`](https://developer.noryo.app/fr-FR/errors/invalid_idempotency_key)
- [`invalid_request`](https://developer.noryo.app/fr-FR/errors/invalid_request)
- [`invalid_api_key`](https://developer.noryo.app/fr-FR/errors/invalid_api_key)
- [`account_inactive`](https://developer.noryo.app/fr-FR/errors/account_inactive)
- [`insufficient_scope`](https://developer.noryo.app/fr-FR/errors/insufficient_scope)
- [`production_not_enabled`](https://developer.noryo.app/fr-FR/errors/production_not_enabled)
- [`result_content_expired`](https://developer.noryo.app/fr-FR/errors/result_content_expired)
- [`rate_limited`](https://developer.noryo.app/fr-FR/errors/rate_limited)
- [`internal_error`](https://developer.noryo.app/fr-FR/errors/internal_error)

## Exemples de requête

cURL

```bash
curl -sS -g -X GET 'https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}' \
  -H "Authorization: Bearer $NORYO_API_KEY"
```

JavaScript

```js
const response = await fetch("https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.NORYO_API_KEY}`,
  },
});
console.log(response.status, await response.text());
```

Python

```python
import os

import requests  # pip install requests

response = requests.get(
    "https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}",
    headers={
        "Authorization": "Bearer " + os.environ["NORYO_API_KEY"],
    },
)
print(response.status_code, response.text)
```

Go

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("NORYO_API_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.StatusCode, string(data))
}
```

Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}"))
            .method("GET", HttpRequest.BodyPublishers.noBody())
            .header("Authorization", "Bearer " + System.getenv("NORYO_API_KEY"))
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.statusCode() + " " + response.body());
    }
}
```

C#

```csharp
using System;
using System.Net.Http;

using var client = new HttpClient();
using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.noryo.app/merchant/v1/enrichments/{enrichment_id}");
request.Headers.TryAddWithoutValidation("Authorization", "Bearer " + Environment.GetEnvironmentVariable("NORYO_API_KEY"));

using var response = await client.SendAsync(request);
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());
```

---

Page canonique : https://developer.noryo.app/fr-FR/merchant/reference/get-enrichment
