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.

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 À-ſ-'/]. 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.
senderCountryCodeSender country (ISO).
senderIdTypeType of sender identification.
senderIdNumberSender identification number.
senderNationalitySender nationality.
senderAddressLine1Sender address.
senderCitySender city.
senderDateOfBirthSender date of birth (YYYY-MM-DD).
sourceOfFundSource of funds.
senderRelationshipToReceiverRelationship between sender and beneficiary.

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

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

HTTP Code Scenario
200PEN1200Acknowledged — delivery in progress
200REC1504Received — confirmed credited
200REC1505Received — assumed credited
40001Account Name mismatch
40002Invalid Account Number
40003Account not eligible for this transaction
40004Account Number does not exist
40005Invalid Amount / Currency
40006Invalid Sender
40007Invalid Date of Birth
40008Invalid State
40009Invalid Country
40011Account Blocked
40013Invalid Bank / Routing code
40015Invalid Bank Account Type
40016Bank not available / closed
40021Invalid Transaction
40022Invalid Request
40023Transaction frequency exceeded
40024Transfer limit exceeded
40025Exchange rate error
40026Suspected fraud
40029Service not allowed
40036Other
40037Transaction cannot be completed — violation of law
40038Transaction does not fulfil AML requirement
40041Maximum number of transactions per day exceeded
40042Maximum number of transactions per month exceeded
40043Minimum amount for processing the transaction not met
50010Unable to verify account
50012Transaction cannot be completed
50020Internal Error
50030Unable to process transaction
50340Service 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.
Error mappingReturn MoneyGram standard response and error codes.