GET Retrieve a Transaction Receipt

GET /status/v1/transactions/{transactionsId}/receipt
GET /status/v1/transactions/receipt

Development Guide

The 'Retrieve a Transaction Receipt' endpoints looks-up a transaction by referenceNumber or transactionId and returns a transaction receipt.



1. Prepare headers, authentication and parameters:

The application must call the 'Retrieve a Transaction Receipt' endpoint with a GET HTTP method, providing the OAuth access_token, required headers and parameter values. There are two endpoints that can be used to retrieve a transaction status:


  • Retrieve a transaction receipt by transactionId | GET /status/v1/transactions/{transactionId}/receipt

    OR

  • Retrieve a transaction receipt by referenceNumber | GET /status/v1/transactions/receipt?referenceNumber={referenceNumber}

Note: MoneyGram uses the OAuth 2.0 framework. The application must use their OAuth client credentials to generate an access_token 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 Code Example

.




2. Make a request and handle the response:

The application must call the 'Retrieve a Transaction Receipt' endpoint with a GET HTTP method. The application must build to handle the following response scenarios:


  • Success | Parse the Response | 200 OK HTTP Status
    When the 'Retrieve a transaction' by transactionId or referenceNumber endpoint responds with a 200 HTTP Status will respond with the referenceNumber, and receiptType.

  • Failed | Handle the Error | 400 Bad Request HTTP Status
    When the 'Retrieve a Transaction' endpoint responds with 400 HTTP Status, specific error codes will be returned with an array of offending fields. The application will need to resolve these errors and resubmit the request.

🚀

Launch Code Example

.




3. You're Done! Communicate the transaction status to the consumer:

The transaction receipt hyperlinks returned can be used to provide to the consumer or if needed for an Agent/Partner.




Code Examples


Retrieve by transactionId

const axios = require('axios');
const { v4: uuidv4 } = require('uuid');

const status = 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 + '/status/v1/transactions/receipt';

    // Step 2: Create the GET request headers & params
    const headers = {
        'Content-Type': 'application/json',
        'X-MG-ClientRequestId': uuidv4(), // New UUID for each request tracing
        'Authorization': 'Bearer ' + token,
    };
    
    const transactionId = "current_transaction_id";
    const params = {
        agentPartnerId: "your_partner_id",        
        userLanguage: "en-US",
        targetAudience: "AGENT_FACING"
    }

    try {
        // Step 3: Send the request and obtain the response
        axios.get(url + '/' + transactionId, { params, 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);
    }
};

status();
import requests
import uuid
import json

def status():

    # 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 + '/status/v1/transactions/receipt';

    # Step 2: Create the GET request headers & params
    headers = {
        'Content-Type': 'application/json',
        'X-MG-ClientRequestId': str(uuid.uuid4()), # New UUID for each request tracing
        'Authorization': 'Bearer ' + token,
    }

    transactionId = "current_transaction_id";
    params = {
        'agentPartnerId': 'your_partner_id',    
        'userLanguage': 'en-US',
        'targetAudience': 'AGENT_FACING',
    }

    try:
        # Step 3: Send the request and obtain the response
        response = requests.get(url + '/' + transactionId, params=params, headers=headers)

        # Step 4: Parse the success response and process further
        if response.status_code == 200:
            parsed_response = json.dumps(json.loads(response.text), indent=2)
            print(parsed_response)
        else:
            # Print the error message if request fails
            # TODO: handle exception
            print("Request failed with status code:", response.status_code)
            print(json.loads(json.dumps(response.text, indent=4)))

    except requests.exceptions.RequestException as e:
        # Print any error that occurred during the request
        # TODO: handle exception
        print("An error occurred:", e)

status()
package status;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.UUID;

public class StatusByTransactionID {

    public static void main(String[] args) {
        // 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";

        // Step 2: Create the GET request headers & params
        // Mandatory Query params
        String agentPartnerId = "your_partner_id";
        String userLanguage = "en-US";

        // Optional Query params
        String targetAudience = "AGENT_FACING";

        // Mandatory Path params
        String transactionId = "current_transaction_id";

        String uri = "https://" + host + "/status/v1/transactions/receipt" + transactionId + "?"
                + "agentPartnerId=" + agentPartnerId
                + "&userLanguage=" + userLanguage
                + (targetAudience.isBlank() ? "" : "&targetAudience=" + targetAudience);

        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .GET()
                .setHeader("Authorization", "Bearer " + token)
                .setHeader("X-MG-ClientRequestId", String.valueOf(UUID.randomUUID()))
                .build();

        try {
            // Step 3: Send the request and obtain the response
            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());

            // Retrieve the status code and body from the response
            int statusCode = response.statusCode();

            // Step 4: Parse the success response and process further
            if (statusCode == 200) {
                String responseBody = response.body();
                System.out.println(responseBody);
            } else {
                // Step 5: Parse the error response and handle the errors
                String responseBody = response.body();
                System.out.println(responseBody);
            }
        } catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }

    }
}

Retrieve by referenceNumber

