---
title: "Validate a recipient account"
method: POST
path: "/irt/v1/validate/account"
tags: ["IRT"]
---

# Validate a recipient account

`POST /irt/v1/validate/account`

## Request

- The document declares no server URL.
- Auth: none declared. Required headers: `ApiKey`, `MerchantId`, `Environment`

Validates a recipient mobile/bank account against the last-mile partner before a transaction is created. No transaction is created and no float is touched. Behind ENABLE_FX_ENGINE flag.

## Headers

- `ApiKey` string, required
- `MerchantId` string, required
- `Environment` 'live' | 'sandbox', required

## Request body

- ValidateAccountRequestDto
  - `provider` string, required: Mobile money provider or bank identifier. Must be valid for the requested corridor.
  - `corridor` string, required: Corridor code. Determines which last-mile partner adapter handles the check and which rail (mobile/bank) is expected.
  - `sender` ValidateAccountSenderDto, required
    - `firstName` string, required: First name of the sender initiating this validation check.
    - `lastName` string, required: Last name of the sender initiating this validation check.
  - `recipient` ValidateAccountRecipientDto, required
    - `firstName` string, required: Recipient's expected first name. Used to compute a nameMatch in the response.
    - `lastName` string, required: Recipient's expected last name. Same usage as firstName.
    - `mobile` string: Recipient mobile number in E.164 format. Required for a mobile-money corridor; exclusive with accountNumber.
    - `accountNumber` string: Recipient bank account number. Required for a bank-transfer corridor; exclusive with mobile.
    - `bankCode` string: Bank identifier code. Required when accountNumber is provided.

## Response `200`

- ValidateAccountResponseDto
  - `status` 'account_valid' | 'account_not_found' | 'account_unknown' | 'timeout', required: Account status.
  - `provider` string, required: Provider that was checked. Echoed back from the request.
  - `corridor` string, required: Corridor that was checked. Echoed back from the request.
  - `mobile` string: Mobile number checked, masked to the last 4 digits. Present for a mobile-money corridor.
  - `accountNumber` string: Bank account number checked, masked to the last 4 digits. Present for a bank-transfer corridor.
  - `accountHolder` AccountHolderDto, required
    - `firstName` string: First name as held by the partner, when the partner returns it.
    - `lastName` string: Last name as held by the partner, when the partner returns it.
    - `nameMatch` 'match' | 'partial_match' | 'no_match' | 'not_verified', required: How the recipient identity provided in the request compares to the partner-held account. NOT_VERIFIED when the partner does not return a name-match score.
  - `validatedAt` string, required: UTC timestamp of the validation check.
  - `advisory` string, required: Always present. Validation is advisory only — a valid result does not guarantee payout success.

## Other responses

- `401`: Wrong credentials
- `429`: ThrottlerException: Too Many Requests
- `500`: Internal error

## Changes

- **2026-11-03** `f6d3f87df5e0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hub2/apis/hub2-service-api/changes/irt/v1/validate/account/post.md)

---

[API](https://skmtc.dev/hub2/apis/hub2-service-api.md) - [All operations](https://skmtc.dev/hub2/apis/hub2-service-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hub2/apis/hub2-service-api/revisions/f6d3f87df5e0?raw)
