NAV Navbar
HTTP Shell JavaScript Python Ruby Java Go

Pangea RaaS API

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

Introduction

The Pangea Remittance as a Service (RaaS) API allows any company to add remittances to their existing product or service by integrating a simple API while leveraging Pangea's money transmitter license, compliance controls, and integrations with payment networks worldwide. Companies using the API do not need their own money transmitter license.

The API facilitates a complete end to end transfer of funds from a sender's funding mechanism to the receiver's funding mechanism, such as a debit card or bank account. Transfers can be created, completed, cancelled or refunded. The API supports retrieving transaction status and receipts.

Base URL

Production: https://api.pangea-raas.com/raas/v1
Integration: https://api.pangea-raas-integration.com/raas/v1

Authentication

In order to make an authenticated call to the API, each request made to a resource's endpoints must include your access key and secret key within the request headers. Pangea will provide your specific authentication keys as part of the initial setup process.

The API expects the following headers to be correctly set within each request.

Header Field Name Description Value Format
X-Pangea-Access-Key API access key string
X-Pangea-Secret-Key Secret authentication key A random string between 16 and 32 chars

Minimal API connectivity can be validated by executing a request to /ping with the correct authentication headers.

Responses

Pangea respondes with restful HTTP status codes to describe the result of a request.

HttpStatusCode Description
200 OK
201 Resource was successfully created.
204 OK - no content
400 The request was poorly formed.
401 Authorization was not granted.
404 The requested resource was not found.
409 The request encounted a conflict. Inspect the message field for more information.
500 An unexpected server error occurred.

Configuration

Program configuration options available for creating and completing a transfer can be discovered through the API.

Pangea is licensed to send money originating from the USA to many countries worldwide. The exact set of countries configured for your program can be queried via the API.

The exact set of available funding and delivery methods are configurable for your program and can be queried via the API.

Licensing is configured for your program for each individual state in the USA. A transfer created on behalf of a sender whose address is from a USA state that is not licensed for your program will fail. The exact set of states that your program is licensed in can be queried via the API.

Pangea.js library

Pangea requires the use of our Pangea.js library to mitigate fraud and to securely collect debit card information for payment. Include the pangea.js script in your web application using the following script tag. You must always load this script directly from Pangea. Do not host this script or copy it into any bundle. To be able to use pangea.js in your application, Pangea must add your hostname to the CORS whitelist.

  // Production:
  <script src="https://api.pangea-raas.com/static/v1/pangea.js"></script>

  // Sandbox:
  <script src="https://api.pangea-raas-integration.com/static/v1/pangea.js"></script>

  ...
  // Get funding card temporary token
  pangea.createToken({
      publicKey: publicKey.val(),
      partnerIdentifier: partnerIdentifier.val(),
      cardNumber: cardNumber.val(),
      cvv: CVV.val()
    })
    .then(function (tokenResponse) {
        console.log('Success: ' + tokenResponse.token);
    }).catch(function (error) {
        // handle error
  });

  // Get clientSessionId for POST Transfer
  var clientSessionId = pangea.getSessionId();

Session Establishment

The pangea.js library must be loaded into your app throughout the transfer creation process. We use this to help ensure that transfers are sent from the indicated sender. On loading of the pangea.js script, a sessionId is used to track and ensure that the transfer is created by a real person. Retreive the sessionId with pangea.getSessionId() so that you can include it on the POST transfer call. #create-a-transfer

Funding card tokenization

Pangea.js must also be used for generating a temporary token representing a sender’s funding card. Pangea.js retrieves the token by first encrypting the card data using your public key then sends it to Pangea’s server. You will send the temporary token to your server and finally over to the Pangea RaaS API to create a funding card. Pangea uses the temporary token to generate a permanent token with our card payments provider. The card number and cvv is never stored anywhere in Pangea. You will use the same permanent token for each transfer made with that card. The temporary token is valid for 24 hours. Upon successful generation of the temporary token, you can safely send it to your server. Then to create the funding method in the RaaS API, provide the token along with the other required fields: #register-a-debit-card

You’ll have a different public key for both sandbox and production. The partnerIdentifier will be the same in both environments and will be assigned to you.

Environments

Account holders are granted access to two environments that host the API. A pre-production sandbox environment is used for testing, integration, and certification. Once certification tests are completed successfully, access is provided to the production environment. Specific details regarding how to access each environment will be provided upon account creation.

API Versioning

The relative resource paths of the API are prefixed with the API version number. It is important to note that the API is versioned as a whole; each resource is not versioned independently.

Any updates to the API that are not backwards compatible will only be introduced with a new version of the API. In other words, no breaking changes are ever made to any existing URL endpoints.

Older versions of the API will remain available for a period time, which adds flexibility to the process of transitioning to newer versions. For example, you can easily revert to using an older version of the API if you encounter any issues with using a newer version.

Currently, v1 is the latest version of the API.

Quotations

Before creating a transfer, you must retrieve a Quotation. The quotation describes how much Pangea will charge you for a specific transfer. The response contains the fee we charge plus the quotation fx rate. The fx rate returned is the rate we will charge you to transmit the specified sending amount. Quotations usually change once per day for each country. It is possible when creating a transfer that the Quotation you specify is outdated. Simply request a new quotation in this case. You may use any fx rate or fee for your customers when creating the transfer (except for termination to Honduras or El Salvador). #quotations

Creating a Transfer

To create a transfer you will need to specify a sender, receiver, funding account, and if termination via direct deposit- a termination account. A quote is required to create a transfer. The resources created are then referenced in the Create Transfer request.

Updates to the status of a transfer will be sent to the URL specified on the Transfer POST call. Pangea expects a 200 OK response within 30 seconds. Pangea will retry failed callbacks (timeout or non-200 response) periodically for up to 24 hours. If callbacks retries are exhaused for a transfer update, the status will have to be requested through the GET Transfers/{id} endpoint.

The following diagram defines the lifecycle of a transfer.

RaaS Transfer Flow

A transfer begins as Created and after success results in Completed. In most cases, a transfer will be either Available or Completed in about one minute. Failed transfers will result in Cancelled (when customer was never charged) or Refunded. Each time the transfer status changes, Pangea will send a callback to your system detailing the new status. Also, you can query for the current status given the transfer's ID or the provided referenceId.

In rare cases, a termination partner will mistakenly process a transaction as Completed. In this case we will issue a callback with code of type Reversed. Cash pickup transfers will then be in the Available state. It is also possible that this is followed up by a Refunded callback depending on our delivery partner's decision. All direct deposit transfers will result in Refunded after Reversed. In certifying your integration we will require that you handle these callbacks.

Transfer Limits

As part of regulatory compliance the following limits exist in the API. Breaches to these limits will result in an error during transfer creation. These are enforced both on the sender and the receiver.

Limit Amount
Minimum $20
Transfer $999.00
Daily $999.00
Weekly $2000.00
Monthly $2000.00

Callbacks

Pangea will send a callback to your system when the state changes (see above lifecycle diagram). The callback url is provided on the POST transfer request. The body of the callback is described below in the TransferCallback schema. An "Available" callback will also have the receiver pickup code in the payload. Here are the following possible callbacks.

Code Description
Available The funds are available to be picked up by the receiver.
Complete The money was picked up or deposited.
Reversed Our delivery partner reversed their notification that it was picked up/deposited.
Refunded The customer's funding method has been refunded.
Cancelled The transfer has been cancelled. It was never Funded.

Transfer Receipts

Money transfer regulations have strict requirements around the receipt which is shown to the customer. We provide an endpoint to retrieve the compliant receipt which can be shown to your customers. A receipt is generated when a transfer is successfully created. The provided receipt must be made available to a customer after successful creation of a transfer. We currently support a receipt in either English or Spanish. #retrieve-a-receipt

Cancellation Reasons

These are the following subcodes for a cancelled transfer. You will find this in the TransferStatus object.

subcode Description
Cancellation_Requested You the partner requested cancellation.
Pangea_Cancellation Pangea had to cancel the transfer due to fraud or compliance reasons.
Autocancel_Stale_Transfer Not picked up transfer was autocancelled after period of time (7 days)
Limit_Exceeded_Transfer A limit on the transfer amount was breached.
Limit_Exceeded_Sender A limit around the sender was breached.
Limit_Exceeded_Receiver A limit around the receiver was breached.
Limit_Exceeded_Delivery A limit around the delivery method was breached.
Limit_Exceeded_Funding A limit around the funding method was breached.
Origination_Unlicensed The origination state is unlicensed (based off Sender address)
Funding_Issue_Other Failure to charge card or withdraw from ach account
Funding_Issue_CardTypeNotAllowed Funding card used is not a debit card.
Funding_Issue_AddressVerificationFailed ZIP code provided does not match the card's ZIP.
Funding_Issue_CVVVerificationFailed CVV code provided does not match the card's CVV.
Funding_Issue_CardZipNotInSameStateAsSenderZip
Funding_Issue_CardDeclined Payment processor cannot accept this card.
Funding_Issue_CardInvalid Card determined to be invalid by the payment processor.
Funding_Issue_CardAlreadyInTwoAccounts This card is already registered by 2 other users in Pangea's platform.
Funding_Issue_Business_Card_Used Funding card used was determined to be a business account
Funding_Issue_InsufficientFunds Funding card was denied due to insufficient funds
Delivery_Failed Transmission to the delivery network was rejected.