const axios = require('axios');
const { v4: uuidv4 } = require('uuid');

const status = 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 + '/status/v1/transactions/receipt';

    // Step 2: Create the GET request headers & params
    const headers = {
        'Content-Type': 'application/json',
        'X-MG-ClientRequestId': uuidv4(), // New UUID for each request tracing
        'Authorization': 'Bearer ' + token,
    };
    
    const params = {
        agentPartnerId: "your_partner_id",
        referenceNumber: "your_reference_number",
        userLanguage: "en-US",
        targetAudience: "AGENT_FACING"
    }

    try {
        // Step 3: Send the request and obtain the response
        axios.get(url, { params, 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);
    }
};

status();

import requests
import uuid
import json

def status():

    # 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 + '/status/v1/transactions/receipt';

    # Step 2: Create the GET request headers & params
    headers = {
        'Content-Type': 'application/json',
        'X-MG-ClientRequestId': str(uuid.uuid4()), # New UUID for each request tracing
        'Authorization': 'Bearer ' + token,
    }

    params = {
        'agentPartnerId': 'your_partner_id',
        'referenceNumber': 'your_reference_number',
        'userLanguage': 'en-US',
        'targetAudience': 'AGENT_FACING',
    }

    try:
        # Step 3: Send the request and obtain the response
        response = requests.get(url, params=params, headers=headers)

        # Step 4: Parse the success response and process further
        if response.status_code == 200:
            parsed_response = json.dumps(json.loads(response.text), indent=2)
            print(parsed_response)
        else:
            # Print the error message if request fails
            # TODO: handle exception
            print("Request failed with status code:", response.status_code)
            print(json.loads(json.dumps(response.text, indent=4)))

    except requests.exceptions.RequestException as e:
        # Print any error that occurred during the request
        # TODO: handle exception
        print("An error occurred:", e)

status()
package status;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.UUID;

public class StatusByReferenceNumber {

    public static void main(String[] args) {
        // 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";

        // Step 2: Create the GET request headers & params
        // Mandatory Query params
        String agentPartnerId = "your_partner_id";
        String referenceNumber = "your_reference_number";
        String userLanguage = "en-US";

        // Optional Query params
        String targetAudience = "AGENT_FACING";

        String uri = "https://" + host + "/status/v1/transactions/receipt?"
                + "agentPartnerId=" + agentPartnerId
                + "&referenceNumber=" + referenceNumber
                + "&userLanguage=" + userLanguage
                + (targetAudience.isBlank() ? "" : "&targetAudience=" + targetAudience);

        HttpClient httpClient = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .GET()
                .setHeader("Authorization", "Bearer " + token)
                .setHeader("X-MG-ClientRequestId", String.valueOf(UUID.randomUUID()))
                .build();

        try {
            // Step 3: Send the request and obtain the response
            HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());

            // Retrieve the status code and body from the response
            int statusCode = response.statusCode();

            // Step 4: Parse the success response and process further
            if (statusCode == 200) {
                String responseBody = response.body();
                System.out.println(responseBody);
            } else {
                // Step 5: Parse the error response and handle the errors
                String responseBody = response.body();
                System.out.println(responseBody);
            }
        } catch (Exception e) {
            e.printStackTrace();
            // TODO: handle exception
        }

    }
}




API Structure


Header Parameters

FieldTypeRequired
/Optional
Description
X-MG-ClientRequestIdStringOptionalClient Request ID that can be passed by the client application. Client request Id must be unique within a single session for unique requests. This attribute can be used for ensuring idempotent request processing for some APIs. MoneyGram recommends using a UUID for the value of this field.



Query Parameters

FieldTypeRequired
/Optional
Description
targetAudienceStringOptionalTailors MoneyGram's error messages and field metadata to an in-store, digital or crypto consumer. (Enumerated value)
NOTE: For a full list of accepted target audience values. See the TARGET_AUDIENCE enumeration from the Reference Data Enumerations endpoint
userLanguageStringRequiredLanguage used by the user/operator
agentPartnerIdStringRequiredUnique agent or partner identifier


Path Parameters

FieldTypeRequired
/Optional
Description
transactionIdStringRequiredMoneyGram's unique identifier for the transaction resource
NOTE: Used only when retrieving a transaction by transactionId

OR


FieldTypeRequired
/Optional
Description
referenceNumberStringRequiredMoneyGram's reference number for the transaction


Request Parameters


FieldTypeRequired
/Optional
Description
posIdStringOptionalUnique identifier for point of sale
operatorIdStringOptionalUnique identifier for the operator
dateStringOptionalTransaction date
receiptTypeStringOptionalType of receipt to retrieve (Available values: Send, Amend, Receive, Refund, Cancel)



Response Fields

FieldTypeRequired/
Optional
Description
referenceNumberString
Max length: 8
RequiredMoneyGram's reference number for the transaction
receiptType.typeStringRequiredType of receipt
receiptType.reprintReceipt.agentHyperLinkStringOptionalHyperlink for agent receipt
receiptType.reprintReceipt.consumerHyperLinkStringRequiredHyperlink for consumer receipt