# Operations

> Running a Merchant API integration in production: rate limits, retries, timeouts, errors, request IDs and observability, with the guarantees the server actually holds.

This section gathers what you need to run an integration without surprises: what the server guarantees when something goes wrong, and what is up to you.

## What the server guarantees

- **A rate-limit refusal computes nothing and bills nothing.** A `429` costs less than a served request. See [Rate limits](https://developer.noryo.app/en-GB/merchant/rate-limits).
- **An engine failure is never billed or memorised.** A `503 engine_error` is retried with the same `Idempotency-Key`. See [Retries](https://developer.noryo.app/en-GB/merchant/operations/retries).
- **Settlement is atomic.** The idempotency key reservation, billing and the response memory are written together: there is no moment at which the invoice would be recorded and the response lost.
- **An attempt has exactly one identifier**, the same in the header, the error body and Noryo's logs. See [Request IDs](https://developer.noryo.app/en-GB/merchant/operations/request-ids).
- **No error leaks internal information**: no SQLSTATE, no table name, no stack trace, no internal hostname. See [Errors](https://developer.noryo.app/en-GB/merchant/error-handling).

## What is not published

- **No latency or availability commitment** is published. Do not build your timeouts on an assumed value. See [Timeouts](https://developer.noryo.app/en-GB/merchant/operations/timeouts).
- **Production rate limits** are not published: read `Noryo-RateLimit-Limit`.

## The rule that makes everything else safe

Send an `Idempotency-Key` generated once per operation, and reuse it for every retry of that operation. With it, a retry after a timeout, a `500`, a `503` or a network cut can neither duplicate an enrichment nor bill it twice. Add an `external_transaction_id` so that the same transaction sent again weeks later is recognised. See [The two identifiers](https://developer.noryo.app/en-GB/merchant/identifiers).

## In this section

- [Rate limits](https://developer.noryo.app/en-GB/merchant/rate-limits): token bucket, headers, `429` and `Retry-After`.
- [Retries](https://developer.noryo.app/en-GB/merchant/operations/retries): what to retry, when, and how.
- [Timeouts](https://developer.noryo.app/en-GB/merchant/operations/timeouts): what happens when a request takes long, on both sides.
- [Errors](https://developer.noryo.app/en-GB/merchant/error-handling): the Problem Details format and the catalogue of codes.
- [Request IDs](https://developer.noryo.app/en-GB/merchant/operations/request-ids): `Noryo-Request-Id`, and how to use it with support.
- [Observability](https://developer.noryo.app/en-GB/merchant/operations/observability): what you can measure, and what Noryo logs.

---

Canonical page: https://developer.noryo.app/en-GB/merchant/operations
