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.

POST /v1/accounts/validate
i
Who calls this? MoneyGram invokes 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.firstNameOptionalString (1/50)Sender first name.
transaction.sender.person.middleNameOptionalString (0/50)Sender middle name.
transaction.sender.person.lastNameOptionalString (1/50)Sender last name.
transaction.sender.person.secondLastNameOptionalString (0/50)Sender second last name.

Allowed characters: [a-zA-Z \u00C0-\u017F\-\'\/]. 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

200 OK Success

Returns 200 OK on successful validation. The body is optional; see Responses for the receiver attributes that may be included.

400 Bad Request Validation failure

Error codeScenarioMessage
01Name mismatchAccount Name mismatch
02Invalid account numberInvalid Account Number
03Currency mismatchAccount not eligible for this transaction
04Account does not existAccount Number does not exist
05Invalid amountInvalid Amount
11Account blockedAccount Blocked
13Invalid bank / routing codeInvalid Bank/Routing code
15Invalid account typeInvalid Bank Account Type
16Bank unavailableBank not available / closed
22Invalid request formatInvalid Request
24Transfer limit exceededTransfer limit exceeded
29Service not allowedService not allowed
36Other validation failureOther
41Daily limit exceededMaximum number of transactions per day exceeded
42Monthly limit exceededMaximum number of transactions per month exceeded
43Below minimum amountMinimum Amount not met

401 Unauthorized

Error codeScenarioMessage
27Unauthorized requestUnauthorized

500 Internal Server Error Server-side failure

Error codeScenarioMessage
10Validation timeoutUnable to verify account
12Transaction processing errorTransaction cannot be completed
20Internal partner errorInternal Error
30Central switch errorUnable to process transaction

503 Service Unavailable

Error codeScenarioMessage
40Downstream service unavailableService unavailable for downstream bank


Did this page help you?