409 Response Errors

This is a list of the errors you should expect when executing requests which may result in a 409 response. These are seen in the Error response schema.

action message additionalInformation
POST /funding/cards Postal code verification failed
This card is already registered by 2 other users in Pangea's platform
Card declined
Card type not debit
Card postal code not in same state as sender postal code
CVV or expiration date did not match verification
Card invalid
Token is expired
POST /delivery/accounts Partner not direct deposit
Partner not found
Receiver not found
Partner not direct deposit or mobile wallet
AccountType not found
Duplicate account detected
POST /senders Business name detected
Name is invalid
Sender country must be in USA
Sender state is unlicensed
Phone number is required to be a mobile number
A sender already exists for this phone number
Phone number is not a USA number
Id type not accepted
POST /senders/{senderId}/receivers Business name detected
Name is invalid
Postal code not found for country
State or province invalid
City not found for the given country
City found in a different stateOrProvince
StateOrProvince not found for the given country
Municipality is required for the provided city
Provided municipality is not valid. See documentation for list of options
PATCH /senders/{senderId}/receivers/{receiverId} Cannot change a receiver's country
POST /transfers Delivery amount invalid for given funding amount and exchange rate
Delivery method not supported
Sender not found
Receiver not found
Delivery account not found
Funding account not found
Quote not found
A newer quote is available. Please try again with the latest quote. latest quotationId
Duplicate transfer detected transferId
Transfer limit exceeded
Sender limit exceeded
Receiver limit exceeded
Funding limit exceeded
Delivery limit exceeded
The delivery partner's deliveryRequirements were not satisfied missing field requirement
The sender state's deliveryRequirements were not satisfied missing field requirement
Transfer fee plus receiving amount exceeds the pricing specified in your contract.
The request exchange does not match the required exchange rate for the quotation.
any action Country is not supported
Unexpected error. Please contact support
Pangea rejected
POST /transfers/{id}/cancel Unable to cancel due to current status

Receiver Municipality

Municipality is required only for receivers in Mexico City (MX-CMX). Provide this on the ReceiverAddress object. The valid options are

Authentication

Ping

Facilitates connectivity and authentication testing.

Ping

Code samples

POST https://api.pangeamoneytransfer.com/v1/ping HTTP/1.1
Host: api.pangeamoneytransfer.com

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/ping \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/ping',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/ping', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/ping',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/ping");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/ping", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /ping

Exists as a first step into connecting to our API. Use it to ensure successful authentication.

Provide the required Authentication headers to ensure a succesfull 200 response.

Responses

Status Meaning Description Schema
200 OK Successful ping None

Configuration

Resources used to discover the available configuration options for your program.

Get licensed states

Code samples

GET https://api.pangeamoneytransfer.com/v1/config/states HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/config/states \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/config/states',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/config/states', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/config/states',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/config/states");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/config/states", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /config/states

Get the licensed states available for your program. States may have their own delivery requirements. These will be validated when creating a transfer.

Licensing is configured for your program for each individual state in the USA. This endpoint lists all the licensed states available.

Example responses

200 Response

