Transfer Funds

MoneyGram invokes the receiving institution's Fund Transfer endpoint to initiate the crediting of funds to the beneficiary's account or wallet. Upon receiving the request, the partner institution validates the payload, processes the disbursement instruction, and returns a synchronous acknowledgement. The final settlement outcome is subsequently reported asynchronously through the Status Webhook.

POST /v1/transfers

Partner workflow

  1. Validate the request payload.
  2. Process the disbursement transaction.
  3. Return a synchronous acknowledgement response.
  4. Report the final transaction status asynchronously via the Status Webhook.
i
Synchronous acknowledgement, asynchronous settlement This endpoint is synchronous and expects a prompt acknowledgement. Final transaction status should be delivered subsequently via the Status Webhook.

Network (HTTP) headers

HeaderDelivery typeValueDescription
X-MG-DELIVERY-TYPEAccount DepositBANK_DEPOSITDisbursement credited to a bank account.
WalletDIRECT_TO_ACCTDisbursement credited to a mobile wallet.

Request fields

Transaction details

FieldRequiredTypeDescription
transaction.mgiTransactionIdRequiredString (20)Unique MoneyGram transaction identifier. Format: XXXXXXXX0000MMddYYYY.
transaction.receiveCountryCodeRequiredString (3)ISO 3166-1 alpha-3 country code where funds are credited.
transaction.sendCountryCodeRequiredString (3)ISO 3166-1 alpha-3 country code where funds originate.
transaction.receiveAmount.valueRequiredDecimal (12,3)Transaction receive amount.
transaction.receiveAmount.currencyCodeRequiredString (3)ISO 4217 currency code.

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 \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.

Account details

FieldRequiredTypeDescription
accountCodeRequiredString (1/15)Bank code, routing code, wallet provider name, or IFSC.
accountNumberRequiredString (1/X)Beneficiary account or wallet number.

Additional data

Supplementary information may be required depending on the corridor or regulatory obligations. These values are transmitted as key-value pairs within transaction.additionalData.

KeyDescription
purposeOfTransactionPurpose of the transfer. See Purpose of Transaction values.
senderCountryCodeSender country (ISO).
senderIdTypeType of sender identification. See Remitter ID type values.
senderIdNumberSender identification number.
senderNationalitySender nationality.
senderAddressLine1Sender address.
senderCitySender city.
senderDateOfBirthSender date of birth (YYYY-MM-DD).
sourceOfFundSource of funds. See Source of Funds values.
senderRelationshipToReceiverRelationship between sender and beneficiary. See Relationship to Receiver values.

