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 accessToken by 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:




2. Provide request body:

The application must provide all the required consumer details and all other REQUIRED fields in the request.


🚀

Launch Example Code:




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 unique profileId will 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:




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

FieldTypeRequired/OptionalDescription
targetAudienceStringRequiredType of application (Enumerated Value)

NOTE: 'AGENT_FACING' for the consumer-enabled applications or 'AGENT_FACING' for agent-assisted applications.
agentPartnerIdStringOptionalAgent's unique identifier (the agent who is assisting the consumer)
userLanguageStringRequiredApplication UI language in (ISO 639-1) language code format.
consumer.firstNameString
Min length: 1
Max length: 30
RequiredFirst Name
consumer.middleNameString
Min length: 0
Max length: 30
OptionalMiddle Name (if applicable)
consumer.lastNameString
Min length: 1
Max length: 30
RequiredLast Name
consumer.secondLastNameString
Min length: 0
Max length: 30
OptionalSecond Last Name (if applicable)
consumer.mobilePhone.numberString
Min length: 3
Max length: 10
RequiredPhone number
consumer.address.line1String
Min length: 5
Max length: 30
RequiredResidence address line 1
consumer.address.line2String
Min length: 0
Max length: 80
OptionalResidence address line 2 (if applicable)
consumer.address.line3String
Min length: 0
Max length: 80
OptionalResidence address line 3 (if applicable)
consumer.address.cityString
Min length: 1
Max length: 40
RequiredCity of residence
consumer.address.countrySubdivisionCodeString
Length: 6
OptionalState/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.countryCodeString
Length: 3
RequiredCountry 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.postalCodeString
Min length: 2
Max length: 6
OptionalPostal/Zip code of residence
consumer.mobilePhone.countryDialCodeString
Min length: 1
Max length: 3
RequiredCountry dial code

NOTE: For country calling code see Reference Data API Module /countries endpoint phoneDialCodes
consumer.emailString
Min length: 1
Max length: 255
OptionalEmail address
consumer.notificationPreferences.typeStringOptionalConsumer notification preference types (Enumerated Values)
consumer.notificationPreferences.channelStringOptionalDelivery method of notification

NOTE: For notification preference channels see: Reference Data API Module CNSMR_OPTIN
consumer.notificationPreferences.optInBooleanOptionalFlag to declare customer opts-in to notification type and method
consumer.notificationLanguagePreferenceString
Max length: 6
OptionalLanguage (ISO alpha-3 code)
consumer.dateofBirthString
Length: 10
RequiredDate of birth (YYYY-MM-DD)
consumer.birthCityString
Min length: 0
Max length: 40
OptionalCity of Birth
consumer.birthCountryCodeString
Max Length: 3
OptionalCountry 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.nationalityCountryCodeString
Min Length: 3
Max Length: 3
OptionalCountry of citizenship (ISO alpha-3 code)
consumer.occupationCodeStringOptionalOccupation/Employment (Enumerated Value)

NOTE: For a full list of accepted occupation codes see Reference Data Enumerations endpoint
consumer.politicalExposedPersonBooleanOptionalFlag to declare a Politically Exposed Person (PEP)
consumer.additionalAddress.typestringOptionalType of Additional address (Enumerated Values)
consumer.additionalAddress.line1String
Min length: 5
Max length: 30
RequiredResidence address line 1
consumer.additionalAddress.line2String
Min length: 0
Max length: 80
OptionalResidence address line 2 (if applicable)
consumer.additionalAddress.line3String
Min length: 0
Max length: 80
OptionalResidence address line 3 (if applicable)
consumer.additionalAddress.cityString
Min length: 1
Max length: 40
RequiredCity of residence
consumer.additionalAddress.countrySubdivisionCodeString
Max Length: 6
OptionalState/province of residence
consumer.additionalAddress.countryCodeString
Max length: 3
RequiredCountry of residence (ISO Alpha-3 Code)
consumer.additionalAddress.postalCodeString
Min length: 2
Max length: 6
OptionalPostal code/ZIP of residence
consumer.additionalFamilyNames.typeStringOptionalType of family name (Enumerated Values)
consumer.additionalFamilyNames.firstNameString
Min length: 0
Max length: 30
OptionalFirst Name
consumer.additionalFamilyNames.middleNameString
Min length: 0
Max length: 30
OptionalMiddle Name (if applicable)
consumer.additionalFamilyNames.lastNameString
Min length: 0
Max length: 30
OptionalLast Name
consumer.additionalFamilyNames.secondLastNameString
Min length: 0
Max length: 30
OptionalSecond Last Name
consumer.primaryIdentification.typeCodeString
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.idString
Max length: 30
Optional -Required if providedIdentification document number
consumer.primaryIdentification.issueCountrySubdivisionCodeString
Max length: 6
OptionalIssuing state/province of identification document.
consumer.primaryIdentification.issueCountryCodeString
Max Length: 3
Optional -Required if providedIssuing country of identification document (ISO alpha-3 code)
consumer.primaryIdentification.expirationYearString
Length: 4
Format: YYYY
OptionalExpiration year of identification document (YYYY)
consumer.primaryIdentification.expirationMonthString
Length: 2
Format: MM
OptionalExpiration month of identification document (MM)
consumer.primaryIdentification.expirationDayString
Length: 2
Format: DD
OptionalExpiration month of identification document (DD)
consumer.primaryIdentification.issueAuthorityString
Min length: 0
Max length: 30
OptionalIssuing authority of identification document
consumer.primaryIdentification.issueCityString
Min length: 0
Max length: 40
OptionalIssuing city of identification document
consumer.primaryIdentification.issueYearString
Length: 4
Format: YYYY
OptionalIssuing year of identification document (YYYY)
consumer.primaryIdentification.issueMonthString
Length: 2
Format: MM
OptionalIssuing month of identification document (MM)
consumer.primaryIdentification.issueDayString
Length: 2
Format: DD
OptionalIssuing day of identification document (DD)
additionalDetailsDynamicOptionalDynamic field key/values



Response Fields

FieldTypeRequired/OptionalDescription
profileIdStringRequiredConsumer's unique identifier