[
  {
    "id": "USA-AK"
  },
  {
    "id": "USA-FL",
    "deliveryRequirements": {
      "deliveryAccountRequirements": null,
      "senderRequirements": null,
      "receiverRequirements": [
        "address"
      ]
    }
  },
  {
    "id": "USA-IL"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [StateConfiguration] false none none
» id string(ISO 3166-2) true none The state's ISO 3166-2 code.
» deliveryRequirements DeliveryRequirements false none none
»» deliveryAccountRequirements [DeliveryAccountRequirements] false none none
»» senderRequirements [PersonRequirements] false none none
»» recieverRequirements [PersonRequirements] false none none

Get supported countries

Code samples

GET https://api.pangeamoneytransfer.com/v1/config/delivery/countries HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/config/delivery/countries \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/config/delivery/countries',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/config/delivery/countries', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/config/delivery/countries',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/config/delivery/countries");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/config/delivery/countries", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /config/delivery/countries

Get a list of supported countries.

Before a customer can send a transfer, they'll need to know whether or not the Country they want to remit to is supported.

This endpoint allows you to see which countries we support as well as what delivery methods are available in each country.

Example responses

200 Response

[
  {
    "id": "MEX",
    "currency": "MXN",
    "roundingAmountDigits": 0,
    "methods": [
      "cash-pickup",
      "direct-deposit"
    ]
  },
  {
    "id": "IND",
    "currency": "IDR",
    "roundingAmountDigits": 2,
    "methods": [
      "cash-pickup",
      "direct-deposit"
    ]
  },
  {
    "id": "BRA",
    "currency": "BRL",
    "roundingAmountDigits": 2,
    "methods": [
      "direct-deposit"
    ]
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Country] false none none
» id string(iso-alpha-3) true none The country's ISO Alpha-3 code.
» currency string(iso-alpha-3) true none The currency the money belongs to.
» roundingAmountDigits number true none The count of decimals the delivery amount must be rounded to.
» methods [DeliveryMethod] true none The country's available delivery methods.

Get delivery methods

Code samples

GET https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/methods", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /config/delivery/{country}/methods

Get the delivery methods available in a given country.

A Delivery Method is any manner in which a receiver can receive transfer funds. Available delivery methods will change based on which country the customer is remitting to, but every country we support will have at least 1 delivery method available.

This endpoint lists all the delivery methods available in a given country.

Parameters

Name In Type Required Description
country path string(iso-alpha-3) true The ISO Alpha-3 code of the country you want to retrieve delivery methods for.

Example responses

200 Response

[
  "cash-pickup",
  "direct-deposit"
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [DeliveryMethod] false none [The method with which to receive transfer funds.]

Get delivery partners

Code samples

GET https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/config/delivery/{country}/partners", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /config/delivery/{country}/partners

Get the available delivery partners for a country.

A Delivery Partner is the means through which a transfer is delivered to a receiver. For instance, a delivery partner allows your receivers to pick up funds at various cash pick-up locations or facilitates the deposit of transfer funds directly into a receiver's bank account.

Every delivery partner has a method property that specifies how they handle the delivery of transfer funds. If your sender wants their receiver to receive funds by physically picking up cash, they should use a delivery partner whose method is 'cash-pickup'.

Transfer specific requirements are listed in the deliveryRequirements property. Different delivery partners require different fields for the delivery account, sender, and/or receiver.

This endpoint lists all the delivery partners available in a specific country.

Parameters

Name In Type Required Description
country path string(iso-alpha-3) true The ISO Alpha-3 code of the country you want to retrieve delivery partners for.

Example responses

200 Response

[
  {
    "id": "fa7f7c05a25c4a9e8c6652a761b622cd",
    "name": "Elektra",
    "method": "cash-pickup",
    "logoUrl": "https://api.pangeamoneytransfer.com/assets/elektra.png",
    "country": "MEX"
  },
  {
    "id": "86a8b5be15c3461b9223b3c142771d49",
    "name": "Banco Famsa",
    "method": "direct-deposit",
    "logoUrl": "https://pangea-assets.s3-us-west-2.amazonaws.com/partners/banco-famsa@2x.png",
    "country": "MEX",
    "deliveryRequirements": {
      "deliveryAccountRequirements": [
        "accountNumber"
      ],
      "senderRequirements": [
        "nationality"
      ],
      "receiverRequirements": [
        "idNumber"
      ]
    }
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [DeliveryPartner] false none none
» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
» name string true none The name of the partner responsible for paying out the transfer.
» method string true none The delivery method this partner supports.
» logoUrl string(uri) false none A public image URL of the delivery partner's logo.
» country string(iso-alpha-3) true none The country in which the delivery partner operates.
» deliveryRequirements DeliveryRequirements false none none
»» deliveryAccountRequirements [DeliveryAccountRequirements] false none none
»» senderRequirements [PersonRequirements] false none none
»» recieverRequirements [PersonRequirements] false none none

Enumerated Values

Property Value
method cash-pickup
method direct-deposit
method mobile-wallet

Funding

Resources related to the funding of transfers.

Register a debit card

Code samples

POST https://api.pangeamoneytransfer.com/v1/funding/cards HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/funding/cards \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/funding/cards',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/funding/cards', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/funding/cards',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/funding/cards");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/funding/cards", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /funding/cards

Register a debit card.

Senders will be able to register a Debit Card in order to fund transfers. Once a card is registered, Pangea will handle charging the card upon transfer submission as well as refunding the card in the case of a cancellation or system error.

This endpoint provides the ability to register a debit card with the RaaS API. You'll use the RaaS JS SDK obtain a temporary token for a given card. This token is then passed through to our server in the "token" field. We never store card numbers in our database.

Body parameter

{
  "senderId": "54af14befd2e48f9b01dc1040181f339",
  "nameOnCard": "Amy Smith",
  "iin": 400000,
  "lastFourDigits": 5019,
  "expirationDate": "01-20",
  "postalCode": 60654,
  "token": "NTI2dzkxdldmcTdPM1FDbHJrSVFkSFpWbUc3QnFWVjc0WXQ5WTEwMUdJYkRFQitaSEl1Vjh5aUlQUXZ2NWdNMQ=="
}

Parameters

Name In Type Required Description
senderId body string(uuid) true The unique identifier of the sender you're registering a card for.
nameOnCard body string true none
iin body string true none
lastFourDigits body string true none
expirationDate body string(MM-yy) true none
postalCode body string true The postal card associated with this card
token body string true The token generated by the Pangea client side SDK

Example responses

201 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "nameOnCard": "Cristoball Nelson",
  "brand": "Visa",
  "lastFourDigits": 3107,
  "expiration": "01-20",
  "iin": 475056
}

409 Response

{
  "message": "The same debit card cannot be registered for more than two senders."
}

Responses

Status Meaning Description Schema
201 Created The resource was successfully created. FundingCard
409 Conflict The request encountered a conflict. Error

Query a debit card

Code samples

GET https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId} \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/funding/cards/{cardId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /funding/cards/{cardId}

Get a registered debit card.

Parameters

Name In Type Required Description
cardId path string(uuid) true The unique identifier associated with the debit card you'd like to execute the request against.

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "nameOnCard": "Cristoball Nelson",
  "brand": "Visa",
  "lastFourDigits": 3107,
  "expiration": "01-20",
  "iin": 475056
}

Responses

Status Meaning Description Schema
200 OK The request was successful. FundingCard

Delivery

Resources related to the delivery of transfers.

Create a delivery account

Code samples

POST https://api.pangeamoneytransfer.com/v1/delivery/accounts HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/delivery/accounts \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/delivery/accounts',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/delivery/accounts', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/delivery/accounts',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/delivery/accounts");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/delivery/accounts", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /delivery/accounts

Register a delivery account.

A Delivery Account is a receiver's bank account that can be remitted to directly via a direct deposit transfer. This allows receivers to skip the process of physically picking up cash, instead allowing them to have funds deposited directly into their bank account.

Most direct-deposit partners only require the accountNumber and partnerId. India direct-deposit transfers require the ifsc code as well. We tokenize the account number on our server and store only the token in our database.

Body parameter

{
  "receiverId": "54af14befd2e48f9b01dc1040181f339",
  "partnerId": "f80331fe3aec4a6086fedc473371c25a",
  "accountNumber": "012555555555555551",
  "cbu": "string",
  "clabe": "string",
  "iban": "string",
  "email": "string",
  "msisdn": "string",
  "branchNumber": "string",
  "swiftBic": "string",
  "ifsc": "ICIC0000007",
  "acountType": "CHECKING"
}

Parameters

Name In Type Required Description
receiverId body string(uuid) true The unique identifier of the receiver you're registering an account for.
partnerId body string(uuid) true The ID of the partner this account belongs to.
accountNumber body string false The bank account number receiving the money
cbu body string false The CBU formatted bank account number
clabe body string false The CLABE formatted bank account number
iban body string false The IBAN formatted bank account number
email body string false The email associated with the account
msisdn body string false The msisdn associated with the account
branchNumber body string false The branch number
swiftBic body string false The SWIFT-BIC code
ifsc body string false The IFSC code of the branch this account belongs to
acountType body string false CHECKING or SAVINGS

Example responses

201 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "partnerId": "d48fc57c92aa495aad2311438c545620",
  "lastFourDigits": "3417",
  "bankName": "Citi"
}

400 Response

[
  {
    "name": "ifsc",
    "error": "The ifsc field is required."
  }
]

409 Response

{
  "code": "DEC02",
  "message": "The decryption process did not result in a valid delivery account."
}

Responses

Status Meaning Description Schema
201 Created The resource was successfully created. DeliveryAccount
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Query a delivery account

Code samples

GET https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId} \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/delivery/accounts/{accountId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /delivery/accounts/{accountId}

Get a registered delivery account.

Parameters

Name In Type Required Description
accountId path string(uuid) true The unique identifier associated with the delivery account you'd like to execute the request against.

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "partnerId": "d48fc57c92aa495aad2311438c545620",
  "lastFourDigits": "3417",
  "bankName": "Citi"
}

Responses

Status Meaning Description Schema
200 OK The request was successful. DeliveryAccount

Senders

Resources related to senders of transfers.

Create a sender

Code samples

POST https://api.pangeamoneytransfer.com/v1/senders HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/senders \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/senders', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/senders',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/senders", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /senders

Create a sender.

Body parameter

{
  "referenceId": "AZ123809",
  "fullName": "Isabelle Kober",
  "email": "isabelle.kober@example.com",
  "phone": "15707512999",
  "dateOfBirth": "1986-01-22",
  "countryOfBirth": "USA",
  "nationality": "USA",
  "occupation": "Engineer",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "New York",
    "stateOrProvince": "NY",
    "postalCode": "10001",
    "country": "USA"
  },
  "idNumber": "string",
  "idType": "PASSPORT"
}

Parameters

Name In Type Required Description
referenceId body ReferenceIdentifier false An internal reference identifier for your own tracking purposes.
fullName body string true Space-delimited string representing the senders's full, legal name.
email body string(email) false The sender's email address.
phone body string(phone) true The sender's phone number with country code included (must be a mobile phone number).
dateOfBirth body string(date) true The sender's birthday.
countryOfBirth body string(iso-alpha-3) false The sender's country of birth.
nationality body string(iso-alpha-3) false The sender's nationality.
occupation body string false The sender's occupation.
address body SenderAddress true none
» address1 body string true First line of the street address.
» address2 body string false Second line of the street address.
» city body string true City in which the address is located.
» stateOrProvince body string true State or province in which the address is located.
» postalCode body string true The postal code in which the address is located.
» country body string(iso-alpha-3) true Country in which the address is located.
idNumber body string false The sender's identification number
idType body idType false none

Enumerated Values

Parameter Value
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Isabelle Kober",
  "email": "isabelle.kober@example.com",
  "phone": "15707512999",
  "dateOfBirth": "1986-01-22",
  "countryOfBirth": "USA",
  "nationality": "USA",
  "occupation": "Engineer",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "New York",
    "stateOrProvince": "NY",
    "postalCode": "10001",
    "country": "USA"
  },
  "idNumber": "n-42423-3292",
  "idType": "PASSPORT"
}

400 Response

[
  {
    "name": "countryOfBirth",
    "error": "Must be a valid ISO Alpha-3 code."
  },
  {
    "name": "dateOfBirth",
    "error": "Cannot be empty."
  }
]

409 Response

