POST Create a Consumer Profile
POST /consumer/v2/profiles
Development Guide:
The 'Create Consumer Profile API' generates a new profileId for the consumer.
1. Prepare headers & authentication:
The application must call the Create a Consumer Profile endpoint with a POST HTTP method, providing the OAuth access_token in the header and all other required header values.
NOTE: MoneyGram uses the OAuth 2.0 framework. The application must use their OAuth client credentials to generate an
accessTokenby calling the get access token endpoint. The token is valid for **1 hour ** and must be passed as a header value in all subsequent API HTTP calls. Learn More
Launch Example Code:Profiles - Create Consumer Profile - HeadersOpen Recipe
2. Provide request body:
The application must provide all the required consumer details and all other REQUIRED fields in the request.
Launch Example Code:Profiles - Create Consumer Profile - Request BodyOpen Recipe
3. Make the request and handle the response:
The application will call the 'Create a Consumer Profile' endpoint with a POST HTTP method. The 'Create a Consumer Profile' will generate a profileId for the new consumer's profile. The application must build to handle the following response scenarios:
- Success | Parse the Response | 200 OK HTTP Status
When the create a consumer profile endpoint responds with a 200 HTTP Status, the consumer profile has been created and the uniqueprofileIdwill be returned in the response.
- Failed | Handle the Error | 400 Bad Request HTTP Status
When the 'Create a Profile' endpoint responds with 400 HTTP Status, specific error code/s will be returned with an array of offending fields. The application will need to resolve these errors and resubmit the request.
Launch Example Code:Profiles - Create Consumer Profile - 200 OkOpen RecipeProfiles - Create Consumer Profile - 400 Bad RequestOpen Recipe
Code Examples
const axios = require('axios');
const { v4: uuidv4 } = require('uuid');
const createProfile = async () => {
// Step 1: Read configuration values with upmost security
const token = "your_access_token_from_oauth_response"
// For production - api.moneygram.com & For test - sandboxapi.moneygram.com
const host = "sandboxapi.moneygram.com";
const url = 'https://' + host + '/consumer/v2/profiles';
// Step 2: Create the POST request headers & body
const headers = {
'Content-Type': 'application/json',
'X-MG-ClientRequestId': uuidv4(), // New UUID for each request tracing
'Authorization': 'Bearer ' + token,
};
const request = {
"targetAudience": "AGENT_FACING",
"agentPartnerId": "your_partner_id",
"userLanguage": "en-US",
"consumer": {
"firstName": "firstName",
"middleName": "",
"lastName": "lastName",
"secondLastName": "",
"address": {
"line1": "line1 of address",
"line2": "",
"line3": "",
"city": "minneapolis",
"countrySubdivisionCode": "US-MN",
"countryCode": "USA",
"postalCode": "55335"
},
"notificationPreferences": {
"type": "Transactional",
"channel": "SMS",
"optIn": true
},
"mobilePhone": {
"number": "6123456789",
"countryDialCode": "1"
},
"dateOfBirth": "1980-08-15"
}
}
try {
// Step 3: Send the request and obtain the response
axios.post(url, request, { headers })
.then(function (response) {
// Step 4: Parse the success response and process further
console.log(JSON.stringify(response.data, null, 2))
})
.catch(function (error) {
// Step 5: Parse the error response and handle the errors
if (error.response) {
console.log('Response status:', error.response.status);
console.log('Response body:', error.response.data);
} else {
// TODO: handle generic errors
console.error('Error:', error.message);
}
});
} catch (error) {
// TODO: handle exception
console.error('Error:', error.message);
}
};
createProfile();import requests
import uuid
import json
def create_profile():
# Step 1: Read configuration values with upmost security
token = "your_access_token_from_oauth_response"
# For production - api.moneygram.com & For test - sandboxapi.moneygram.com
host = "sandboxapi.moneygram.com"
url = 'https://' + host + '/consumer/v2/profiles'
# Step 2: Create the POST request headers
headers = {
'Content-Type': 'application/json',
'X-MG-ClientRequestId': str(uuid.uuid4()), # New UUID for each request tracing
'Authorization': 'Bearer ' + token,
}
# Step 3: Set the request body (payload)
request = {
"targetAudience": "AGENT_FACING",
"agentPartnerId": "your_partner_id",
"userLanguage": "en-US",
"consumer": {
"firstName": "firstName",
"middleName": "",
"lastName": "lastName",
"secondLastName": "",
"address": {
"line1": "line1 of address",
"line2": "",
"line3": "",
"city": "minneapolis",
"countrySubdivisionCode": "US-MN",
"countryCode": "USA",
"postalCode": "55335"
},
"notificationPreferences": {
"type": "Transactional",
"channel": "SMS",
"optIn": True
},
"mobilePhone": {
"number": "6123456789",
"countryDialCode": "1"
},
"dateOfBirth": "1980-08-15"
}
}
try:
# Step 4: Send the request and obtain the response
response = requests.post(url, headers=headers, data=json.dumps(request))
if response.status_code == 200:
# Step 5: Parse the success response and process further
print(json.dumps(response.json(), indent=2))
else:
# Step 6: Parse the error response and handle the errors
print(f"Response status: {response.status_code}")
print(f"Response body: {response.text}")
except Exception as error:
# TODO: handle exception
print(f"Error: {str(error)}")
create_profile()using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
static async Task Main(string[] args)
{
await CreateProfile();
}
static async Task CreateProfile()
{
// Step 1: Read configuration values with upmost security
var token = "your_access_token_from_oauth_response";
// For production - api.moneygram.com & For test - sandboxapi.moneygram.com
var host = "sandboxapi.moneygram.com";
var url = $"https://{host}/consumer/v2/profiles";
// Step 2: Create the POST request headers
using var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("X-MG-ClientRequestId", Guid.NewGuid().ToString()); // New GUID for each request tracing
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
// Step 3: Set the request body (payload)
var request = new
{
targetAudience = "AGENT_FACING",
agentPartnerId = "your_partner_id",
userLanguage = "en-US",
consumer = new
{
firstName = "firstName",
middleName = "",
lastName = "lastName",
secondLastName = "",
address = new
{
line1 = "line1 of address",
line2 = "",
line3 = "",
city = "minneapolis",
countrySubdivisionCode = "US-MN",
countryCode = "USA",
postalCode = "55335"
},
notificationPreferences = new
{
type = "Transactional",
channel = "SMS",
optIn = true
},
mobilePhone = new
{
number = "6123456789",
countryDialCode = "1"
},
dateOfBirth = "1980-08-15"
}
};
try
{
// Step 4: Send the request and obtain the response
var content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
// Step 5: Parse the success response and process further
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseBody);
}
else
{
// Step 6: Parse the error response and handle the errors
Console.WriteLine($"Response status: {response.StatusCode}");
var responseBody = await response.Content.ReadAsStringAsync();
Console.WriteLine($"Response body: {responseBody}");
}
}
catch (Exception error)
{
// TODO: handle exception
Console.WriteLine($"Error: {error.Message}");
}
}
}import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.UUID;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
public class Main {
public static void main(String[] args) {
createProfile();
}
public static void createProfile() {
// Step 1: Read configuration values with upmost security
String token = "your_access_token_from_oauth_response";
// For production - api.moneygram.com & For test - sandboxapi.moneygram.com
String host = "sandboxapi.moneygram.com";
String url = "https://" + host + "/consumer/v2/profiles";
// Step 2: Create the POST request headers & body
HttpClient client = HttpClient.newHttpClient();
// Step 3: Set the request body (payload)
JsonObject request = new JsonObject();
request.addProperty("targetAudience", "AGENT_FACING");
request.addProperty("agentPartnerId", "your_partner_id");
request.addProperty("userLanguage", "en-US");
JsonObject consumer = new JsonObject();
consumer.addProperty("firstName", "firstName");
consumer.addProperty("middleName", "");
consumer.addProperty("lastName", "lastName");
consumer.addProperty("secondLastName", "");
JsonObject address = new JsonObject();
address.addProperty("line1", "line1 of address");
address.addProperty("line2", "");
address.addProperty("line3", "");
address.addProperty("city", "minneapolis");
address.addProperty("countrySubdivisionCode", "US-MN");
address.addProperty("countryCode", "USA");
address.addProperty("postalCode", "55335");
JsonObject notificationPreferences = new JsonObject();
notificationPreferences.addProperty("type", "Transactional");
notificationPreferences.addProperty("channel", "SMS");
notificationPreferences.addProperty("optIn", true);
JsonObject mobilePhone = new JsonObject();
mobilePhone.addProperty("number", "6123456789");
mobilePhone.addProperty("countryDialCode", "1");
consumer.add("address", address);
consumer.add("notificationPreferences", notificationPreferences);
consumer.add("mobilePhone", mobilePhone);
consumer.addProperty("dateOfBirth", "1980-08-15");
request.add("consumer", consumer);
String requestBody = new Gson().toJson(request);
HttpRequest httpRequest = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/json")
.header("X-MG-ClientRequestId", UUID.randomUUID().toString()) // New UUID for each request tracing
.header("Authorization", "Bearer " + token)
.POST(HttpRequest.BodyPublishers.ofString(requestBody))
.build();
try {
// Step 4: Send the request and obtain the response
HttpResponse<String> response = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
// Step 5: Parse the success response and process further
System.out.println(response.body());
} else {
// Step 6: Parse the error response and handle the errors
System.out.println("Response status: " + response.statusCode());
System.out.println("Response body: " + response.body());
}
} catch (IOException | InterruptedException error) {
// TODO: handle exception
System.out.println("Error: " + error.getMessage());
}
}
}Request Fields
| Field | Type | Required/Optional | Description |
|---|---|---|---|
targetAudience | String | Required | Type of application (Enumerated Value) NOTE: 'AGENT_FACING' for the consumer-enabled applications or 'AGENT_FACING' for agent-assisted applications. |
agentPartnerId | String | Optional | Agent's unique identifier (the agent who is assisting the consumer) |
userLanguage | String | Required | Application UI language in (ISO 639-1) language code format. |
consumer.firstName | String Min length: 1 Max length: 30 | Required | First Name |
consumer.middleName | String Min length: 0 Max length: 30 | Optional | Middle Name (if applicable) |
consumer.lastName | String Min length: 1 Max length: 30 | Required | Last Name |
consumer.secondLastName | String Min length: 0 Max length: 30 | Optional | Second Last Name (if applicable) |
consumer.mobilePhone.number | String Min length: 3 Max length: 10 | Required | Phone number |
consumer.address.line1 | String Min length: 5 Max length: 30 | Required | Residence address line 1 |
consumer.address.line2 | String Min length: 0 Max length: 80 | Optional | Residence address line 2 (if applicable) |
consumer.address.line3 | String Min length: 0 Max length: 80 | Optional | Residence address line 3 (if applicable) |
consumer.address.city | String Min length: 1 Max length: 40 | Required | City of residence |
consumer.address.countrySubdivisionCode | String Length: 6 | Optional | State/province of residence NOTE: For a full list of accepted countries and supported destination country subdivision codes see Reference Data API Module: Retrieve Countries ISO3 endpoint |
consumer.address.countryCode | String Length: 3 | Required | Country of residence (ISO Alpha-3 Code) NOTE: For a full list of accepted countries and supported destination country subdivision codes see Reference Data API Module: Retrieve Countries ISO3 endpoint |
consumer.address.postalCode | String Min length: 2 Max length: 6 | Optional | Postal/Zip code of residence |
consumer.mobilePhone.countryDialCode | String Min length: 1 Max length: 3 | Required | Country dial code NOTE: For country calling code see Reference Data API Module /countries endpoint phoneDialCodes |
consumer.email | String Min length: 1 Max length: 255 | Optional | Email address |
consumer.notificationPreferences.type | String | Optional | Consumer notification preference types (Enumerated Values) |
consumer.notificationPreferences.channel | String | Optional | Delivery method of notification NOTE: For notification preference channels see: Reference Data API Module CNSMR_OPTIN |
consumer.notificationPreferences.optIn | Boolean | Optional | Flag to declare customer opts-in to notification type and method |
consumer.notificationLanguagePreference | String Max length: 6 | Optional | Language (ISO alpha-3 code) |
consumer.dateofBirth | String Length: 10 | Required | Date of birth (YYYY-MM-DD) |
consumer.birthCity | String Min length: 0 Max length: 40 | Optional | City of Birth |
consumer.birthCountryCode | String Max Length: 3 | Optional | Country of birth (ISO alpha-3 code) NOTE: For a full list of accepted birth.CountryCodes see 'Reference Data API Module' and the Retrieve Countries ISO3 endpoint: |
consumer.nationalityCountryCode | String Min Length: 3 Max Length: 3 | Optional | Country of citizenship (ISO alpha-3 code) |
consumer.occupationCode | String | Optional | Occupation/Employment (Enumerated Value) NOTE: For a full list of accepted occupation codes see Reference Data Enumerations endpoint |
consumer.politicalExposedPerson | Boolean | Optional | Flag to declare a Politically Exposed Person (PEP) |
consumer.additionalAddress.type | string | Optional | Type of Additional address (Enumerated Values) |
consumer.additionalAddress.line1 | String Min length: 5 Max length: 30 | Required | Residence address line 1 |
consumer.additionalAddress.line2 | String Min length: 0 Max length: 80 | Optional | Residence address line 2 (if applicable) |
consumer.additionalAddress.line3 | String Min length: 0 Max length: 80 | Optional | Residence address line 3 (if applicable) |
consumer.additionalAddress.city | String Min length: 1 Max length: 40 | Required | City of residence |
consumer.additionalAddress.countrySubdivisionCode | String Max Length: 6 | Optional | State/province of residence |
consumer.additionalAddress.countryCode | String Max length: 3 | Required | Country of residence (ISO Alpha-3 Code) |
consumer.additionalAddress.postalCode | String Min length: 2 Max length: 6 | Optional | Postal code/ZIP of residence |
consumer.additionalFamilyNames.type | String | Optional | Type of family name (Enumerated Values) |
consumer.additionalFamilyNames.firstName | String Min length: 0 Max length: 30 | Optional | First Name |
consumer.additionalFamilyNames.middleName | String Min length: 0 Max length: 30 | Optional | Middle Name (if applicable) |
consumer.additionalFamilyNames.lastName | String Min length: 0 Max length: 30 | Optional | Last Name |
consumer.additionalFamilyNames.secondLastName | String Min length: 0 Max length: 30 | Optional | Second Last Name |
consumer.primaryIdentification.typeCode | String Max length: 3 | Optional - Required if provided | Type of identification document (Enumerated Value) NOTE: For a full list of accepted Identification documents by country. see Reference Data Enumerations endpoint |
consumer.primaryIdentification.id | String Max length: 30 | Optional -Required if provided | Identification document number |
consumer.primaryIdentification.issueCountrySubdivisionCode | String Max length: 6 | Optional | Issuing state/province of identification document. |
consumer.primaryIdentification.issueCountryCode | String Max Length: 3 | Optional -Required if provided | Issuing country of identification document (ISO alpha-3 code) |
consumer.primaryIdentification.expirationYear | String Length: 4 Format: YYYY | Optional | Expiration year of identification document (YYYY) |
consumer.primaryIdentification.expirationMonth | String Length: 2 Format: MM | Optional | Expiration month of identification document (MM) |
consumer.primaryIdentification.expirationDay | String Length: 2 Format: DD | Optional | Expiration month of identification document (DD) |
consumer.primaryIdentification.issueAuthority | String Min length: 0 Max length: 30 | Optional | Issuing authority of identification document |
consumer.primaryIdentification.issueCity | String Min length: 0 Max length: 40 | Optional | Issuing city of identification document |
consumer.primaryIdentification.issueYear | String Length: 4 Format: YYYY | Optional | Issuing year of identification document (YYYY) |
consumer.primaryIdentification.issueMonth | String Length: 2 Format: MM | Optional | Issuing month of identification document (MM) |
consumer.primaryIdentification.issueDay | String Length: 2 Format: DD | Optional | Issuing day of identification document (DD) |
additionalDetails | Dynamic | Optional | Dynamic field key/values |
Response Fields
| Field | Type | Required/Optional | Description |
|---|---|---|---|
profileId | String | Required | Consumer's unique identifier |
Updated 5 days ago





