# Answer a Quote's Form Step

Send the bank ramp the answers to the step a payout quote is waiting for, and get the next step or the ready quote.

## Overview

When [Create a Payout Quote](https://docs.aureahub.com/docs/payout-quote.md) answers `needs_step`, fill in `nextStep.schema` and send it here as `form`. Aurea sends it on the quote's form session, with the channel, the amount, the saved beneficiary and `quoted` as first asked; your fee is already on the session. The answer is the same quote: another step, or `ready` with the amounts.

- A quote of another user or of the other environment, or an unknown id, answers `404` `NOAH_QUOTE_NOT_FOUND`. A quote that is already `ready` answers `409` `NOAH_QUOTE_READY` without calling the bank ramp.
- The same checks as for a new quote come first: payouts switched on (`403` `NOAH_FUNCTION_OFF`), a bank ramp profile (`404` `NOAH_CUSTOMER_NOT_FOUND`) with an approved KYC (`422` `NOAH_KYC_NOT_APPROVED`), and a currency your tenant still offers for payout (`400` `NOAH_PAIR_UNAVAILABLE`).
- the bank ramp's refusal of the answers passes through, for example `400` `NOAH_INVALID_REQUEST` with `fields`; the quote keeps waiting for its step.
- `quoteId` is a UUID: anything else answers `400`. Send `isTestnet` as for the quote.

## Endpoint

### `POST /v1/ramp/bank/payout/quotes/{quoteId}/steps`

Authentication: bearer token required.

Answers the form step a payout quote is waiting for.

**Path parameters**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `quoteId` | string | yes | The quote's id (UUID) |

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `form` | object | yes | The answers `nextStep.schema` asks for |
| `isTestnet` | boolean | no | `true` for the bank ramp's sandbox; `false` or omitted for production |

**Responses**

`200` Ready

```json
{
  "quoteId": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b0a9c8e7f",
  "environment": "sandbox",
  "status": "ready",
  "channelId": "ebb9736b-08b3-599d-886b-10ee8aea82b5",
  "paymentMethodType": "BankSepa",
  "country": "DE",
  "fiatCurrency": "EUR",
  "cryptoCurrency": "EURC_TEST",
  "requestedFiatAmount": "9.5",
  "requestedCryptoAmount": null,
  "nextStep": null,
  "totalFee": "0.285",
  "cryptoAmountEstimate": "10.3",
  "cryptoAuthorizedAmount": "10.3",
  "fiatAmount": "9.5",
  "rate": "0.95",
  "breakdown": [
    { "type": "ChannelFee", "amount": "0.2", "fixedAmount": "0.2", "variableAmount": null },
    { "type": "BusinessFee", "amount": "0.1", "fixedAmount": null, "variableAmount": "0.1" },
    { "type": "Remaining", "amount": "10", "fixedAmount": null, "variableAmount": null }
  ],
  "quote": { "locked": true, "expiresAt": "2026-09-17T12:30:00.000Z" },
  "createdAt": "2026-09-17T12:00:00.000Z",
  "updatedAt": "2026-09-17T12:01:00.000Z"
}
```

`409` Already ready

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "This payout quote needs no more form steps: it is ready.",
  "details": { "code": "NOAH_QUOTE_READY", "quoteId": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b0a9c8e7f" }
}
```

---

Web version: https://docs.aureahub.com/#payout-quote-step