{
  "message": "Sender state is unlicensed"
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Sender
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Get a filtered list of senders by query string.

Code samples

GET https://api.pangeamoneytransfer.com/v1/senders HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/senders \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/senders', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/senders',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/senders", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /senders

Get a filtered list of senders by query string.

Parameters

Name In Type Required Description
phone query string false Filter by sender phone

Example responses

200 Response

[
  {
    "id": "d48fc57c92aa495aad2311438c545620",
    "referenceId": "AZ123809",
    "fullName": "Isabelle Kober",
    "email": "isabelle.kober@example.com",
    "phone": "15707512999",
    "dateOfBirth": "1986-01-22",
    "countryOfBirth": "USA",
    "nationality": "USA",
    "occupation": "Engineer",
    "address": {
      "address1": "2659 Simons Hollow Rd.",
      "address2": "Unit 300",
      "city": "New York",
      "stateOrProvince": "NY",
      "postalCode": "10001",
      "country": "USA"
    },
    "idNumber": "n-42423-3292",
    "idType": "PASSPORT"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Sender] false none none
» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
» referenceId ReferenceIdentifier false none An internal reference identifier for your own tracking purposes.
» fullName string true none Space-delimited string representing the senders's full, legal name.
» email string(email) false none The sender's email address.
» phone string(phone) true none The sender's phone number with country code included (must be a mobile phone number).
» dateOfBirth string(date) true none The sender's birthday. Must be at least 18 years old.
» countryOfBirth string(iso-alpha-3) false none The sender's country of birth.
» nationality string(iso-alpha-3) false none The sender's nationality.
» occupation string false none The sender's occupation.
» address SenderAddress true none none
»» address1 string true none First line of the street address.
»» address2 string false none Second line of the street address.
»» city string true none City in which the address is located.
»» stateOrProvince string true none State or province in which the address is located.
»» postalCode string true none The postal code in which the address is located.
»» country string(iso-alpha-3) true none Country in which the address is located.
» idNumber string false none The sender's identification number
» idType idType false none none

Enumerated Values

Property Value
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Query a sender

Code samples

GET https://api.pangeamoneytransfer.com/v1/senders/{senderId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/senders/{senderId} \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/senders/{senderId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /senders/{senderId}

Get a sender.

This endpoint allows you to get the details of a sender.

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.

Example responses

200 Response

[
  {
    "id": "d48fc57c92aa495aad2311438c545620",
    "referenceId": "AZ123809",
    "fullName": "Isabelle Kober",
    "email": "isabelle.kober@example.com",
    "phone": "15707512999",
    "dateOfBirth": "1986-01-22",
    "countryOfBirth": "USA",
    "nationality": "USA",
    "occupation": "Engineer",
    "address": {
      "address1": "2659 Simons Hollow Rd.",
      "address2": "Unit 300",
      "city": "New York",
      "stateOrProvince": "NY",
      "postalCode": "10001",
      "country": "USA"
    },
    "idNumber": "n-42423-3292",
    "idType": "PASSPORT"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Sender] false none none
» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
» referenceId ReferenceIdentifier false none An internal reference identifier for your own tracking purposes.
» fullName string true none Space-delimited string representing the senders's full, legal name.
» email string(email) false none The sender's email address.
» phone string(phone) true none The sender's phone number with country code included (must be a mobile phone number).
» dateOfBirth string(date) true none The sender's birthday. Must be at least 18 years old.
» countryOfBirth string(iso-alpha-3) false none The sender's country of birth.
» nationality string(iso-alpha-3) false none The sender's nationality.
» occupation string false none The sender's occupation.
» address SenderAddress true none none
»» address1 string true none First line of the street address.
»» address2 string false none Second line of the street address.
»» city string true none City in which the address is located.
»» stateOrProvince string true none State or province in which the address is located.
»» postalCode string true none The postal code in which the address is located.
»» country string(iso-alpha-3) true none Country in which the address is located.
» idNumber string false none The sender's identification number
» idType idType false none none

Enumerated Values

Property Value
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Update a sender

Code samples

PATCH https://api.pangeamoneytransfer.com/v1/senders/{senderId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X PATCH https://api.pangeamoneytransfer.com/v1/senders/{senderId} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}',
  method: 'patch',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.patch('https://api.pangeamoneytransfer.com/v1/senders/{senderId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.patch 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

PATCH /senders/{senderId}

Update a sender.

This endpoint allows you to update a sender's information. Although a request body is required, none of the specific fields themselves are required. You can choose to update any of the fields that appear in the PATCH schema below.

Please note that when updating the address, all required address fields are required.

Body parameter

{
  "referenceId": "AZ123809",
  "fullName": "Isabelle Kober",
  "email": "isabelle.kober@example.com",
  "phone": "15707512999",
  "dateOfBirth": "1986-01-22",
  "countryOfBirth": "USA",
  "nationality": "USA",
  "occupation": "Engineer",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "New York",
    "stateOrProvince": "NY",
    "postalCode": "10001",
    "country": "USA"
  },
  "idNumber": "string",
  "idType": "PASSPORT"
}

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.
referenceId body ReferenceIdentifier false An internal reference identifier for your own tracking purposes.
fullName body string false Space-delimited string representing the senders's full, legal name.
email body string(email) false The sender's email address.
phone body string(phone) false The sender's phone number with country code included (must be a mobile phone number).
dateOfBirth body string(date) false The sender's birthday.
countryOfBirth body string(iso-alpha-3) false The sender's country of birth.
nationality body string(iso-alpha-3) false The sender's nationality.
occupation body string false The sender's occupation.
address body object false none
» address1 body string false First line of the street address.
» address2 body string false Second line of the street address.
» city body string false City in which the address is located.
» stateOrProvince body string false State or province in which the address is located.
» postalCode body string false The postal code in which the address is located.
» country body string(iso-alpha-3) false Country in which the address is located.
idNumber body string false The sender's identification number
idType body idType false none

Enumerated Values

Parameter Value
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Isabelle Kober",
  "email": "isabelle.kober@example.com",
  "phone": "15707512999",
  "dateOfBirth": "1986-01-22",
  "countryOfBirth": "USA",
  "nationality": "USA",
  "occupation": "Engineer",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "New York",
    "stateOrProvince": "NY",
    "postalCode": "10001",
    "country": "USA"
  },
  "idNumber": "n-42423-3292",
  "idType": "PASSPORT"
}

400 Response

[
  {
    "name": "dateOfBirth",
    "error": "Cannot be empty."
  },
  {
    "name": "stateOrProvince",
    "error": "Must be an ISO Alpha-2 code."
  }
]

409 Response

{
  "message": "Sender country is not supported."
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Sender
304 Not Modified No data was updated. None
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Receivers

Resources related to receivers of transfers.

Create a receiver

Code samples

POST https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /senders/{senderId}/receivers

Create a receiver.

This endpoint allows you to create a receiver for a specific sender. Municipality is required for Mexico City, MEX.

Body parameter

{
  "referenceId": "AZ123809",
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "phone": "546667778888",
  "dateOfBirth": "1986-01-22",
  "nationality": "MEX",
  "idNumber": "string",
  "idType": "PASSPORT"
}

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.
referenceId body ReferenceIdentifier false An internal reference identifier for your own tracking purposes.
fullName body string true Space-delimited string representing the receiver's full, legal name.
address body ReceiverAddress true A schema defining a receiver's address.
» address1 body string false First line of the street address.
» address2 body string false Second line of the street address.
» city body string true City in which the address is located.
» stateOrProvince body string true State or province in which the address is located.
» stateOrProvinceType body stateOrProvinceType false This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.
» postalCode body string false The postal code in which the address is located.
» country body string(iso-alpha-3) true Country in which the address is located.
» municipality body string false Municipality of the city
phone body string(phone) false The receiver's phone number with country code included.
dateOfBirth body string(date) false The receiver's birthday.
nationality body string(iso-alpha-3) false The receiver's nationality.
idNumber body string false The receiver's identification number
idType body idType false none

Enumerated Values

Parameter Value
» stateOrProvinceType ISO31662
» stateOrProvinceType LongName
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "nationality": "MEX",
  "phone": "543334445555",
  "dateOfBirth": "1986-01-22",
  "idNumber": "2322333444332d",
  "idType": "PASSPORT"
}

400 Response

[
  {
    "name": "dateOfBirth",
    "error": "Cannot be empty."
  },
  {
    "name": "stateOrProvince",
    "error": "Must be an ISO Alpha-2 code."
  }
]

409 Response

{
  "message": "Receiver country is not supported."
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Receiver
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Query receivers

Code samples

GET https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /senders/{senderId}/receivers

Retrieve receivers.

This endpoint allows you to get all receivers for a specific sender.

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.

Example responses

200 Response

[
  {
    "id": "d48fc57c92aa495aad2311438c545620",
    "referenceId": "AZ123809",
    "fullName": "Ambrosia Vasquez Gamboa",
    "address": {
      "address1": "2659 Simons Hollow Rd.",
      "address2": "Unit 300",
      "city": "Juárez",
      "stateOrProvince": "CHH",
      "stateOrProvinceType": "ISO31662",
      "postalCode": "32250",
      "country": "MEX",
      "municipality": "Xochimilco"
    },
    "nationality": "MEX",
    "phone": "543334445555",
    "dateOfBirth": "1986-01-22",
    "idNumber": "2322333444332d",
    "idType": "PASSPORT"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Receiver] false none [A schema defining a person capable of receiving a transfer.]
» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
» referenceId ReferenceIdentifier false none An internal reference identifier for your own tracking purposes.
» fullName string true none Space-delimited string representing the receiver's full, legal name.
» address ReceiverAddress true none A schema defining a receiver's address.
»» address1 string false none First line of the street address.
»» address2 string false none Second line of the street address.
»» city string true none City in which the address is located.
»» stateOrProvince string true none State or province in which the address is located.
»» stateOrProvinceType stateOrProvinceType false none This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.
»» postalCode string false none The postal code in which the address is located.
»» country string(iso-alpha-3) true none Country in which the address is located.
»» municipality string false none Municipality of the city
» nationality string(iso-alpha-3) false none The receiver's nationality
» phone string false none The phone number
» dateOfBirth string(date) false none The receiver's birthday. Must be at least 18 years old.
» idNumber string false none The sender's identification number
» idType idType false none none

Enumerated Values

Property Value
stateOrProvinceType ISO31662
stateOrProvinceType LongName
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Query a receiver

Code samples

GET https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId} \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /senders/{senderId}/receivers/{receiverId}

Retrieve a receiver.

This endpoint allows you to get a receiver for a specific sender.

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.
receiverId path string(uuid) true The unique identifier associated with the receiver you're searching for.

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "nationality": "MEX",
  "phone": "543334445555",
  "dateOfBirth": "1986-01-22",
  "idNumber": "2322333444332d",
  "idType": "PASSPORT"
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Receiver

Update a receiver

Code samples

PATCH https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X PATCH https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId} \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}',
  method: 'patch',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.patch('https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.patch 'https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("PATCH");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("PATCH", "https://api.pangeamoneytransfer.com/v1/senders/{senderId}/receivers/{receiverId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

PATCH /senders/{senderId}/receivers/{receiverId}

Update a receiver.

This endpoint allows you to update a receiver's information. Although a request body is required, none of the specific fields themselves are required. You can choose to update any of the fields that appear in the PATCH schema below.

Please note that when updating the address, all required address fields are required.

Body parameter

{
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "phone": "546665558888",
  "dateOfBirth": "1986-01-22",
  "nationality": "MEX",
  "idNumber": "string",
  "idType": "PASSPORT"
}

Parameters

Name In Type Required Description
senderId path string(uuid) true The unique identifier associated with the sender you're searching for.
receiverId path string(uuid) true The unique identifier associated with the receiver you're searching for.
fullName body string false Space-delimited string representing the receiver's full, legal name.
address body ReceiverAddress false A schema defining a receiver's address.
» address1 body string false First line of the street address.
» address2 body string false Second line of the street address.
» city body string true City in which the address is located.
» stateOrProvince body string true State or province in which the address is located.
» stateOrProvinceType body stateOrProvinceType false This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.
» postalCode body string false The postal code in which the address is located.
» country body string(iso-alpha-3) true Country in which the address is located.
» municipality body string false Municipality of the city
phone body string(phone) false The receiver's phone number with country code included.
dateOfBirth body string(date) false The receiver's birthday.
nationality body string(iso-alpha-3) false The receiver's nationality.
idNumber body string false The receiver's identification number
idType body idType false none

Enumerated Values

Parameter Value
» stateOrProvinceType ISO31662
» stateOrProvinceType LongName
idType PASSPORT
idType DRIVING_LICENSE
idType SOCIAL_SECURITY
idType TAX_ID
idType SENIOR_CITIZEN_ID
idType BIRTH_CERTIFICATE
idType VILLAGE_ELDER_ID
idType RESIDENT_CARD
idType ALIEN_REGISTRATION
idType PAN_CARD
idType VOTERS_ID
idType HEALTH_CARD
idType EMPLOYER_ID
idType OTHER

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "nationality": "MEX",
  "phone": "543334445555",
  "dateOfBirth": "1986-01-22",
  "idNumber": "2322333444332d",
  "idType": "PASSPORT"
}

400 Response

[
  {
    "name": "stateOrProvince",
    "error": "Must be an ISO Alpha-2 code."
  }
]

409 Response

{
  "message": "Receiver country is not supported."
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Receiver
304 Not Modified No data was updated. None
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Quotes

Resources related to quotes.

Create a quote

Code samples

POST https://api.pangeamoneytransfer.com/v1/quote HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/quote \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/quote',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/quote', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/quote',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/quote");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/quote", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /quote

Create a quote to be used for a transfer.

A quote used to establish the fee that Pangea will charge you to complete this transfer. This is not the fee that will be applied charged to your sender's funding method. You must use the latest available quote before creating each transfer. Some counties (Honduras and El Salvador) require that you use a specific FX rate when calculating the receiving amount. This is provided in the optional field 'requiredFxRate'.

Body parameter

{
  "fundingAmount": {
    "amount": 250.66,
    "currency": "USD"
  },
  "partnerId": "d48fc57c92aa495aad2311438c545620"
}

Parameters

Name In Type Required Description
fundingAmount body Money true none
» amount body number(double) true The amount of money.
» currency body string(iso-alpha-3) true The currency the money belongs to.
partnerId body string true Identifier of the delivery partner

Example responses

201 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "fee": {
    "amount": 120,
    "currency": "USD"
  },
  "quotationFxRate": 17.75,
  "fxCurrency": "MXN",
  "requiredFxRate": 17.75
}

Responses

Status Meaning Description Schema
201 Created The resource was successfully created. Quote
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Transfers

Resources that allow you to create, manage and execute international money transfers.

Create a transfer

Code samples

POST https://api.pangeamoneytransfer.com/v1/transfers HTTP/1.1
Host: api.pangeamoneytransfer.com
Content-Type: application/json
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/transfers \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Content-Type':'application/json',
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/transfers',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/transfers', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Content-Type' => 'application/json',
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/transfers',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/transfers");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Content-Type": []string{"application/json"},
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/transfers", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /transfers

Create a transfer.

This endpoint allows you to submit a request for an international money transfer on behalf of your customers. A successful response from this endpoint ensures that you have submitted all the required information and that your transfer has been created and is in process.

At each stage of the transfer's lifecycle, you will receive status updates at the callbackUrl you provide in the body of this request.

Validations are done to ensure that the funding amount, fee, and exchange rate equals the correct delivery amount: funding.Amount * fxRate = delivery.Amount

The final delivery amount must be rounded to the countries' configured roundingAmountDigits.

The amount we charge your customer: funding.Amount + fee

The amount we give to the receiver: delivery.Amount

Body parameter

{
  "referenceId": "AZ123809",
  "delivery": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "partnerId": "d48fc57c92aa495aad2311438c545620",
    "accountId": "d48fc57c92aa495aad2311438c545620",
    "method": "direct-deposit"
  },
  "funding": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "cardId": "d48fc57c92aa495aad2311438c545620"
  },
  "fxRate": 19.09,
  "fee": 3.5,
  "callbackUrl": "https://your-company.com/callbacks",
  "quoteId": "d48fc57c92aa495aad2311438c545620",
  "clientSessionId": "cb8e748a-bd6a-4268-8573-706e8b72140d"
}