Allowed characters for address fields: [a-zA-Z0-9 \u00C0-\u017F\#\/\.\"\'\,\(\)\-].

Example request

POST /v1/transfers application/json
{
  "transaction": {
    "mgiTransactionId": "99999999000020180524",
    "receiveCountryCode": "IND",
    "sendCountryCode": "USA",
    "receiveAmount": {
      "value": "500.23",
      "currencyCode": "INR"
    },
    "sender": {
      "person": {
        "firstName": "Mark",
        "middleName": "",
        "lastName": "Greg",
        "secondLastName": ""
      }
    },
    "receiver": {
      "person": {
        "firstName": "Lewis",
        "middleName": "",
        "lastName": "Jack",
        "secondLastName": ""
      }
    },
    "additionalData": [
      { "key": "purposeOfTransaction",         "value": "" },
      { "key": "senderCountryCode",            "value": "" },
      { "key": "senderIdType",                 "value": "" },
      { "key": "senderIdNumber",               "value": "" },
      { "key": "senderNationality",            "value": "" },
      { "key": "senderAddressLine1",           "value": "" },
      { "key": "senderCity",                   "value": "" },
      { "key": "senderDateOfBirth",            "value": "" },
      { "key": "sourceOfFund",                 "value": "" },
      { "key": "senderRelationshipToReceiver", "value": "" }
    ]
  },
  "accountCode": "<accountCode>",
  "accountNumber": "<accountNumber>"
}

Responses

200 OK Acknowledgement
AttributeTypeDescription
response.responseCodeStringTransaction processing status.
response.messageStringHuman-readable status message.
partnerTransactionIdStringOptional partner transaction reference.
HTTP/1.1 200 OK application/json
{
  "response": {
    "responseCode": "PEN1200",
    "message": "Transaction Acknowledged; In Progress"
  },
  "partnerTransactionId": "988588585869"
}
4xx Validation error

If the request fails validation, return an error object.

AttributeTypeDescription
error.codeStringMoneyGram-defined error code.
error.messageStringDescription of the error.
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

CodeScenario
PEN1200Acknowledged — delivery in progress
REC1504Received — confirmed credited
REC1505Received — assumed credited

400 Bad Request Validation / business rejection

CodeScenario
01Account Name mismatch
02Invalid Account Number
03Account not eligible for this transaction
04Account Number does not exist
05Invalid Amount / Currency
06Invalid Sender
07Invalid Date of Birth
08Invalid State
09Invalid Country
11Account Blocked
13Invalid Bank / Routing code
15Invalid Bank Account Type
16Bank not available / closed
21Invalid Transaction
22Invalid Request
23Transaction frequency exceeded
24Transfer limit exceeded
25Exchange rate error
26Suspected fraud
29Service not allowed
36Other
37Transaction cannot be completed — violation of law
38Transaction does not fulfil AML requirement
41Maximum number of transactions per day exceeded
42Maximum number of transactions per month exceeded
43Minimum amount for processing the transaction not met

500 Internal Server Error Server-side failure

CodeScenario
10Unable to verify account
12Transaction cannot be completed
20Internal Error
30Unable to process transaction

503 Service Unavailable

CodeScenario
40Service unavailable for downstream bank

Duplicate handling

MoneyGram may retry the Fund Transfer request in the event of network or timeout issues. Partners must implement idempotency keyed on transaction.mgiTransactionId. When the same transaction is received again, the partner must respond based on the current processing state:

ScenarioExpected response
Transaction still processingReturn PEN1200
Transaction already creditedReturn REC1504
Transaction previously rejectedReturn the original rejection response
i
Retry flow
  1. MoneyGram calls Fund Transfer; partner responds PEN1200.
  2. MoneyGram's response is lost due to network or operational issue.
  3. MoneyGram retries with the same mgiTransactionId.
  4. Partner returns current state: PEN1200, REC1504, or original rejection.

Prefunding handling

For corridors requiring prefunding with the partner institution, the following rules apply when the MoneyGram prefund account is temporarily unavailable:

!
Do not reject on prefund issues The partner must not reject the transaction. Instead:
  • Return PEN1200 to acknowledge the transaction.
  • Hold the transaction as pending until prefund is replenished.
  • Process normally once prefunding is restored.
  • Report the final status via the Partner Connect API.
If the transaction is ultimately rejected, funds are refunded to the sender.

Implementation expectations

CapabilityExpectation
Request validationValidate required fields, formats, and bilaterally agreed data rules.
Duplicate handlingDetect duplicate requests using mgiTransactionId.
Pending handlingSupport PEN1200 for in-progress transactions.
Final status updateDeliver the final transaction status via the Partner Connect API.
Prefunding supportHold and resume transactions when prefund issues exist.
Optional data handlingSupport agreed optional and conditional fields.
Configurable value listsTreat ID type, purpose, source-of-funds, and relationship value lists as configurable; do not reject on unrecognised values.
Error mappingReturn MoneyGram standard response and error codes.

Field value reference

!
Treat these lists as configurable These values may change without notice if there are regulatory changes on the send side. Each field should be implemented as a configurable item, and a transaction must not be rejected if a new, previously unseen value is received.

Remitter ID type values — senderIdType

ALIEN_ID DRIVERS_LICENSE GOVERNMENT_ID INTERNATIONAL_ID PASSPORT SOCIAL_SECURITY_NUMBER STATE_ID TAX_ID

Purpose of Transaction values — purposeOfTransaction

BUSINESS_EXPENSE DONATION EDUCATION_TRAIN XFER_OWN_SAVNG FAMILY_SUPPORT GIFT INVEST_SAVING LEGAL_OBLIGATION LOAN PURCHASE_GOODS TRAVEL_EXPENSES TRAVEL_EXPENSES_VACATION TRAVEL_EXPENSES_MEDICAL HOUSE_CONSTRUCTION INSURANCE_PAYMENTS PENSION RNT_PYMT_ON_PROPRTY_HLD_ABROAD SUBSCRIPTIONS TICKETS_FOR_INTL_AIR_TRAVEL TICKETS_FOR_INTL_LAND_TRAVEL MEDICAL VACATION_EXPENSES SALARY BILLS FOOD BUSINESS_RELATED FAMILY_FRIENDS_SUPPORT PERSONAL_USE FAMILY_MAINTENANCE OTHERS

Source of Funds values — sourceOfFund

FAMILY_FUNDS GIFT_WINNINGS INHERITANCE LOAN LOTTERY_GAMBLING PENSION SALARY_EMPLOY SALE_OF_PROPERTY SAVINGS SOCIAL_BENEFITS THIRD_PARTY OTHERS

Relationship to Receiver values — senderRelationshipToReceiver

ACQUAINTANCE BUSINESS_PARTNER CLIENT CONTRACTOR EMPLOYER EMPLOY_EMPLOYER FAMILY FRIEND MYSELF ONLINE_FRIEND THIRD_PARTY VENDOR OTHERS


Did this page help you?