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

# EUR payouts

> Pay out EUR over SEPA to any IBAN in the SEPA zone. Covers who can receive first-party and third-party payouts, IBAN registration and validation, the SEPA payment reference rules, batch payouts, and errors.

EUR payouts go out over SEPA to an IBAN at a bank in the SEPA zone. See [Payouts](https://dev.enterprise.moonpay.com/offramp.md) for the overall flow.

## Who can receive EUR payouts

| Payout | Providers | Who can use it |
| - | - | - |
| First party (`is_third_party: false`) | Fiat Republic, then Monerium | Individuals and businesses |
| Third party (`is_third_party: true`) | Monerium only | Customers eligible for Monerium |

Third-party SEPA payouts depend on Monerium, which doesn't serve individuals with US, North Korean, Iranian, Venezuelan, or Myanmar nationality, or anyone living outside Monerium's operating countries. That excludes US residents of any nationality. Read `abilities.fiat_payout.eur.sepa` and `sepa_thirdparty` from `GET /api/customers/{customer_id}/abilities` to see what a customer can use. EUR has no SWIFT payouts.

## Register the bank account

`POST /api/addresses/fiat` with a `SEPA` account identifier:

```bash SEPA theme={null}
curl -X POST "https://api.sandbox.iron.xyz/api/addresses/fiat" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "X-API-Key: <your-api-key>" \
  -d '{
    "customer_id": "4b85d15e-f343-41c0-809c-85314cae2fa6",
    "currency": { "code": "EUR" },
    "label": "Primary Business Account",
    "bank_details": {
      "recipient": { "type": "Business", "name": "Acme Corp GmbH" },
      "provider_name": "Deutsche Bank",
      "provider_country": { "code": "DE" },
      "account_identifier": {
        "type": "SEPA",
        "iban": "DE89370400440532013000"
      },
      "address": {
        "street": "Friedrichstrasse 123",
        "city": "Berlin",
        "state": "Berlin",
        "country": { "code": "DE" },
        "postal_code": "10117"
      },
      "is_third_party": false
    }
  }'
```

> [!NOTE]
>
> `POST /api/addresses/fiat` requires an `Idempotency-Key` header. A missing key returns `400`. Only successful responses are cached, so a retry after an error runs again. See [Idempotency](https://dev.enterprise.moonpay.com/idempotency.md).

* `iban`: MoonPay Enterprise validates the checksum and stores the IBAN without spaces. A malformed IBAN returns `400` with `"Invalid IBAN"`
* `provider_country`: must be a SEPA country. A bank outside the SEPA zone, for example in the UAE, returns `400` with `"Bank from non-SEPA country"`

The other fields follow the same rules as every bank account. See [Fields for every rail](https://dev.enterprise.moonpay.com/payouts/usd.md#fields-for-every-rail).

### How long registration takes

An account that Monerium can pay registers right away. An account that only Fiat Republic can pay stays `RegistrationPending` until Fiat Republic activates the payee, then moves to `Registered`. If registration keeps failing for more than 24 hours, the account moves to `RegistrationFailed`. Listen for the `register_fiat_address_status` webhook instead of polling.

## Create the payout Autoramp

Create a standing Autoramp or a quote-based Autoramp the same way as any payout. See [Payouts](https://dev.enterprise.moonpay.com/offramp.md#payout-with-an-exact-out-quote). The recipient is the registered account:

```json theme={null}
"recipient_account": {
  "type": "Fiat",
  "account_identifier": { "type": "SEPA", "iban": "DE89370400440532013000" }
}
```

## Payment reference

Set `sepa_payment_reference` on the Autoramp. The recipient sees it as the transfer's reference.

* 6-140 characters
* Letters, digits, spaces, and `-`, `.`, `/`
* At least 6 letters or digits, and not one character repeated, such as `AAAAAA`

A reference that breaks a rule returns `400` with a plain string that names the rule, for example:

```json 400 Bad Request theme={null}
"sepa_payment_reference must contain at least 6 alphanumeric characters"
```

The reference is fixed when you create the Autoramp. On a quote-based Autoramp, the reference is part of the signed quote: pass it on `GET /api/autoramps/quote`, not on `POST /api/autoramps`, which returns `400` with `"Invalid signature"` if you add it there. To use a different reference for later deposits, pass `payment_reference` on `GET /api/autoramps/{autoramp_id}/quote`. See [Quotes](https://dev.enterprise.moonpay.com/quotes.md).

## Third-party payouts

Set `is_third_party: true` when you register an account that doesn't belong to your customer. MoonPay Enterprise sends third-party SEPA payouts through Monerium and screens every third-party recipient against sanctions lists when the payout runs.

## Timing

Payouts sent through Fiat Republic use SEPA Credit Transfer. You can't request SEPA Instant for a payout. See [Settlement Times by Payment Method](https://dev.enterprise.moonpay.com/transaction-status.md#settlement-times-by-payment-method).

With `batch_payout: true`, EUR Autoramps pay out once a day at 18:00 UTC. See [End of Day Settlement](https://dev.enterprise.moonpay.com/end-of-day-settlement.md).

## Fees and minimums

Banking fees come from the Autoramp's fee profile. See [Fees and Invoices](https://dev.enterprise.moonpay.com/fees-and-invoices.md). A payout under 1 EUR ends as `RejectedMinAmount`. See [Minimum Transaction Amount](https://dev.enterprise.moonpay.com/limits-and-minimum.md#minimum-transaction-amount).

## What can go wrong

| Response | Cause |
| - | - |
| `400` `"Invalid IBAN"` | The IBAN fails validation |
| `400` `"Bank from non-SEPA country"` | `provider_country` isn't in the SEPA zone |
| `409` `"A fiat address with this bank account already exists for this customer"` | The account is already registered. Reuse its ID |
| `422` `{ "message": "Customer does not have access to this rail", "trace_id": "..." }` | The customer can't use a SEPA provider for this kind of payout yet. Check `abilities.fiat_payout.eur` |
| `422` `{ "message": "No provider supporting payout to this IBAN available for this customer", "trace_id": "..." }` | A Monaco (`MC`) IBAN for a customer that only Fiat Republic can pay |

## Sandbox

Sandbox registers EUR accounts automatically. Test the full payout with [Test the full flow in Sandbox](https://dev.enterprise.moonpay.com/offramp.md#test-the-full-flow-in-sandbox).