Parameters

Name In Type Required Description
referenceId body string true An internal reference ID for your own tracking purposes.
senderId body Identifier(uuid) true Universally unique identifier of an API resource.
receiverId body Identifier(uuid) true Universally unique identifier of an API resource.
delivery body Delivery true The delivery object allows you to specify how you would like your transfer delivered.
» amount body Money true none
»» amount body number(double) true The amount of money.
»» currency body string(iso-alpha-3) true The currency the money belongs to.
» partnerId body string(uuid) true The unique identifier of the designated delivery partner.
» accountId body string(uuid)\ null false
» method body DeliveryMethod false The method with which to receive transfer funds.
funding body Funding true The funding object allows you to specify the manner with which you'd like to fund a transfer.
» amount body Money true none
» cardId body string(uuid)\ null true
fxRate body number(double) true The FX rate that the customer is being charged for the transfer. This is seen on the receipt and is a factor in the amount sent to the receiver.
fee body number(double) true The fee that the customer is charged for the transfer.
callbackUrl body string(uri) false The URL where Pangea should send callbacks related to this transfer.
quoteId body string(uuid) true The ID of the quote applied to this transfer.
clientSessionId body string(uuid) true The sessionId initialized and obtained via the Pangea.js library

Detailed descriptions

delivery: The delivery object allows you to specify how you would like your transfer delivered.

Direct deposit transfers also require the accountId field.

The amount is the value that is sent to the receiver either by direct deposit or available for cash-pickup.

funding: The funding object allows you to specify the manner with which you'd like to fund a transfer.

Currently we only support debit card funding.

The amount is the value in the source currency (USD) which we are sending to the reciever.

Enumerated Values

Parameter Value
» method cash-pickup
» method direct-deposit
» method mobile-wallet

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "status": {
    "code": "Created",
    "timestamp": "2019-07-16T13:30:00"
  },
  "callbackHistory": [
    {
      "code": "Completed",
      "timestamp": "2019-07-16T12:50:21.001Z"
    },
    {
      "code": "Created",
      "timestamp": "2019-07-16T12:46:33.001Z"
    }
  ],
  "delivery": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "partnerId": "d48fc57c92aa495aad2311438c545620",
    "accountId": "d48fc57c92aa495aad2311438c545620",
    "method": "direct-deposit"
  },
  "funding": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "cardId": "d48fc57c92aa495aad2311438c545620"
  },
  "fxRate": 19.09,
  "fee": 3.5,
  "callbackUrl": "https://your-company.com/callbacks",
  "quotation": {
    "id": "d48fc57c92aa495aad2311438c545620",
    "fee": {
      "amount": 120,
      "currency": "USD"
    },
    "quotationFxRate": 17.75,
    "fxCurrency": "MXN",
    "requiredFxRate": 17.75
  },
  "deliveryReferenceCode": 18021234430,
  "cancellationReason": "Funding_Issue_CardDeclined"
}

400 Response

[
  {
    "name": "delivery.money.currency",
    "error": "Not a valid ISO 4217 currency code"
  }
]

409 Response

{
  "message": "The Fee is inavlid"
}

Responses

Status Meaning Description Schema
200 OK Request was successful. Transfer
400 Bad Request The request was poorly formed. Inline
409 Conflict The request encountered a conflict. Error

Response Schema

Status Code 400

Name Type Required Restrictions Description
anonymous [InvalidField] false none none
» name string false none The name of the invalid field.
» error string false none The problem with the field's input.

Query a transfer

Code samples

GET https://api.pangeamoneytransfer.com/v1/transfers/{transferId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/transfers/{transferId} \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/transfers/{transferId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/transfers/{transferId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/transfers/{transferId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/transfers/{transferId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/transfers/{transferId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /transfers/{transferId}

Retrieve a transfer.

This endpoint allows you to retrieve the details for a transfer you've submitted.

Parameters

Name In Type Required Description
transferId path string(uuid) true The unique identifier associated with the transfer you're searching for. This can be either the id or the referenceId you provided on transfer creation.

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "status": {
    "code": "Created",
    "timestamp": "2019-07-16T13:30:00"
  },
  "callbackHistory": [
    {
      "code": "Completed",
      "timestamp": "2019-07-16T12:50:21.001Z"
    },
    {
      "code": "Created",
      "timestamp": "2019-07-16T12:46:33.001Z"
    }
  ],
  "delivery": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "partnerId": "d48fc57c92aa495aad2311438c545620",
    "accountId": "d48fc57c92aa495aad2311438c545620",
    "method": "direct-deposit"
  },
  "funding": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "cardId": "d48fc57c92aa495aad2311438c545620"
  },
  "fxRate": 19.09,
  "fee": 3.5,
  "callbackUrl": "https://your-company.com/callbacks",
  "quotation": {
    "id": "d48fc57c92aa495aad2311438c545620",
    "fee": {
      "amount": 120,
      "currency": "USD"
    },
    "quotationFxRate": 17.75,
    "fxCurrency": "MXN",
    "requiredFxRate": 17.75
  },
  "deliveryReferenceCode": 18021234430,
  "cancellationReason": "Funding_Issue_CardDeclined"
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Transfer

