Read an enrichment
GET /merchant/v1/enrichments/{enrichment_id}: a free read of a past result, what it returns, who can make it, and when it returns 404 or 410.
GET /merchant/v1/enrichments/{enrichment_id} returns the stored result of a past enrichment. Reading is free and never bills. It requires the enrich:read scope.
Example
curl -sS "https://api.noryo.app/merchant/v1/enrichments/enr_ffe80956-cc3e-4e1f-b4b6-724ad231fbb7" \
-H "Authorization: Bearer $NORYO_API_KEY"Shell{
"enrichment_id": "enr_ffe80956-cc3e-4e1f-b4b6-724ad231fbb7",
"merchant": {
"name": "McDonald's",
"category": "alimentation.restaurant",
"location": { "city": "PARIS", "postal_code": "75018" },
"logo_url": "https://www.mcdonalds.fr/apple-touch-icon.png",
"confidence": 0.96
},
"enrichment": { "status": "resolved", "reason": null, "environment": "sandbox", "source": "noryo", "customized": false },
"retrieval": { "billable": false, "units": 0 },
"original": { "billable": false, "units": 1 }
}JSONTwo objects for two questions
| Object | Question | Value |
|---|---|---|
retrieval | What does this read cost? | Always { "billable": false, "units": 0 } |
original | What did the enrichment cost when it happened? | billable and units of the original call |
The read carries no usage object: these two objects take its place. merchant and enrichment have the same shape as on creation. See Enrichment.
What reading an identifier returns
Each enrichment_id designates its own result, frozen. After a refresh, the old identifier still returns the old result and the new identifier returns the new one: the read does not follow the transaction's "current result". To know the latest result, keep the identifier returned by the refresh (body or Location header). See Lifecycle.
Who can read
Any API key with the enrich:read scope, in the same workspace and the same environment as the key that created the enrichment. The original key no longer needs to exist.
When the read fails
| Status | Code | When |
|---|---|---|
404 | enrichment_not_found | Unknown or malformed identifier, from another workspace or another environment. The cases are deliberately indistinguishable. |
410 | result_content_expired | The content has passed its 90-day retention. The body repeats the enrichment_id. See Retention and 410. |
403 | insufficient_scope | The key lacks enrich:read |
401 | invalid_api_key | Key missing, unknown or revoked |
429 | rate_limited | Rate-limit bucket empty |
{
"type": "https://developer.noryo.app/errors/enrichment_not_found",
"title": "Enrichment not found",
"status": 404,
"code": "enrichment_not_found",
"detail": "No enrichment matches this identifier in this workspace.",
"request_id": "req_…"
}JSONNothing reveals that an enr_ exists elsewhere: a 404 never says "forbidden".
Rate
A read consumes a rate-limit token, like a create call. A successful GET response carries the Noryo-RateLimit-* headers, like a successful POST. See Rate limits.
A read is not an archive. The content disappears after 90 days: store what you need on your side.
Published on 2026-10-09 10:18 UTC (version 2).