Retention and 410
How long Noryo keeps what: result content 90 days, idempotency 24 hours, raw descriptor never. What a 410 says and what survives the purge.
Noryo Merchant API is not an archive. It keeps the content of a result long enough to read it back, then purges it.
Retention periods
| Data | Retention |
|---|---|
Content of a result (merchant, readable status) | 90 days |
Idempotency memory (response bound to an Idempotency-Key) | 24 hours |
Raw descriptor (descriptor) | Not retained |
| Accounting record | Kept for its own legal duration |
The raw descriptor is not retained. Retention is 0 days: no column of the module can store it, and it never appears in a log. Only a fingerprint of its canonical form is kept, to recognise a transaction already seen.
The 410
After 90 days, a read returns:
{
"type": "https://developer.noryo.app/errors/result_content_expired",
"title": "Result content expired",
"status": 410,
"code": "result_content_expired",
"detail": "The result content was purged and is no longer available.",
"request_id": "req_…",
"enrichment_id": "enr_ffe80956-cc3e-4e1f-b4b6-724ad231fbb7"
}JSONThe body repeats the enrichment_id concerned. It does not say which retention class applied: that is internal.
A 410 is not a 404: it proves the result existed and was purged. An identifier that never existed, or that belongs to another workspace, returns 404.
A not_found result has no content to purge: its read keeps returning 200 with merchant: null, never 410, and so does sending its transaction again.
The 410 on a create call
Sending again with POST a transaction already known (same external_transaction_id, same input) whose current content has been purged also returns 410 result_content_expired. This refusal is not billed. To get a readable result again, refresh the transaction: see Refresh.
What survives
The identity, the ledger line, the units, the price and the accounting timestamps all survive: you can still prove what you bought and when. Only the content is gone.
| Item | After the purge |
|---|---|
enrichment_id | Still recognised: 410 |
Transaction (external_transaction_id) | Still recognised: deduplication and refresh possible |
| Billed usage | Unchanged |
| Content | Purged |
What is up to you
Store what you need on your side. If your product shows a merchant's name on last year's transaction, record merchant when you receive it, together with the enrichment_id and the request_id. Reading the API again does not replace your own storage.
| Keep | Why |
|---|---|
merchant (name, category, logo, location) | The content expires after 90 days |
enrichment.status and confidence | To know later what the result was worth |
enrichment_id | To read or refresh |
Noryo-Request-Id | To find the attempt with support |
Published on 2026-10-08 21:04 UTC (version 1).