Get list of transfers by query parameters

Code samples

GET https://api.pangeamoneytransfer.com/v1/transfers/byFilters?startDate=2020-01-01&endDate=2020-01-31 HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json
X-Pangea-Paging-Page: 1
X-Pangea-Paging-PageSize: 200

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/transfers/byFilters?startDate=2020-01-01&endDate=2020-01-31 \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Paging-Page: 1' \
  -H 'X-Pangea-Paging-PageSize: 200' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Paging-Page':'1',
  'X-Pangea-Paging-PageSize':'200',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/transfers/byFilters',
  method: 'get',
  data: '?startDate=2020-01-01&endDate=2020-01-31',
  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Paging-Page': '1',
  'X-Pangea-Paging-PageSize': '200',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/transfers/byFilters', params={
  'startDate': '2020-01-01',  'endDate': '2020-01-31'
}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Paging-Page' => '1',
  'X-Pangea-Paging-PageSize' => '200',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/transfers/byFilters',
  params: {
  'startDate' => 'string(date)',
'endDate' => 'string(date)'
}, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/transfers/byFilters?startDate=2020-01-01&endDate=2020-01-31");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Paging-Page": []string{"1"},
        "X-Pangea-Paging-PageSize": []string{"200"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/transfers/byFilters", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /transfers/byFilters

Get list of transfers by query parameters

Parameters

Name In Type Required Description
startDate query string(date) true Starting date created in UTC to filter on (inclusive).
endDate query string(date) true Ending date created in UTC to filter on (exclusive).
deliveryMethod query DeliveryMethod false Optional delivery method to filter on.
statusFilter query StatusFilter false Optional status to filter on. Note that these values are slightly different than the transfers status code enum.
X-Pangea-Paging-Page header integer false The page you are requesting. Default is 1.
X-Pangea-Paging-PageSize header integer false The size of the page you request. Default is 10. Max is 250.

Enumerated Values

Parameter Value
deliveryMethod cash-pickup
deliveryMethod direct-deposit
deliveryMethod mobile-wallet
statusFilter Created
statusFilter FundedOrAvailable
statusFilter Completed
statusFilter CancelInProgress
statusFilter Cancelled
statusFilter Refunded

Example responses

200 Response

[
  {
    "id": "d48fc57c92aa495aad2311438c545620",
    "referenceId": "AZ123809",
    "senderId": "d48fc57c92aa495aad2311438c545620",
    "receiverId": "d48fc57c92aa495aad2311438c545620",
    "status": {
      "code": "Created",
      "timestamp": "2019-07-16T13:30:00"
    },
    "callbackHistory": [
      {
        "code": "Completed",
        "timestamp": "2019-07-16T12:50:21.001Z"
      },
      {
        "code": "Created",
        "timestamp": "2019-07-16T12:46:33.001Z"
      }
    ],
    "delivery": {
      "amount": {
        "amount": 120,
        "currency": "USD"
      },
      "partnerId": "d48fc57c92aa495aad2311438c545620",
      "accountId": "d48fc57c92aa495aad2311438c545620",
      "method": "direct-deposit"
    },
    "funding": {
      "amount": {
        "amount": 120,
        "currency": "USD"
      },
      "cardId": "d48fc57c92aa495aad2311438c545620"
    },
    "fxRate": 19.09,
    "fee": 3.5,
    "callbackUrl": "https://your-company.com/callbacks",
    "quotation": {
      "id": "d48fc57c92aa495aad2311438c545620",
      "fee": {
        "amount": 120,
        "currency": "USD"
      },
      "quotationFxRate": 17.75,
      "fxCurrency": "MXN",
      "requiredFxRate": 17.75
    },
    "deliveryReferenceCode": 18021234430,
    "cancellationReason": "Funding_Issue_CardDeclined"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. Inline

Response Schema

Status Code 200

Name Type Required Restrictions Description
anonymous [Transfer] false none none
» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
» referenceId ReferenceIdentifier true none An internal reference identifier for your own tracking purposes.
» senderId Identifier(uuid) true read-only Universally unique identifier of an API resource.
» receiverId Identifier(uuid) true read-only Universally unique identifier of an API resource.
» status TransferStatus true none none
»» code string false read-only The status of the transfer.
»» timestamp string(datetime) false read-only The timestamp of the transfer's status.
» callbackHistory [TransferStatus] true read-only The history of callbacks sent.
» delivery Delivery true none The delivery object allows you to specify how you would like your transfer delivered. Direct deposit transfers also require the accountId field. The amount is the value that is sent to the receiver either by direct deposit or available for cash-pickup.
»» amount Money true none none
»»» amount number(double) true none The amount of money.
»»» currency string(iso-alpha-3) true none The currency the money belongs to.
»» partnerId string(uuid) true none The unique identifier of the designated delivery partner.
»» accountId string(uuid)\ null false none
»» method DeliveryMethod false none The method with which to receive transfer funds.
» funding Funding true none The funding object allows you to specify the manner with which you'd like to fund a transfer. Currently we only support debit card funding. The amount is the value in the source currency (USD) which we are sending to the reciever.
»» amount Money true none none
»» cardId string(uuid)\ null true none
» fxRate number(double) true none The FX Rate you're providing for the transfer.
» fee number(double) true none The fee you're charging for the transfer.
» callbackUrl string(uri) false none The URL where Pangea should send callbacks related to this transfer.
» quotation Quote false none The quotation given for a transfer. Includes the Fee and Fx rate that Pangea charge you.
»» id Identifier(uuid) true read-only Universally unique identifier of an API resource.
»» fee Money true none none
»» quotationFxRate number true none none
»» fxCurrency string true none none
»» requiredFxRate number false none If provided, this must the fx rate used when calculating the transfer receiver amount. Includes Honduras and El Salvador.
» deliveryReferenceCode string false none The code that a receiver needs to obtain the funds
» cancellationReason string false none The reason the transfer was cancelled or refunded

Enumerated Values

Property Value
code Created
code Funded
code Available
code Completed
code Cancelled
code CancelInProgress
code RefundInProgress
code Refunded
code Reversed
method cash-pickup
method direct-deposit
method mobile-wallet

Response Headers

Status Header Type Format Description
200 X-Pangea-Paging-Page integer The page returned.
200 X-Pangea-Paging-PageSize integer The size of the page you request.
200 X-Pangea-Paging-PageCount integer The count of pages that are available for the query.
200 X-Pangea-Paging-TotalCount integer The total count of records for the query.

Cancel a transfer

Code samples

POST https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: application/json

# You can also use wget
curl -X POST https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel \
  -H 'Accept: application/json' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'application/json',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel',
  method: 'post',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'application/json',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.post('https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'application/json',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.post 'https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("POST");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"application/json"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("POST", "https://api.pangeamoneytransfer.com/v1/transfers/{transferId}/cancel", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

POST /transfers/{transferId}/cancel

Cancel a transfer.

Cancel a transfer which has not been completed. If the transfer has not yet been Funded, it'll become Cancelled and a callback will be sent. If the transfer has been funded, Pangea needs to wait for the delivery partner to confirm cancellation. Upon confirmation, pangea will refund the funding method and issue a Refunded callback.

Parameters

Name In Type Required Description
transferId path string(uuid) true The unique identifier associated with the transfer you're searching for. This can be either the id or the referenceId you provided on transfer creation.

Example responses

200 Response

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "status": {
    "code": "Created",
    "timestamp": "2019-07-16T13:30:00"
  },
  "callbackHistory": [
    {
      "code": "Completed",
      "timestamp": "2019-07-16T12:50:21.001Z"
    },
    {
      "code": "Created",
      "timestamp": "2019-07-16T12:46:33.001Z"
    }
  ],
  "delivery": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "partnerId": "d48fc57c92aa495aad2311438c545620",
    "accountId": "d48fc57c92aa495aad2311438c545620",
    "method": "direct-deposit"
  },
  "funding": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "cardId": "d48fc57c92aa495aad2311438c545620"
  },
  "fxRate": 19.09,
  "fee": 3.5,
  "callbackUrl": "https://your-company.com/callbacks",
  "quotation": {
    "id": "d48fc57c92aa495aad2311438c545620",
    "fee": {
      "amount": 120,
      "currency": "USD"
    },
    "quotationFxRate": 17.75,
    "fxCurrency": "MXN",
    "requiredFxRate": 17.75
  },
  "deliveryReferenceCode": 18021234430,
  "cancellationReason": "Funding_Issue_CardDeclined"
}

409 Response

{
  "message": "Unable to cancel due to current status"
}

Responses

Status Meaning Description Schema
200 OK The request was successful. Transfer
409 Conflict The request encountered a conflict. Error

Receipts

Resource that allows you to retrieve a compliant receipt for your customer.

Retrieve a receipt

Code samples

GET https://api.pangeamoneytransfer.com/v1/receipts/{transferId} HTTP/1.1
Host: api.pangeamoneytransfer.com
Accept: text/html

# You can also use wget
curl -X GET https://api.pangeamoneytransfer.com/v1/receipts/{transferId} \
  -H 'Accept: text/html' \
  -H 'X-Pangea-Access-Key: API_KEY' \
  -H 'X-Pangea-Secret-Key: API_KEY'

var headers = {
  'Accept':'text/html',
  'X-Pangea-Access-Key':'API_KEY',
  'X-Pangea-Secret-Key':'API_KEY'

};

$.ajax({
  url: 'https://api.pangeamoneytransfer.com/v1/receipts/{transferId}',
  method: 'get',

  headers: headers,
  success: function(data) {
    console.log(JSON.stringify(data));
  }
})

import requests
headers = {
  'Accept': 'text/html',
  'X-Pangea-Access-Key': 'API_KEY',
  'X-Pangea-Secret-Key': 'API_KEY'
}

r = requests.get('https://api.pangeamoneytransfer.com/v1/receipts/{transferId}', params={

}, headers = headers)

print r.json()

require 'rest-client'
require 'json'

headers = {
  'Accept' => 'text/html',
  'X-Pangea-Access-Key' => 'API_KEY',
  'X-Pangea-Secret-Key' => 'API_KEY'
}

result = RestClient.get 'https://api.pangeamoneytransfer.com/v1/receipts/{transferId}',
  params: {
  }, headers: headers

p JSON.parse(result)

URL obj = new URL("https://api.pangeamoneytransfer.com/v1/receipts/{transferId}");
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
int responseCode = con.getResponseCode();
BufferedReader in = new BufferedReader(
    new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}
in.close();
System.out.println(response.toString());

package main

import (
       "bytes"
       "net/http"
)

func main() {

    headers := map[string][]string{
        "Accept": []string{"text/html"},
        "X-Pangea-Access-Key": []string{"API_KEY"},
        "X-Pangea-Secret-Key": []string{"API_KEY"},

    }

    data := bytes.NewBuffer([]byte{jsonReq})
    req, err := http.NewRequest("GET", "https://api.pangeamoneytransfer.com/v1/receipts/{transferId}", data)
    req.Header = headers

    client := &http.Client{}
    resp, err := client.Do(req)
    // ...
}

GET /receipts/{transferId}

Returns a full HTML Receipt.

This endpoint must be used to retrieve the receipt that will be shown to your customers. A receipt is available when a transfer is successfully created and the receipt does not subsequently change based on the transfer completion status. If an unsupported language is provided then an English receipt will be returned.

Parameters

Name In Type Required Description
transferId path string(uuid) true The unique identifier associated with the transfer you're searching for. This can be either the id or the referenceId you provided on transfer creation.
language query string false The language you want the response in.

Example responses

200 Response

409 Response

[
  {
    "message": "Invalid language"
  }
]

Responses

Status Meaning Description Schema
200 OK The request was successful. None
409 Conflict The request encountered a conflict. Error

Response Schema

Schemas

Country

{
  "id": "MEX",
  "currency": "MXN",
  "roundingAmountDigits": 2,
  "methods": [
    "cash-pickup",
    "direct-deposit"
  ]
}

Properties

Name Type Required Restrictions Description
id string(iso-alpha-3) true none The country's ISO Alpha-3 code.
currency string(iso-alpha-3) true none The currency the money belongs to.
roundingAmountDigits number true none The count of decimals the delivery amount must be rounded to.
methods [DeliveryMethod] true none The country's available delivery methods.

StateConfiguration

{
  "id": "USA-IL",
  "deliveryRequirements": {
    "deliveryAccountRequirements": [
      "accountNumber"
    ],
    "senderRequirements": [
      "address1"
    ],
    "recieverRequirements": [
      "address1"
    ]
  }
}

Properties

Name Type Required Restrictions Description
id string(ISO 3166-2) true none The state's ISO 3166-2 code.
deliveryRequirements DeliveryRequirements false none none

FundingCard

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "nameOnCard": "Cristoball Nelson",
  "brand": "Visa",
  "lastFourDigits": 3107,
  "expiration": "01-20",
  "iin": 475056
}

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
senderId Identifier true none Universally unique identifier of an API resource.
nameOnCard string true none Space-delimited string representing the card-holder's name as it appears on the card.
brand string true none The brand of the debit card.
lastFourDigits string true none The last four digits of the debit card number.
expiration string(mm-yy) true none The debit card's expiration date.
iin string true none The debit card's Issuer Identification Number.

Delivery

{
  "amount": {
    "amount": 120,
    "currency": "USD"
  },
  "partnerId": "d48fc57c92aa495aad2311438c545620",
  "accountId": "d48fc57c92aa495aad2311438c545620",
  "method": "direct-deposit"
}

*The delivery object allows you to specify how you would like your transfer delivered.

Direct deposit transfers also require the accountId field.

The amount is the value that is sent to the receiver either by direct deposit or available for cash-pickup.*

Properties

Name Type Required Restrictions Description
amount Money true none none
partnerId string(uuid) true none The unique identifier of the designated delivery partner.
accountId string(uuid)\ null false none
method DeliveryMethod false none The method with which to receive transfer funds.

DeliveryAccount

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "partnerId": "d48fc57c92aa495aad2311438c545620",
  "lastFourDigits": "3417",
  "bankName": "Citi"
}

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
receiverId Identifier true none Universally unique identifier of an API resource.
partnerId Identifier true none Universally unique identifier of an API resource.
lastFourDigits string true none The last four digits of the account number.
bankName string false none The name of the bank that issued the account.

