> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> The error codes that are new on the Multi-asset API, with the shared wrapper.

Each error uses the same wrapper as `/v1`. The wrapper has a stable `code`
and a `message` for a person to read. Use the `code` to select the action in
your integration. The text of the `message` can change.

```json theme={null}
{ "error": { "code": "quote_expired", "message": "..." } }
```

Jenzy never renames a code and never removes a code. Jenzy only adds codes.

The shared codes of the [MWK API errors page](/errors) apply on `/v2` too.
Examples are `validation_error`, `unauthorized`, `not_found`, `conflict`,
`rate_limited`, `internal_error`, `service_incident`, and
`service_maintenance`. This page lists only the codes that are new or
different on `/v2`.

## Two groups of codes

* **Rejections** (the first table) — Hermes refused the request. **Hermes
  made no payout, no conversion, and held no money.** Correct the request, or
  wait, and then send the request again.
* **Failure codes** — Hermes accepted the request, and it failed later. A
  `failed` payout has a `failure.code` from the
  [payout failure codes](/errors#failure-codes), the same words as `/v1`. A
  `failed` conversion has a `failure.code` from the
  [conversion failure codes](/v2/conversions#when-a-conversion-fails).

## New rejection codes

| Code                     | HTTP | Meaning                                                                                                                                                                                                                  | Send again?                                                          |
| ------------------------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------- |
| `onboarding_incomplete`  | 403  | Your org does not have access to `/v2` yet. Jenzy did not finish the setup of your org.                                                                                                                                  | No. Speak to Jenzy.                                                  |
| `access_suspended`       | 403  | Your org had access to `/v2`, and Jenzy paused it.                                                                                                                                                                       | No. Speak to Jenzy.                                                  |
| `corridor_not_enabled`   | 403  | Jenzy did not enable this asset for your org, or did not enable this operation in this asset. The message tells you which.                                                                                               | No. Speak to Jenzy to enable the corridor.                           |
| `insufficient_funds`     | 402  | Your `available` in the source asset is below the debit. On `/v2` the source asset is `source_asset` for a payout and `from_asset` for a conversion.                                                                     | Yes, after you fund that one balance, or convert into it.            |
| `unsupported_pair`       | 422  | The two assets are both fiat, or both stablecoins, or the same asset. A pair must be one fiat asset and one stablecoin, in either direction. Hermes does not support fiat to fiat, or stablecoin to stablecoin, for now. | Yes, with a supported pair.                                          |
| `invalid_wallet_address` | 422  | The address has the wrong shape for the `network`, or the asset does not exist on that network. The message names the network.                                                                                           | Yes, after you correct the address or the network.                   |
| `amount_below_minimum`   | 422  | The amount is below the minimum for this asset and operation.                                                                                                                                                            | Yes, with a larger amount.                                           |
| `limit_exceeded`         | 422  | The amount is above the maximum for this asset and operation.                                                                                                                                                            | Yes, with a smaller amount.                                          |
| `quote_expired`          | 422  | You executed the quote after its `expires_at`.                                                                                                                                                                           | Yes. Get a new quote, then execute it.                               |
| `quote_used`             | 409  | You executed this quote before, under a different `Idempotency-Key`. The first execution stands.                                                                                                                         | No. Read the first conversion. Get a new quote for a new conversion. |
| `rate_unavailable`       | 503  | Hermes has no fresh rate for a quote, or to price a payout fee. There is no `Retry-After` header.                                                                                                                        | Yes, after a short time.                                             |
| `service_unavailable`    | 503  | The provider did not give a rate for an FX payout, or did not issue a deposit address. There is no `Retry-After` header.                                                                                                 | Yes, after a short time.                                             |
| `sandbox_only`           | 403  | You called `POST /v2/collections/simulate` outside the sandbox.                                                                                                                                                          | No. Money arrives in production only through a real collection.      |

## Codes that are different on `/v2`

* `validation_error` (400) also covers a create request with no
  `Idempotency-Key`. On `/v2` the key is necessary on `POST /v2/payouts` and
  `POST /v2/conversions`.
* `insufficient_funds` (402) is about **one** balance, the balance of the
  source asset. See the table above.
* The `/v1` codes `unknown_institution`, `invalid_mobile_number`,
  `mobile_number_institution_mismatch`, and `invalid_account_number` keep
  their meaning for a `bank` or `momo` destination. A wallet destination uses
  `invalid_wallet_address`.
* `amount_limit_exceeded` and `org_limit_exceeded` are `/v1` codes. On `/v2`
  the per-payout limits use `amount_below_minimum` and `limit_exceeded`.
  There is no daily cap.

## When Jenzy pauses the API

`service_incident` and `service_maintenance` work as on `/v1`. See
[Maintenance and outages](/maintenance-and-outages). `/v2` has its own pause,
apart from `/v1`. `GET /v2/ping` tells you the state of `/v2`. Its `status`
field is `live`, `maintenance`, or `outage`.

During a `/v2` pause, each `/v2` route but `GET /v2/ping` gives `503`.
Payouts that Hermes accepted before the pause continue automatically when the
pause ends. Conversions that Hermes accepted get to their result. Hermes still
delivers webhooks.

<Note>
  An access code never names the company that holds the money for Jenzy.
  `onboarding_incomplete` and `access_suspended` are about your org and
  Jenzy only. Speak to Jenzy when you get one.
</Note>
