# Send the Customer's Details

> Coming soon, upon request — this feature is turned on for your tenant by the Aurea team. [Contact us](https://www.aureahub.com/contact)

Send who the customer is — a person's identity, or a company's registration and its people — for the bank ramp to review.

## Overview

- **With the `reliance` strategy only** (your tenant's own KYC): with another strategy, `403` `BANK_RAMP_KYC_STRATEGY_OFF`. Your tenant's KYC must be on in the environment (`403` `BANK_RAMP_FUNCTION_OFF`) and the user a customer the bank ramp confirmed (`404` `BANK_RAMP_CUSTOMER_NOT_FOUND`) — [Create a Customer](https://docs.aureahub.com/docs/bank-customer-create.md).
- **Exactly one of `personal` and `corporate`**, the customer's kind: the other kind answers `409` `BANK_RAMP_CUSTOMER_KIND_MISMATCH`.
- **Checked, never repaired.** Nothing is trimmed or converted: what passes reaches the bank ramp exactly as you wrote it. A text may not be blank, a field the list below does not name is refused, and a body that does not pass answers `400` `BANK_RAMP_KYC_DATA_INVALID` with `details.fields` — the names of the fields (such as `personal.birthday` or `corporate.representatives.0.idDocument`), at most 50, never their values.
- **`202`**: the bank ramp received the section (`accepted: "details"`) and reviews it in its own time; the customer's states move as it does — read the customer again, or sync it. While the bank ramp reviews a section it refuses another submission of it: `409` `BANK_RAMP_CONFLICT`. Fields it refuses at once: `400` `BANK_RAMP_INVALID_REQUEST`, with their names in `details.fields` when it gives them; fields its review refuses later are named in the customer's `errorFields`.
- Aurea keeps nothing of the data and writes none of it to its logs.
- Texts are at most 255 characters unless stated; `country`, `nationality` are two-letter country codes; dates are `YYYY-MM-DD`.

## Endpoint

### `PATCH /v1/ramp/bank/customer/details`

Authentication: bearer token required.

Sends the customer's identity details to the bank ramp for review.

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `isTestnet` | boolean | no | `true` for the sandbox; `false` or omitted for production |
| `personal` | object | no | A person's details. Exactly one of `personal` and `corporate` |
| `personal.firstName` | string | yes |  |
| `personal.lastName` | string | yes |  |
| `personal.address` | string | yes | Street and number, at most 70 characters |
| `personal.postalCode` | string | yes | At most 20 characters |
| `personal.city` | string | yes |  |
| `personal.country` | string | yes | Two-letter country code |
| `personal.countryState` | string | no | State or region |
| `personal.nationality` | string | yes | Two-letter country code |
| `personal.birthday` | string | yes | `YYYY-MM-DD` |
| `personal.phone` | string | yes | At most 30 characters |
| `personal.email` | string | yes | An email address, at most 254 characters |
| `personal.idDocument` | object | no | `{ number, kind }`: `number` at most 100 characters; `kind` `passport` or `nationalIdentityCard` |
| `corporate` | object | no | A company's details |
| `corporate.name` | string | yes |  |
| `corporate.registrationNumber` | string | yes | At most 100 characters |
| `corporate.registrationDate` | string | no | `YYYY-MM-DD` |
| `corporate.vatNumber` | string | no | At most 100 characters |
| `corporate.website` | string | no |  |
| `corporate.address` | string | yes | At most 70 characters |
| `corporate.postalCode` | string | yes | At most 20 characters |
| `corporate.city` | string | yes |  |
| `corporate.country` | string | yes | Two-letter country code |
| `corporate.countryState` | string | yes | State or region |
| `corporate.representatives[]` | array | yes | Up to 50 people who act for the company: each with a person's fields (`firstName` to `email`, as above) and `idDocument`, required here |
| `corporate.finalBeneficiaries[]` | array | yes | Up to 50 beneficial owners: each with a person's fields and `ownershipPercentage`, a text from `25` to `100` with at most two decimals |
| `corporate.directors[]` | array | yes | Up to 50 directors: each with a person's fields |

**Responses**

`202` Accepted

```json
{
  "environment": "sandbox",
  "customer": {
    "customerId": "2f6c1e84-5b3a-4d97-8e21-0c4a7b9d3f15",
    "profileId": "8d4e2a17-6c3b-4f58-9a0e-1b7c5d3e2f49",
    "kind": "personal",
    "environment": "sandbox",
    "registered": true,
    "state": "created",
    "sections": { "details": null, "form": null, "verifications": [] },
    "closedReason": null,
    "errorFields": [],
    "createdAt": "2026-10-14T09:00:00.000Z",
    "updatedAt": "2026-10-14T09:00:01.000Z"
  },
  "verification": {
    "state": "created",
    "nextStep": "continue_onboarding",
    "missing": ["details", "form", "verifications"],
    "kycStrategy": "reliance"
  },
  "accepted": "details"
}
```

`400` Not valid

```json
{
  "statusCode": 400,
  "error": "BadRequestError",
  "message": "The KYC data is not valid: correct the fields named and send it again.",
  "details": { "code": "BANK_RAMP_KYC_DATA_INVALID", "fields": ["personal.birthday", "personal.idDocument.kind"] }
}
```

`403` Not with this strategy

```json
{
  "statusCode": 403,
  "error": "ForbiddenError",
  "message": "This tenant's bank ramp KYC in sandbox does not take this data through Aurea.",
  "details": { "code": "BANK_RAMP_KYC_STRATEGY_OFF", "environment": "sandbox", "kycStrategy": "…", "kycStrategyNeutral": "identity_sharing" }
}
```

`409` In review

```json
{
  "statusCode": 409,
  "error": "BankRampProviderError",
  "message": "The bank ramp already has what was asked for",
  "details": { "code": "BANK_RAMP_CONFLICT", "providerStatus": 409 }
}
```

The answer is the customer as Aurea keeps it at the time of the call ([Get the Customer](https://docs.aureahub.com/docs/bank-customer-get.md)), with `accepted`: the bank ramp's review has not moved it yet.

---

Web version: https://docs.aureahub.com/#bank-customer-details