DeliveryMethod

"direct-deposit"

The method with which to receive transfer funds.

Properties

Name Type Required Restrictions Description
anonymous string false none The method with which to receive transfer funds.

Enumerated Values

Property Value
anonymous cash-pickup
anonymous direct-deposit
anonymous mobile-wallet

DeliveryPartner

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "name": "Elektra",
  "method": "cash-pickup",
  "logoUrl": "https://api.pangeamoneytransfer.com/assets/elektra.png",
  "country": "string",
  "deliveryRequirements": {
    "deliveryAccountRequirements": [
      "accountNumber"
    ],
    "senderRequirements": [
      "address1"
    ],
    "recieverRequirements": [
      "address1"
    ]
  }
}

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
name string true none The name of the partner responsible for paying out the transfer.
method string true none The delivery method this partner supports.
logoUrl string(uri) false none A public image URL of the delivery partner's logo.
country string(iso-alpha-3) true none The country in which the delivery partner operates.
deliveryRequirements DeliveryRequirements false none none

Enumerated Values

Property Value
method cash-pickup
method direct-deposit
method mobile-wallet

DeliveryRequirements

{
  "deliveryAccountRequirements": [
    "accountNumber"
  ],
  "senderRequirements": [
    "address1"
  ],
  "recieverRequirements": [
    "address1"
  ]
}

Properties

Name Type Required Restrictions Description
deliveryAccountRequirements [DeliveryAccountRequirements] false none none
senderRequirements [PersonRequirements] false none none
recieverRequirements [PersonRequirements] false none none

DeliveryAccountRequirements

"accountNumber"

Properties

Name Type Required Restrictions Description
anonymous string false none none

Enumerated Values

Property Value
anonymous accountNumber
anonymous iban
anonymous cbu
anonymous clabe
anonymous email
anonymous msisdn
anonymous ifsc
anonymous branchNumber
anonymous swiftBic
anonymous accountType

PersonRequirements

"address1"

Properties

Name Type Required Restrictions Description
anonymous string false none none

Enumerated Values

Property Value
anonymous address1
anonymous postalCode
anonymous phone
anonymous idNumber
anonymous idType
anonymous nationality
anonymous countryOfBirth
anonymous dateOfBirth
anonymous occupation

Error

{
  "message": "string",
  "additionalData": "string"
}

Properties

Name Type Required Restrictions Description
message string true read-only The error message.
additionalData string false none An additional piece of information such as the transfer Id in the case of a duplicate transfer error.

Funding

{
  "amount": {
    "amount": 120,
    "currency": "USD"
  },
  "cardId": "d48fc57c92aa495aad2311438c545620"
}

*The funding object allows you to specify the manner with which you'd like to fund a transfer.

Currently we only support debit card funding.

The amount is the value in the source currency (USD) which we are sending to the reciever.*

Properties

Name Type Required Restrictions Description
amount Money true none none
cardId string(uuid)\ null true none

Identifier

"d48fc57c92aa495aad2311438c545620"

Universally unique identifier of an API resource.

Properties

Name Type Required Restrictions Description
anonymous string(uuid) false read-only Universally unique identifier of an API resource.

InvalidField

{
  "name": "countryOfBirth",
  "error": "Must be an ISO Alpha-3 code."
}

Properties

Name Type Required Restrictions Description
name string false none The name of the invalid field.
error string false none The problem with the field's input.

Money

{
  "amount": 120,
  "currency": "USD"
}

Properties

Name Type Required Restrictions Description
amount number(double) true none The amount of money.
currency string(iso-alpha-3) true none The currency the money belongs to.

