Enhanced Due Diligence (EDD)
How to handle Enhanced Due Diligence (EDD) fields
Overview
MoneyGram performs various compliance rule screenings on all transactions. This is typically performed at the point of Update APIs. In some cases, the MoneyGram compliance team may need to collect additional compliance data from the customer to "clear" the transaction through our compliance engine with minimal friction to the customer.
The following fields are Enhance Due Diligence fields and application are mandated to build and handle the collection of further data:
The additional data is typically from one or more of the following fields:
Field | Type | Optional/Required | Description |
---|---|---|---|
sender.personalDetails.occupationCode | String | Option->Required | Occupation/Employment (Enumerated Values) NOTE: For a full list of accepted occupation codes see Reference Data Enumerations endpoint |
transactionInformation.relationshipToReceiver | String | Option->Required | Declaration of customer’s relationship to the receiver (Enumerated Values) NOTE: For a full list of relationships values. See the RLTIONSHP_TO_RECIVR enumeration from the Reference Data Enumerations endpoint |
transactionInformation.sourceOfFundsCode | String | Option->Required | Declaration of where the transaction funds were sourced. (Enumerated Values) NOTE: For a full list of accepted source of funds values. See the SOURCE_OF_FUNDS enumeration from the Reference Data Enumerations endpoint |
transactionInformation.purposeOfTransaction | String | Option->Required | Declaration of where the transaction funds were sourced (Enumerated Values) NOTE: For a full list of accepted purpose of transaction values. See the PURPSE_OF_TRNSCTION enumeration from the Reference Data Enumerations endpoint |
transactionInformation.intendedUseOfMGIServicesCode | String | Option->Required | Explanation for using MoneyGram service (Enumerated Values) NOTE: For a full list of accepted use of MGI services values. See the TYPICAL_USE_OF_MGI enumeration from the Reference Data Enumerations endpoint |
How to implement:
- The Update API must make an HTTP PUT request and submit all required feilds/values.
- Upon Request, MoneyGram will perform compliance screening and run validation rules on the data submitted.
- If MoneyGram cannot clear screening, it will respond with: a) an HTTP 400 Bad Request status; and b) an error
code: "170"
object. The Error object will have an array of offending fields needing to be collected from the customer and resubmitted.
{ "errors": [ { "category": "IP-40000", "code":"178", "message": "Additional data", "offendingFields": [ { "field": "sender.personalDetails.occupationCode" }, { "field": "transactionInformation.relationshipToReceiver" }, { "field": "transactionInformation.sourceOfFundsCode" }, { "field": "transactionInformation.purposeOfTransaction" }, { "field": "transactionInformation.intendedUseOfMGIServicesCode" } ] } ] }
- The application should surface the ls
offendingFields
in the Application UI and gather the additional fields/values from the customer.
- The application can re-attempt the Update API by making another HTTP PUT request and re-submitting the original request body, including the additional fields/values.
- The Update endpoint will respond with a HTTP 200 OK status and
readyToCommit: "true"
Example API Request & Response
curl --request PUT \
--url https://sandboxapi.moneygram.com/transfer/v1/transactions/725a88f2-6175-49ca-a73c-69d13d80d2f1 \
--header 'X-MG-ClientRequestId: 957908758' \
--header 'accept: application/json' \
--header 'authorization: Bearer NG46z9GEpNQlh0P5X9ISIHHX4GO3' \
--header 'content-type: application/json' \
--data '
{
"targetAudience": "CONSUMER_FACING",
"agentPartnerId": 43688984,
"destinationCountryCode": "IND",
"destinationCountrySubdivisionCode": "IN-DL",
"sendAmount": {
"value": 100,
"currencyCode": "USD"
},
"receiveCurrencyCode": "INR",
"sender": {
"name": {
"firstName": "John",
"lastName": "Smith"
},
"address": {
"line1": "100 Main St",
"city": "Minneapolis",
"countrySubdivisionCode": "US-MN",
"countryCode": "USA",
"postalCode": 55111
},
"mobilePhone": {
"number": "555-123-1234",
"countryDialCode": 1
},
"personalDetails": {
"dateOfBirth": "1998-10-01T00:00:00.000Z"
},
"primaryIdentification": {
"typeCode": "PAS",
"id": "P12122345",
"issueCountrySubdivisionCode": "US-MN",
"issueCountryCode": "USA",
"issueCity": "Minneapolis"
},
"secondaryIdentification": {
"typeCode": "SSN",
"id": 565455698,
"issueCountrySubdivisionCode": "US-MN",
"issueCountryCode": "USA",
"issueCity": "Minneapolis"
}
},
"receiver": {
"name": {
"firstName": "Palu",
"lastName": "Patel"
},
"address": {
"line1": "200 Main St",
"city": "New Delhi",
"countrySubdivisionCode": "IN-DL",
"countryCode": "IND",
"postalCode": 110001
}
}
}
'
{
"errors": [
{
"category": "IP-4000",
"code":"100",
"message": "Additional data",
"offendingFields": [
{
"field": "sender.personalDetails.occupationCode"
},
{
"field": "transactionInformation.relationshipToReceiver"
},
{
"field": "transactionInformation.sourceOfFundsCode"
},
{
"field": "transactionInformation.purposeOfTransaction"
},
{
"field": "transactionInformation.intendedUseOfMGIServicesCode"
}
]
}
]
}
UI Best Practice
The below is a recommended layout to capture the enhanced due-diligence fields:

Updated 11 months ago