Account Validate

Confirm the receiver's account or wallet before disbursement, verify that the account is active, eligible to receive funds, matches the intended beneficiary's name, and supports the transaction amount and currency.

Preview · readme-account-validate
POST /v1/accounts/validate
i
Who calls this? MoneyGram invokes the the receiving institution's Account Validate endpoint. The receiving institution validates the request and returns the verification result synchronously.

Request fields

Sender details

FieldRequiredTypeDescription
transaction.sender.person.firstNameRequiredString (1/50)Sender first name.
transaction.sender.person.middleNameOptionalString (0/50)Sender middle name.
transaction.sender.person.lastNameRequiredString (1/50)Sender last name.
transaction.sender.person.secondLastNameOptionalString (0/50)Sender second last name.

Allowed characters: [a-zA-Z À-ſ-'/]. Special characters such as - / ' may appear.

Receiver details

FieldRequiredTypeDescription
transaction.receiver.person.firstNameRequiredString (1/50)Beneficiary first name.
transaction.receiver.person.middleNameOptionalString (0/50)Beneficiary middle name.
transaction.receiver.person.lastNameRequiredString (1/50)Beneficiary last name.
transaction.receiver.person.secondLastNameOptionalString (0/50)Beneficiary second last name.

Transaction

FieldRequiredTypeDescription
receiveAmount.valueRequiredDecimal (12,3)Receive amount in transacting currency. Must be greater than 0.
receiveAmount.currencyCodeRequiredString (3)ISO 4217 currency code.
accountCodeRequiredString (1/15)Bank code, routing code, wallet provider, or IFSC code — used to route the credit to the beneficiary institution.
accountNumberRequiredString (1/X)Beneficiary bank account or wallet number. Format agreed bilaterally with the partner.
receiveCountryCodeRequiredString (3)ISO 3166-1 alpha-3 country code where funds are credited.

Additional data

Extra context for regulatory and routing purposes is sent as key-value pairs inside the additionalData array. All supported keys are always included in the payload (values may be empty) for forward compatibility.

KeyDescription
purposeOfTransactionPurpose of remittance.
senderCountryCodeSender country ISO code.
senderIdTypeType of sender identification.
senderIdNumberSender identification number.
senderNationalitySender nationality.
senderAddressLine1Sender address.
senderDateOfBirthSender date of birth (format: YYYY-MM-DD).

Example request

  POST /v1/accounts/validate application/json
{
  "sender": {
    "person": {
      "firstName": "Chinwe",
      "middleName": "",
      "lastName": "Adebayo",
      "secondLastName": ""
    }
  },
  "receiver": {
    "person": {
      "firstName": "Kehinde",
      "middleName": "",
      "lastName": "Obi",
      "secondLastName": ""
    }
  },
  "accountCode": "<accountCode>",
  "accountNumber": "<accountNumber>",
  "receiveCountryCode": "<receiveCountryCode>",
  "receiveAmount": {
    "value": 130000.00,
    "currencyCode": "<currencyCode>"
  },
  "additionalData": [
    { "key": "purposeOfTransaction", "value": "" },
    { "key": "senderCountryCode",    "value": "" },
    { "key": "senderIdType",         "value": "" },
    { "key": "senderIdNumber",       "value": "" },
    { "key": "senderNationality",    "value": "" },
    { "key": "senderAddressLine1",   "value": "" },
    { "key": "senderDateOfBirth",    "value": "" }
  ]
}

Responses

200 OK Successful validation

The response body is optional. Partners may enrich the response with receiver account details.

AttributeTypeDescription
messageStringOptional response message.
receiver.accountTitleStringName associated with the account.
receiver.accountStatusStringAccount status.
receiver.accountCurrencyStringCurrency of the account.
receiver.nameMatchPercentageStringPercentage match between the beneficiary name and the institution's records.
receiver.accountTypeStringType of account.
HTTP/1.1 200 OK application/json
{
  "message": "Success",
  "receiver": {
    "accountTitle": "",
    "accountStatus": "",
    "accountCurrency": "",
    "nameMatchPercentage": "",
    "accountType": "",
  }
}
4xx / 5xx Validation failed

On failure, return an error object. Optional receiver attributes may still be included for context.

AttributeTypeDescription
error.codeStringMoneyGram-defined error code.
error.messageStringHuman-readable error message.
error.targetStringField causing the error.
HTTP/1.1 400 Bad Request application/json
{
  "error": {
    "code": "02",
    "message": "Invalid Account",
    "target": "accountNumber"
  }
}

Response codes

HTTP Error code Scenario Message
200Successful validation
40001Name mismatchAccount Name mismatch
40002Invalid account numberInvalid Account Number
40003Currency mismatchAccount not eligible for this transaction
40004Account does not existAccount Number does not exist
40005Invalid amountInvalid Amount
40011Account blockedAccount Blocked
40013Invalid bank / routing codeInvalid Bank/Routing code
40015Invalid account typeInvalid Bank Account Type
40016Bank unavailableBank not available / closed
40022Invalid request formatInvalid Request
40024Transfer limit exceededTransfer limit exceeded
40029Service not allowedService not allowed
40036Other validation failureOther
40041Daily limit exceededMaximum number of transactions per day exceeded
40042Monthly limit exceededMaximum number of transactions per month exceeded
40043Below minimum amountMinimum Amount not met
40127Unauthorized requestUnauthorized
50010Validation timeoutUnable to verify account
50012Transaction processing errorTransaction cannot be completed
50020Internal partner errorInternal Error
50030Central switch errorUnable to process transaction
50340Downstream service unavailableService unavailable for downstream bank