Quote

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "fee": {
    "amount": 120,
    "currency": "USD"
  },
  "quotationFxRate": 17.75,
  "fxCurrency": "MXN",
  "requiredFxRate": 17.75
}

The quotation given for a transfer. Includes the Fee and Fx rate that Pangea charge you.

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
fee Money true none none
quotationFxRate number true none none
fxCurrency string true none none
requiredFxRate number false none If provided, this must the fx rate used when calculating the transfer receiver amount. Includes Honduras and El Salvador.

Receiver

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Ambrosia Vasquez Gamboa",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "Juárez",
    "stateOrProvince": "CHH",
    "stateOrProvinceType": "ISO31662",
    "postalCode": "32250",
    "country": "MEX",
    "municipality": "Xochimilco"
  },
  "nationality": "MEX",
  "phone": "543334445555",
  "dateOfBirth": "1986-01-22",
  "idNumber": "2322333444332d",
  "idType": "PASSPORT"
}

A schema defining a person capable of receiving a transfer.

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
referenceId ReferenceIdentifier false none An internal reference identifier for your own tracking purposes.
fullName string true none Space-delimited string representing the receiver's full, legal name.
address ReceiverAddress true none A schema defining a receiver's address.
nationality string(iso-alpha-3) false none The receiver's nationality
phone string false none The phone number
dateOfBirth string(date) false none The receiver's birthday. Must be at least 18 years old.
idNumber string false none The sender's identification number
idType idType false none none

ReceiverAddress

{
  "address1": "2659 Simons Hollow Rd.",
  "address2": "Unit 300",
  "city": "Juárez",
  "stateOrProvince": "CHH",
  "stateOrProvinceType": "ISO31662",
  "postalCode": "32250",
  "country": "MEX",
  "municipality": "Xochimilco"
}

A schema defining a receiver's address.

Properties

Name Type Required Restrictions Description
address1 string false none First line of the street address.
address2 string false none Second line of the street address.
city string true none City in which the address is located.
stateOrProvince string true none State or province in which the address is located.
stateOrProvinceType stateOrProvinceType false none This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.
postalCode string false none The postal code in which the address is located.
country string(iso-alpha-3) true none Country in which the address is located.
municipality string false none Municipality of the city

ReferenceIdentifier

"AZ123809"

An internal reference identifier for your own tracking purposes.

Properties

Name Type Required Restrictions Description
anonymous string false none An internal reference identifier for your own tracking purposes.

Sender

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "fullName": "Isabelle Kober",
  "email": "isabelle.kober@example.com",
  "phone": "15707512999",
  "dateOfBirth": "1986-01-22",
  "countryOfBirth": "USA",
  "nationality": "USA",
  "occupation": "Engineer",
  "address": {
    "address1": "2659 Simons Hollow Rd.",
    "address2": "Unit 300",
    "city": "New York",
    "stateOrProvince": "NY",
    "postalCode": "10001",
    "country": "USA"
  },
  "idNumber": "n-42423-3292",
  "idType": "PASSPORT"
}

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
referenceId ReferenceIdentifier false none An internal reference identifier for your own tracking purposes.
fullName string true none Space-delimited string representing the senders's full, legal name.
email string(email) false none The sender's email address.
phone string(phone) true none The sender's phone number with country code included (must be a mobile phone number).
dateOfBirth string(date) true none The sender's birthday. Must be at least 18 years old.
countryOfBirth string(iso-alpha-3) false none The sender's country of birth.
nationality string(iso-alpha-3) false none The sender's nationality.
occupation string false none The sender's occupation.
address SenderAddress true none none
idNumber string false none The sender's identification number
idType idType false none none

SenderAddress

{
  "address1": "2659 Simons Hollow Rd.",
  "address2": "Unit 300",
  "city": "New York",
  "stateOrProvince": "NY",
  "postalCode": "10001",
  "country": "USA"
}

Properties

Name Type Required Restrictions Description
address1 string true none First line of the street address.
address2 string false none Second line of the street address.
city string true none City in which the address is located.
stateOrProvince string true none State or province in which the address is located.
postalCode string true none The postal code in which the address is located.
country string(iso-alpha-3) true none Country in which the address is located.

Transfer

{
  "id": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "AZ123809",
  "senderId": "d48fc57c92aa495aad2311438c545620",
  "receiverId": "d48fc57c92aa495aad2311438c545620",
  "status": {
    "code": "Created",
    "timestamp": "2019-07-16T13:30:00"
  },
  "callbackHistory": [
    {
      "code": "Completed",
      "timestamp": "2019-07-16T12:50:21.001Z"
    },
    {
      "code": "Created",
      "timestamp": "2019-07-16T12:46:33.001Z"
    }
  ],
  "delivery": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "partnerId": "d48fc57c92aa495aad2311438c545620",
    "accountId": "d48fc57c92aa495aad2311438c545620",
    "method": "direct-deposit"
  },
  "funding": {
    "amount": {
      "amount": 120,
      "currency": "USD"
    },
    "cardId": "d48fc57c92aa495aad2311438c545620"
  },
  "fxRate": 19.09,
  "fee": 3.5,
  "callbackUrl": "https://your-company.com/callbacks",
  "quotation": {
    "id": "d48fc57c92aa495aad2311438c545620",
    "fee": {
      "amount": 120,
      "currency": "USD"
    },
    "quotationFxRate": 17.75,
    "fxCurrency": "MXN",
    "requiredFxRate": 17.75
  },
  "deliveryReferenceCode": 18021234430,
  "cancellationReason": "Funding_Issue_CardDeclined"
}

Properties

Name Type Required Restrictions Description
id Identifier true none Universally unique identifier of an API resource.
referenceId ReferenceIdentifier true none An internal reference identifier for your own tracking purposes.
senderId Identifier true none Universally unique identifier of an API resource.
receiverId Identifier true none Universally unique identifier of an API resource.
status TransferStatus true none none
callbackHistory [TransferStatus] true read-only The history of callbacks sent.
delivery Delivery true none The delivery object allows you to specify how you would like your transfer delivered. Direct deposit transfers also require the accountId field. The amount is the value that is sent to the receiver either by direct deposit or available for cash-pickup.
funding Funding true none The funding object allows you to specify the manner with which you'd like to fund a transfer. Currently we only support debit card funding. The amount is the value in the source currency (USD) which we are sending to the reciever.
fxRate number(double) true none The FX Rate you're providing for the transfer.
fee number(double) true none The fee you're charging for the transfer.
callbackUrl string(uri) false none The URL where Pangea should send callbacks related to this transfer.
quotation Quote false none The quotation given for a transfer. Includes the Fee and Fx rate that Pangea charge you.
deliveryReferenceCode string false none The code that a receiver needs to obtain the funds
cancellationReason string false none The reason the transfer was cancelled or refunded

idType

"PASSPORT"

Properties

Name Type Required Restrictions Description
anonymous string false none none

Enumerated Values

Property Value
anonymous PASSPORT
anonymous DRIVING_LICENSE
anonymous SOCIAL_SECURITY
anonymous TAX_ID
anonymous SENIOR_CITIZEN_ID
anonymous BIRTH_CERTIFICATE
anonymous VILLAGE_ELDER_ID
anonymous RESIDENT_CARD
anonymous ALIEN_REGISTRATION
anonymous PAN_CARD
anonymous VOTERS_ID
anonymous HEALTH_CARD
anonymous EMPLOYER_ID
anonymous OTHER

stateOrProvinceType

"ISO31662"

This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.

Properties

Name Type Required Restrictions Description
anonymous string false none This describes how Pangea will validate the address stateOrProvince. The default is ISO3162. If ISO31662, then stateOrProvince value is expected to be 'JAL' to designate Jalisco. If LongName, the value is expected to be 'Jalisco' for example.

Enumerated Values

Property Value
anonymous ISO31662
anonymous LongName

TransferStatus

{
  "code": "Created",
  "timestamp": "2019-07-16T13:30:00"
}

Properties

Name Type Required Restrictions Description
code string false read-only The status of the transfer.
timestamp string(datetime) false read-only The timestamp of the transfer's status.

Enumerated Values

Property Value
code Created
code Funded
code Available
code Completed
code Cancelled
code CancelInProgress
code RefundInProgress
code Refunded
code Reversed

StatusFilter

"Completed"

A status enum that you can filter transfers on.

Properties

Name Type Required Restrictions Description
anonymous string false none A status enum that you can filter transfers on.

Enumerated Values

Property Value
anonymous Created
anonymous FundedOrAvailable
anonymous Completed
anonymous CancelInProgress
anonymous Cancelled
anonymous Refunded

TransferStatusCallback

{
  "transferId": "d48fc57c92aa495aad2311438c545620",
  "referenceId": "d48fc57c92aa495aad2311438c545620",
  "status": {
    "code": "Created",
    "timestamp": "2019-07-16T13:30:00"
  },
  "deliveryReferenceCode": "string",
  "canceallationReason": "string"
}

Properties

Name Type Required Restrictions Description
transferId Identifier false none Universally unique identifier of an API resource.
referenceId Identifier false none Universally unique identifier of an API resource.
status TransferStatus false none none
deliveryReferenceCode string false none The code a receiver uses to pick up the funds.
canceallationReason string false none The reason the transfer was cancelled or refunded.