NAV
shell javascript java csharp go php

Features

Error messages

Example:

Remote Address: xxx.xxx.xxx.xxx:443
Request URL: https://api.mmvpay.com/
Request Method: GET
Status Code: 400 Required PRODUCT in request syntax; more_info: http://dev.mmvpay.com/errors?status=400#route_product_format_invalid

Errors that could be encountered are included as part of the HTTP header which is agnostic to any data type. A reference link to the documentation is included to help in troubleshooting.

HATEOAS

Example (Get the cards in the wallet):

{
    "funds": {
        ...
    },
    "cards": [
        {
            "id": "49e3f02eb79b1421eacb7de0380ab6f9",
            "date": {
                ...
            },
            "links": [
                {
                    "rel": "self",
                    "href": "https://beta-api.mmvpay.com/sgmc/v1/users/wallets/cards/49e3f02eb79b1421eacb7de0380ab6f9",
                    "method": "GET"
                }
            ],
            "status": {
                ...
            }
        }
    ]
}

(Hypermedia As The Engine Of Application State) will assist in relating resources with each other. Instead of figuring out what the resource URI would be like, just dig into the links property to get the relationships.

Standards

We try to implement as little customization as possible in any aspect related to the integration. This gives you the entire web as a reference.

Endpoints

We offer two(2) endpoints depending on the development environment. Credentials granted to a specific endpoint cannot be used on the other endpoint and vice-versa.

Development

https://beta-api.mmvpay.com/{product}/v1

The Development endpoint is ideal for testing and development. To request for development access, fill up this form.

Production

https://api.mmvpay.com/{product}/v1

Production endpoint. To request for production access, fill up this form.

Getting Started

To speed up development, we have created a few SDKs (Software Development Kit) which are all Open-source to allow the community to contribute, maintain and modify as needed.

Open-source SDK’s let’s the community collaborate on the source to give you the latest updates or to inform you about the latest issues. Would you like to contribute? Fork the project, issue pull requests or report issues/inquiries.

Installation

curl -LsS https://bit.ly/vcardcli | php
chmod 755 vcard.phar
echo '{"host":"https://beta-api.mmvpay.com/sgmc/v1","key":"APIKEY","secret":"APISECRET"}' > vcard.json
Wallet = new MatchMove.WalletRequest(
    'me@email.com',
    '$3CuR3',
    {
        // verbose: function () {return window;},
        server: 'https://beta-api.mmvpay.com/sgmc/v1',
        consumer: {
            key: 'APIKEY',
            secret: 'APISECRET'}
});
package com.matchmove.mmpay.api;

Connection wallet = new Connection("https://beta-api.mmvpay.com/sgmc/v1", "APIKEY", "APISECRET");
using OP;

Connection wallet = new Connection("https://beta-api.mmvpay.com/sgmc/v1", "APIKEY", "APISECRET");
import opsdk "bitbucket.org/matchmove/api-vcard-sdk-golang/sdk"

wallet := API{}
wallet.Connection("https://beta-api.mmvpay.com/sgmc/v1", "APIKEY", "APISECRET")
<?php

require 'vcard/matchmovepay.php';
MatchMovePay::init();

$wallet = new MatchMovePay\VCard\Connection('https://beta-api.mmvpay.com/sgmc/v1', 'APIKEY', 'APISECRET');

Authenticate

vcard.phar -u me@email.com -p $3CuR3
Wallet.connect()
    .done(function (data) {
        Wallet.getAccess()
            .done(function (data) {
                // wallet is ready!
            })

            .fail(function(jqXHR, textStatus) {
                // some error
            });
    })

    .fail(function(jqXHR, textStatus) {
        // authentication failed.
    });
wallet.authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3")
<?php

$wallet->authenticate('me@email.com', '$3CuR3');

Access the resource

Perform a GET on the users resource to retrieve that user’s details:

vcard.phar GET users
Wallet.consume('users', 'GET')
    .done(function (data) {
        console.log(data);
    })

    .fail(function (xhr, status, err) {
        // Error
    })

    .complete(function () {
        // Always
    });
JSONObject user = wallet.consume("users");
System.out.println(user);

JObject user = wallet.Consume("users");
Console.WriteLine(user.ToString());

_, user, _ = wallet.Consume("users", "GET", nil)
fmt.Println(user)

<?php

$response = $wallet->consume('GET', 'users');
var_dump($response);

Response

{
    "id":"417da720abe3d64d120fa6b35afab4cd",
    "email":"me@email.com",
    "name": {
        "first":"Juan dela",
        "last":"Cruz",
        "preferred":"Juan dela Cruz"
    },
    "mobile":{
        "country_code":"65",
        "number":"88888888"
    },
    "identification":{
        "type":"nric",
        "number":"S8888888Z"
    },
    "birthday":"1992-06-01",
    "gender":"male",
    "title":"Mr",
    "links":[
        {
            "rel":"addresses.residential",
            "href":"https:\/\/beta-api.mmvpay.com\/sgmc\/v1\/users\/addresses\/residential",
            "method":"GET"
        },
        {
            "rel":"addresses.billing",
            "href":"https:\/\/beta-api.mmvpay.com\/sgmc\/v1\/users\/addresses\/billing",
            "method":"GET"
        },
        {
            "rel":"users.wallets",
            "href":"https:\/\/beta-api.mmvpay.com\/sgmc\/v1\/users\/wallets",
            "method":"GET"
        }],
    "status":{
        "is_active":true,
        "text":"active"
    },
    "date":{
        "registration":"2014-12-10T16:00:43+08:00"
    }
}

Authentication

Authentication Protocol: OAuth Version 1.0 Revision A

Step 1: OAuth request token

“How can I Login?”

In order to start using the resources, you need to login as a user that will be the host or subject of the transactions. This is done every time the application is requesting rights from the user to access his/her account.

Resource

POST /oauth/request/token

Name Required Description
product yes Product configuration code
version yes Resource version set . ex. v1, v2, v3

1. Gather parameters

Sample request:

oauth_consumer_key=********************************
oauth_nonce=vi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1427254132
oauth_user_name=someone@email.com
oauth_user_password=************
oauth_version=1.0

Provide values for the following (Note that parameters must be encoded):

Name Description
oauth_consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
oauth_nonce Any random alphanumeric value that identifies the transaction being requested. This must be unique within five (5) minutes.
oauth_signature_method Method used to create the signature of the request in [Step 3d]. Currently, we only support “HMAC-SHA1.”
oauth_timestamp Time when the request is being called in Unix Timestamp Format.
oauth_user_name Registered user of a Virtual Wallet.
oauth_user_password Password associated to the oauth_user_name.
oauth_version Version of OAuth you are connecting to. Currently, we only support “1.0.”

2. Sort parameters

Arrange the parameters from [Step 1] in ascending order according to their keys.

3. Generate payload signature

a. Encode the method, url and the query parameters using RFC-3986.

Name Description
method UPPERCASED http methods used in connecting to the server. Supported method: POST
url Resource to connect to. In this case, https://api.mmvpay.com/sgmc/v1/oauth/request/token if you are connecting to the Production environment.
query The parameters from [Step 2].

Example result of [Step 3b]:

POST&https%3A%2F%2Fbeta-api.mmvpay.com%2Fsgmc%2Fv1%2Foauth%2Frequest%2Ftoken&oauth_consumer_key%3D********************************%26oauth_nonce%3Dvi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1427254132%26oauth_user_name%3Dsomeone@email.com%26oauth_user_password%3D************%26oauth_version%3D1.0

b. Combine the method, url and the query from [Step 3a] using an ampersand (&). The result will be referred to as payload.

c. Encode the API Secret using RFC-3986. The result will be called secret.

Name Description
API Secret also referred to as OAuth Secret Key. The secret string paired with your API key.

d. Hash the payload from [Step 3b] with key secret in [Step 3c] using the specified encryption method in [Step 1].

4. Encrypt the user’s username

a. Append the API Secret from [Step 3] to the URI encoded signature.

b. Hash the result from [Step 4a] using MD5.

c. Encrypt the username using AES 256, mode CBC, Padding PKCS7 with the MD5 in [Step 4b] as the encryption key.

5. Encrypt the user’s password

Following the same process in [Step 4], but encrypt the password instead.

6. Combine the signature, encrypted username and the encrypted password with the rest of the parameters.

Example result of [Step 6]:

oauth_consumer_key=********************************
oauth_nonce=vi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ
oauth_signature=Q81hnN4V7dYcsH3nejdKnJzTVxY=
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1427254132
oauth_user_name=U2FsdGVkX18GosNoUuIMORNuEP7CRi7wKX0dZKJXXEvd2Cfj0CyyixF/9TyY9HEg
oauth_user_password=U2FsdGVkX19q74GcY3/v4XjT435y1HIBAWX/Es1LWKk=
oauth_version=1.0

In addition to the parameters in [Step 1], add the following:

Name Description
oauth_signature Payload signature from [Step 3]
oauth_user_name Encrypted username from [Step 4]
oauth_user_password Encrypted password from [Step 5]

7. Send the parameters to the host using the method specified in [Step 3].

If done properly, this will result in JSON data containing the following. The error will be specified in the HTTP error status.

Name Type Description
oauth_token String Request token associated to the API Key which is unique to the source
oauth_token_secret String Secret string associated to the oauth_token

Step 2: OAuth access token

“Now that I am logged in, can I now access the resources?”

Well, not yet. We need to do the other leg of our two-legged authentication. Most of the steps involved in this process are very similar to “Requesting for an OAuth Request Token.”

Resource

POST /oauth/access/token

Name Required Description
product yes Product configuration code
version yes Resource version set . ex. v1, v2, v3

1. Gather parameters

Example request for [Step 1]:

oauth_consumer_key=********************************
oauth_nonce=vi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1427254132
oauth_token=c5a5fd518ceed6aeacb4494c49341f6a
oauth_version=1.0

Provide values for the following (Note that parameters must be encoded):

Name Description
oauth_consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
oauth_nonce Any random alphanumeric value that identifies the transaction being requested. This must be unique within five (5) minutes.
oauth_signature_method Method used to create the signature of the request in [Step 3d]. Currently, we only support “HMAC-SHA1”.
oauth_timestamp Time when the request is being called in Unix Timestamp Format.
oauth_token This is the oauth_token from [Step 7] of “Requesting for an OAuth Request Token
oauth_version Version of OAuth you are connecting to. Currently, we only support “1.0.”

2. Sort parameters

Arrange the parameters from [Step 1] in ascending order according to their keys.

3. Generate payload signature

a. Encode the method, url and the query parameters using RFC-3986.

Name Description
method UPPERCASED http methods used in connecting to the server. Supported method: POST
url Resource to connect to. In this case, https://api.mmvpay.com/sgmc/v1/oauth/access/token if you are connecting to the Production environment.
query The parameters from [Step 2].

b. Combine the method, url and the query from [Step 3a] using an ampersand (&). We will refer to the result as payload.

c. Encode the API Secret and the OAuth Request Secret Token from [Step 7] of “Requesting for an OAuth Request Token” using RFC-3986. The result will be called secret.

Name Description
API Secret also referred to as OAuth Secret Key. The secret string paired with your API key.
OAuth Request Secret Token oauth_token_secret acquired from [Step 7]Requesting for an OAuth Request Token

d. Concatenate API Secret and the OAuth Request Secret Token from [Step 3c] with an ampersand (&). This will be the “secret” in [Step 3e].

e. Hash the payload from [Step 3b] with secret as the key in [Step 3c] using the specified encryption method in [Step 1].

4. Combine the signature to the rest of the parameters.

In additions to the parameters in [Step 1], add the following:

Name Description
oauth_signature Payload signature from [Step 3]

5. Send the parameters to the host using the method specified in [Step 3].

If done properly, this will result in a JSON containing the following. The error will be specified in the HTTP error status.

Name Type Description
oauth_token String Access token associated to the API Key which is unique to the source.
oauth_token_secret String Secret string associated to the oauth_token.

Resources

“Can I now use the resources?”

Yes! Now that the system recognises the application and the user, resources can now be used at your will. To do this, we need to cover the basics.

The resources, or APIs, are using ReST (or Representational State Transfer) and are delivered in JSON format. A resource is an entity normally tied up to one URI of a specific set of information, like USERS, CARDS and TRANSACTIONS. We can perform methods to manipulate this information.

Resource URI format

Documentation format would look like:

{method} /{resource}

Example:

POST /users
GET /users/wallets

Access the active user’s card with id [bdb957f9671d303a3a1dd5fa8c4994e8]

GET /users/wallets/cards/bdb957f9671d303a3a1dd5fa8c4994e8
Name Required Description
resource yes Name of resource to consume. ex. users, users/wallets

HTTP Methods

Name Description
POST Creates a resource. Information for the resource can be sent using the query body. Remember that when using the method POST, always make sure to add or change the HTTP header Content-Type to application/x-www-form-urlencoded*. Failing to do so will cause the service to ignore the payload causing 400 parameter_consumer_key_invalid error. Certain script and languages, like PHP, HTML and Javascript automatically includes this header.
PUT Updates/Modifies a resource. Information for the resource can be sent using the query URI.
GET Reads/Retrieves a resource. Information for filtering the resource can be sent using the query URI.
DELETE Delete/Removes a resource. The item being removed is identified by the URI.

Using resources with OAuth

Most resources require validation through OAuth. This is to implicitly involve the user who will be affected by the operation. An example of this is getting the user’s details and card information.

1. Gather parameters

This is the same as [Step 1] in “Requesting for an OAuth Access Token,” and add the following:

Name Description
oauth_token This is the oauth_token from [Step 7] of “Requesting for an OAuth Access Token

2. Sort parameters

Arrange the parameters from [Step 1] in ascending order according to their keys.

3. Generate payload signature

a. Encode the method, url and the query parameters using RFC-3986.

Name Description
method UPPERCASED http methods used in connecting to the server
url Resource to connect to.
query The parameters from [Step 2].

b. Combine the method, url and the query from [Step 3a] using an ampersand (&). We will refer to the result as “payload.”

c. Encode the API Secret and the OAuth Access Secret Token from [Step 7] of “Requesting for an OAuth Access Token” using RFC-3986. The result will be called “secret”.

Name Description
API Secret also referred to as OAuth Secret Key. The secret string paired to your API key.
OAuth Access Secret Token oauth_token_secret acquired from [Step 7]Requesting for an OAuth Access Token.”

d. Concatenate API Secret and the OAuth Request Secret Token from [Step 3c] with an ampersand (&). This will be the “secret” in [Step 3e].

e. Hash the payload from [Step 3b] with secret as the key in [Step 3c] using the specified encryption method in [Step 1].

4. Combine the signature to the rest of the parameters.

In additions to the parameters in [Step 1], add the following:

Name Description
oauth_signature Payload signature. Result of [Step 3]

5. Send the parameters to the host using the method specified in [Step 3].

If done properly, this will result in a JSON representation of the response found in the resource’s documentation. The error will be specified in the HTTP error status.

Using public resources

The following steps apply to operations that are performed anonymously. An example would be creating a user or adding credits to the wallet.

1. Gather parameters

Provide values for the following (Note that parameters must be encoded):

Name Description
_d All the query parameters combined in query string form. Encode this parameter using RFC-3986.
oauth_consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
oauth_nonce Any random alphanumeric value that identifies the transaction being requested. This must be unique within five (5) minutes.
oauth_signature_method Method used to create the signature of the request in [Step 3d]. Currently, we only support “HMAC-SHA1.”
oauth_timestamp Time when the request is being called in Unix Timestamp Format.
oauth_version Version of OAuth you are connecting to. Currently, we only support “1.0.”

Example:

_d=amount=1000&email=someone@email.com
oauth_consumer_key=********************************
oauth_nonce=vi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1427254132
oauth_version=1.0

2. Sort parameters

Arrange the parameters from [Step 1] in ascending order according to their keys.

3. Generate payload signature

a. Encode the method, url and the query parameters using RFC-3986.

Name Description
method UPPERCASED http methods used in connecting to the server
url Resource to connect to. In this case, https://api.mmvpay.com/sgmc/v1/oauth/request/token if you are connecting to the Production environment.
query The parameters from [Step 2].

b. Combine the method, url and the query from [Step 3a] using an ampersand (&). We will refer to the result as “payload.”

c. Encode the API Secret using RFC-3986. The result will be called “secret.”

Name Description
API Secret also referred to as OAuth Secret Key. The secret string paired to your API key.

d. Hash the payload from [Step 3b] with secret as the key in [Step 3c] using the specified encryption method in [Step 1].

4. Encrypt the parameter _d

a. Append the API Secret from [Step 3] to the URI encoded signature.

b. Hash the result from [Step 4a] using MD5.

c. Encrypt the _d using AES 256, mode CBC, Padding PKCS7 with the MD5 in [Step 4b] as the encryption key.

5. Combine the signature to the rest of the parameters.

Example:

_d=U2FsdGVkX18GosNoUuIMORNuEP7CRi7wKX0dZKJXXEvd2Cfj0CyyixF/9TyY9HEg
oauth_consumer_key=********************************
oauth_nonce=vi5VbFr9H2XsE67VLaeInvyOV8AIJnAZ
oauth_signature=Q81hnN4V7dYcsH3nejdKnJzTVxY=
oauth_signature_method=HMAC-SHA1
oauth_timestamp=1427254132
oauth_version=1.0

In additions to the parameters in [Step 1], add the following:

Name Description
oauth_signature Payload signature. Result of [Step 3]

6. Send the parameters to the host using the method specified in [Step 3].

If done properly, this will result in a JSON representation of the response found in the resource’s documentation. The error will be specifien in the HTTP error status.

Authorization and Reversal

There are cases where institutional partners require control over the usage of their self-branded cards. These services are available to enable them to do exactly that.

In this part of the service, we focus on controlling Authorizations (Deductions) and Reversals (Refunds) for card accounts that are stored on the partner’s servers.

MatchMove has the ability to pass transactional data along to a receiving application on the partner’s side in a secure way. To do this, the receiving application must take control of the Authorization and Reversal approval process.

If these requirements apply to your business, then you will be asked to provide the endpoint URLs for both these services.

Transaction Relay

Below is a brief description of how this process works.

  1. A user decides to purchase goods online using your card brand.
  2. Payment data is submitted for purchase authorization to a payment provider.
  3. This payment is sent to the appropriate switch.
  4. The switch sends the request to MatchMove.
  5. In many cases, this ends here and MatchMove decides whether to approve it or not, but in this case, we forward the request to your authorization endpoint instead.
  6. MatchMove then sends your service’s reply back to the switch.
  7. The payment is then processed by the merchant.

Due to relay time constraints, your endpoint must respond within 8 seconds, or else MatchMove will send an authorization failure message back to the switch.

Authorize Callback

The Authorize Callback is the URL of the receiving application that takes charge of the Authorization process.

You must be able to set up an endpoint that receives the data below and generates the appropriate response.

Fields:

Name Description
card_id Refers to card.id in /users/wallets/cards
user_id Refers to the user.id in /users
channel Channel where the transaction took place
institution_code Institution that will process the transaction.
merchant_category_code Merchant category code
merchant_id Merchant ID provided by the network
merchant_name Merchant name
network Bank network (MASTER, VISA, AMEX, etc.)
terminal_id Terminal of the transaction
trace_number Bank trace number
transaction_amount Cost of the transaction
transaction_currency_code Currency of the transaction
transaction_type Type of transaction (ex. PURCHASE)
transaction_ref_no Transaction reference number. That will be used in: /users/wallets/cards/transactions.
card_amount Holds a copy of transaction_amount but will be converted to the currency of the card
card_currency_code Fixed currency supported by the card
post_data Optional. Additional information sent by the POS system/terminal.
bank_net Optional. The bank network used by the terminal.
mobile_country_code Optional. The card holder’s mobile phone country code.
mobile_number Optional. The card holder’s mobile phone number.

For hooks, these fields are added:

Name Description
status Resolution status (ex. OK)
status_description A short message about the resolution

Example request data: card_id=4a3f122ec53c1b6aacb1f8a1a2f7d64d&channel=ECOM&institution_code=MM&merchant_category_code=3456&merchant_id=MerchantId&merchant_name=MerchantName&network=Master&terminal_id=TERMINAL-1&trace_number=T1&transaction_amount=&transaction_currency_code=&transaction_type=Purchase&user_id=63afc1fb2069bb1966a9827209790642&card_amount=200&card_currency_code=SGD&transaction_ref_no=XXX1234567856565634343

This payload will be passed to a URL you provide using the POST method. To retrieve it, you can use the $_POST global variable in PHP, for example. You can then preprocess the authorization and must respond with the following (in JSON format):

Response:

Name Description
status State of the transaction with these possible case-sensitive values (additional statuses will be added by request): (OK, INSUFFICIENT_BALANCE)
description Additional notes for the transaction
settlement_date Must be in ISO-8601 format i.e. YYYY-MM-DD
balance Current remaining available balance

Example response data: {"status":"OK","description":"Authorization OK","settlement_date":"2016-05-04","balance":"95.00"}

Reversal Callback

The Reversal Callback is the URL that receives Reversal or Refund requests that are naturally based on previous, approved Authorization transactions.

In the same way as Authorization, a maximum time limit of 8 seconds is set for a response, after which, the transaction will default to a rejection.

Fields:

Name Description
transaction_ref_no Transaction reference number

Example request data: transaction_ref_no=XXX1234567856565634343

Response:

Name Description
status State of the transaction with these possible case-sensitive values (additional statuses may be added upon request): (OK, INSUFFICIENT_BALANCE)
description Additional notes for the transaction
settlement_date Must be in ISO-8601 format i.e. YYYY-MM-DD

Example response data:

{"status":"OK","description":"Reversal OK","settlement_date":"2016-05-04"}

MasterCard Digital Enablement Service

MasterCard Digital Enablement Service supports tokenization and card digitization within mobile devices for use during contactless and Digital Secure Remote Payment transactions.

Tokenization Authorization Request

Issuers can opt in to receive messages that enable real-time decisioning for card digitization,and a re refer red to as Tokenization Authorization Request messages.

Request:

Name Description
MessageType TA = Tokenization Authorization Request
CorrelationID Identifier assigned by MasterCard that can be used by the issuer to associate related tokenization request/notification messages.
PrimaryAccountNumberSource Identifies the method which the cardholder is attempting to tokenize a primary account number. 1 = Card on file; 2 = Card added manually; 3 = Card added via application
PaymentApplicationInstanceID Identifier associated with the payment application instance ID on a device.
DeviceSourceIPAddress Variable length masked IP address
AccountIDHash This field may be present and contain PBKDF2 hash of the consumer’s account ID with the wallet provider. The Account ID is typically expected to be an email address. PBKDF2 is performed using 10 iterations, a salt, and the lowercase account ID as the “password”. The salt is calculated by taking the lower case UTF-8 bytes from the account ID and performing a SHA-256.
CardholderName This field will be present and contain the name of the cardholder. The format is either LASTNAME/FIRSTNAME with the names delimited by a slash “/” (Example: SMITH/JOE) or the format is FIRSTNAME LASTNAME (Example: JOE SMITH).
TokenizationRecommendation Tokenization decision suggested by the wallet service provider. One of the following values: 0 = Decline; 1 = Approve; 2 = Require additional authentication
TokenizationRecommendationStandardVersion The version of the standards the wallet service provider is using to determine the suggested tokenization recommendation.
DeviceScore Score assigned by wallet service provider for the device. Value between 1 and 5.
AccountScore Score assigned by wallet service provider for the primary account number. Value between 1 and 5.
CountActiveTokensPrimaryAccountNumber Number of existing active tokens for the primary account number, including the current token, but excluding Card on File tokens.
TokenizationRecommendationReasonCodes Code indicating the specific reason the wallet service provider is suggesting the tokenization recommendation.
DeviceLocation Latitude and longitude where the device the consumer is attempting to tokenize a card onto is located.
MobileNumberLast4Digits This field will contain spaces if the wallet service provider has not provided this information.
TokenType Contains a value indicating the type of token present in DE 48, subelement 33, subfield 2 (Account Number) in an 0100 Tokenization Authorization request message.; C = MasterCard Cloud Based Payments; S = Embedded Secure Element;

Response:

Name Description
IssuerProductConfigurationID The unique card art product configuration identifier provided by the issuer associated with the graphical and text card art assets.
PrimaryAccountNumberSequenceNumber The card sequence number associated with the primary account number.
ActivationMethods When the issuer responds with DE 39 = 85 (Approve, but require additional authentication), the issuer may provide one or more methods by which the consumer can retrieve the activation code. If the issuer responds with DE 39 = 00 (Approve) or 05 (Decline), or if the issuer responds with DE 39 = 85 but uses an issuer-specified default for the activation method, this field will not be present.

Activation Code Notification

These are the subfields available in DE 124 in a Financial Transaction Request Response/0210 message to support the MasterCard Digital Enablement Service.

Request:

Name Description
MessageType AC = Activation Code Notification
CorrelationID Identifier assigned by MasterCard to associate related tokenization request/notification messages.
ActivationCode Activation code assigned by MasterCard that will be provided to the issuer for delivery to the consumer to complete the tokenization process.
ActivationCodeExpirationDateTime Date and time that the activation code expires specified in UTC units.
ConsumerActivationMethodPreference This field contains the activation method selected by the consumer, if only one was offered by the issuer, then that activation method. There will be only one method contained within this field. This field will only be present if the cardholder provides a choice.

Tokenization Complete Notification

Tokenization Complete Notification message informs the issuer of the token assigned to a primary account number.

Request:

Name Description
MessageType TC = Tokenization Complete Notification
CorrelationID Identifier assigned by MasterCard to associate related tokenization request/notification messages.
CountActiveTokensPrimaryAccountNumber Number of existing active tokens for the primary account number, including the current token.
IssuerProductConfigurationID The unique card art product configuration identifier provided by the issuer associated with the graphical and text card art assets.
ConsumerLanguage Language preference selected by the consumer.
DeviceName Name that the consumer has associated to the device with the wallet service provider.
FinalTokenDecision The final tokenization decision that was used in the tokenization of the card.
FinalTokenDecisionIndicator The element of the Service that was responsible for determining the final tokenization decision: 1 = Tokenization Eligibility Response; 2 = Tokenization Authorization Response; 3 = Issuer pre-defined tokenization rules; 4 = Mobile Application
TNCIdentifier Identifier associated with the version of terms and conditions accepted by the consumer.
TNCDateTime Date and time that the consumer accepted the terms and conditions of the Service specified in UTC units.
CountActivationAttempts Number of existing active tokens for the primary account number, including the current token, but excluding Card on File tokens. Presence of this field is conditional.
TokenUniqueReference Service-allocated unique reference to the token.
PrimaryAccountNumberUniqueReference Service-allocated unique reference to the Primary Account Number that was tokenized.
TokenType Contains a value indicating the type of token present in DE 48, subelement 33, subfield 2 (Account Number) in an 0100 Tokenization Complete Notification message. C = MasterCard Cloud Based Payments; F = MasterCard Digital Enablement Service Card on File Token; S = Embedded Secure Element

Tokenization Event Notification

Following is a list of the data elements and values applicable to the Authorization Request/0100 message type for Tokenization Event Notification.

Request:

Name Description
MessageType TV = Tokenization Event Notification
CorrelationID Identifier assigned by MasterCard to associate related tokenization request/notification messages.
TokenEventIndicator Value indicating the event that has occurred on the MasterCard Digital Enablement Service for the token. 3 = Deactivate; 6 = Suspend; 7 = Resume; 8 = Tokenization Exception Event;
TokenEventReasonCode If Tokenization Event Indicator contains value 8 (Tokenization Exception Event), this field contains a value indicating the event reason. If the Tokenization Event Indicator contains a value of 3 (Deactivate), 6 (Suspend), or 7 (Resume), this field will not be present. 00 = Activation code retries exceeded; 01 = Activation code expired; 02 = Activation code entered incorrectly by cardholder; 03 = Replacement primary account number update failure
EventRequestor If the Tokenization Event Indicator contains a value of 3 (Deactivate), 6 (Suspend), or 7 (Resume), this field will contain a value indicating the party that requested the event. If the Tokenization Event Indicator contains a value of 8 (Tokenization Exception Event) this field will be space filled. 0 = Indicates the Tokenization Event was requested by the Wallet Service Provider; 1 = Indicates the Tokenization Event was requested by the Funding Account issuer; 2 = Indicates the Tokenization Event was requested by the Cardholder; 3 = Indicates the Tokenization Event was requested in relation to a systematic event triggered by Mobile PIN Validation security (applicable to Tokenization Event Indicator value of 6 (Suspend), or 7 (Resume) only); 4 = Indicates the Tokenization Event was requested in relation to a systematic event triggered by Mobile PIN Change Validation security (applicable to Tokenization Event Indicator value of 6 (Suspend), or 7 (Resume) only); 5 = Reserved for future use; 6 = Reserved for future use; 7 = Reserved for future use; 8 = Reserved for future use; 9 = Reserved for future use;

Overseas Transfers Flow

Overseas Transfers allows the user to transfer funds to a country of origin via bank account transfer, mobile wallet credit or cash pickup depending on the payment provider setup. Procedures on the implementation are as follows:

  1. Retrieve payment provider type code. The provider type code returned on the response will be used as the {type} parameter required on the succeeding steps.

  2. Retrieve the list of destinations provided.

  3. Send an overseas transfer request along with the calculation_mode, send_currency, receive_currency, receive_country, routing_type, routing_param, payment_mode, and partner_name from [Step 2].

    An optional require_fields list is returned as part of the full_details response, when present, require_fields.name should be passed as the parameter field.

  4. Confirm the overseas transfer request.

  5. List of all overseas transfers transactions made by the user. Appending the ref_id from [Step 4] will return the specific transaction details instead.

  6. (Optional) Cancellation of overseas transfers is available requiring the ref_id from [Step 4 or 5].

Currencies/Rates

GET /currencies/rates[/{from}][/{to}][/{limit}][/{offset}]

[permalink]

Retrieve currencies rates details and information.

Try it yourself: Development | Production

Name Description
from From currency ISO-4217
to To currency ISO-4217
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example:

vcard.phar -u me@email.com -p $3CuR3 GET currencies/rates
Wallet.connect();

Wallet.consume('currencies/rates', 'GET')
  .done(function (data) {
      console.log(data);
  });
JSONObject currencies = wallet.consume("currencies/rates");
System.out.println(currencies);
JObject currencies = wallet.Consume("currencies/rates");
Console.WriteLine(currencies.ToString());
_, currencies, _ := wallet.Consume("currencies/rates", "GET", nil)
fmt.Println(currencies)
<?php
currencies = $wallet->consume('GET', 'currencies/rates');
var_dump(currencies);

This resource responds with:

  • string: id – Currency rate identifier
  • string: from_currency – From currency ISO-4217
  • string: from_value – To currency amount
  • string: to_currency – To currency ISO-4217
  • string: status – Status
  • array: date – Date Information

POST /currencies/rates/{from}/{to}/{mode}

[permalink]

Create a currency rate.

Try it yourself: Development | Production

Name Description
from From currency ISO-4217
to To currency ISO-4217
mode Rate type [monetary-monetary , virtual-virtual, virtual-monetary, monetary-virtual]

Create a currency:

vcard.phar POST currencies \
"name=Singapore%20Dollar&type=monetary&code=SGD"
Wallet.consume('currencies/rates/{currencies.code}/{currencies.code}', 'POST', {
     "from_value": "1",
     "to_value": "2",
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> currencyData = new HashMap<String, String>();
currencyData.put("from_value", "1");
currencyData.put("to_value", "2");

JSONObject currency = wallet.consume("currencies/rates/{currencies.code}/{currencies.code}", HttpRequest.METHOD_POST, currencyData);
System.out.println(currency);
IDictionary<string, string> currencyData = new Dictionary<string, string> ();
currencyData.Add("from_value", "1");
currencyData.Add("to_value", "2");

JObject currency = wallet.Consume("currencies/rates/{currencies.code}/{currencies.code}", "POST", currencyData);
Console.WriteLine(currency.ToString());
currencyData := map[string]string{}
currencyData["from_value"] = "1"
currencyData["to_value"] = "2"

_, user, _ := wallet.Consume("currencies/rates/{currencies.code}/{currencies.code}", "POST", currencyData)
fmt.Println(user)
<?php
$response = $wallet->consume('POST', 'currencies/rates/{currencies.code}/{currencies.code}', array(
     'from_value' => '1',
     'to_value' => '2',
));

var_dump($response);

This resource responds with:

  • string: id – Currency rate identifier
  • string: from_currency – From currency ISO-4217
  • string: from_value – To currency amount
  • string: to_currency – To currency ISO-4217
  • string: status – Status
  • array: date – Date Information
Parameter Required Max Length Description
from_value yes 32 From Value
to_value yes 20 To Value

PUT /currencies/rates/{from}/{to}/{mode}/{hash_id}

[permalink]

Approve a currency rate.

Try it yourself: Development | Production

Name Description
from From currency ISO-4217
to To currency ISO-4217
mode Rate type [monetary-monetary , virtual-virtual, virtual-monetary, monetary-virtual]
hash_id Currency rate identifier which was obtained from POST /currencies/rates/{from}/{to}/{mode}. Value must be 32 characters in length with case insensitive alphanumeric format.

Approve a currency rate:

vcard.phar PUT currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}
Wallet.consume('currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}', 'PUT')
    .done(function (data) {
        console.log(data);
    });
JSONObject currency = wallet.consume("currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}", HttpRequest.METHOD_PUT);
System.out.println(currency);
JObject currency = wallet.Consume("currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}", "PUT", currencyData);
Console.WriteLine(currency.ToString());
_, user, _ := wallet.Consume("currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}", "PUT", nil)
fmt.Println(user)
<?php
$response = $wallet->consume('PUT', 'currencies/rates/{currencies.code}/{currencies.code}/{mode}/{currencies.rates.id}');
var_dump($response);

This resource responds with:

  • string: id – Currency rate identifier
  • string: from_currency – From currency ISO-4217
  • string: from_value – From currency amount
  • string: to_currency – To currency ISO-4217
  • string: to_value – To currency amount
  • string: status – Status
  • array: date – Date information

Currencies

GET /currencies[/{limit}][/{offset}]

[permalink]

Retrieve currencies details and information.

Try it yourself: Development | Production

Name Description
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example:

vcard.phar -u me@email.com -p $3CuR3 GET currencies
Wallet.connect();

Wallet.consume('currencies', 'GET')
  .done(function (data) {
      console.log(data);
  });
JSONObject currencies = wallet.consume("currencies");
System.out.println(currencies);
JObject currencies = wallet.Consume("currencies");
Console.WriteLine(currencies.ToString());
_, currencies, _ := wallet.Consume("currencies", "GET", nil)
fmt.Println(currencies)
<?php
currencies = $wallet->consume('GET', 'currencies');
var_dump(currencies);

This resource responds with:

  • string: id – Currency id
  • string: name – Currency name
  • string: type – Currency type
  • array: code – Short name for the currency. For monetary currency use ISO-4217
  • array: date – Date Information

POST /currencies

[permalink]

Create a currency.

Try it yourself: Development | Production

Create a currency:

vcard.phar POST currencies \
"name=Singapore%20Dollar&type=monetary&code=SGD"
Wallet.consume('currencies', 'POST', {
     "name": "Singapore Dollar",
     "type": "monetary",
     "code": "SGD",
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> currencyData = new HashMap<String, String>();

currencyData.put("name", "Singapore Dollar");
currencyData.put("type", "monetary");
currencyData.put("code", "SGD");

JSONObject currency = wallet.consume("currencies", HttpRequest.METHOD_POST, currencyData);
System.out.println(currency);
IDictionary<string, string> currencyData = new Dictionary<string, string> ();

currencyData.Add("name", "Singapore Dollar");
currencyData.Add("type", "monetary");
currencyData.Add("code", "SGD");

JObject currency = wallet.Consume("currencies", "POST", currencyData);
Console.WriteLine(currency.ToString());
currencyData := map[string]string{}
currencyData["name"] = "Singapore Dollar"
currencyData["type"] = "monetary"
currencyData["code"] = "SGD"

_, user, _ := wallet.Consume("currencies", "POST", currencyData)
fmt.Println(user)
<?php
$response = $wallet->consume('POST', 'currencies', array(
     'name' => 'Singapore Dollar',
     'type' => 'monetary',
     'code' => 'SGD',
));

var_dump($response);

This resource responds with:

  • string: id – Currency id
  • string: name – Currency name
  • string: type – Currency type
  • array: code – Short name for the currency. For monetary currency use ISO-4217
  • array: date – Date Information
Parameter Required Max Length Description
name yes 32 Currency name
type yes 20 Currency type [‘virtual’,'monetary’]
code yes 3 Short name for the currency. For monetary currency use ISO-4217

PUT /currencies/{hash_id}

[permalink]

Update a currency.

Try it yourself: Development | Production

Name Description
hash_id Currency identifier which was obtained from GET /currencies. Value must be 32 characters in length with case insensitive alphanumeric format.

Update a currency:

vcard.phar PUT currencies/{hash_id} \
"name=Singapore%20Dollar&type=monetary&code=SGD"
Wallet.consume('currencies/{hash_id}', 'PUT', {
     "name": "Singapore Dollar",
     "type": "monetary",
     "code": "SGD",
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> currencyData = new HashMap<String, String>();

currencyData.put("name", "Singapore Dollar");
currencyData.put("type", "monetary");
currencyData.put("code", "SGD");

JSONObject currency = wallet.consume("currencies/{hash_id}", HttpRequest.METHOD_PUT, currencyData);
System.out.println(currency);
IDictionary<string, string> currencyData = new Dictionary<string, string> ();

currencyData.Add("name", "Singapore Dollar");
currencyData.Add("type", "monetary");
currencyData.Add("code", "SGD");

JObject currency = wallet.Consume("currencies/{hash_id}", "PUT", currencyData);
Console.WriteLine(currency.ToString());
currencyData := map[string]string{}
currencyData["name"] = "Singapore Dollar"
currencyData["type"] = "monetary"
currencyData["code"] = "SGD"

_, user, _ := wallet.Consume("currencies/{hash_id}", "PUT", currencyData)
fmt.Println(user)
<?php
$response = $wallet->consume('PUT', 'currencies/{hash_id}', array(
     'name' => 'Singapore Dollar',
     'type' => 'monetary',
     'code' => 'SGD',
));

var_dump($response);

This resource responds with:

  • string: id – Currency id
  • string: name – Currency name
  • string: type – Currency type
  • array: code – Short name for the currency. For monetary currency use ISO-4217
  • array: date – Date Information
Parameter Required Max Length Description
name yes 32 Currency name
type yes 20 Currency type ['virtual’,'monetary’]
code yes 3 Short name for the currency. For monetary currency use ISO-4217

DELETE /currencies/{hash_id}

[permalink]

Delete a currency.

Try it yourself: Development | Production

Name Description
hash_id Currency identifier which was obtained from GET /currencies. Value must be 32 characters in length with case insensitive alphanumeric format.

Delete a currency:

vcard.phar DELETE currencies/{hash_id}
Wallet.consume('currencies/{hash_id}', 'DELETE')
    .done(function (data) {
        console.log(data);
    });

JSONObject currency = wallet.consume("currencies/{hash_id}", HttpRequest.METHOD_DELETE);
System.out.println(currency);

JObject currency = wallet.Consume("currencies/{hash_id}", "DELETE");
Console.WriteLine(currency.ToString());
_, user, _ := wallet.Consume("currencies/{hash_id}", "DELETE")
fmt.Println(user)
<?php
$response = $wallet->consume('currencies/{hash_id}', 'DELETE');
var_dump($response);

This resource responds with:

  • string: status – Status

Users

A User refers to any consumer who uses the Virtual Wallet platform.

GET /users

[permalink]

Retrieve user’s information.

Try it yourself: Development | Production

Example:

vcard.phar -u me@email.com -p $3CuR3 GET users
Wallet.connect();

Wallet.consume('users', 'GET')
  .done(function (data) {
      console.log(data);
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject user = wallet.consume("users");
System.out.println(user);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject user = wallet.Consume("users");
Console.WriteLine(user.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, user, _ := wallet.Consume("users", "GET", nil)
fmt.Println(user)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$user = $wallet->consume('GET', 'users');
var_dump($user);

This resource responds with:

  • string: id – User identifier
  • string: email – Email address
  • array: name – Name
    • string: first – First or given name
    • string: last – Last or family name
    • string: preferred – Name on card
  • array: mobile – Mobile information
    • int: country_code – Mobile country code
    • int: number – Mobile number
  • array: identification – Identification information
  • string: countryofissue – Identification card’s issuer country name. Referenced as country_name from mysql-country-list
  • string: country_code_of_issue – Identification card’s issuer country ISO 3166 alpha-3
  • date: birthdayISO 8601 Date of birth
  • string: gender – Gender (#get-users-enumerations-genders)
  • string: title – Preferred salutation (#get-users-enumerations-titles)
  • array: links – Addtional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information
  • array: status – Status information
    • boolean: is_active – Account status
    • string: text – Account status in plain text
  • array: date – Date Information
    • date: registrationISO 8601 Registration date

POST /users

[permalink]

User sign up registration. Consumers input their basic information upon signing up for a Virtual Wallet account.

Try it yourself: Development | Production

Register a new user:

vcard.phar POST users \
"email=me@email.com&password=\$3cUr3&first_name=Juan%20dela&last_name=Cruz&preferred_name=Juan%20dela%20Cruz&mobile_country_code=65&mobile=88888888"
Wallet.consume('users', 'POST', {
     "email": "me@email.com",
     "password": "$3cUr3",
     "first_name": "Juan dela",
     "last_name": "Cruz",
     "preferred_name": "Juan dela Cruz",
     "mobile_country_code": "65",
     "mobile": "88888888"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("email", "me@email.com");
userData.put("password", "$3cUr3");
userData.put("first_name", "Juan dela");
userData.put("last_name", "Cruz");
userData.put("preferred_name", "Juan dela Cruz");
userData.put("mobile_country_code", "65");
userData.put("mobile", "88888888");

JSONObject user = wallet.consume("users", HttpRequest.METHOD_POST, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("email", "me@email.com");
userData.Add("password", "$3cUr3");
userData.Add("first_name", "Juan dela");
userData.Add("last_name", "Cruz");
userData.Add("preferred_name", "Juan dela Cruz");
userData.Add("mobile_country_code", "65");
userData.Add("mobile", "88888888");

JObject user = wallet.Consume("users", "POST", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["email"] = "me@email.com"
userData["password"] = "$3cUr3"
userData["first_name"] = "Juan dela"
userData["last_name"] = "Cruz"
userData["preferred_name"] = "Juan dela Cruz"
userData["mobile_country_code"] = "65"
userData["mobile"] = "88888888"

_, user, _ := wallet.Consume("users", "POST", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('POST', 'users', array(
     'email' => 'me@email.com',
     'password' => '$3cUr3',
     'first_name' => 'Juan dela',
     'last_name' => 'Cruz',
     'preferred_name' => 'Juan dela Cruz',
     'mobile_country_code' => '65',
     'mobile' => '88888888'
));

var_dump($response);

This resource responds with:

  • string: id – User identifier
  • string: email – Email address
  • array: name – Name
    • string: first – First or given name
    • string: last – Last or family name
    • string: preferred – Name on card
  • array: mobile – Mobile information
    • int: country_code – Mobile country code
    • int: number – Mobile number
  • array: status – Status information
    • boolean: is_active – Account status
    • string: text – Account status in plain text
  • array: date – Date Information
    • date: registrationISO 8601 Registration date
Parameter Required Max Length Description
id no 32 Account unique identifier
email yes 50 Email address
password yes 32 User password must contain at least a letter and a number. Symbols may be added but are be limited to the following: !@#$%^&*()_+`-={}
first_name yes 25 First or given name
last_name yes 25 Last or family name
preferred_name yes 25 Preferred Name or Name on Card
mobile_country_code yes 3 Mobile country code
mobile yes 12 Mobile number

PUT /users[/test]

[permalink]

Update user’s information

Try it yourself: Development | Production

Example usage as a validation resource:

vcard.phar PUT users/test \
"title=Mr&id_type=nric&id_number=S1234567X&country_of_issue=Singapore&birthday=1978-12-30&gender=male"
Wallet.consume('users/test', 'PUT', {
     "title": "Mr",
     "id_type": "nric",
     "id_number": "S1234567X",
     "country_of_issue": "Singapore",
     "country_code_of_issue": "SGP",
     "birthday": "1978-12-30",
     "gender": "male"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("title", "Mr");
userData.put("id_type", "nric");
userData.put("id_number", "S1234567X");
userData.put("country_of_issue", "Singapore");
userData.put("country_code_of_issue", "SGP");
userData.put("birthday", "1978-12-30");
userData.put("gender", "male");

JSONObject user = wallet.consume("users/test", HttpRequest.METHOD_PUT, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("title", "Mr");
userData.Add("id_type", "nric");
userData.Add("id_number", "S1234567X");
userData.Add("country_of_issue", "Singapore");
userData.Add("country_code_of_issue", "SGP");
userData.Add("birthday", "1978-12-30");
userData.Add("gender", "male");

JObject user = wallet.Consume("users", "PUT", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["title"] = "Mr"
userData["id_type"] = "nric"
userData["id_number"] = "S1234567X"
userData["country_of_issue"] = "Singapore"
userData["country_code_of_issue"] = "SGP"
userData["birthday"] = "1978-12-30"
userData["gender"] = "male"

_, user, _ := wallet.Consume("users", "PUT", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('PUT', 'users/test', array(
     'title' => 'Mr',
     'id_type' => 'nric',
     'id_number' => 'S1234567X',
     'country_of_issue' => 'Singapore',
     'country_code_of_issue' => 'SGP',
     'birthday' => '1978-12-30',
     'gender' => 'male'
));

var_dump($response);

Add more details after registration:

vcard.phar PUT users \
"title=Mr&id_type=nric&id_number=S1234567X&country_of_issue=Singapore&country_code_of_issue=SGP&birthday=1978-12-30&gender=male"
Wallet.consume('users', 'PUT', {
     "title": "Mr",
     "id_type": "nric",
     "id_number": "S1234567X",
     "country_of_issue": "Singapore",
     "country_code_of_issue": "SGP",
     "birthday": "1978-12-30",
     "gender": "male"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("title", "Mr");
userData.put("id_type", "nric");
userData.put("id_number", "S1234567X");
userData.put("country_of_issue", "Singapore");
userData.put("country_code_of_issue", "SGP");
userData.put("birthday", "1978-12-30");
userData.put("gender", "male");

JSONObject user = wallet.consume("users", HttpRequest.METHOD_PUT, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("title", "Mr");
userData.Add("id_type", "nric");
userData.Add("id_number", "S1234567X");
userData.Add("country_of_issue", "Singapore");
userData.Add("country_code_of_issue", "SGP");
userData.Add("birthday", "1978-12-30");
userData.Add("gender", "male");

JObject user = wallet.Consume("users", "PUT", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["title"] = "Mr"
userData["id_type"] = "nric"
userData["id_number"] = "S1234567X"
userData["country_of_issue"] = "Singapore"
userData["country_code_of_issue"] = "SGP"
userData["birthday"] = "1978-12-30"
userData["gender"] = "male"

user, _ := wallet.Consume("users", "PUT", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('PUT', 'users', array(
     'title' => 'Mr',
     'id_type' => 'nric',
     'id_number' => 'S1234567X',
     'country_of_issue' => 'Singapore',
     'country_code_of_issue' => 'SGP',
     'birthday' => '1978-12-30',
     'gender' => 'male'
));

var_dump($response);

This resource responds with:

  • string: id – User identifier
  • string: email – Email address
  • array: name – Name
    • string: first – First or given name
    • string: last – Last or family name
    • string: preferred – Name on card
  • array: mobile – Mobile information
    • int: country_code – Mobile country code
    • int: number – Mobile number
  • array: identification – Identification information
  • string: countryofissue – Identification card’s issuer country name. Referenced as country_name from mysql-country-list
  • string: country_code_of_issue – Identification card’s issuer country ISO 3166 alpha-3
  • date: birthdayISO 8601 Date of birth
  • string: gender – Gender
  • string: title – Preferred salutation
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information
  • array: status – Status information
    • boolean: is_active – Account status
    • string: text – Account status in plain text
  • array: date – Date Information
    • date: registrationISO 8601 Registration date
Parameter Required Max Length Description
email no 25 Email Address
title no 5 Preferred Salutation GET users/enumerations/titles
mobile_country_code no 3 Mobile country code
mobile no 12 Mobile number. Minimum range is 10 digits
id_type no 25 List of Identification types GET users/enumerations/id_types
id_number no 20 Identification card number
id_date_expiry no 10 ISO 8601 Identification card expiration date. Note that the timezone should be included defined using offsets from UTC eg. 2017-03-02T17:38:25+08:00
country_of_issue no 50 Identification card’s issuer country name. Referenced as country_name from mysql-country-list.
country_code_of_issue no 3 Identification card’s issuer country ISO 3166 alpha-3.
birthday no 10 ISO 8601 Date of birth
nationality no 100 Nationality
gender no 6 Gender GET users/enumerations/genders
first_name no 25 First or given name
last_name no 25 Last or family name
preferred_name no 25 Preferred Name or Name on Card

DELETE /users/{id}

[permalink]

Suspend/Block an account.

Try it yourself: Development | Production

Suspended
disable all resources of the user which includes the generation of the security token. This will also invalidate all active access associated to the user. If the card has been already prevalidated by a merchant, an authorization can still be made.
Blocked
will suspend the account and block all cards associated to the user. The blocked cards will disable all transaction made by that card, and all purchase authorization.

Block a user:

vcard.phar DELETE users/417da720abe3d64d120fa6b35afab4cd \
"state=blocked"
Wallet.consume('users/417da720abe3d64d120fa6b35afab4cd', 'DELETE', {
     "state": "blocked"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("state", "blocked");

JSONObject user = wallet.consume("users/417da720abe3d64d120fa6b35afab4cd", HttpRequest.METHOD_DELETE, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("state", "blocked");

JObject user = wallet.Consume("users/417da720abe3d64d120fa6b35afab4cd", "DELETE", userData);
Console.WriteLine(user.ToString())
userData := map[string]string{}
userData["state"] = "blocked"

_, user, _ := wallet.Consume("users/417da720abe3d64d120fa6b35afab4cd", "DELETE", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('DELETE', 'users/417da720abe3d64d120fa6b35afab4cd', array('state' => 'blocked'));
var_dump($response);

This resource responds with:

  • string: id – User identifier
  • string: state – Account state
Parameter Required Max Length Description
state yes 10 Account state. Accepts values [blocked, suspended], Default is suspended.

Users/Risk

The Risk Evaluation service pinpoints hidden risks in financial relationships between individuals and business entities.

We aim to provide security and confidence to our partners by using data from leading financial networks. Know more about Risk and Compliance factors HERE.

POST /users/risk

[permalink]

Submit a registered user account to MatchMove’s risk evaluation process. The returned status will indicate whether the user has passed or failed the pre-set thresholds.

Example usage:

vcard.phar POST users/risk \
"email=me@email.com"
Wallet.consume('users/risk', 'POST', {
     "email": "me@email.com"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("email", "me@email.com");

JSONObject user = wallet.consume("users/risk", HttpRequest.METHOD_POST, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("email", "me@email.com");

JObject user = wallet.Consume("users/risk", "POST", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["email"] = "me@email.com"

_, user, _ := wallet.Consume("users/risk", "POST", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('POST', 'users/risk', array(
     'email' => 'me@email.com'
));

var_dump($response);

This resource responds with:

  • string: result – Evaluation results returned as either PASS or FAIL
Parameter Required Max Length Description
user_id no 32 Account identifier
email no 50 The evaluation subject’s registered email address
mobile_country_code no 3 Mobile country code
mobile no 12 Mobile

Users/Addresses

The Home and Billing Addresses which user has keyed in during sign up. Users are allowed to change their residential and billing addresses any time.

GET /users/addresses[/{type}]

[permalink]

Retrieve user’s address details.

Try it yourself: Development | Production

Name Description
type Address type [residential or billing]

Example, to retrieve the Residential Address or home address, the resource should be:

vcard.phar -u me@email.com -p $3CuR3 GET users/addresses/residential
Wallet.connect();
Wallet.consume('users/addresses/residential')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject address = wallet.consume("users/addresses/residential");
System.out.println(address);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject address = wallet.Consume("users/addresses/residential");
Console.WriteLine(address.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, address, _ := wallet.Consume("users/addresses/residential", "GET", nil)
fmt.Println(address)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/addresses/residential');
var_dump($response);

This resource responds with:

  • array: residential – Address group
    • string: address_1 – Address line 1
    • string: address_2 – Address line 2
    • string: city – City
    • string: state – State
    • string: country – Country
    • int: zipcode – Zip Code
  • array: billing – Address group
    • string: address_1 – Address line 1
    • string: address_2 – Address line 2
    • string: city – City
    • string: state – State
    • string: country – Country
    • int: zipcode – Zip Code

PUT /users/addresses[/{type}]

[permalink]

Make changes to the logged in user’s addresses. The type (residential, billing) of address to be edited is specified as a part of the resource. The minimum requirement for the POST /users/wallets/cards is for the residential address to be defined.

Try it yourself: Development | Production

Name Description
type Address type [residential or billing]

Example, to edit the Residential Address or home address, the resource should be:

vcard.phar -u me@email.com -p $3CuR3 PUT users/addresses/residential \
"address_1=221b&address_2=Baker%20Street&city=London&state=England&country=United%20Kingdom&zipcode=NW16XE"
Wallet.connect();

Wallet.consume('users/addresses/residential', 'PUT', {
     "address_1": "221b",
     "address_2": "Baker Street",
     "city": "London",
     "state": "England",
     "country": "United Kingdom",
     "zipcode": "NW16XE"
     })
    .done(function (data) {
        console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
Map<String, String> userData = new HashMap<String, String>();

userData.put("address_1", "221b");
userData.put("address_2", "Baker Street");
userData.put("city", "London");
userData.put("state", "England");
userData.put("country", "United Kingdom");
userData.put("zipcode", "NW16XE");

JSONObject address = wallet.consume("users/addresses/residential", HttpRequest.METHOD_PUT, userData);
System.out.println(address);
wallet.Authenticate("me@email.com", "$3CuR3");
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("address_1", "221b");
userData.Add("address_2", "Baker Street");
userData.Add("city", "London");
userData.Add("state", "England");
userData.Add("country", "United Kingdom");
userData.Add("zipcode", "NW16XE");

JObject address = wallet.Consume("users/addresses/residential", "PUT", userData);
Console.WriteLine(address.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
userData := map[string]string{}
userData["address_1"] = "221b"
userData["address_2"] = "Baker Street"
userData["city"] = "London"
userData["state"] = "England"
userData["country"] = "United Kingdom"
userData["zipcode"] = "NW16XE"

_, address, _ := wallet.Consume("users/addresses/residential", "PUT", userData)
fmt.Println(address)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('PUT', 'users/addresses/residential', array(
    'address_1' => '221b',
    'address_2' => 'Baker Street',
    'city' => 'London',
    'state' => 'England',
    'country' => 'United Kingdom',
    'zipcode' => 'NW16XE'
));

var_dump($response);

This resource responds with:

  • array: residential – Address group
    • string: address_1 – Address line 1
    • string: address_2 – Address line 2
    • string: city – City
    • string: state – State
    • string: country – Country
    • int: zipcode – Zip Code
  • array: billing – Address group
    • string: address_1 – Address line 1
    • string: address_2 – Address line 2
    • string: city – City
    • string: state – State
    • string: country – Country
    • int: zipcode – Zip Code
Parameter Required Max Length Description
address_1 yes 35 Address line 1
address_2 yes 35 Address line 2
city yes 20 City
state yes 20 State
country yes 20 Country
country_code no 3 Country ISO 3166 alpha-3.
zipcode yes 15 Zip Code

Users/Risk/Exceptions

User’s Risk Evaluation Exceptions

GET /users/risk/exceptions[/{limit}][/{offset}]

[permalink]

Find or get the excluded user(s) list for MatchMove’s risk evaluation process.

Example usage:

vcard.phar GET users/risk/exceptions \
"ids=92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
Wallet.consume('users/risk/exceptions', 'GET', {
     "ids": "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JSONObject user = wallet.consume("users/risk/exceptions", HttpRequest.METHOD_GET, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JObject user = wallet.Consume("users/risk/exceptions", "GET", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["ids"] = "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"

_, user, _ := wallet.Consume("users/risk/exceptions", "GET", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('GET', 'users/risk/exceptions', array(
     'ids' => '92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz'
));

var_dump($response);

This resource responds with:

  • array: exceptions – Risk exceptions data
    • string: id – User identifier
    • string: first_name – First or given name
    • string: last_name – Last or family name
    • string: date_added – Risk exceptions date added ISO 8601
    • string: date_expiry – Risk exceptions expiry date ISO 8601
    • array: links – Additional information
      • array: rel – Resources relationship
      • array: href – Resources link
Parameter Required Max Length Description
ids yes 255 User identifier(s). Mutiple identifiers in CSV format are accepted.

POST /users/risk/exceptions

[permalink]

Submit a registered user account which will be excluded from MatchMove’s risk evaluation process.

Example usage:

vcard.phar POST users/risk/exceptions \
"ids=92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
Wallet.consume('users/risk/exceptions', 'POST', {
     "ids": "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JSONObject user = wallet.consume("users/risk/exceptions", HttpRequest.METHOD_POST, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JObject user = wallet.Consume("users/risk/exceptions", "POST", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["ids"] = "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"

_, user, _ := wallet.Consume("users/risk/exceptions", "POST", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('POST', 'users/risk/exceptions', array(
     'ids' => '92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz'
));

var_dump($response);

This resource responds with:

  • string: statussuccess
Parameter Required Max Length Description
ids yes 255 User identifier(s). Mutiple identifiers in CSV format are accepted.

DELETE /users/risk/exceptions

[permalink]

Remove a registered user account on the excluded list for MatchMove’s risk evaluation process.

Example usage:

vcard.phar DELETE users/risk/exceptions \
"ids=92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
Wallet.consume('users/risk/exceptions', 'DELETE', {
     "ids": "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JSONObject user = wallet.consume("users/risk/exceptions", HttpRequest.METHOD_DELETE, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("ids", "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz");

JObject user = wallet.Consume("users/risk/exceptions", "DELETE", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["ids"] = "92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz"

_, user, _ := wallet.Consume("users/risk/exceptions", "DELETE", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('DELETE', 'users/risk/exceptions', array(
     'ids' => '92338d8eb96e6502ec8274a39af26ed4,92338d8eb96e6502ec8274a39af26edz'
));

var_dump($response);

This resource responds with:

  • string: statussuccess
Parameter Required Max Length Description
ids yes 255 User identifier(s). Mutiple identifiers in CSV format are accepted.

Users/Enumerations/Titles

GET /users/enumerations/titles

[permalink]

Retrieve titles that are supported by the platform

Try it yourself: Development | Production

vcard.phar GET users/enumerations/titles
Wallet.consume('users/enumerations/titles')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/enumerations/titles");
System.out.println(response);
JObject response = wallet.Consume("users/enumerations/titles");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/enumerations/titles", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/enumerations/titles');
var_dump($response);

This resource responds with:

  • array: titles – enumeration group
    • string: code – enumeration code
    • string: description – enumeration description

Users/Enumerations/Mobilecountrycode

GET /users/enumerations/mobile_country_codes

[permalink]

Retrieve mobile country code that are supported by the platform

Try it yourself: Development | Production

vcard.phar GET users/enumerations/mobile_country_codes
Wallet.consume('users/enumerations/mobilecountrycode')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/enumerations/mobile_country_codes");
System.out.println(response);
JObject response = wallet.Consume("users/enumerations/mobile_country_codes");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/enumerations/mobile_country_codes", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/enumerations/mobile_country_codes');
var_dump($response);

This resource responds with:

  • array: titles – enumeration group
    • string: code – enumeration code
    • string: description – enumeration description

Users/Enumerations/Transactions/Types

GET /users/enumerations/transactions/types

[permalink]

Retrieve transaction types that are supported by the platform

Try it yourself: Development | Production

vcard.phar GET users/enumerations/transactions/types
Wallet.consume('users/enumerations/transactions/types')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/enumerations/transactions/types");
System.out.println(response);
JObject response = wallet.Consume("users/enumerations/transactions/types");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/enumerations/transactions/types", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/enumerations/transactions/types');
var_dump($response);

This resource responds with:

  • array: genders – enumeration group
    • string: code – enumeration code
    • string: description – enumeration description

Users/Enumerations/Idtypes

GET /users/enumerations/id_types

[permalink]

Retrieve id_types that are supported by the platform

Try it yourself: Development | Production

vcard.phar GET users/enumerations/id_types
Wallet.consume('users/enumerations/id_types')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/enumerations/id_types");
System.out.println(response);
JObject response = wallet.Consume("users/enumerations/id_types");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/enumerations/id_types", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/enumerations/id_types');
var_dump($response);

This resource responds with:

  • array: id_types – enumeration group
    • string: code – enumeration code
    • string: description – enumeration description

Users/Enumerations/Genders

GET /users/enumerations/genders

[permalink]

Retrieve genders that are supported by the platform

Try it yourself: Development | Production

vcard.phar GET users/enumerations/genders
Wallet.consume('users/enumerations/genders')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/enumerations/genders");
System.out.println(response);
JObject response = wallet.Consume("users/enumerations/genders");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/enumerations/genders", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/enumerations/genders');
var_dump($response);

This resource responds with:

  • array: genders – enumeration group
    • string: code – enumeration code
    • string: description – enumeration description

Users/Authentications/Statuses

PUT /users/authentications/statuses

[permalink]

You can call this resource to update the kyc status.

vcard.phar -u me@email.com -p $3CuR3 PUT users/authentications/statuses \
"status=approved"
Wallet.consume('users/authentications/statuses', 'PUT', {
         "status": "approved"
     })
    .done(function (data) {
         console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();
userData.put("status", "approved");
JSONObject response = wallet.consume("users/authentications/statuses", HttpRequest.METHOD_PUT, userData);
System.out.println(response);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("status", "approved");
JObject response = wallet.Consume("users/authentications/statuses", "PUT", userData);
Console.WriteLine(response.ToString());
userData := map[string]string{}
userData["status"] = "approved"
_, response, _ = wallet.consume("users/authentications/statuses", "PUT", userData)
fmt.Println(response)
<?php
$response = $wallet->consume('POST', 'users/authentications/statuses', array(
    "status" => "approved"
));
var_dump($response);

This resource responds with:

  • boolean: success – Boolean ( true or false )
  • string: status – Approve or Rejected
  • string: message – Error that was encountered during kyc status update if any
Parameter Required Max Length Description
status yes 64 approved or rejected status

Users/Authentications/Documents

Manage documents for identity verification which is equivalent to the KYC (Know Your Customer) process.

List of valid document status

Status Description
pending Pending KYC approval
submitted Submitted KYC documents
approved Approved KYC documents
rejected Rejected KYC documents
f2f_request Face to face verification required
f2f_rejected Face to face verification rejected
f2f_approved Face to face verification approved
not_submitted No KYC documents submitted

GET /users/authentications/documents

[permalink]

Returns the details of the identity authentication submission.

Try it yourself: Development | Production

Get current status of the process:

vcard.phar -u me@email.com -p $3CuR3 GET users/authentications/documents
Wallet.connect();
Wallet.consume('users/authentications/documents', 'GET')
    .done(function (data) {
         console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/authentications/documents", HttpRequest.METHOD_GET);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/authentications/documents", "GET");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/authentications/documents", "GET", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/authentications/documents');
var_dump($response);

This resource responds with:

  • array: documents – List of documents submitted
  • string: count – Number of documents uploaded
  • string: statusList of valid document status

POST /users/authentications/documents

[permalink]

Start a submission session. You can call this resource multiple times to submit multiple documents.

Try it yourself: Development | Production

Upload a document (Do this process multiple times to upload more documents):

vcard.phar -u me@email.com -p $3CuR3 POST users/authentications/documents \
"data=`cat /path/to/image.jpg | base64`"
Wallet.connect();
Wallet.consume('users/authentications/documents', 'POST', {'data': 'base64/of/image.jpg'})
    .done(function (data) {
         console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
Map<String, String> userData = new HashMap<String, String>();
userData.put("data", new String(Base64.encode(String.valueOf(stringBuffer).getBytes())).trim());
JSONObject response = wallet.consume("users/authentications/documents", HttpRequest.METHOD_POST, userData);
System.out.println(response);
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('POST', 'users/authentications/documents', array(
    'data' => base64_encode(file_get_contents('/path/to/image.jpg'))
));
var_dump($response);

This resource responds with:

Parameter Required Max Length Description
data yes 8000000 base64 of a file content. Accepted image types BMP,JPEG,PNG

PUT /users/authentications/documents

[permalink]

Finalizes the assignment of the the documents. This is called after POST users/authentications/documents.

Try it yourself: Development | Production

Finalize and submit the document from POST users/authentications/documents:

vcard.phar -u me@email.com -p $3CuR3 PUT users/authentications/documents
Wallet.connect();
Wallet.consume('users/authentications/documents', 'PUT')
    .done(function (data) {
         console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/authentications/documents", HttpRequest.METHOD_PUT);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/authentications/documents", "PUT");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/authentications/documents", "PUT", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('PUT', 'users/authentications/documents');
var_dump($response);

This resource responds with:

Users/Wallets/Funds/Transfers

Users can send money to another user of the Virtual Wallet easily and conveniently.

GET /users/wallets/funds/transfers

[permalink]

Retrieve details of each money transfer transaction

Try it yourself: Development | Production

Example of fetching the money transfer transactions for the first card :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers', 'GET')
    .done(function (data) {
        console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject transaction = wallet.consume("users/wallets/funds/transfers", HttpRequest.METHOD_GET);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject transaction = wallet.Consume("users/wallets/funds/transfers");
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, transaction, _ := wallet.Consume("users/wallets/funds/transfers", "GET", nil);
fmt.Println(transaction)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets/funds/transfers', array());
var_dump($response);

This resource responds with:

  • string: id – Transfer’s id
  • array: sender – Sender
    • string: type – Sender transfer type [card, sms or email]
    • string: id – Sender Card’s Id
    • string: email – {0} Sender email
    • string: sms – {0} Sender mobile
    • string: card – {0} Sender card id
  • array: recipient – Recipient
    • string: type – Recipient transfer type [card, sms or email]
    • string: id – Recipient Card’s Id
    • string: email – {0} Recipient email
    • string: sms – {0} Recipient mobile
    • string: card – {0} Recipient card id
  • string: message – Transfer message
  • string: status – Status of the transaction
  • float: amount – Amount transferred
  • string: currency – Currency of transfer
  • array: fees – Amount and currency of transfer fee
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction’s expiration date
Parameter Required Max Length Description
id no 0 Get details of a transfer
status no 0 Filter according to the current state of the transfer. Values can be: [active, pending, claimed, cancelled, failed or expired]
type no 0 Filter according to the type of transaction. Values can be: [all, credit, or debit]
sort no 0 Comma delimited sorting of the result according to amount, date.added and date.expiry. Example: sort=-date.added,+amount

PUT /users/wallets/funds/transfers

[permalink]

Update notification flag for money transfer lists

Try it yourself: Development | Production

Example of fetching the money transfer transactions for the first card :

vcard.phar PUT users/wallets/funds/transfers \
"id='1234567890,2345678901'"
Wallet.consume('users/wallets/funds/transfers', 'PUT', {
         'id': '1234567890,2345678901'
    })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("id", "1234567890,2345678901");

JSONObject transaction = wallet.consume("users/wallets/funds/transfers", HttpRequest.METHOD_PUT);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary <string, string> ();
userData.Add("id", "1234567890, 2345678901");

JObject transaction = wallet.Consume("users/wallets/funds/transfers", "PUT", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["id"] = "1234567890, 2345678901"

_, transaction, _ := wallet.Consume("users/wallets/funds/transfers", "PUT", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('PUT', 'users/wallets/funds/transfers', array(
    'id' => '1234567890,2345678901'
));
var_dump($response);

This resource responds with:

  • string: id – Updated money transfer id’s based on the given list
Parameter Required Max Length Description
id yes 0 List of money transfer id’s to be updated

Users/Wallets/Funds/Transfers/Overseas

Users can send overseas transfers to any recipient easily and conveniently.

List of reserved identifiers for amount_details.send_details when doing overseas fund transfer.

Identifier Type Description
total_amount float Total Amount ( Amount + Fee + Tax )
amount float Send Amount
currency string Send amount ISO 4217 currency code
total_fee float Total Fee ( Rails Fee + Fixed Fee + Tax )
rails_fee float Rails Fee
fixed_fee float Fixed Fee
tax float Total Tax

List of reserved identifiers for amount_details.receive_details when doing overseas fund transfer.

Identifier Type Description
total_amount float Total Amount ( Amount + Fee + Tax )
amount float Send Amount
currency string Send amount ISO 4217 currency code
total_fee float Total Fee ( Rails Fee + Fixed Fee + Tax )
rails_fee float Rails Fee
fixed_fee float Fixed Fee
tax float Total Tax

GET /users/wallets/funds/transfers/overseas[/{id}][/{limit}][/{offset}]

[permalink]

Overseas Transfers Flow Step 5.

Returns a list of all overseas transfers made by the user.

(Optional) [Step 6] Cancellation may be applied to the transaction list provided.

Try it yourself: Development | Production

Name Description
id The id of the overseas transfer. Filters the result to the detail of the specified overseas transfer. Value must be a 32 character case insensitive alphanumeric combinations with hyphens.
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example of fetching overseas transfers made by the user :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets/funds/transfers/overseas");
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets/funds/transfers/overseas");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/wallets/funds/transfers/overseas", "GET", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas');
var_dump($response);

This resource responds with:

  • array: transfers – List of all overseas transfers by the user
    • string: ref_id – Overseas transfer reference ID
    • string: type – Overseas transfer type
    • string: client_key – Client consumer key used in making the overseas transfer transaction
    • string: status_code – Overseas transfer status code
    • string: status_text – Overseas transfer status text
    • string: date – Overseas transfer date ISO 8601
    • array: details – Overseas transfer details
    • array: amount_deducted – Overseas transfer amount deducted
    • array: send_currency – Overseas transfer amount deducted currency
    • array: fees – Overseas transfer fees
    • array: amount_to_receive – Overseas transfer amount to receive
    • array: receive_currency – Overseas transfer amount to receive currency
    • array: receive_country – Overseas transfer amount to receive country
    • array: provider – Overseas transfer provider
    • array: delivery_method – Overseas transfer delivery method
    • array: payout_agent – Overseas transfer display name of the payment agent
    • array: routing_param – Overseas transfer details needed by the routing type which can be obtained by GET /users/wallets/funds/transfers/overseas/{type}/fees
    • array: exchange_rate – Overseas transfer exchange rate
    • array: transaction_id – Overseas transfer transaction identifier provided by the participating provider
    • array: transaction_code – Overseas transfer confirmation code to be presented when claiming the transfer

POST /users/wallets/funds/transfers/overseas/{type}[/test]

[permalink]

Overseas Transfers Flow Step 3.

Send a money transfer request with the specified overseas provider. Required fields can be obtained from [Step 2].

Any transaction made through this resource will be on pending validation. [Step 4] Confirmation must be made to clear the transaction.

Try it yourself: Development | Production

Example of creating a send transaction :

vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/funds/transfers/overseas/{type}[/test] \
"calculation_mode=source&amount=1&first_name=firstname&last_name=lastname&birth_date=2015-12-11
&address_1=address1&address_2=address2&city=city&state=state&zipcode=1000&nationality=SGP&country=SGP&reason=Family Expense / Savings
&send_currency=SGD&receive_currency=SGD&receive_country=SGP&payment_mode=OF&routing_type=DESTINATION&routing_param=8$6"
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas/{type}[/test]', 'POST',
    {
        "calculation_mode"="source",
        "amount"="1",
        "first_name"="firstname",
        "last_name"="lastname",
        "birth_date"="2015-12-11",
        "address_1"="address1",
        "address_2"="address2",
        "city"="city",
        "state"="state",
        "zipcode"="1000",
        "country"="SGP",
        "nationality"="SGP",
        "reason"="Family Expense / Savings",
        "send_currency"="SGD",
        "receive_currency"="SGD",
        "receive_country"="SGP",
        "payment_mode"="OF",
        "routing_type"="DESTINATION",
        "routing_param"="8$6"
    })
    .done(function (data) {
         console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");

Map<String, String> userData = new HashMap<String, String>();
userData.put("calculation_mode", "source");
userData.put("amount", "1");
userData.put("first_name", "firstname");
userData.put("last_name", "lastname");
userData.put("birth_date", "2015-12-11");
userData.put("address_1", "address1");
userData.put("address_2", "address2");
userData.put("city", "city");
userData.put("state", "state");
userData.put("zipcode", "1000");
userData.put("country", "SGP");
userData.put("nationality", "SGP");
userData.put("reason", "Family Expense / Savings");
userData.put("send_currency", "SGD");
userData.put("receive_currency", "SGD");
userData.put("receive_country", "SGP");
userData.put("payment_mode", "OF");
userData.put("routing_type", "DESTINATION");
userData.put("routing_param", "8$6");

JSONObject transaction = wallet.consume("users/wallets/funds/transfers/overseas/{type}[/test]", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");

IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("calculation_mode", "source");
userData.Add("amount", "1");
userData.Add("first_name", "firstname");
userData.Add("last_name", "lastname");
userData.Add("birth_date", "2015-12-11");
userData.Add("address_1", "address1");
userData.Add("address_2", "address2");
userData.Add("city", "city");
userData.Add("state", "state");
userData.Add("zipcode", "1000");
userData.Add("country", "SGP");
userData.Add("nationality", "SGP");
userData.Add("reason", "Family Expense / Savings");
userData.Add("send_currency", "SGD");
userData.Add("receive_currency", "SGD");
userData.Add("receive_country", "SGP");
userData.Add("payment_mode", "OF");
userData.Add("routing_type", "DESTINATION");
userData.Add("routing_param", "8$6");

JObject transaction = wallet.Consume("users/wallets/funds/transfers/overseas/{type}[/test]", "POST", userData);
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")

userData := map[string]string{)
userData["calculation_mode"] = "source"
userData["amount"] = "1"
userData["first_name"] = "firstname"
userData["last_name"] = "lastname"
userData["birth_date"] = "2015-12-11"
userData["address_1"] = "address1"
userData["address_2"] = "address2"
userData["city"] = "city"
userData["state"] = "state"
userData["zipcode"] = "1000"
userData["country"] = "SGP"
userData["nationality"] = "SGP"
userData["reason"] = "Family Expense / Savings"
userData["send_currency"] = "SGD"
userData["receive_country"] = "SGP"
userData["payment_mode"] = "OF"
userData["routing_type"] = "DESTINATION"
userData["routing_param"] = "8$6"

_, transaction, _ := wallet.Consume("users/wallets/funds/transfers/overseas/{type}[/test]", "POST", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('POST', 'users/wallets/funds/transfers/overseas/{type}[/test]', array(
    'calculation_mode' => 'source',
    'amount' => '1',
    'first_name' => 'firstname',
    'last_name' => 'lastname',
    'birth_date' => '2015-12-11',
    'address_1' => 'address1',
    'address_2' => 'address2',
    'city' => 'city',
    'state' => 'state',
    'zipcode' => '1000',
    'country' => 'SGP',
    'nationality' => 'SGP',
    'reason' => 'Family Expense / Savings',
    'send_currency' => 'SGD',
    'receive_currency' => 'SGD',
    'receive_country' => 'SGP',
    'payment_mode' => 'OF',
    'routing_type' => 'DESTINATION',
    'routing_param' => '8$6'
));
var_dump($response);

This resource responds with:

  • string: status – Contains the status of the operation which can be either 'success’ or 'failed’
  • string: ref_id – Reference ID
  • array: transfer_details – Contains the details of the transfer
    • string: reference_number – Reference number from the provider if applicable
    • float: amount_to_send – Amount to send in send currency
    • float: amount_to_receive – Amount to receive in receive currency
    • string: receive_currency – Receive currency code ISO 4217
    • float: exchange_rate – Exchange rate to be used by the provider
    • float: commission – Commission to be taken by the provider ( Fixed Fee + Rails Fee + Tax )
    • float: amount_to_be_deducted – Estimated amount to be deducted from sender
    • array: amount_details – Amount Details
Parameter Required Max Length Description
type yes 25 Overseas provider code which can be obtained by GET /users/wallets/funds/transfers/overseas/types[/{code}]
calculation_mode yes 7 Determines whether the amount would be the source or receive amount. The field should be set as either 'source’ or 'receive’.
amount yes 12 Transfer amount
first_name yes 80 Receiver first name
last_name yes 80 Receiver last name
address_1 yes 200 Receiver address line 1
address_2 yes 200 Receiver address line 2
birth_date yes 10 Receiver birth date ISO 8601
city yes 80 Receiver city
state yes 80 Receiver state
country yes 3 Receiver country ISO 3166 alpha-3
nationality yes 3 Receiver nationality ISO 3166 alpha-3
zipcode yes 10 Receiver zip code
reason yes 256 Reason or purpose of the transfer
send_currency yes 3 Send amount ISO 4217 currency code
receive_currency yes 3 Receive amount ISO 4217 currency code
receive_country yes 3 Receiving country ISO 3166 alpha-3
routing_type yes 20 Routing type can be either DESTINATION or MSISDN. Note: This might be updated when more providers are supported.
routing_param yes 50 Contains details needed by the routing type which can be obtained by GET /users/wallets/funds/transfers/overseas/{type}/fees
payment_mode yes 20 Payment mode which can be obtained by GET /users/wallets/funds/transfers/overseas/{type}/fees
receive_mobile_number no 50 Receiver Mobile Number
receive_gender no 10 Receiver Gender
bank_name no 100 Bank name of the recipient bank account
bank_ifc_code no 50 Indian Bank IFC Code
bank_branch_name no 100 Branch name of the recipient bank account
bank_account_number no 40 Bank account number if paying via bank
cbc_bank_name no 100 CBC bank name of the recipient bank account
bpi_bank_name no 100 BPI Bank name of the recipient bank account
partner_name no 100 Partner name of the service provider which can be obtained by GET /users/wallets/funds/transfers/overseas/{type}/fees

DELETE /users/wallets/funds/transfers/overseas/{id}

[permalink]

Overseas Transfers Flow Step 6.

Cancel an overseas transfer if possible.

Try it yourself: Development | Production

Name Description
id The id of the overseas transfer. Filters the result to the detail of the specified overseas transfer. Value must be 32 characters in length with case insensitive alphanumeric format.

Example of cancelling an overseas transfer :

vcard.phar -u me@email.com -p $3CuR3 DELETE users/wallets/funds/transfers/overseas/1
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas/1')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject address = wallet.consume("users/wallets/funds/transfers/overseas/1");
System.out.println(address);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject address = wallet.Consume("users/wallets/funds/transfers/overseas/1");
Console.WriteLine(address.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, address, _ := wallet.Consume("users/wallets/funds/transfers/overseas/1", "GET", nil)
fmt.Println(address)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('DELETE', 'users/wallets/funds/transfers/overseas/1');
var_dump($response);

This resource responds with:

  • string: status – Cancellation status of the overseas transfer
Parameter Required Max Length Description
reason yes 200 Reason for cancellation

Users/Wallets/Funds/Transfers/Overseas/Fees

Users can send overseas transfers to any reciepient easily and conveniently.

GET /users/wallets/funds/transfers/overseas/{type}/fees[/{limit}][/{offset}]

[permalink]

Overseas Transfers Flow Step 2.

Returns a list of details including rates, available payers and destinations for the specified overseas provider.

This resource serves as a prerequisite to [Step 3] sending money transfer request.

Try it yourself: Development | Production

Name Description
type Overseas providers code which can be obtained by GET /users/wallets/funds/transfers/overseas/types[/{code}]
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example of fetching the rates :

TYPE_CODE=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/types | jsawk 'return this.types[0].code'`
vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/$TYPE_CODE/fees
Wallet.connect();

Wallet.consume('users/wallets/funds/transfers/overseas/types', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/funds/transfers/overseas/' + data[0].code + '/fees', 'GET')
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");

JSONObject userWallet = wallet.consume("users/wallets/funds/transfers/overseas/types");
String typeCode = userWallet.getJSONObject("types").getJSONObject(0).getString("code");

JSONObject fees = wallet.consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees");
System.out.println(fees);
wallet.Authenticate("me@email.com", "$3CuR3");

JObject userWallet = wallet.Consume("users/wallets/funds/transfers/overseas/types");
string typeCode = userWallet.GetValue("types")[0]["code"].ToString();

JObject fees = wallet.Consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees");
Console.WriteLine(fees.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets/funds/transfers/overseas/types", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
typeCode := data["types"].([]interface{})[0].(map[string]interface{})["code"]

_, fees, _ := wallet.Consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees", "GET", nil);
fmt.Println(fees)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/types');
$response = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/' . $userWallet['types'][0]['code'] + '/fees');
var_dump($response);

This resource responds with:

  • array: fees – The list of destination fees
    • string: calculation_mode – Calculation mode can be either source or receive.
    • string: payment_mode – Payment mode for the destination
    • string: payment_mode_description – Payment mode description
    • string: routing_param – Contains details needed by the routing type.
    • string: routing_type – Routing type can be either DESTINATION or MSISDN. Note: This might be updated when more providers are supported.
    • string: provider_currency – Provider ISO 4217 currency code
    • string: send_currency – Send amount ISO 4217 currency code
    • string: receive_country – Receiving country ISO 3166 alpha-3
    • string: receive_currency – Receive amount ISO 4217 currency code
    • string: partner_name – Display name of the payer
    • string: exchange_rate – Current exchange rate from application currency to receiving currency
    • string: fixed_fee – Application fixed fee
    • string: payer_details – Description of the payment mode for the destination
    • array: full_details – Additional information regarding the corridor.
Parameter Required Max Length Description
receive_country yes 3 Receiver country ISO 3166 alpha-3
receive_currency no 3 Receive amount ISO 4217 currency code
amount yes 12 Transfer amount
delivery_method no 20 Delivery method for the overseas transaction
payout_agent no 50 Display name of the payment agent
sort no 100 Comma delimited sorting of the result according to id. Example: sort=+id

POST /users/wallets/funds/transfers/overseas/{type}/fees

[permalink]

Create an overseas provider pricings record.

Name Description
type Overseas providers code which can be obtained by GET /users/wallets/funds/transfers/overseas/types[/{code}]

Example of creating overseas provider pricings record :

TYPE_CODE=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/types | jsawk 'return this.types[0].code'`
vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/funds/transfers/overseas/$TYPE_CODE/fees \
"delivery_method=BA&payout_agent=DBS&receive_country=SGP&receiving_currency=SGD&fixed_fee=5&fx_percentage=1&prefunding_currency=USD&app_currency=SGD"
Wallet.connect();

Wallet.consume('users/wallets/funds/transfers/overseas/types', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/funds/transfers/overseas/' + data[0].code + '/fees', 'POST',
        {
            "delivery_method"="BA",
            "payout_agent"="DBS",
            "receive_country"="SGP",
            "receiving_currency"="SGD",
            "fixed_fee"="5",
            "fx_percentage"="1",
            "prefunding_currency"="USD"
            "app_currency"="SGD"
        })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");

JSONObject userWallet = wallet.consume("users/wallets/funds/transfers/overseas/types");
String typeCode = userWallet.getJSONObject("types").getJSONObject(0).getString("code");

Map<String, String> feesData = new HashMap<String, String>();
feesData.put("delivery_method", "BA");
feesData.put("payout_agent", "DBS");
feesData.put("receive_country", "SGP");
feesData.put("receiving_currency", "SGD");
feesData.put("fixed_fee", "5");
feesData.put("fx_percentage", "1");
feesData.put("prefunding_currency", "USD");
feesData.put("app_currency", "SGD");

JSONObject fees = wallet.consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees", HttpRequest.METHOD_POST, feesData);
System.out.println(fees);
wallet.Authenticate("me@email.com", "$3CuR3");

JObject userWallet = wallet.Consume("users/wallets/funds/transfers/overseas/types");
string typeCode = userWallet.GetValue("types")[0]["code"].ToString();

IDictionary<string, string> feesData = new Dictionary<string, string> ();
feesData.Add("delivery_method", "BA");
feesData.Add("payout_agent", "DBS");
feesData.Add("receive_country", "SGP");
feesData.Add("receiving_currency", "SGD");
feesData.Add("fixed_fee", "5");
feesData.Add("fx_percentage", "1");
feesData.Add("prefunding_currency", "USD");
feesData.Add("app_currency", "SGD");

JObject fees = wallet.Consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees", "POST", feesData);
Console.WriteLine(fees.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets/funds/transfers/overseas/types", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
typeCode := data["types"].([]interface{})[0].(map[string]interface{})["code"]

feesData := map[string]string{)
feesData["delivery_method"] = "BA"
feesData["payout_agent"] = "DBS"
feesData["receive_country"] = "SGP"
feesData["receiving_currency"] = "SGD"
feesData["fixed_fee"] = "5"
feesData["fx_percentage"] = "1"
feesData["prefunding_currency"] = "USD"
feesData["app_currency"] = "SGD"

_, fees, _ := wallet.Consume("users/wallets/funds/transfers/overseas/" + typeCode + "/fees", "POST", feesData);
fmt.Println(fees)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/types');
$response = $wallet->consume('POST', 'users/wallets/funds/transfers/overseas/' . $userWallet['types'][0]['code'] + '/fees', array(
    'delivery_method' => 'BA',
    'payout_agent' => 'DBS',
    'receive_country' => 'SGP',
    'receiving_currency' => 'SGD',
    'fixed_fee' => '5',
    'fx_percentage' => '1',
    'prefunding_currency' => 'USD',
    'app_currency' => 'SGD'
));
var_dump($response);

This resource responds with:

  • string: id – Overseas provider pricing reference identifier
Parameter Required Max Length Description
delivery_method yes 255 Delivery method for the overseas transaction
payout_agent no 128 Display name of the payment agent
receive_country yes 3 Receive country ISO 3166 alpha-3
fixed_fee yes 16 Fixed fee
fx_rate no 16 Foreign exchange rate
fx_base_value no 16 Foreign exchange base value
fx_percentage yes 11 Foreign exchange markup percentage
prefunding_currency yes 3 Rails currency code ISO 4217
receiving_currency yes 3 Receive currency code ISO 4217
app_currency yes 3 Application currency code ISO 4217

Users/Wallets/Funds/Transfers/Overseas/History

GET /users/wallets/funds/transfers/overseas/history[/{limit}][/{offset}]

[permalink]

Returns a list of all overseas transfers made by the user.

Name Description
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example of fetching overseas transfers made by the user :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/history
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas/history')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets/funds/transfers/overseas/history");
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets/funds/transfers/overseas/history");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/wallets/funds/transfers/overseas/history", "GET", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/history');
var_dump($response);

This resource responds with:

  • array: transfers – List of all overseas transfers by the user
    • string: ref_id – Overseas transfer reference ID
    • string: type – Overseas transfer type
    • string: client_key – Client consumer key used in making the overseas transfer transaction
    • string: status_code – Overseas transfer status code
    • string: status_text – Overseas transfer status text
    • string: date – Overseas transfer date ISO 8601
    • array: details – Overseas transfer details
    • array: amount_deducted – Overseas transfer amount deducted
    • array: send_currency – Overseas transfer amount deducted currency
    • array: fees – Overseas transfer fees
    • array: amount_to_receive – Overseas transfer amount to receive
    • array: receive_currency – Overseas transfer amount to receive currency
    • array: receive_country – Overseas transfer amount to receive country
    • array: provider – Overseas transfer provider
    • array: delivery_method – Overseas transfer delivery method
    • array: payout_agent – Overseas transfer display name of the payment agent
    • array: routing_param – Overseas transfer details needed by the routing type which can be obtained by GET /users/wallets/funds/transfers/overseas/{type}/fees
    • array: exchange_rate – Overseas transfer exchange rate
    • array: transaction_id – Overseas transfer transaction identifier provided by the participating provider
    • array: transaction_code – Overseas transfer confirmation code to be presented when claiming the transfer
Parameter Required Max Length Description
limit no 11 Number of the records to be displayed.
sort no 24 Comma delimited sorting of the result according to id and date.added. Example: sort=+id,-date.added

Users/Wallets/Funds/Transfers/Overseas/Types

Users can send overseas transfers to any reciepient easily and conveniently.

GET /users/wallets/funds/transfers/overseas/types[/{code}]

[permalink]

Overseas Transfers Flow Step 1.

Lists all overseas providers offered. You may retrieve information for a specific provider by appending its code.

This resource serves as a prerequisite to [Step 2] list rates, payers and destinations.

Try it yourself: Development | Production

Name Description
code Overseas provider code. Filters the result to the detail of the specified overseas provider.

Example of fetching overseas provider :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/types
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas/types')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets/funds/transfers/overseas/types");
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets/funds/transfers/overseas/types");
Console.WriteLine(response.ToString);
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ = wallet.Consume("users/wallets/funds/transfers/overseas/types", "GET", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/types');
var_dump($response);

This resource responds with:

  • string: code – Overseas provider code
  • string: name – Name of the overseas provider
  • string: description – Description of the overseas provider
  • string: details – Product configuration.
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information

Users/Wallets/Funds/Transfers/Overseas/Fees/History

GET /users/wallets/funds/transfers/overseas/fees/history[/{limit}][/{offset}]

[permalink]

Returns a list of fees history

Name Description
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example of fetching the fees history :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers/overseas/fees/history
Wallet.connect();
Wallet.consume('users/wallets/funds/transfers/overseas/fees/history')
  .done(function (data) {console.log(data)});
JSONObject fees = wallet.consume("users/wallets/funds/transfers/overseas/fees/history");
System.out.println(fees);
JObject fees = wallet.Consume("users/wallets/funds/transfers/overseas/fees/history");
Console.WriteLine(fees.ToString());
_, fees, _ := wallet.Consume("users/wallets/funds/transfers/overseas/fees/history", "GET", nil);
fmt.Println(fees)
<?php
$response = $wallet->consume('GET', 'users/wallets/funds/transfers/overseas/fees/history');
var_dump($response);

This resource responds with:

  • array: history – The list of fees history
    • string: id – Overseas provider pricing reference identifier
    • string: provider – Overseas provider
    • string: delivery_method – Overseas transfer delivery method used
    • string: delivery_method_description – Overseas transfer delivery method description
    • string: receive_country – Overseas transfer receiving country
    • string: receive_currency – Overseas transfer receiving currency
    • string: fixed_fee – Application fixed fee
    • string: fx_percentage – Application foreign exchange percentage
    • string: status – Application fee status
    • string: date_confirmedISO 8601 Transaction confirmation date
    • string: date_createdISO 8601 Transaction date
Parameter Required Max Length Description
status no 20 Overseas provider pricing status. Values can be: [active, inactive, pending]
delivery_method no 20 Delivery method for the overseas transaction
payout_agent no 50 Display name of the payment agent
rail no 25 Overseas provider code
sort no 39 Comma delimited sorting of the result according to fixed.fee, fx.percentage and date.created. Example: sort=+fixed.fee,-fx.percentage,-date.created

Users/Wallets/Funds/Holdings

GET /users/wallets/funds/holdings[/{limit}][/{offset}]

[permalink]

Retrieves the holding balance history

Name Required Description
limit no Number of the records to be displayed.
offset no Starting point for the records that was returned.

Example of fetching the money transfer transactions for the first card :

vcard.phar GET users/wallets/funds/holdings
Wallet.consume('users/wallets/funds/holdings', 'GET')
.done(function (data) {
    console.log(data);
});
JSONObject response = wallet.consume("users/wallets/funds/holdings", HttpRequest.METHOD_GET);
System.out.println(response);
JObject response = wallet.Consume("users/wallets/funds/holdings");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/wallets/funds/holdings", "GET", nil);
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/wallets/funds/holdings', array());
var_dump($response);

This resource responds with:

  • array: holdings – The list of holding balance transactions
    • string: ref_id – Transaction reference identifier
    • string: type – Transaction type [topup, deduct, load or unload]
    • string: issue_code – Transaction error code
    • string: issue_description – Short summary of how the transaction failed
    • array: links – Additional information
      • array: rel – Resources relationship
      • array: href – Resources link
Parameter Required Max Length Description
type no 0 Filter according to the type of transaction. Values can be: [topup, deduct, load or unload]
sort no 0 Comma delimited sorting of the result according to amount, date.added and date.expiry. Example: sort=-date.added,+amount

POST /users/wallets/funds/holdings/{id}

[permalink]

Retry a transaction that is pending in the holding balance.

Name Description
id Transaction identifier which can be obtained by GET /users/wallets/funds/holdings

Example of fetching the money transfer transactions for the first card :

TRANSACTION=`vcard.phar GET users/wallets/funds/holdings | jsawk 'return this.holdings[0].ref_id'`
vcard.phar POST users/wallets/funds/holdings/$TRANSACTION
Wallet.consume('users/wallets/funds/holdings')
.done(function(transactions) {
    Wallet.consume('users/wallets/funds/holdings/' + transactions['holdings'][0].ref_id, 'POST')
    .done(function (response) {
        console.log(response);
    });
});
JSONObject holdings = wallet.consume("users/wallets/funds/holdings");
String cardType = holdings.getJSONObject("holdings").getJSONObject(0).getString("ref_id");
JSONObject response = wallet.consume("users/wallets/funds/holdings", HttpRequest.METHOD_POST);
System.out.println(response);
JObject holdings = wallet.Consume("users/wallets/funds/holdings");
string transaction = holdings.GetValue("holdings")[0]["ref_id"].ToString();
JObject response = wallet.Consume("users/wallets/funds/holdings" + transaction);
Console.WriteLine(response.ToString());
_, holdings, _ := wallet.Consume("users/wallets/cards/types", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(holdings), &data)
transaction := data["holdings"].([]interface{})[0].(map[string]interface{})["ref_id"]
_, response, _ := wallet.Consume("users/wallets/funds/holdings/" + transaction, "POST", nil);
fmt.Println(response)
<?php
$transaction = $wallet->consume('GET', 'users/wallets/funds/holdings');
$response = $wallet->consume('POST', 'users/wallets/funds/holdings/' . $transaction['holdings'][0]['ref_id'], array());
var_dump($response);

This resource responds with:

  • string: id – Reference ID of the transaction that was confirmed.
  • string: status – Status of the confirmation.
  • string: description – Describes the result of the confirmation.

DELETE /users/wallets/funds/holdings/{id}

[permalink]

Cancel a transaction that is pending in the holding balance.

Name Description
id Transaction identifier which can be obtained by GET /users/wallets/funds/holdings

Example of fetching the money transfer transactions for the first card :

TRANSACTION=`vcard.phar GET users/wallets/funds/holdings | jsawk 'return this.holdings[0].ref_id'`
vcard.phar DELETE users/wallets/funds/holdings/$TRANSACTION
Wallet.consume('users/wallets/funds/holdings')
.done(function(transactions) {
    Wallet.consume('users/wallets/funds/holdings/' + transactions['holdings'][0].ref_id, 'DELETE')
    .done(function (response) {
        console.log(response);
    });
});
JSONObject holdings = wallet.consume("users/wallets/funds/holdings");
String cardType = holdings.getJSONObject("holdings").getJSONObject(0).getString("ref_id");
JSONObject response = wallet.consume("users/wallets/funds/holdings", HttpRequest.METHOD_DELETE);
System.out.println(response);
JObject holdings = wallet.Consume("users/wallets/funds/holdings");
string transaction = holdings.GetValue("holdings")[0]["ref_id"].ToString();
JObject response = wallet.Consume("users/wallets/funds/holdings" + transaction);
Console.WriteLine(response.ToString());
_, holdings, _ := wallet.Consume("users/wallets/cards/types", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(holdings), &data)
transaction := data["holdings"].([]interface{})[0].(map[string]interface{})["ref_id"]
_, response, _ := wallet.Consume("users/wallets/funds/holdings/" + transaction, "DELETE", nil);
fmt.Println(response)
<?php
$transaction = $wallet->consume('GET', 'users/wallets/funds/holdings');
$response = $wallet->consume('DELETE', 'users/wallets/funds/holdings/' . $transaction['holdings'][0]['ref_id'], array());
var_dump($response);

This resource responds with:

  • string: id – Reference ID of the transaction that was confirmed.
  • string: status – Status of the confirmation.
  • string: description – Describes the result of the confirmation.

Users/Wallets/Funds

The Available Balance reflects the amount of money in the Virtual Wallet that can be spent. Money that has yet to be claimed will be seen under Holding Balance. The User has to manually claim the money that has been sent to him/her in order to use it.

List of reserved identifiers for details when doing a top-up.

Identifier Type Description
is_custom_ref_id boolean Custom reference identifier (eg: [0,1])
pp string Payment provider name (eg: Easypay2)
charge_fee decimal Payment provider charge fee
payment_ref string payment provider reference id that was sent (eg: MMP-LUIAA-56823D4C72)
status string AdminNet topup status (eg: [Success, Failed])
reason string AdminNet response
comments string Misc AdminNet comment
card_fee decimal Card fee
card_type_code string Card type code
description string Card type description, etc.

GET /users/wallets/funds[/{id}]

[permalink]

The function of this API varies depending on whether it is being accessed as a Public Resource or through Oauth.

A. Get credit transaction status.

Try it yourself: Development | Production

Name Description
id Transaction id which can be obtained by calling POST /users/wallets/funds

Example of retrieving transaction credit status.

vcard.phar GET users/wallets/funds/$ID
Wallet.consume('users/wallets/funds/{$id}', 'GET')
    .done(function (data) {
        console.log(data);
    });
JSONObject transaction = wallet.consume("users/wallets/funds/" + id, HttpRequest.METHOD_GET);
System.out.println(transaction);
JSONObject transaction = wallet.consume("users/wallets/funds/" + id, HttpRequest.METHOD_GET);
System.out.println(transaction);
JObject transaction = wallet.Consume("users/wallets/funds/" + id, "GET");
Console.WriteLine(transaction.ToString());
_, transaction, _ := wallet.Consume("users/wallets/funds" + id, "GET", nil)
fmt.Println(transaction)
<?php
$response = $wallet->consume('GET', 'users/wallets/funds/'.$id, array());
var_dump($response);

This resource responds with:

  • string: id – Transaction identifier
  • boolean: status – Status of the transaction. Values can be [temporary, cancelled, pending, success, waiting, refund or failed].

B. Get funds transactions list.

Try it yourself: Development | Production

Example of retrieving debit transactions.

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds "type=debit&amount=10&date_range=2014-10-31,2014-11-30&details={\"is_custom_ref_id\":1}&sort=-date.added,+amount"
Wallet.connect();

Wallet.consume('users/wallets/funds', 'GET',
{
    "type": "debit",
    "amount": 10,
    "date_range": "2014-10-31,2014-11-30",
    "details": "{'is_custom_ref_id':1}",
    "sort": "-date.added,+amount",
})
.done(function (data) {
    console.log(data);
});
wallet.authenticate("me@email.com", "$3CuR3");

Map<String, String> userData = new HashMap<String, String>();
userData.put("type", "debit");
userData.put("amount", 10);
userData.put("date_range", "2014-10-31,2014-11-30");
userData.put("details", "{'is_custom_ref_id':1}");
userData.put("sort", "-date.added,+amount");

JSONObject transaction = wallet.consume("users/wallets/funds", HttpRequest.METHOD_GET, userData);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");

IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("type", "debit");
userData.Add("amount", 10);
userData.Add("date_range", "2014-10-31,2014-11-30");
userData.Add("details", "{'is_custom_ref_id':1}");
userData.Add("sort", "-date.added,+amount");

JObject transaction = wallet.Consume("users/wallets/funds", "GET", userData);
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
userData := map[string]string{}
userData["type"] = "debit"
userData["amount"] = "10"
userData["date_range"] = "2014-10-31,2014-11-30"
userData["details"] = "{'is_custom_ref_id':1}"
userData["sort"] = "-date.added,+amount"

_, transaction, _ := wallet.Consume("users/wallets/funds", "GET", userData)
fmt.Println(transaction)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');

$response = $wallet->consume('GET', 'users/wallets/funds', array(
    'type'       => 'debit',
    'amount'     => 10,
    'date_range' => '2014-10-31,2014-11-30',
    'details'    => '{"is_custom_ref_id":1}',
    'sort'       => '-date.added,+amount'
));
var_dump($response);

This resource responds with:

  • array: transactions – Funds transaction list
    • string: id – Transaction identifier
    • string: type – Transaction type
    • string: amount – Amount involved in the transaction
    • string: currencyISO-4217 Currency
    • string: status – Transaction status
    • string: indicatordebit or credit
    • string: dateISO 8601 Transaction date
    • string: details – Details about the transaction
Parameter Required Max Length Description
type no 9 Filter transactions according to transaction types. Values can be: [debit, credit, transfers]
amount no 9 Transaction amount
date_range no 21 Limit transactions based on date range. Example: date_range=2014-10-31,2014-11-30
details no 256 JSON encoded text string containing details of the original transaction using POST /users/wallets/funds
sort no 24 Comma delimited sorting of the result according to amount, date.added and date.expiry. Example: sort=-date.added,+amount

POST /users/wallets/funds

[permalink]

The function of this API varies depending on whether it is accessed as a Public Resource or through Oauth.

A. Credit.

Try it yourself: Development | Production

The mobile parameter requires the mobile_country_code (mobile country code) parameter and vice-versa.

Any amount credited through this resource will be on pending validation unless the consumer is prefunded. Confirmation must be made to clear the transaction through POST /oauth/consumer/funds.

Credit the wallet with 100 units identified by the user’s email.

vcard.phar POST users/wallets/funds "email=me@email.com&amount=100"
Wallet.consume('users/wallets/funds', 'POST',
{
    "email": "me@email.com",
    "amount": "100"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("email", "me@email.com");
userData.put("amount", 100);

JSONObject transaction = wallet.consume("users/wallets/funds", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("email", "me@email.com");
userData.Add("amount", 100);

JObject transaction = wallet.Consume("users/wallets/funds", "POST", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["email"] = "me@email.com"
userData["amount"] = "100"

_, transaction, _ := wallet.Consume("users/wallets/funds", "POST", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('POST', 'users/wallets/funds', array(
    'email' => 'me@email.com',
    'amount' => 100
));
var_dump($response);

This resource responds with:

  • string: id – Transaction reference identifier
  • string: user_id – User identifier
  • string: wallet_id – Wallet identifier
  • string: card_id(optional) Card identifier
  • string: confirm – Indicator if the transaction needs to be confirmed or not. Values can be [require or skip]
  • array: links – Additional information
  • string: links.rel(optional) Resources relationship
  • string: links.href(optional) Resources link
  • string: links.method(optional) Method to use to get the resources information
  • string: links.body(optional) Parameters needed for the link
Parameter Required Max Length Description
email no 50 Receiver email address.
mobile_country_code no 3 Receiver mobile country code
mobile no 12 Receiver mobile number
user_id no 32 Receiver user id
amount yes 9 Amount to be credited to the recipient
details yes 256 JSON encoded text string containing details of the topup, you can refer on this link for the identifiers.
forwarded_for no 32 Originating API key of the client the request is invoking for. When ommited, the current API key will be used. This is commonly a payment provider client key when integrating such.
hashed_pan no 64 HMAC-SHA256 of the card PAN (Primary Account Number)

B. Transfer.

Try it yourself: Development | Production

Transfer to non-existing accounts

A transfer request can remain unclaimed in the system for a number of day(s). In cases where the identifier such as the email or mobile does not exist in the system, it will remain unclaimed until a user with those identifiers registers.

  1. Get a transfer_ref_id from POST /users/wallets/funds.
  2. After registration, POST /users, resubmit the transfer using POST /users/wallets/funds and pass the transfer_ref_id.

Transfer 100 units to another wallet identified by the user’s email.

vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/funds "email=me@email.com&amount=100"
Wallet.connect();

Wallet.consume('users/wallets/funds', 'POST',
{
    "email": "me@email.com",
    "amount": "100"
})
.done(function (data) {
    console.log(data);
});
wallet.authenticate("me@email.com", "$3CuR3");

Map<String, String> userData = new HashMap<String, String>();
userData.put("email", "me@email.com");
userData.put("amount", 100);

JSONObject transaction = wallet.consume("users/wallets/funds", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");

IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("email", "me@email.com");
userData.Add("amount", 100);

JObject transaction = wallet.Consume("users/wallets/funds", "POST", userData);
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
userData := map[string]string{}
userData["email"] = "me@email.com"
userData["amount"] = "100"

_, transaction, _ := wallet.Consume("users/wallets.funds", "POST", userData)
fmt.Println(transaction)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');

$response = $wallet->consume('POST', 'users/wallets/funds', array(
    'email' => 'me@email.com',
    'amount' => 100
));
var_dump($response);

This resource responds with:

  • string: id – Transaction reference identifier
  • array: sender – Transfer sender
    • string: type – Transfer sender card
    • string: id – Transfer sender card id
  • array: recipient – Transfer recipient
    • string: type – Transfer recipient card
    • string: id – Transfer recipient card id
  • string: status – Transfer status of the transaction
  • float: amount – Transfer amount
  • string: currency – Transfer currency
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction expiration date
Parameter Required Max Length Description
email no 50 Receiver email address.
mobile_country_code no 3 Receiver mobile country code
mobile no 12 Receiver mobile number
user_id no 32 Receiver user id
amount yes 9 Amount to be credited to the recipient
temporary no 1 Default 0. Sets the transaction to temporary. 1 for true or 0 for false. Temporary transactions in a certain amount of time when not verified.
fund_category_name no 64 Fund category name GET /users/wallets/cards/funds/categories

PUT /users/wallets/funds/{id}

[permalink]

Acknowledges the transfer and starts the transferring of funds.

Try it yourself: Development | Production

Name Description
id Transfer ID from GET /users/wallets/funds

Example of accepting fund transfer 0954480d818cab8fa827e40821b0da35:

vcard.phar -u me@email.com -p $3CuR3 PUT users/wallets/funds/0954480d818cab8fa827e40821b0da35
Wallet.connect();
Wallet.consume('users/wallets/funds/0954480d818cab8fa827e40821b0da35', 'PUT')
    .done(function (data) {
        console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets/funds/0954480d818cab8fa827e40821b0da35", HttpRequest.METHOD_PUT);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets/funds/0954480d818cab8fa827e40821b0da35", "PUT");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/wallets/funds/0954480d818cab8fa827e40821b0da35", "PUT", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('PUT', 'users/wallets/funds/0954480d818cab8fa827e40821b0da35');
var_dump($response);

This resource responds with:

  • string: id – Transaction identifier
  • array: sender – Sender
    • string: type – Sender transfer type [card, sms or email]
    • string: id – Sender card identifier
    • string: email – Sender email
    • string: sms – Sender mobile
  • array: recipient – Recipient
    • string: type – Recipient transfer type [card, sms or email]
    • string: id – Recipient card identifier
    • string: email – Recipient email
    • string: sms – Recipient mobile
  • string: message – Transfer message
  • string: status – Status of the transaction
  • float: amount – Amount transferred
  • string: current – Currency of transfer
  • array: fee – Amount and currency of transfer fee
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction expiration date

DELETE /users/wallets/funds[/{id}]

[permalink]

The API can be accessed in two ways: As a Public Resource to deduct funds and through Oauth to cancel the fund transfer.

A. Deduct.

Try it yourself: Development | Production

When accessed as a Public Resource, the amount will be debited from the user’s wallet. For the single card configuration, the amount will be debited from the card instead.

Any amount debited through this resource will be on pending validation. Confirmation must be made to clear the transaction through DELETE /oauth/consumer/funds.

Deduct amount from the wallet with 100 units identified by the user’s email:

vcard.phar DELETE users/wallets/funds "email=me@email.com&amount=100"
Wallet.consume('users/wallets/funds', 'DELETE',
{
    "email": "me@email.com",
    "amount": "100"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("email", "me@email.com");
userData.put("amount", 100);

JSONObject transaction = wallet.consume("users/wallets/funds", HttpRequest.METHOD_DELETE, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, String> ();
userData.Add("email", "me@email.com");
userData.Add("amount", 100);

JObject transaction = wallet.Consume("users/wallets/funds", "DELETE", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["email"] = "me@email.com"
userData["amount"] = "100"

_, transaction, _ := wallet.Consume("users/wallets/funds", "DELETE", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('DELETE', 'users/wallets/funds', array(
    'email' => 'me@email.com',
    'amount' => 100
));
var_dump($response);

This resource responds with:

  • string: id – Transaction reference identifier
  • string: confirm – Indicator if the transaction needs to be confirmed or not. Value is always [require]
  • array: links – Additional information
  • string: links.rel – Resources relationship
  • string: links.href – Resources link
  • string: links.method – Method to use to get the resources information
  • string: links.body – Parameters needed for the link
Parameter Required Max Length Description
email no 50 Receiver email address.
mobile_country_code no 3 Receiver mobile country code
mobile no 14 Receiver mobile number
hash_id no 32 Wallet id
amount yes 9 Amount to be deducted to the recipient
details yes 256 JSON encoded text string containing the details of the deduction

B. Cancel Fund Transfer.

Try it yourself: Development | Production

Name Description
id Fund transfer id which can be obtained use GET /users/wallets/funds/transfers

Cancel fund transfer

TRANSFER_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/funds/transfers | jsawk 'return this.transfers[0].id'`
vcard.phar -u me@email.com -p $3CuR3 DELETE users/wallets/funds/$TRANSFER_ID
Wallet.connect();

Wallet.consume('users/wallets/funds/transfers', 'GET')
    .done(function (data) {
        Wallet.consume('users/wallets/funds/' + data[0].id, 'DELETE')
        .done(function (data) {
            console.log(data);
        });
    });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets/funds/transfers");
String transferId = userWallet.getJSONObject("transfers").getJSONObject(0).getString("id");

JSONObject response = wallet.consume("users/wallets/funds/" + transferId, HttpRequest.METHOD_DELETE);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets/funds/transfers");
string transferId = userWallet.GetValue("transfers")[0]["id"].ToString();

JObject response = wallet.Consume("users/wallets/funds/" + transferId, "DELETE");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets/funds/transfers", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
transferID := data["transfers"].([]interface{})[0].(map[string]interface{})["id"]

_, response, _ := wallet.Consume("users/wallets/funds/" + transferID, "DELETE", nil);
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets/funds/transfers');
$response = $wallet->consume('POST', 'users/wallets/funds/' . $userWallet['transfers'][0]['id']);
var_dump($response);

This resource responds with:

  • string: id – Transaction reference identifier
  • array: sender – Transfer sender
    • string: type – Transfer sender card
    • string: id – Transfer sender card id
  • array: recipient – Transfer recipient
    • string: type – Transfer recipient card
    • string: id – Transfer recipient card id
  • string: status – Transfer status of the transaction
  • float: amount – Transfer amount
  • string: currency – Transfer currency
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction expiration date

Users/Wallets/Transactions

The Virtual Card’s detailed transaction history records allows users to be able to check on their past transactions any time.

GET /users/wallets/transactions[/{page}]

[permalink]

Retrieves the transaction history of the User’s Virtual Wallet, with records not older than 90 days.

Each page may contain up to 5 transactions.

Try it yourself: Development | Production

Name Required Description
page no the one-based page number (maximum value of 99) to be displayed.

Example of accessing the resource publicly :

vcard.phar -u me@email.com -p $3CuR3 GET users/{user_id}/wallets/transactions
Wallet.connect();
Wallet.consume('users/{user_id}/wallets/transactions')
  .done(function (data) {console.log(data)});
JSONObject transactions = wallet.consume("users/{user_id}/wallets/transactions");
System.out.println(transactions);
JObject transactions = wallet.Consume("users/{user_id}/wallets/transactions");
Console.WriteLine(transactions.ToString());
_, transactions, _ := wallet.Consume("users/{user_id}/wallets/transactions", "GET", nil)
fmt.Println(transactions)
<?php
$response = $wallet->consume('GET', 'users/{user_id}/wallets/transactions');
var_dump($response);

Example of fetching the transaction history of the wallet :

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/transactions
Wallet.connect();
Wallet.consume('users/wallets/transactions')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject transactions = wallet.consume("users/wallets/transactions");
System.out.println(transactions);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject transactions = wallet.Consume("users/wallets/transactions");
Console.WriteLine(transactions.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, transactions, _ := wallet.Consume("users/wallets/transactions", "GET", nil)
fmt.Println(transactions)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets/transactions');
var_dump($response);

This resource responds with:

  • array: transactions – Wallet transaction list
    • string: id – Reference ID
    • string: type – Transaction type
    • string: amount – Amount involved in the transaction
    • string: balance – Wallet current balance based on the transaction
    • string: currencyISO-4217 Currency
    • string: status – Wallet transaction status
    • string: description – Wallet transaction description
    • status: indicatordebit or credit
    • status: dateISO 8601 Transaction date
    • array: details – Details about the transaction
Parameter Required Max Length Description
limit no 2 Number of transactions return per page (Default 5).
type no 9 Filter transactions according to transaction types. Values can be: [debit, credit]. Only works for in house balance products.
date_range no 21 Limit transactions based on date range. Example: date_range=20141220,20150131. Only works for in house balance products.
sort no 24 Comma delimited sorting of the result according to amount, date.added and date.expiry. Example: sort=-date.added,+amount. Only works for in house balance products.

Users/Wallets/Cards/Funds/Categories/Limits

The Fund Category feature allows you to control how a balance or “fund” is spent. This resource gives consumers final control over how much of that fund is spent within a pre-defined span of time. Personalize these settings for time-based limits using units such as minute, hour, day, week, month, and year to better fit your customers’ desired spending behavior.

GET /users/wallets/cards/funds/categories/{name}/limits

[permalink]

Returns the default spending limits set for the given fund category.

Name Description
name Fund category name.
user_id The user id which can be obtained using GET /users. Including this will return user-specific limit settings.

Examples of fetching the default limit settings for the fund category:

vcard.phar GET users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits");
System.out.println(response);
JObject response = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits');
var_dump($response);

This resource responds with:

  • string: name – Fund Category name
  • string: settings – Limit settings
  • array: date – Date Limit settings
    • string: updatedISO 8601 Date the spending limits were last updated
    • string: addedISO 8601 Date the spending limits was created

POST /users/wallets/cards/funds/categories/{name}/limits

[permalink]

Set the spending limits for the given Fund Category.

Name Description
name Fund category name.
user_id The user id which can be obtained using GET /users. Including this will return user-specific limit settings.

Example usage:

vcard.phar POST users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits \
"settings=[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits', 'POST', [
 {
     "duration": "1",
     "interval": "day",
     "value": "10.00"
 },
 {
     "duration": "3",
     "interval": "month",
     "value": "100.00"
 }
])
    .done(function (data) {
        console.log(data);
    });
Map<String, String> categoryData = new HashMap<String, String>();

categoryData.put("settings", "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]");

JSONObject category = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", HttpRequest.METHOD_POST, categoryData);
System.out.println(category);
IDictionary<string, string> categoryData = new Dictionary<string, string> ();

categoryData.Add("settings", "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]");

JObject category = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "POST", categoryData);
Console.WriteLine(category.ToString());
categoryData := map[string]string{}
categoryData["settings"] = "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"

_, category, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "POST", categoryData)
fmt.Println(category)
<?php
$response = $wallet->consume('POST', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits', array(
     'settings' => "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"
));

var_dump($response);

This resource responds with:

  • string: name – Fund Category name
  • string: settings – Limit settings
  • array: date – Date Limit settings
    • string: updatedISO 8601 Date the spending limits were last updated
    • string: addedISO 8601 Date the spending limits was created
Parameter Required Max Length Description
settings no 256 JSON encoded string containing the category’s time interval and value settings.

PUT /users/wallets/cards/funds/categories/{name}/limits

[permalink]

Update the spending limit settings for the Fund Category.

Name Description
name Fund category name.
user_id The user id which can be obtained using GET /users. Including this will return user-specific limit settings.

Example usage:

vcard.phar PUT users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits \
"settings=[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits', 'PUT', [
 {
     "duration": "1",
     "interval": "day",
     "value": "10.00"
 },
 {
     "duration": "3",
     "interval": "month",
     "value": "100.00"
 }
])
    .done(function (data) {
        console.log(data);
    });
Map<String, String> categoryData = new HashMap<String, String>();

categoryData.put("settings", "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]");

JSONObject category = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", HttpRequest.METHOD_PUT, categoryData);
System.out.println(category);
IDictionary<string, string> categoryData = new Dictionary<string, string> ();

categoryData.Add("settings", "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]");

JObject category = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "PUT", categoryData);
Console.WriteLine(category.ToString());
categoryData := map[string]string{}
categoryData["settings"] = "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"

_, category, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "PUT", categoryData)
fmt.Println(category)
<?php
$response = $wallet->consume('PUT', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits', array(
     'settings' => "[{'duration':'1','interval':'day','value':'10.00'}, {'duration':'3','interval':'month','value':'100.00'}]"
));

var_dump($response);

This resource responds with:

  • string: name – Fund Category name
  • string: settings – Limit settings
  • array: date – Date Limit settings
    • string: updatedISO 8601 Date the spending limits were last updated
    • string: addedISO 8601 Date the spending limits was created
Parameter Required Max Length Description
settings no 256 JSON encoded string containing the category’s time interval and value settings.

DELETE /users/wallets/cards/funds/categories/{name}/limits

[permalink]

Permanently delete the spending limits settings for the given Fund Category.

Name Description
name Fund category name.
user_id The user id which can be obtained using GET /users. Including this will return user-specific limit settings.

Example usage:

vcard.phar DELETE users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits', 'DELETE')
    .done(function (data) {
        console.log(data);
    });
JSONObject category = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", HttpRequest.METHOD_DELETE);
System.out.println(category);
JObject category = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "DELETE");
Console.WriteLine(category.ToString());
_, category, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits", "DELETE", nil)
fmt.Println(category)
<?php
$response = $wallet->consume('DELETE', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01/limits');

var_dump($response);

This resource responds with:

  • string: status – Transaction Status

Users/Wallets/Cards/Funds/Categories

The Fund Category feature allows you to control how a balance or “fund” is spent. Every time a categorized fund is used, the payment data is validated against a set of Merchant Category Code and/or Currency filters. Matching the filters will then become part of the transaction authorization process.

GET /users/wallets/cards/funds/categories[/{name}][/{limit}][/{offset}]

[permalink]

Lists all fund categories offered by the product. To specify which fund category type to be retrieved, attach the to the resource name.

Name Description
name Fund category name. Filters the result to the detail of the specified fund category. Value must be case insensitive alphanumeric combinations with hyphens.
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example of fetching the list of fund categories offered by the product:

vcard.phar GET users/wallets/cards/funds/categories
Wallet.consume('users/wallets/cards/funds/categories')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/wallets/cards/funds/categories");
System.out.println(response);
JObject response = wallet.Consume("users/wallets/cards/funds/categories");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/wallets/cards/funds/categories", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/wallets/cards/funds/categories');
var_dump($response);

This resource responds with:

  • string: id – Fund Category identifier
  • string: name – Fund Category name
  • string: default_amount – Maximum amount limit
  • string: factor – Maximum amount limit type
  • array: mcc – List of Merchant Category Codes used as filters by the category
  • array: currency – List of Currencies used as filters by the category in ISO 4217 format
  • string: date_addedISO 8601 Date the category was created

POST /users/wallets/cards/funds/categories

[permalink]

Create a new Fund Category.

A new Fund Category requires a unique label and an amount that sets the maximum number of units that an associated balance can hold. Include Merchant Category and/or Country codes to use them for validating authorization transactions when ever a fund that belongs to this category is used.

Example usage:

vcard.phar POST users/wallets/cards/funds/categories \
"name=FCATEXAMPLE-01&default_amount=100.00&factor=UNIT&mcc=6011,1010&country=SGP,PHL"
Wallet.consume('users/wallets/cards/funds/categories', 'POST', {
     "name": "FCATEXAMPLE-01",
     "default_amount": "100.00",
     "factor": "UNIT",
     "mcc": "6011,1010",
     "country": "SGP,PHL"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> categoryData = new HashMap<String, String>();

categoryData.put("name", "FCATEXAMPLE-01");
categoryData.put("default_amount", "100.00");
categoryData.put("factor", "UNIT");
categoryData.put("mcc", "6011,1010");
categoryData.put("country", "SGP,PHL");

JSONObject category = wallet.consume("users/wallets/cards/funds/categories", HttpRequest.METHOD_POST, categoryData);
System.out.println(category);
IDictionary<string, string> categoryData = new Dictionary<string, string> ();

categoryData.Add("name", "FCATEXAMPLE-01");
categoryData.Add("default_amount", "100.00");
categoryData.Add("factor", "UNIT");
categoryData.Add("mcc", "6011,1010");
categoryData.Add("country", "SGP,PHL");

JObject category = wallet.Consume("users/wallets/cards/funds/categories", "POST", categoryData);
Console.WriteLine(category.ToString());
categoryData := map[string]string{}
categoryData["name"] = "FCATEXAMPLE-01"
categoryData["default_amount"] = "100.00"
categoryData["factor"] = "UNIT"
categoryData["mcc"] = "6011,1010"
categoryData["country"] = "SGP,PHL"

_, category, _ := wallet.Consume("users/wallets/cards/funds/categories", "POST", categoryData)
fmt.Println(category)
<?php
$response = $wallet->consume('POST', 'users/wallets/cards/funds/categories', array(
     'name' => 'FCATEXAMPLE-01',
     'default_amount' => '100.00',
     'factor' => 'UNIT',
     'mcc' => '6011,1010',
     'country' => 'SGP,PHL'
));

var_dump($response);

This resource responds with:

  • string: id – Fund Category identifier
  • string: name – Unique category label
  • string: default_amount – Maximum amount limit
  • string: factor – Maximum amount limit type
  • array: mcc – Validated MCC filters used by this category
  • array: currency – Validated currency filters used by this category in ISO 4217 format
  • string: date_addedISO 8601 Date the category was created
Parameter Required Max Length Description
name yes 64 Unique category label which accepts case insensitive alphanumeric combinations with hyphens.
default_amount yes 18 Serves as the maximum amount allowable for the category
factor no 7 Defines the default_amount type or context (UNIT, PERCENT). Defaults to UNIT.
mcc no 200 If a comma-delimited list of Merchant Category Codes is passed, this category will use them as filters. Value with no record matches are ignored.
country no 200 A comma-delimited list of country abbreviations in ISO 3166 alpha-3 format. If provided, the currency of these countries will be used as filters. Value with no record matches are ignored.

PUT /users/wallets/cards/funds/categories/{name}

[permalink]

Update the Fund Category details and filters.

Change the limit amount and amount type. It is IMPORTANT to note that this resource replaces ALL mcc and currency filters. Leaving mcc or country parameters blank will delete all of the category’s filters.

Name Description
name Fund category name. Filters the result to the detail of the specified fund category. Value must be case insensitive alphanumeric combinations with hyphens.

Example usage:

vcard.phar PUT users/wallets/cards/funds/categories/FCATEXAMPLE-01 \
"default_amount=99.00&factor=UNIT&mcc=6011,1010&country=SGP,PHL"
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01', 'PUT', {
     "default_amount": "99.00",
     "factor": "UNIT",
     "mcc": "6011,1010",
     "country": "SGP,PHL"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> categoryData = new HashMap<String, String>();

categoryData.put("default_amount", "99.00");
categoryData.put("factor", "UNIT");
categoryData.put("mcc", "6011,1010");
categoryData.put("country", "SGP,PHL");

JSONObject user = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", HttpRequest.METHOD_PUT, categoryData);
System.out.println(user);
IDictionary<string, string> categoryData = new Dictionary<string, string> ();

categoryData.Add("default_amount", "99.00");
categoryData.Add("factor", "UNIT");
categoryData.Add("mcc", "6011,1010");
categoryData.Add("country", "SGP,PHL");

JObject user = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", "PUT", categoryData);
Console.WriteLine(user.ToString());
categoryData := map[string]string{}
categoryData["default_amount"] = "100.00"
categoryData["factor"] = "UNIT"
categoryData["mcc"] = "6011,1010"
categoryData["country"] = "SGP,PHL"

_, category, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", "PUT", categoryData)
fmt.Println(category)
<?php
$response = $wallet->consume('PUT', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01', array(
     'default_amount' => '99.00',
     'factor' => 'UNIT',
     'mcc' => '6011,1010',
     'country' => 'SGP,PHL'
));

var_dump($response);

This resource responds with:

  • string: id – Fund Category identifier
  • string: name – Unique category label
  • string: default_amount – Maximum amount limit
  • string: factor – Maximum amount limit type
  • array: mcc – Validated MCC filters used by this category
  • array: currency – Validated currency filters used by this category in ISO 4217 format
  • string: date_addedISO 8601 Date the category was created
Parameter Required Max Length Description
default_amount no 18 Serves as the maximum amount allowable for the category.
factor no 7 Defines the default_amount type or context (UNIT, PERCENT). Defaults to UNIT.
mcc no 200 A comma-delimited list of Merchant Category Codes. Replaces all of the mcc filters for the category if submitted.
country no 200 A comma-delimited list of country abbreviations in ISO 3166 alpha-3 format. Replaces all of the category’s currency filters if submitted.

DELETE /users/wallets/cards/funds/categories/{name}

[permalink]

Permanently delete a Fund Category.

Name Description
name Fund category name. Filters the result to the detail of the specified fund category. Value must be case insensitive alphanumeric combinations with hyphens.

Example usage:

vcard.phar DELETE users/wallets/cards/funds/categories/FCATEXAMPLE-01
Wallet.consume('users/wallets/cards/funds/categories/FCATEXAMPLE-01', 'DELETE'
     )
    .done(function (data) {
        console.log(data);
    });
JSONObject category = wallet.consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", HttpRequest.METHOD_DELETE);
System.out.println(category);
JObject category = wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", "DELETE");
Console.WriteLine(category.ToString())
_, category, _ := wallet.Consume("users/wallets/cards/funds/categories/FCATEXAMPLE-01", "DELETE", nil)
fmt.Println(category)
<?php
$response = $wallet->consume('DELETE', 'users/wallets/cards/funds/categories/FCATEXAMPLE-01');
var_dump($response);

This resource responds with:

  • string: name – Deleted Fund Category Name

Users/Wallets/Cards/Funds

Users can transfer money from a Virtual Wallet to a Virtual Card and vice versa.

POST /users/wallets/cards/{card.id}/funds

[permalink]

Transfers credits from wallet to the card

Try it yourself: Development | Production

Name Description
card.id Card id which can be obtained use GET /users/wallets or GET /users/wallets/cards

Example of transferring 100 to card :

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/cards/$CARD_ID/funds \
"amount=100&message='card funds'"
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id + '/funds', 'POST', {
             'user': 'friend@email.com',
             'amount': 100,
             'message': "card funds"
         })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
Map<String, String> userData = new HashMap<String, String>();

userData.put("amount", "100");
userData.put("message", "card funds");

JSONObject response = wallet.consume("users/wallets/cards/" + cardId + "/funds", HttpRequest.METHOD_POST, userData);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("amount", "100");
userData.Add("message", "card funds");

JObject response = wallet.Consume("users/wallets/cards/" + cardId + "/funds", "POST", userData);
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

userData["amount"] = "100"
userData["message"] = "card funds"

_, response, _ := wallet.Consume("users/wallets/cards/" + cardID + "/funds", "POST", userData)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('POST', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/funds', array(
    'amount' => 100,
    'message' => 'card funds'
));
var_dump($response);

This resource responds with:

  • string: id – Transaction identifier
  • array: recipient – Recipient
    • string: type – Recipient card type
    • string: id – Recipient card identifier
  • string: status – Status of the transaction
  • float: amount – Amount to transfer
  • string: currency – Currency of the amount
  • array: fee – Amount and currency of transfer fee
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction’s expiration date
Parameter Required Max Length Description
amount yes 11 Transfer amount
message no 64 Message
fund_category_name no 64 Fund category name GET /users/wallets/cards/funds/categories

DELETE /users/wallets/cards/{card.id}/funds

[permalink]

There are two ways to use this API, first is by accessing it as a public resource or by using Oauth

Name Description
card.id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of transferring 100 to card :

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 DELETE users/wallets/cards/$CARD_ID/funds \
"amount=100&message='return funds'"
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id + '/funds', 'DELETE', {
             'user': 'friend@email.com',
             'amount': 100,
             'message': "return funds"
         })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
Map<String, String> userData = new HashMap<String, String>();

userData.put("amount", "100");
userData.put("message", "return funds");

JSONObject response = wallet.consume("users/wallets/cards/" + cardId + "/funds", HttpRequest.METHOD_DELETE, userData);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("amount", "100");
userData.Add("message", "return funds");

JObject response = wallet.Consume("users/wallets/cards/" + cardId + "/funds", "DELETE", userData);
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

userData = map[string]string{}
userData["amount"] = "100"
userData["message"] = "return funds")

_, response, _ = wallet.Consume("users/wallets/cards/" + cardID + "/funds", "DELETE", userData);
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('DELETE', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/funds', array(
    'amount' => 100,
    'message' => 'return funds'
));
var_dump($response);

A. Deduct.

Try it yourself: Development | Production

When accessed as a Public Resource, the amount will be debited from the user’s card depending on the hash_id or PAN provided. For the single card configuration, the amount will be debited from the card instead.

Any amount debited through this resource will be on pending validation. Confirmation must be made to clear the transaction through DELETE /oauth/consumer/funds.

Parameter Required Description
amount yes Transfer amount.
message no Message.
to_wallet no Flag to trigger fund transfer to the wallet using public resource.

B. Transfer Funds to Wallet.

Try it yourself: Development | Production

When accessed using Oauth, this API will transfer credits from the card back to the wallet.

This resource responds with:

  • string: id – Transaction identifier
  • array: recipient – Recipient
    • string: type – Recipient card type
    • string: id – Recipient card identifier
  • string: status – Status of the transaction
  • float: amount – Amount to transfer
  • string: currency – Currency of the amount
  • array: fee – Amount and currency of transfer fee
  • array: date – Transfer dates
    • date: createdISO 8601 Date when transaction was created
    • date: expiryISO 8601 Transaction’s expiration date
Parameter Required Max Length Description
amount yes 11 Transfer amount
message no 64 Message
fund_category_name no 64 Fund category name GET /users/wallets/cards/funds/categories

Users/Wallets/Cards/Transactions

The Virtual Card’s detailed transaction history records allows users to be able to check on their past transactions any time.

GET /users/wallets/cards/{card.id}/transactions[/{page}]

[permalink]

Retrieves the transaction history of the User’s Virtual Card, with records not older than 90 days.

Each page may contain up to 5 transactions.

Try it yourself: Development | Production

Name Required Description
card.id yes Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards
page no the one-based page number (maximum value of 99) to be displayed.

Example of accessing the resource publicly :

vcard.phar -u me@email.com -p $3CuR3 GET users/{user_id}/wallets/cards/{card.id}/transactions
Wallet.connect();
Wallet.consume('users/{user_id}/wallets/cards/{card.id}/transactions')
  .done(function (data) {console.log(data)});
JSONObject cardTokens = wallet.consume("users/{user_id}/wallets/cards/{card.id}/transactions");
System.out.println(cardTokens);
JObject cardTokens = wallet.Consume("users/{user_id}/wallets/cards/{card.id}/transactions");
Console.WriteLine(cardTokens.ToString());
_, cardTokens, _ := wallet.Consume("users/{user_id}/wallets/cards/{card.id}/transactions", "GET", nil)
fmt.Println(cardTokens)
<?php
$response = $wallet->consume('GET', 'users/{user_id}/wallets/cards/{card.id}/transactions');
var_dump($response);

Example of fetching the transaction history of the first card :

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/cards/$CARD_ID/transactions
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id + '/transactions', 'GET')
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
JSONObject cardTokens = wallet.consume("users/wallets/cards/" + cardId + "/transactions");
System.out.println(cardTokens);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
JObject cardTokens = wallet.Consume("users/wallets/cards/" + cardId + "/transactions");
Console.WriteLine(cardTokens.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

_, cardTokens, _ := wallet.Consume("users/wallets/cards/" + cardID + "/transactions", "GET", nil)
fmt.Println(cardTokens)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('GET', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/transactions');
var_dump($response);

This resource responds with:

  • array: transactions – Card transaction list
    • string: id – Reference ID
    • string: type – Transaction type
    • string: amount – Amount involved in the transaction
    • string: balance – Card current balance based on the transaction
    • string: currencyISO-4217 Currency
    • string: status – Wallet transaction status
    • string: description – Wallet transaction description
    • status: indicatordebit or credit
    • status: dateISO 8601 Transaction date
    • array: details – Details about the transaction
Parameter Required Max Length Description
limit no 2 Number of transactions return per page (Default 5).
type no 9 Filter transactions according to transaction types. Values can be: [debit, credit]. Only works for in house balance products.
date_range no 21 Limit transactions based on date range. Example: date_range=20141220,20150131. Only works for in house balance products.
sort no 24 Comma delimited sorting of the result according to amount, date.added and date.expiry. Example: sort=-date.added,+amount. Only works for in house balance products.

Users/Wallets/Cards/Transactions/Settlement

The Virtual Card’s detailed transaction history records allows users to be able to check on their past transactions any time.

PUT /users/wallets/cards/transactions/settlement

[permalink]

Receive a content-type text/csv request containing a list of transactions to be settled.

Upload a document:

vcard.phar -u me@email.com -p $3CuR3 PUT users/wallets/cards/transactions/settlement \
"data=`cat /path/to/trasactions.csv | base64`"
Wallet.connect();
Wallet.consume('users/wallets/cards/transactions/settlement', 'PUT', {'data': 'base64/of/transactions.csv'})
    .done(function (data) {
         console.log(data);
    });
wallet.authenticate("me@email.com", "$3CuR3");
Map<String, String> userData = new HashMap<String, String>();
userData.put("data", new String(Base64.encode(String.valueOf(stringBuffer).getBytes())).trim());
JSONObject response = wallet.consume("users/wallets/cards/transactions/settlement", HttpRequest.METHOD_PUT, userData);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");

string path = @"/path/to/transactions.csv";
string csv = File.ReadAllText(path);
var csvBytes = System.Text.Encoding.UTF8.GetBytes(csv);

userData.Add("data", System.Convert.ToBase64String(csvBytes));

JObject response = wallet.Consume("users/wallets/cards/transactions/settlement", "PUT", userData);
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")

csv, err := ioutil.ReadFile("/path/to/transactions.csv")
if err != nil {
    log.Fatal(err)
}
data := string(csv)

base64Text := make([]byte, base64.StdEncoding.EncodedLen(len(data)))
base64.StdEncoding.Encode(base64Text, []byte(data))

userData = map[string]string{}
userData["data"] = string(base64Text)

_, response, _ = wallet.Consume("users/wallets/cards/transactions/settlement", "PUT", userData);
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('PUT', 'users/wallets/cards/transactions/settlement', array(
    'data' => base64_encode(file_get_contents('/path/to/transactions.csv'))
));
var_dump($response);

This resource responds with:

  • string: id – Transaction reference identifier
  • string: status – [success | failed]
  • string: reason – Transaction reason for success or failure
  • string: adjusted – [true | false]
  • string: date_processedISO 8601 Date when transaction was settled
Parameter Required Max Length Description
data yes 8000000 base64 of a text/csv file content.

Users/Wallets/Cards/Pins

Each Virtual Card tied to a Virtual Wallet.

Encryption

For details of the encryption, contact: Support or your Account Manager.

POST /users/wallets/cards/{card.id}/pins

[permalink]

Set the Card ATM PIN for the logged in user.

Try it yourself: Development | Production

Name Description
card.id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of setting the ATM PIN:

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
# encrypted pin block for 1234
vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/cards/$CARD_ID/pins "pinblock=1D51A078AC3F7081"
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      // encrypted pin block for 1234
      Wallet.consume('users/wallets/cards/' + data[0].id + '/pins', 'POST', {
          "pinblock": "1D51A078AC3F7081"
      })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");

JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");

Map<String, String> userData = new HashMap<String, String>();
// encrypted pin block for 1234
userData.put("pinblock", "1D51A078AC3F7081");

JSONObject transaction = wallet.consume("users/wallets/cards/" + cardId + "/pins", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");

JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();

IDictionary<string, string> userData = new Dictionary<string, string> ();
// encrypted pin block for 1234
userData.Add("pinblock", "1D51A078AC3F7081");

JObject transaction = wallet.Consume("users/wallets/cards/" + cardId + "/pins", "POST", userData);
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

userData := map[string]string{}
// encrypted pin block for 1234
userData["pinblock"] = "1D51A078AC3F7081"

_, transaction, _ = wallet.Consume("users/wallets/cards/" + cardID + "/pins", "POST", userData)
fmt.Println(transaction)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
// encrypted pin block for 1234
$response = $wallet->consume('POST', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/pins', array(
  'pinblock' => '1D51A078AC3F7081'
));
var_dump($response);

This resource responds with:

  • string: status – [success]
Parameter Required Max Length Description
pinblock yes 16 Encrypted upper-cased ISO-9564 Format 0 PIN block.

PUT /users/wallets/cards/{card.id}/pins

[permalink]

Verify the Card ATM PIN for the logged in user.

Try it yourself: Development | Production

Name Description
card.id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of verifying the ATM PIN:

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
# encrypted pin block for 1234
vcard.phar -u me@email.com -p $3CuR3 PUT users/wallets/cards/$CARD_ID/pins "pinblock=1D51A078AC3F7081"
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      // encrypted pin block for 1234
      Wallet.consume('users/wallets/cards/' + data[0].id + '/pins', 'PUT', {
          "pinblock": "1D51A078AC3F7081"
      })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");

JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");

Map<String, String> userData = new HashMap<String, String>();
// encrypted pin block for 1234
userData.put("pinblock", "1D51A078AC3F7081");

JSONObject transaction = wallet.consume("users/wallets/cards/" + cardId + "/pins", HttpRequest.METHOD_PUT, userData);
System.out.println(transaction);
wallet.Authenticate("me@email.com", "$3CuR3");

JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();

IDictionary<string, string> userData = new Dictionary<string, string> ();
// encrypted pin block for 1234
userData.Add("pinblock", "1D51A078AC3F7081");

JObject transaction = wallet.Consume("users/wallets/cards/" + cardId + "/pins", "PUT", userData);
Console.WriteLine(transaction.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

userData := map[string]string{}
// encrypted pin block for 1234
userData["pinblock"] = "1D51A078AC3F7081"

_, transaction, _ = wallet.Consume("users/wallets/cards/" + cardID + "/pins", "PUT", userData)
fmt.Println(transaction)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
// encrypted pin block for 1234
$response = $wallet->consume('PUT', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/pins', array(
  'pinblock' => '1D51A078AC3F7081'
));
var_dump($response);

This resource responds with:

  • string: status – [success]
Parameter Required Max Length Description
pinblock yes 16 encrypted upper-cased ISO-9564 Format 0 PIN block.

Users/Wallets/Cards/Pins/Reset

GET /users/wallets/cards/{card.id}/pins/reset

[permalink]

Request a pin reset for the card.

Try it yourself: Development | Production

Name Description
card.id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of requesting the PIN RESET:

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/cards/$CARD_ID/pins/reset "mode=M"
Wallet.connect();

Wallet.consume('users/wallets/cards/' + card_id + '/pins/reset', 'GET', {
      "mode": "M"
  })
  .done(function (data) {
      console.log(data);
  });
JSONObject transaction = wallet.consume("users/wallets/cards/" + cardId + "/pins/reset", HttpRequest.METHOD_GET, userData);
System.out.println(transaction);
JObject transaction = wallet.Consume("users/wallets/cards/" + cardId + "/pins/reset", "GET", userData);
Console.WriteLine(transaction.ToString());
_, response, _ := wallet.Consume("users/wallets/cards/" + cardID + "/pins/reset", "GET", userData)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/wallets/cards/' . $card_id . '/pins/reset', array(
  'mode' => 'M'
));
var_dump($response);

This resource responds with:

  • string: status – [success]
Parameter Required Max Length Description
mode yes 1 Pin reset mode ’M’ for Email and ’S’ for SMS

Users/Wallets/Cards/Types

GET /users/wallets/cards/types[/{code}]

[permalink]

Lists all cards offered by the product. To specify which card type to be retrieved, attach the to the resource code.

Try it yourself: Development | Production

Name Description
code Card type code. Filters the result to the detail of the specified card type.

Example of creating a card with the first card type:

vcard.phar GET users/wallets/cards/types
Wallet.consume('users/wallets/cards/types')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("users/wallets/cards/types");
System.out.println(response);
JObject response = wallet.Consume("users/wallets/cards/types");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("users/wallets/cards/types", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'users/wallets/cards/types');
var_dump($response);

This resource responds with:

  • string: code – Card type code
  • string: name – Name of the card type
  • string: description – Description of the card type
  • array: token – Security tokens
    • string: type – Security code type
  • array: image – Card Image
    • string: small – Small card image with dimension(46 pixels x 30 pixels)
    • string: medium – Medium card image with dimension(185 pixels x 120 pixels)
    • string: large – Large card image with dimension(400 pixels x 260 pixels)
  • string: details – Product configuration. WARNING: This data changes structure without notice and is not advised to be a static reference.
    • array: fees – Fee details
    • array: topup_limits – Topup limits information
      • array: pre_kyc – Pre KYC topup limits
      • array: post_kyc – Post KYC topup limits

Users/Wallets/Cards/Securities/Tokens

The dynamic unique security code of the Virtual Card helps to ensure secure online transactions and reduces risk of online fraud.

GET /users/wallets/cards/{card.id}/securities/tokens

[permalink]

Generates a unique security code (CVV, CSC or 4CSC) for usage authorization of a specific card. To specify which card to retrieve, append the id of the card fetched from GET /users/wallets or GET /users/wallets/cards.

Try it yourself: Development | Production

Name Description
card.id Card identifier which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of fetching the security code of the first card :

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/cards/$CARD_ID/securities/tokens
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id + '/securities/tokens', 'GET')
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
JSONObject cardTokens = wallet.consume("users/wallets/cards/" + cardId + "/securities/tokens");
System.out.println(cardTokens);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
JObject cardTokens = wallet.Consume("users/wallets/cards/" + cardId + "/securities/tokens");
Console.WriteLine(cardTokens.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

_, cardTokens, _ = wallet.Consume("users/wallets/cards/" + cardID + "/securities/tokens", "GET", nil)
fmt.Println(cardTokens)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('GET', 'users/wallets/cards/' . $userWallet['cards'][0]['id'] . '/securities/tokens');
var_dump($response);

This resource responds with:

  • string: value – Secure passcode
  • date: expiryISO 8601 Secure passcode’s Expiration date

Users/Wallets/Cards

Each Virtual Card tied to a Virtual Wallet.

Categories DEFAULT Structure

Data Type Name Description
array available Available funds for the DEFAULT category
string available.currency Available fund ISO 4217 currency code for the DEFAULT category.
int available.amount Available fund monetary value for the DEFAULT category.
array withholding Withholding funds information for the DEFAULT category
string withholding.currency Withholding fund ISO 4217 currency code for the DEFAULT category.
int withholding.amount Withholding fund monetary value for the DEFAULT category.

GET /users/wallets/cards[/{id}]

[permalink]

Retrieve user’s card details and information by appending the id of the card fetched from GET /users/wallets.

Try it yourself: Development | Production

Name Description
user_id A user’s long ID, which is intended only for API Consumers with an Administrative Scope’
id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards

Example of reading the first card of the wallet:

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 GET users/wallets/cards/$CARD_ID
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id, 'GET')
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
JSONObject cardTokens = wallet.consume("users/wallets/cards/" + cardId);
System.out.println(cardTokens);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
JObject cardTokens = wallet.Consume("users/wallets/cards/" + cardId);
Console.WriteLine(cardTokens.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)
data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

_, cardTokens, _ := wallet.Consume("users/wallets/cards/" + cardID, "GET", nil);
fmt.Println(cardTokens)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('GET', 'users/wallets/cards/' . $userWallet['cards'][0]['id']);
var_dump($response);

This resource responds with:

  • string: id – Card identifier
  • string: number – Account identification number
  • array: holder – Holder information
    • string: name – Holder name
  • array: funds – Fund information
    • array: withholding – Withholding funds information
      • string: currency – Withholding fund currency in [ISO 4217] format (http://www.iso.org/iso/currency_codes)
      • int: amount – Withholding fund monetary value
    • array: available – Available funds
      • string: currency – Available fund ISO 4217 currency code.
      • int: amount – Available fund monetary value.
    • array: categories – Fund category balance information GET /users/wallets/cards/funds/categories
      • array: DEFAULT – Fund category for the DEFAULT category. DEFAULT is the category name and this can change depending on the defined category name. DEFAULT category structure
  • array: type – Type or Network
    • string: code – Type code
    • string: name – Network name
    • string: description – Network description
  • array: date – Date information
    • date: issuedISO 8601 Issued date
    • date: expiryISO 8601 Expiration date
  • array: image – Images
    • string: small – Small image with dimension(46 pixels x 30 pixels)
    • string: medium – Medium image with dimension(185 pixels x 120 pixels)
    • string: large – Large image with dimension(400 pixels x 260 pixels)
  • array: status – Status information
    • boolean: is_active – Status if it is active
    • string: text – Status in plain text
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information
  • array: contactless – Card contactless information. Optional may not
    • array: hce – Card contactless hce information
      • array: customer – Card contactless customer information
        • string: key – Customer key used for the hce enrollment
        • string: secret – Customer secret used for the hce enrollment
      • array: access – Card contactless access information
        • string: key – Access key used for the hce enrollment
        • string: secret – Access secret used for the hce enrollment

POST /users/wallets/cards/{card_type.code}

[permalink]

Create or Register a Card for the logged-in user. To reactivate a suspended card, send its id along with the request. Note that this resource handles all cards, whether physical or virtual.

Try it yourself: Development | Production

Name Description
card_type.code Type of card to be created which can be obtained by using GET /users/wallets/cards/types

Example of creating a card with the first card type:

CARD_TYPE=`vcard.phar GET users/wallets/cards/types | jsawk 'return this.types[0].code'`
vcard.phar -u me@email.com -p $3CuR3 POST users/wallets/cards/$CARD_TYPE
Wallet.consume('users/wallets/cards/types')
  .done(function(data) {
      Wallet.connect();
      Wallet.consume('users/wallets/cards/' + types[0].code, 'POST')
        .done(function (data) {
            console.log(data);
        });
});
JSONObject cardTypes = wallet.consume("users/wallets/cards/types");
wallet.authenticate("me@email.com", "$3CuR3");
String cardType = userWallet.getJSONObject("types").getJSONObject(0).getString("code");
JSONObject response = wallet.consume("users/wallets/cards/" + cardType, HttpRequest.METHOD_POST);
System.out.println(response);
JObject cardTypes = wallet.Consume("users/wallets/cards/types");
wallet.Authenticate("me@email.com", "$3CuR3");
string cardType = userWallet.GetValue("types")[0]["code"].ToString();
JObject response = wallet.Consume("users/wallets/cards/" + cardType, "POST");
Console.WriteLine(response.ToString());
_, cardTypes, _ := wallet.Consume("users/wallets/cards/types", "GET", nil)
wallet.Authenticate("me@email.com", "$3CuR3")
data := map[string]interface{}{}
json.Unmarshal([]byte(cardTypes), &data)
cardType := data["types"].([]interface{})[0].(map[string]interface{})["code"]

_, response, _ := wallet.Consume("users/wallets/cards/" + cardType, "POST", nil)
fmt.Println(response)
<?php
$cardTypes = $wallet->consume('GET', 'users/wallets/cards/types');
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('POST', 'users/wallets/cards/' . $cardTypes['types'][0]['code']);
var_dump($response);

This resource responds with:

  • string: id – Card identifier
  • string: number – Account identification number
  • array: holder – Holder information
    • string: name – Holder name
  • array: funds – Fund information
    • array: available – Available funds
      • string: currency – Available fund currency in [ISO 4217] format (http://www.iso.org/iso/currency_codes) currency code.
      • int: amount – Available fund monetary value
    • array: withholding – Withholding funds information
      • string: currency – Withholding fund currency in [ISO 4217] format (http://www.iso.org/iso/currency_codes)
      • int: amount – Withholding fund monetary value
    • array: categories – Fund category balance information GET /users/wallets/cards/funds/categories
      • array: DEFAULT – Fund category for the DEFAULT category. DEFAULT is the category name and this can change depending on the defined category name. DEFAULT category structure
  • array: type – Type or Network
    • int: name – Network name
    • int: description – Network description
  • array: date – Date information
    • date: issuedISO 8601 Issued date
    • date: expiryISO 8601 Expiration date
  • array: image – Images
    • string: small – Small image with dimension(46 pixels x 30 pixels)
    • string: medium – Medium image with dimension(185 pixels x 120 pixels)
    • string: large – Large image with dimension(400 pixels x 260 pixels)
  • array: status – Status information
    • boolean: is_active – Status if it is active
    • string: text – Status in plain text
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information
  • string: activation_code – Activation code (optional)
Parameter Required Max Length Description
assoc_number no 0 Physical Card Proxy Number [format: PY + Proxy Number (eg. 'PY000000000123’)] or Account identification number. When present, this will bind the card to the current user.
id no 32 Card unique identifier. When present, this will unblock the card associated with this parameter.

PUT /users/wallets/cards/{id}

[permalink]

Activate a physical card for the logged-in user.

Try it yourself: Development | Production

Name Description
id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards
CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 PUT users/wallets/cards/$CARD_ID "activation_code=123456"
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id, 'PUT',
      {
          "activation_code": "123456"
      })
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
Map<String, String> userData = new HashMap<String, String>();
userData.put("activation_code", "123456");
JSONObject cardTokens = wallet.consume("users/wallets/cards/" + cardId, HttpRequest.METHOD_PUT, userData);
System.out.println(cardTokens);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("activation_code", "123456");
JObject cardTokens = wallet.Consume("users/wallets/cards/" + cardId, "PUT", userData);
Console.WriteLine(cardTokens.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)

data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

userData = map[string]string{}
userData["activation_code"] = "123456"
_, cardTokens, _ := wallet.Consume("users/wallets/cards/" + cardID, "PUT", userData)
fmt.Println(cardTokens)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('PUT', 'users/wallets/cards/' . $userWallet['cards'][0]['id'], array(
  'activation_code' => '123456'
));
var_dump($response);

This resource responds with:

  • string: status – [success]
Parameter Required Max Length Description
activation_code yes 0 Card activation code obtained from POST /users/wallets/cards/{card_type.code} by passing assoc_number

DELETE /users/wallets/cards/{id}

[permalink]

This resource can be used to either permanently terminate or temporarily suspend any card that belongs to the logged-in user.

To terminate a card, include a value for the parameter called type and send it along with your request. If type is not sent, the card is suspended instead. Suspended cards may still be reactivated using POST /users/wallets/cards.

Try it yourself: Development | Production

Name Description
id Cards id which can be obtained using GET /users/wallets or GET /users/wallets/cards
CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users/wallets | jsawk 'return this.cards[0].id'`
vcard.phar -u me@email.com -p $3CuR3 DELETE users/wallets/cards/$CARD_ID
Wallet.connect();

Wallet.consume('users/wallets', 'GET')
  .done(function (data) {
      Wallet.consume('users/wallets/cards/' + data[0].id, 'DELETE')
        .done(function (data) {
            console.log(data);
        });
  });
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject userWallet = wallet.consume("users/wallets");
String cardId = userWallet.getJSONObject("cards").getJSONObject(0).getString("id");
JSONObject cardTokens = wallet.consume("users/wallets/cards/" + cardId, HttpRequest.METHOD_DELETE, userData);
System.out.println(cardTokens);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject userWallet = wallet.Consume("users/wallets");
string cardId = userWallet.GetValue("cards")[0]["id"].ToString();
JObject cardTokens = wallet.Consume("users/wallets/cards/" "DELETE", userData);
Console.WriteLine(cardTokens.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, userWallet, _ := wallet.Consume("users/wallets", "GET", nil)

data := map[string]interface{}{}
json.Unmarshal([]byte(userWallet), &data)
cardID := data["cards"].([]interface{})[0].(map[string]interface{})["id"]

_, cardTokens, _ := wallet.Consume("users/wallets/cards/" + cardID, "DELETE", nil)
fmt.Println(cardTokens)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$userWallet = $wallet->consume('GET', 'users/wallets');
$response = $wallet->consume('DELETE', 'users/wallets/cards/' . $userWallet['cards'][0]['id'], array());
var_dump($response);

This resource responds with:

  • string: id – Card identifier
  • string: number – Account identification number
  • string: status – Status
Parameter Required Max Length Description
type no 0 Values can be: lost, stolen and damaged. Note: These values will permanently block the card.

Users/Wallets

User’s Wallet

GET /users/wallets

[permalink]

Retrieve user’s wallet details and information.

Try it yourself: Development | Production

Example, to retrieve the user’s wallet:

vcard.phar -u me@email.com -p $3CuR3 GET users/wallets
Wallet.connect();
Wallet.consume('users/wallets')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets");
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, user, _ := wallet.Consume("users/wallets", "GET", nil)
fmt.Println(user)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('GET', 'users/wallets');
var_dump($response);

This resource responds with:

  • string: id – Wallet identifier
  • string: number – Account identification number
  • array: holder – Holder information
    • string: name – Holder name
  • array: funds – Fund information
    • array: withholding – Withholding funds information
      • string: currency – Withholding fund ISO 4217 currency code.
      • int: amount – Withholding fund monetary value
    • array: available – Available funds
      • string: currency – Available fund currency. Currency codes - ISO 4217
      • int: amount – Available fund monetary value
  • array: date – Date information
    • date: issuedISO 8601 Wallet issued date
    • date: expiryISO 8601 Wallet expiration date
  • array: image – Images
    • string: small – Small image with dimension(46 pixels x 30 pixels)
    • string: medium – Medium image with dimension(185 pixels x 120 pixels)
    • string: large – Large image with dimension(400 pixels x 260 pixels)
  • array: status – Status information
    • boolean: is_active – Status if it is active
    • string: text – Status in plain text
  • string: details – Product configuration. This data changes structure without notice and is not advised to be a static reference.
    • array: fees – Fee details
    • array: topup_limits – Topup limits information
      • array: pre_kyc – Pre KYC topup limits
      • array: post_kyc – Post KYC topup limits
      • array: current – Current topup limits
  • array: cards – List of cards related to this wallet
    • string: id – Card unique identifier
    • array: date – Card date information
      • date: issuedISO 8601 Issued date
      • date: expiryISO 8601 Expiration date
    • array: links – Additional information
      • string: rel – Card Resource
      • string: href – Card Resource link
      • string: method – Method to use to get the resources information
    • array: status – Card status information
      • boolean: is_active – Card status
      • string: text – Card status in plain text

POST /users/wallets

[permalink]

Create or Register a Virtual Wallet for the logged in user.

Try it yourself: Development | Production

Example, to retrieve the user’s wallet:

vcard.phar -u me@email.com -p $3CuR3 POST users/wallets
Wallet.connect();
Wallet.consume('users/wallets', 'POST')
  .done(function (data) {console.log(data)});
wallet.authenticate("me@email.com", "$3CuR3");
JSONObject response = wallet.consume("users/wallets", HttpRequest.METHOD_POST);
System.out.println(response);
wallet.Authenticate("me@email.com", "$3CuR3");
JObject response = wallet.Consume("users/wallets", "POST");
Console.WriteLine(response.ToString());
wallet.Authenticate("me@email.com", "$3CuR3")
_, response, _ := wallet.Consume("users/wallets", "POST", nil)
fmt.Println(response)
<?php
$wallet->authenticate('me@email.com', '$3CuR3');
$response = $wallet->consume('POST', 'users/wallets');
var_dump($response);

This resource responds with:

  • string: id – Wallet identifier
  • string: number – Account identification number
  • array: holder – Holder information
    • string: name – Holder name
  • array: funds – Fund information
    • array: withholding – Withholding funds information
      • string: currency – Withholding fund ISO 4217 currency code.
      • int: amount – Withholding fund monetary value
    • array: available – Available funds
      • string: currency – Available fund currency. Currency codes - ISO 4217
      • int: amount – Available fund monetary value
  • array: date – Date information
    • date: issuedISO 8601 Wallet issued date
    • date: expiryISO 8601 Wallet expiration date
  • array: image – Images
    • string: small – Small image with dimension(46 pixels x 30 pixels)
    • string: medium – Medium image with dimension(185 pixels x 120 pixels)
    • string: large – Large image with dimension(400 pixels x 260 pixels)
  • array: status – Status information
    • boolean: is_active – Status if it is active
    • string: text – Status in plain text
  • array: cards – List of cards related to this wallet
    • string: id – Card unique identifier
    • array: date – Card date information
      • date: issuedISO 8601 Issued date
      • date: expiryISO 8601 Expiration date
    • array: links – Additional information
      • string: rel – Card Resource
      • string: href – Card Resource link
      • string: method – Method to use to get the resources information
    • array: status – Card status information
      • boolean: is_active – Card status
      • string: text – Card status in plain text
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information

Oauth/Password

Users can change password.

POST /oauth/password

[permalink]

Update user’s password

vcard.phar POST oauth/password \
"email=me@email.com&password=N3w$3cUr3"
Wallet.consume('oauth/password', 'POST', {
     "email": "me@email.com",
     "password": "N3w$3cUr3"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.post("email", "me@email.com");
userData.post("password", "N3w$3cUr3");

JSONObject response = wallet.consume("oauth/password", HttpRequest.METHOD_POST, userData);
System.out.println(response);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("email", "me@email.com");
userData.Add("password", "N3w$3cUr3");

JObject response = wallet.Consume("oauth/password", "POST", userData);
Console.WriteLine(response.ToString());
userData := map[string]string{}

userData["email"] = "me@email.com"
userData["password"] = "N3w$3cUr3"

_, response, _ := wallet.Consume("oauth/password", "POST", userData)
fmt.Println(response)
<?php
$response = $wallet->consume('POST', 'oauth/password', array(
     'email' => 'me@email.com',
     'password' => 'N3w$3cUr3'
));

var_dump($response);

This resource responds with:

  • string: status – Status of password change. Returns success as status or throws an error.
Parameter Required Max Length Description
email yes 50 Email address
password yes 32 New user password

Oauth/Request/Token

Authentication: Requesting for Request Token

POST /oauth/request/token

[permalink]

Returns request token that is required in accessing consumer resources and a is a prerequisite of POST /oauth/access/token.

This, together with POST /oauth/access/token, are bundle as authentication in the SDK:

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users
Wallet = new MatchMove.WalletRequest(
    'me@email.com',
    '$3CuR3',
    {
        // verbose: function () {return window;},
        server: 'https://beta-api.mmvpay.com/sg/v1',
        consumer: {
            key: 'APIKEY',
            secret: 'APISECRET'}
});
wallet.authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3")
<?php
$wallet->authenticate('me@email.com', '$3CuR3');

This resource responds with:

  • string: oauth_token – Request Token Key
  • string: oauth_token_secret – Request Token Secret
Parameter Required Max Length Description
oauth_consumer_key yes 32 Also referred to as API Key which identifies the application account that is used to connect to the API system.
oauth_nonce yes 32 Any random alphanumeric value that identifies the transaction being requested. This must be unique within five (5) minutes.
oauth_signature yes 50 Digital signature of the current request
oauth_signature_method yes 9 Method used to create the signature of the request in [Step 3d]. Currently, we only support HMAC-SHA1.
oauth_timestamp yes 11 Time when the request is being call in Unix Timestamp Format.
oauth_user_name yes 256 Encrypted user’s email
oauth_user_password yes 256 Encrypted password
oauth_version yes 3 Version of OAuth you are connecting to. Currently, we only support 1.0

Oauth/Consumer

Get Consumer Details.

GET oauth/consumer

[permalink]

Returns consumer details, whitelisted IPs, consumer access, floating balance GET /oauth/consumer.

Example of getting consumer data:

vcard.phar GET oauth/consumer
Wallet.consume('oauth/consumer')
  .done(function(data) {
      console.log(data);
});
JSONObject response = wallet.consume("oauth/consumer");
System.out.println(response);
JObject response = wallet.Consume("oauth/consumer");
Console.WriteLine(response.ToString());
_, response, _ := wallet.Consume("oauth/consumer", "GET", nil)
fmt.Println(response)
<?php
$response = $wallet->consume('GET', 'oauth/consumer');
var_dump($response);

This resource responds with:

  • string: name – Name of the consumer
  • string: products – Products of the consumer
  • string: scope – Access consumer has
  • string: status – Access status
  • string: remittance_floating_balance – Remittance Floating balance of the consumer
  • string: fund_floating_balance – Floating balance of the consumer
  • string: fund_debit_limit – Debit limit of the consumer
  • array: whitelisted_ip – IP addresses that are whitelisted by the consumer

PUT oauth/consumer[/{consumer_key}]

[permalink]

Updated consumer details and returns the new consumer details, whitelisted IPs, consumer access, floating balance PUT /oauth/consumer.

Name Description
consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.

Example of updating consumer data:

vcard.phar PUT /oauth/consumer \
"credit_limit=999&debit_limit=null"
Wallet.consume('/oauth/consumer', 'PUT', {
     "credit_limit": "999",
     "debit_limit": "null"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> customerData = new HashMap<String, String>();
customerData.put("credit_limit", "999");
customerData.put("debit_limit", "null");

JSONObject customerInfo = wallet.consume("/oauth/consumer", HttpRequest.METHOD_PUT, customerData);
System.out.println(customerInfo);
IDictionary<string, string> customerData = new Dictionary<string, string> ();
customerData.Add("credit_limit", "999");
customerData.Add("debit_limit", "null");

JObject customerInfo = wallet.Consume("/oauth/consumer", "PUT", customerData);
Console.WriteLine(customerInfo.ToString());
customerData := map[string]string{}
customerData["credit_limit"] = "999"
customerData["debit_limit"] = "999"

_, customerInfo, _ := wallet.Consume("oauth/consumer", "PUT", customerData)
fmt.Println(customerInfo)
<?php
$response = $wallet->consume('PUT', '/oauth/consumer', array(
    'credit_limit' => '999',
    'debit_limit' => 'null'
));

var_dump($response);

This resource responds with:

  • string: name – Name of the consumer
  • string: products – Products of the consumer
  • string: scope – Access consumer has
  • string: status – Access status
  • string: remittance_floating_balance – Remittance Floating balance of the consumer
  • string: fund_floating_balance – Floating balance of the consumer
  • string: fund_debit_limit – Debit limit of the consumer
  • array: whitelisted_ip – IP addresses that are whitelisted by the consumer
Parameter Required Max Length Description
status no 10 Status of the consumer
reason no 100 Reason why the status is being updated
remittance_limit no 9 Maximum allowable amount that can be used for remittance by the consumer
credit_limit no 9 Allowable amount before topup requires confirmation
debit_limit no 9 Maximum allowable amount that can be deducted by the consumer
details no 256 JSON encoded text string

Oauth/Consumer/Funds/Transfers/Overseas

Remittance Confirmation

GET /oauth/consumer/funds/transfers/overseas[/{limit}][/{offset}]

[permalink]

Get overseas transfer transaction(s)

Name Description
limit Number of the records to be displayed.
offset Starting point for the records that was returned.

Example:

vcard.phar GET oauth/consumer/funds/transfers/overseas "ids=xxxxx"
Wallet.consume('oauth/consumer/funds/transfers/overseas', 'GET',
{
    "ids": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds/transfers/overseas", HttpRequest.METHOD_GET, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds/transfers/overseas", "GET", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds/transfers/overseas", "GET", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('GET', 'oauth/consumer/funds/transfers/overseas', array(
    'ids' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
    • string: ref_id – Overseas transfer reference ID
    • string: type – Overseas transfer type
    • string: status_code – Overseas transfer status code
    • string: status_text – Overseas transfer status text
    • string: date – Overseas transfer date ISO 8601
    • array: details – Overseas transfer details
Parameter Required Max Length Description
ids yes 255 Reference identifiers for the overseas transfer transaction(s). Mutiple identifiers in CSV format are accepted.

POST /oauth/consumer/funds/transfers/overseas

[permalink]

Overseas Transfers Flow Step 4.

Confirm an overseas transfer transaction(s) from [Step 3].

vcard.phar POST oauth/consumer/funds/transfers/overseas "ids=xxxxx"
Wallet.consume('oauth/consumer/funds/transfers/overseas', 'POST',
{
    "ids": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds/transfers/overseas", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds/transfers/overseas", "POST", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds/transfers/overseas", "POST", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('POST', 'oauth/consumer/funds/transfers/overseas', array(
    'ids' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
    • string: id – Reference ID of the transaction that was confirmed.
    • string: status – Status of the confirmation.
    • string: description – Describes the result of the confirmation.
    • array: details – Show the details about the transaction.
      • string: unique_reference_number – Reference number given by the remittance provider.
      • string: transaction_code – Transaction code needed by the user to claim the remittance.
      • string: partner_confirmation_number – Partner confirmation number needed by the user to claim the remittance (optional).
Parameter Required Max Length Description
ids yes 255 Reference identifiers for the overseas transfer transaction(s). Mutiple identifiers in CSV format are accepted.

Oauth/Consumer/Funds/Transfers/Overseas/Rates

Get Remittance Rates

GET /oauth/consumer/funds/transfers/overseas/rates

[permalink]

Calculate overseas transfer transaction rates

vcard.phar GET oauth/consumer/funds/transfers/overseas/rates \
"amount=10&provider="
Wallet.consume('oauth/consumer/funds/transfers/overseas/rates', 'GET',
{
    "amount": "10",
    "provider": "",
    "provider_comission": "",
    "channel": "",
    "currency": "",
    "rate": ""
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("amount", "10");
userData.put("provider", "");
userData.put("provider_comission", "");
userData.put("channel", "");
userData.put("currency", "");
userData.put("rate", "");

JSONObject transaction = wallet.consume("oauth/consumer/funds/transfers/overseas/rates", HttpRequest.METHOD_GET, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("amount", "10");
userData.Add("provider", "");
userData.Add("provider_comission", "");
userData.Add("channel", "");
userData.Add("currency", "");
userData.Add("rate", "");

JObject transaction = wallet.Consume("oauth/consumer/funds/transfers/overseas/rates", "GET", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["amount"] = "10"
userData["provider"] = ""
userData["provider_comission"] = ""
userData["channel"] = ""
userData["currency"] = ""
userData["rate"] = ""

_, transaction, _ := wallet.Consume("oauth/consumer/funds/transfers/overseas/rates", "GET", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('GET', 'oauth/consumer/funds/transfers/overseas/rates', array(
    'amount' => '10',
    'provider' => '',
    'provider_comission' => '',
    'channel' => '',
    'currency' => '',
    'rate' => ''
));
var_dump($response);

This resource responds with:

  • array: rates – Remittance rates
  • float: amount – Amount
  • float: computed_amount – Amount
  • array: channel_rate – Amount
  • array: forex_rate – Amount
  • float: provider_fee – Amount
Parameter Required Max Length Description
amount yes 255 Amount
provider yes 255 Provider
provider_comission yes 255 Provider commision
channel yes 255 Channel
currency yes 3 Currency
rate yes 11 Rate
forex_to_receiving_currency no 11 Conversion from forex to recieving currency
country_code no 11 Country code

Oauth/Consumer/Funds/Transfers/Overseas/Fees/Default

Remittance Fees Confirmation

PUT /oauth/consumer/funds/transfers/overseas/fees/default

[permalink]

Confirm an overseas transfer pricings record

Example of confirming overseas provider pricings record :

vcard.phar PUT oauth/consumer/funds/transfers/overseas/fees/default "ids=xxxxx"
Wallet.consume('oauth/consumer/funds/transfers/overseas/fees/default', 'PUT',
{
    "ids": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds/transfers/overseas/fees/default", HttpRequest.METHOD_PUT, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds/transfers/overseas/fees/default", "PUT", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds/transfers/overseas/fees/default", "PUT", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('PUT', 'oauth/consumer/funds/transfers/overseas/fees/default', array(
    'ids' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
    • string: id – Reference ID of the overseas transfer pricing record that was confirmed.
    • string: status – Status of the confirmation.
    • string: description – Describes the result of the confirmation.
Parameter Required Max Length Description
ids yes 255 Reference IDs for the overseas transfer pricing record(s). Mutiple identifiers in CSV format are accepted.

Oauth/Consumer/Funds

Topup and Deduct Confirmation

GET /oauth/consumer/funds

[permalink]

Retrieve top up transaction/s given its ref_id and an optional payment_ref parameter

vcard.phar GET oauth/consumer/funds "ids=xxxxx&payment_ref=xxxxx"
Wallet.consume('oauth/consumer/funds', 'GET',
{
    "ids": "xxxxx"
    "payment_ref": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");
userData.put("payment_ref", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds", HttpRequest.METHOD_GET, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");
userData.Add("payment_ref", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds", "GET", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"
userData["payment_ref"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds", "GET", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('GET', 'oauth/consumer/funds', array(
    'ids' => 'xxxxx',
    'payment_ref' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
  • string: ref_id – Reference ID of the transaction that was confirmed.
  • string: status – Status of the confirmation.
  • string: payment_ref – Payment transaction identifier. (if available)
Parameter Required Max Length Description
ids yes 255 Reference identifiers for the top up transaction(s). Mutiple identifiers in CSV format are accepted.
payment_ref no 255 Payment transaction identifier

POST /oauth/consumer/funds

[permalink]

Confirm a top up transaction given its ref_id

vcard.phar POST oauth/consumer/funds "ids=xxxxx"
Wallet.consume('oauth/consumer/funds', 'POST',
{
    "ids": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds", HttpRequest.METHOD_POST, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds", "POST", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds", "POST", userData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('POST', 'oauth/consumer/funds', array(
    'ids' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
  • string: ref_id – Reference ID of the transaction that was confirmed.
  • string: status – Status of the confirmation.
  • string: description – Describes the result of the confirmation.
Parameter Required Max Length Description
ids yes 255 Reference identifiers for the top up transaction(s). Mutiple identifiers in CSV format are accepted.

DELETE /oauth/consumer/funds

[permalink]

Confirm a deduct / debit transaction given its ref_id

vcard.phar DELETE oauth/consumer/funds "ids=xxxxx"
Wallet.consume('oauth/consumer/funds', 'DELETE',
{
    "ids": "xxxxx"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> userData = new HashMap<String, String>();
userData.put("ids", "xxxxx");

JSONObject transaction = wallet.consume("oauth/consumer/funds", HttpRequest.METHOD_DELETE, userData);
System.out.println(transaction);
IDictionary<string, string> userData = new Dictionary<string, string> ();
userData.Add("ids", "xxxxx");

JObject transaction = wallet.Consume("oauth/consumer/funds", "DELETE", userData);
Console.WriteLine(transaction.ToString());
userData := map[string]string{}
userData["ids"] = "xxxxx"

_, transaction, _ := wallet.Consume("oauth/consumer/funds", "DELETE", userData);
fmt.Println(transaction);
<?php
$response = $wallet->consume('DELETE', 'oauth/consumer/funds', array(
    'ids' => 'xxxxx'
));
var_dump($response);

This resource responds with:

  • array: transactions – Transaction data
  • string: ref_id – Reference ID of the transaction that was confirmed.
  • string: status – Status of the confirmation.
  • string: description – Describes the result of the confirmation.
Parameter Required Max Length Description
ids yes 255 Reference identifiers for the deduct / debit transaction(s). Mutiple identifiers in CSV format are accepted.

Oauth/Consumer/Transactions

The Virtual Card’s detailed transaction history records allows users to be able to check on their past transactions any time.

GET /oauth/consumer[/{consumer_key}]/transactions[/{page}]

[permalink]

Retrieves the transaction history for consumer fund floating balance and debit limit

Example usage:

vcard.phar GET oauth/consumer/transactions
Wallet.consume('oauth/consumer/transactions', 'GET')
    .done(function (data) {
        console.log(data);
    });
JSONObject transactions = wallet.consume("oauth/consumer/transactions", HttpRequest.METHOD_GET);
System.out.println(transactions);
JObject transactions = wallet.Consume("oauth/consumer/transactions", "GET");
Console.WriteLine(transactions.ToString());
_, transactions, _ := wallet.Consume("oauth/consumer/transactions", "GET", nil)
fmt.Println(transactions)
<?php
$response = $wallet->consume('GET', 'oauth/consumer/transactions');
var_dump($response);

This resource responds with:

  • array: transactions – Consumer credit transaction list
    • string: field – Transaction field
    • string: type – Transaction type
    • string: sub_type – Transaction sub type
    • string: details – Transaction details
    • string: amount – Transaction amount
    • string: old_remittance_floating_balance – Remittance floating balance before transaction
    • string: new_remittance_floating_balance – Remittance floating balance after transaction
    • string: old_fund_floating_balance – Fund floating balance before transaction
    • string: new_fund_floating_balance – Fund floating balance after transaction
    • string: old_fund_debit_limit – Fund debit limit before transaction
    • string: new_fund_debit_limit – Fund debit limit after transaction
    • string: transaction_ref_id – Transaction reference identifier
    • string: methodHTTP Methods
    • string: uriURI
    • string: date_addedISO 8601 Transaction date
Parameter Required Max Length Description
page no 11 Page number of the records to be displayed.
consumer_key no 40 Consumer key.
type no 40 Filter according to the type of transaction. Values can be: [debit, credit, or remittance]

Oauth/Consumer/Prefund

Consumer prefunding balance

GET /oauth/consumer/{consumer_key}/prefund/{type}

[permalink]

Retrieve consumer prefunding balance

Name Description
consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
type Values can be: [credit, debit, overseas]
vcard.phar GET oauth/consumer/$CONSUMER_KEY/prefund/credit "amount=10"
Wallet.consume('oauth/consumer/' + consumer_key + '/prefund/credit', 'GET',
{
    "amount": "10"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> requestData = new HashMap<String, String>();
requestData.put("amount", "10");

JSONObject transaction = wallet.consume("oauth/consumer/" + consumer_key + "/prefund/credit", HttpRequest.METHOD_GET, requestData);
System.out.println(transaction);
IDictionary<string, string> requestData = new Dictionary<string, string> ();
requestData.Add("amount", "10");

JObject transaction = wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "GET", requestData);
Console.WriteLine(transaction.ToString());
requestData := map[string]string{}
requestData["amount"] = "10"

_, transaction, _ := wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "GET", requestData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('GET', 'oauth/consumer/' . $consumer_key . '/prefund/credit', array(
    'amount' => '10',
));
var_dump($response);

This resource responds with:

  • string: balance – Current prefunding balance for the specified type

POST /oauth/consumer/{consumer_key}/prefund/{type}

[permalink]

Add consumer prefunding balance

Name Description
consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
type Values can be: [credit, debit, overseas]
vcard.phar POST oauth/consumer/$CONSUMER_KEY/prefund/credit "amount=10"
Wallet.consume('oauth/consumer/' + consumer_key + '/prefund/credit', 'POST',
{
    "amount": "10"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> requestData = new HashMap<String, String>();
requestData.put("amount", "10");

JSONObject transaction = wallet.consume("oauth/consumer/" + consumer_key + "/prefund/credit", HttpRequest.METHOD_POST, requestData);
System.out.println(transaction);
IDictionary<string, string> requestData = new Dictionary<string, string> ();
requestData.Add("amount", "10");

JObject transaction = wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "POST", requestData);
Console.WriteLine(transaction.ToString());
requestData := map[string]string{}
requestData["amount"] = "10"

_, transaction, _ := wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "POST", requestData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('POST', 'oauth/consumer/' . $consumer_key . '/prefund/credit', array(
    'amount' => '10',
));
var_dump($response);

This resource responds with:

  • string: amount – Amount deducted from the prefunding balance for the specified type
  • string: old_balance – Old prefunding balance for the specified type
  • string: new_balance – New prefunding balance for the specified type
Parameter Required Max Length Description
amount yes 9 Amount to be added to the prefunding balance for the specified type

DELETE /oauth/consumer/{consumer_key}/prefund/{type}

[permalink]

Deduct consumer prefunding balance

Name Description
consumer_key Also referred to as API Key which identifies the application account that is used to connect to the API system.
type Values can be: [credit, debit, overseas]
vcard.phar DELETE oauth/consumer/$CONSUMER_KEY/prefund/credit "amount=10"
Wallet.consume('oauth/consumer/' + consumer_key + '/prefund/credit', 'DELETE',
{
    "amount": "10"
})
.done(function (data) {
    console.log(data);
});
Map<String, String> requestData = new HashMap<String, String>();
requestData.put("amount", "10");

JSONObject transaction = wallet.consume("oauth/consumer/" + consumer_key + "/prefund/credit", HttpRequest.METHOD_DELETE, requestData);
System.out.println(transaction);
IDictionary<string, string> requestData = new Dictionary<string, string> ();
requestData.Add("amount", "10");

JObject transaction = wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "DELETE", requestData);
Console.WriteLine(transaction.ToString());
requestData := map[string]string{}
requestData["amount"] = "10"

_, transaction, _ := wallet.Consume("oauth/consumer/" + consumer_key + "/prefund/credit", "DELETE", requestData)
fmt.Println(transaction)
<?php
$response = $wallet->consume('DELETE', 'oauth/consumer/' . $consumer_key . '/prefund/credit', array(
    'amount' => '10',
));
var_dump($response);

This resource responds with:

  • string: amount – Amount deducted from the prefunding balance for the specified type
  • string: old_balance – Old prefunding balance for the specified type
  • string: new_balance – New prefunding balance for the specified type
Parameter Required Max Length Description
amount yes 9 Amount to be deducted from the prefunding balance for the specified type

Oauth/Access/Token

Authentication: Requesting for Access Token

POST /oauth/access/token

[permalink]

Returns access token combination that is required in accessing consumer resources. POST /oauth/request/token is a prerequisite to this resource.

This, together with POST /oauth/request/token, are bundle as authentication in the SDK:

CARD_ID=`vcard.phar -u me@email.com -p $3CuR3 GET users
Wallet = new MatchMove.WalletRequest(
    'me@email.com',
    '$3CuR3',
    {
        // verbose: function () {return window;},
        server: 'https://beta-api.mmvpay.com/sg/v1',
        consumer: {
            key: 'APIKEY',
            secret: 'APISECRET'}
});
wallet.authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3");
wallet.Authenticate("me@email.com", "$3CuR3")
<?php
$wallet->authenticate('me@email.com', '$3CuR3');

This resource responds with:

  • string: oauth_token – Access Token Key
  • string: oauth_token_secret – Access Token Secret
Parameter Required Max Length Description
oauth_consumer_key yes 32 Also referred to as API Key which identifies the application account that is used to connect to the API system.
oauth_nonce yes 32 Any random alphanumeric value that identifies the transaction being requested. This must be unique within five (5) minutes.
oauth_signature yes 50 Digital signature of the current request
oauth_signature_method yes 9 Method used to create the signature of the request in [Step 3d]. Currently, we only support HMAC-SHA1.
oauth_timestamp yes 11 Time when the request is being call in Unix Timestamp Format.
oauth_version yes 3 Version of OAuth you are connecting to. Currently, we only support 1.0

Oauth/Users/Search

Get Consumer Details

[permalink]

Returns user details GET /oauth/users/search.

Example of getting the details of a user:

vcard.phar GET oauth/users/search \
"email=sample@matchmove.com"
Wallet.consume('oauth/users/search', 'GET', {
     "email": "sample@matchmove.com"
     })
    .done(function (data) {
        console.log(data);
    });
Map<String, String> userData = new HashMap<String, String>();

userData.put("email", "sample@matchmove.com");

JSONObject user = wallet.consume("oauth/users/search", HttpRequest.METHOD_GET, userData);
System.out.println(user);
IDictionary<string, string> userData = new Dictionary<string, string> ();

userData.Add("email", "sample@matchmove.com");

JObject user = wallet.Consume("oauth/users/search", "GET", userData);
Console.WriteLine(user.ToString());
userData := map[string]string{}
userData["email"] = "sample@matchmove.com"

_, user, _ := wallet.Consume("oauth/users/search", "GET", userData)
fmt.Println(user)
<?php
$response = $wallet->consume('GET', 'users/users/search', array(
     'email' => 'sample@matchmove.com'
));

var_dump($response);

This resource responds with:

  • string: id – User identifier
  • string: email – Email address
  • array: name – Name
    • string: first – First or given name
    • string: last – Last or family name
    • string: preferred – Name on card
  • array: mobile – Mobile information
    • int: country_code – Mobile country code
    • int: number – Mobile number
  • array: identification – Identification information
  • date: birthdayISO 8601 Date of birth
  • string: gender – Gender (#get-users-enumerations-genders)
  • string: title – Preferred salutation (#get-users-enumerations-titles)
  • array: links – Additional information
    • string: rel – Resources relationship
    • string: href – Resources link
    • string: method – Method to use to get the resources information
  • array: status – Status information
    • boolean: is_active – Account status
    • string: text – Account status in plain text
  • array: date – Date Information
    • date: registrationISO 8601 Registration date
Parameter Required Max Length Description
email no 50 Receiver email address.
mobile_country_code no 3 Receiver mobile country code
mobile no 12 Receiver mobile number

Resource Validation Errors

Validations Errors: Users/Wallets/Cards/Funds

Users/Wallets/Cards/Funds Resource Validation Errors

Validation:Card:Amount:InvalidFormat

[permalink]

amount must only contain numeric characters.

Validation:Card:Amount:Lengthmax

[permalink]

amount must not exceed 9 digits long

Validation:Card:Amount:NotEmpty

[permalink]

amount` should not be empty

Validation:Card:Amount:Valuemin

[permalink]

amount` should be greater than zero.

Validations Errors: Users/Wallets/Cards

Users/Wallets/Cards Resource Validation Errors

Validation:User:Card:Require:Title:Empty

[permalink]

title must be defined using PUT /users.

Validation:User:Card:Require:Title:Invalid

[permalink]

title can only have one case-sensitive value of [Mr, Mrs, Miss, Madam, Dr]. Update using PUT /users.

Validation:User:Card:Require:Gender:Empty

[permalink]

gender must be defined using PUT /users.

Validation:User:Card:Require:Gender:Invalid

[permalink]

gender can only have one case-sensitive value of [male, female]. Update using PUT /users.

Validation:User:Card:Require:IDType:Empty

[permalink]

id_type must be defined using PUT /users.

Validation:User:Card:Require:IDType:Invalid

[permalink]

id_type can only have one case-sensitive value of [passport, nric]. Update using PUT /users.

Validation:User:Card:Require:IDNumber:Empty

[permalink]

id_number must be defined using PUT /users.

Validation:User:Card:Require:CountryOfIssue:Empty

[permalink]

country_of_issue must be defined using PUT /users.

Validation:User:Card:Require:Address:Empty

[permalink]

address must be defined using PUT /users/addresses.

Validation:User:Card:Require:Address:Invalid

[permalink]

address must be defined using PUT /users/addresses.

Validations Errors: Users/Addresses

Users/Addresses Resource Validation Errors

Validation:Address:HouseNumber:NotEmpty

[permalink]

House number is required

Validation:Address:UnitNumber:NotEmpty

[permalink]

Unit number is required

Validation:Address:Street:NotEmpty

[permalink]

Street is required

Validation:Address:Ward:NotEmpty

[permalink]

Ward is required

Validation:Address:District:NotEmpty

[permalink]

District is required

Validation:Address:Line1:NotEmpty

[permalink]

Address line 1 is required

Validation:Address:Line1:Lengthmax

[permalink]

Address line 1 should be less than or equal to 35 characters

Validation:Address:Line2:NotEmpty

[permalink]

Address line 2 is required

Validation:Address:Line2:Lengthmax

[permalink]

Address line 2 should be less than or equal to 35 characters

Validation:Address:City:NotEmpty

[permalink]

City is required

alidation:Address:City:Lengthmax

[permalink]

City should be less than or equal to 20 characters

Validation:Address:State:NotEmpty

[permalink]

State is required

Validation:Address:State:Lengthmax

[permalink]

State should be less than or equal to 20 characters

Validation:Address:Country:NotEmpty

[permalink]

Country is required

Validation:Address:Country:Lengthmax

[permalink]

Country should be less than or equal to 20 characters

Validation:User:Detail:CountryOFIssue:Invalid

[permalink]

Country must be a valid full country name. Valid country is based on an internal list updated as of 2013.

Validation:Address:CountryCode:Lengthmax

[permalink]

Country code should be 3 characters.

Validation:User:Detail:CountryOFIssue:Invalid

[permalink]

Country code must be a valid ISO 3166 alpha-3.

Validation:Address:Postcode:NotEmpty

[permalink]

Zip/Postal Code is required

Validation:Address:Postcode:Numeric

[permalink]

Zip/Postal Code should be numeric value

Validation:Address:Postcode:Lengthmax

[permalink]

Zip/Postal Code should be less than or equal to 15 characters


Status Code Errors

Acceptable Parameters: Status 406

Acceptable Headers

request_header_accept_invalid

[permalink]

Invalid content type

request_header_accept_encoding_invalid

[permalink]

Invalid content encoding

request_header_array_invalid

[permalink]

Invalid header value. Array value is not supported

Authentication Expiry: Status 498

Authentication Time Validation

access_token_expired

[permalink]

Access token already expired. Repeat authentication process.

Resource Method: Status 405

Resource Verb/Method Support

method_not_supported

[permalink]

API request method is not supported. Please refer to the list of supported HTTP Methods.

resource_user_wallet_fund_temporary_invalid

[permalink]

Parameter temporary must be boolean.

resource_user_wallet_fund_is_product_ref_id_invalid

[permalink]

Parameter is_product_ref_id must be boolean.

Resource Access: Status 503

Resource Access Control. Details about the limitations of the resource can be found in the allow response header.

restricted_resource

[permalink]

Not enough permission to access the resource. Verify your access scope and restrictions with your account/integration manager.

resource_user_wallet_card_create_limit_exceeded

[permalink]

Limitation to the number of cards issued to a user was exceeded.

resource_user_wallet_fund_frequency_limit

[permalink]

Amount cannot be credited due to the frequency (number of credited transactions per user) limitation set for the product. This limitation was often set for pre-KYC’d accounts. Verify this limitation with your account/integration manager.

resource_user_wallet_fund_amount_min_amount_limit

[permalink]

Amount cannot be credited due to the amount (minimum amount per request) limitation set for the product. This limitation was often set for pre-KYC’d accounts. Verify this limitation with your account/integration manager.

resource_user_wallet_fund_amount_max_amount_limit

[permalink]

Amount cannot be credited due to the amount (maximum amount per request) limitation set for the product. This limitation was often set for pre-KYC’d accounts. Verify this limitation with your account/integration manager.

resource_user_wallet_fund_not_possible

[permalink]

Amount cannot be credited due to a limitation set for the product. This limitation was often set for pre-KYC’d accounts. Verify this limitation with your account/integration manager.

prerequisite_user_title_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for title in PUT users then try again.

prerequisite_user_gender_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for gender in PUT users then try again.

prerequisite_user_document_id_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for id_number, id_type and/or country_of_issue in PUT users then try again.

prerequisite_user_address_residential_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for residential, id_type and/or country_of_issue in PUT users/addresses/residential then try again.

prerequisite_unknown_reason_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for residential, id_type and/or country_of_issue in PUT users/addresses/residential then try again.

resource_user_authentication_document_maxsize_exceeded

[permalink]

The document exceeds the current maximum upload limit in bytes. Check the response header allow for the current limit.

resource_user_authentication_document_unknown_data_type

[permalink]

Failed to upload an unknown data type. Check the response header allow for the accepted data types.

resource_user_authentication_document_not_allowed_invalid

[permalink]

Parameter status is invalid. Values can be approved or rejected.

resource_user_authentication_document_not_allowed

[permalink]

Failed to create or modify authentication documents because the submission is not in the proper state.

resource_user_authentication_document_max_count_exceeded

[permalink]

The document exceeds the current maximum number of documents allowed per submission. Check the response header allow for the maximum number of documents

resource_card_create_failed

[permalink]

Encountered an internal error while creating the card. If this issue persists, inform your account/integration manager.

resource_wallet_create_failed

[permalink]

Encountered an internal error while creating the wallet. If this issue persists, inform your account/integration manager.

resource_user_wallet_card_reset_in_queue

[permalink]

You already have a pending pin request in queue!

resource_overseas_transfer_invalid_corridor_code

[permalink]

Invalid corridor code. Refer to the list of overseas providers offered.

GET /users/wallets/funds/transfers/overseas/{type}/fees](#get-users-wallets-funds-transfers-overseas)

resource_wallet_card_limit

[permalink]

Maximum card limit reached during card creation POST /users/wallets/cards/{card_type.code}.

see POST /users/wallets/cards/{card_type.code} for reference.

[permalink]

User have not wallet during card creation POST /users/wallets/cards/{card_type.code}.

see POST /users/wallets/cards/{card_type.code} for reference.

user_blocked_risk_threshold_exceeded

[permalink]

User have exceeded the risk and compliance threshold and was automatically blocked.

see PUT /users[/test] for reference. see PUT /users/addresses[/{type}] for reference. see POST /users/wallets/cards/{card_type.code} for reference.

risk_management_engine_error

[permalink]

User have exceeded the risk and compliance threshold and was automatically blocked.

see PUT /users[/test] for reference. see PUT /users/addresses[/{type}] for reference. see POST /users/wallets/cards/{card_type.code} for reference.

security_token_not_available

[permalink]

Security token is not available. Please refer to CVV for physical cards.

see GET /users/wallets/cards/{card.id}/securities/tokens for reference.

resource_wallet_card_limit

[permalink]

Parameter assoc_number must not be present for non-physical cards.

see POST /users/wallets/cards/{card_type.code} for reference.

prerequisite_user_address_residential_missing

[permalink]

A prerequisite is required in order to fulfill the required. Provide a value for residential, id_type and/or country_of_issue in PUT users/addresses/residential then try again.

see PUT /users/addresses[/{type}] for reference.

resource_user_residential_address_not_defined

[permalink]

Residential address is not defined. This can be added using PUT /users/addresses[/{type}].

see GET /users/addresses[/{type}] for reference.

resource_user_billing_address_not_defined

[permalink]

Billing address is not defined. This can be added using PUT /users/addresses[/{type}].

see GET /users/addresses[/{type}] for reference.

resource_card_fund_transfer_inactive_transaction

[permalink]

Fund transfer transaction is inactive. Verify the status using GET /users/wallets/funds[/{id}].

see PUT /users/wallets/funds/{id} for reference.

resource_card_fund_transfer_cancelled_transaction

[permalink]

Fund transfer transaction is already cancelled. Verify the status using GET /users/wallets/funds[/{id}].

see PUT /users/wallets/funds/{id} for reference.

resource_card_fund_transfer_failed_transaction

[permalink]

Fund transfer transaction failed. Verify the status using GET /users/wallets/funds[/{id}].

see PUT /users/wallets/funds/{id} for reference.

resource_card_fund_transfer_expired_transaction

[permalink]

Fund transfer transaction is already expired. Verify the status using GET /users/wallets/funds[/{id}].

see PUT /users/wallets/funds/{id} for reference.

homesend_error_er0001

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0002

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0004

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0005

[permalink]

We are unable to serve your beneficiary, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0007

[permalink]

We are unable to serve your beneficiary, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0008

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0010

[permalink]

We cannot serve the beneficiary as the customer is not registered at the chosen destination service.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0011

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0012

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0013

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0014

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0017

[permalink]

We are unable to process your request due to an internal error, please contact our customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0020

[permalink]

You cannot send this amount to the chosen destination.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0021

[permalink]

Beneficiary has reached maximum receivable amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0022

[permalink]

You have reached maximum sent amount or transactions and cannot send further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0023

[permalink]

You have reached maximum sent amount or transactions and cannot send further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0024

[permalink]

Beneficiary has reached maximum receivable amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0025

[permalink]

Beneficiary has reached maximum receivable amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0026

[permalink]

You have reached maximum sent amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0027

[permalink]

You have reached maximum sent amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0028

[permalink]

Beneficiary has reached maximum receivable amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0029

[permalink]

Beneficiary has reached maximum receivable amount or transactions and cannot be sent further remittances. Please contact the customer care for further details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0033

[permalink]

Advice of Charge proposal has been expired. Please re-try.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0040

[permalink]

You are not allowed to perform this transaction for regulatory reasons.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0042

[permalink]

Your transaction has been expired.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

homesend_error_er0103

[permalink]

Unable to cancel remittance transaction.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_1001

[permalink]

Data catalogues Payers-catalogue-empty or catalogue not found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_1002

[permalink]

Data catalogues Destinations-catalogue empty or catalogue not found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_1003

[permalink]

Data catalogues Source-foreign-exchange-rates catalogue empty or catalogue not found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_1004

[permalink]

Data catalogues Transfers-pending-to-be-paid catalogue empty or catalogue not found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_1005

[permalink]

Data catalogues Unexpected number of catalogue records found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8000

[permalink]

Transaction Monitoring Transaction hit on any of the of the Transaction Monitoring rules set for the corridor. No more information supplied.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8001

[permalink]

Transaction Monitoring Transaction evaluated suspiciousby the Transaction Monoring module of MMH.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8002

[permalink]

Routing Module Transaction rejected due invalid MSISDN provided.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8003

[permalink]

Routing Module System was not able to find a suitable route to dispatch the order. Corridors not open.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8004

[permalink]

Routing Module Invalid Service ID.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8005

[permalink]

Transaction Monitoring Transaction amount constraints/limits hit.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8006

[permalink]

Transaction Monitoring Sender’s aggregated/accumulated amount constraints/limits hit.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8007

[permalink]

Transaction Monitoring Recipient’s aggregated/accumulated amount constraints/limits hit.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8008

[permalink]

Transaction Monitoring Sender’s velocity (number of transaction in certain period of time) constraints/limits hit.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8009

[permalink]

Transaction Monitoring Recipient’s velocity (number of transaction in certain period of time) constraints/limits hit.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8010

[permalink]

Transaction Monitoring Sanction List Screening rule hit due to provided Sender’s data.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8011

[permalink]

Transaction Monitoring Sanction List Screening rule hit due to provided Recipient’s data.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8012

[permalink]

Transaction Monitoring Recipient’s MSISDN rejected.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_8013

[permalink]

Transaction Monitoring Transaction Monitoring rule hit with custom message. A self explanatory/human readable english output message is available on API result.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9400

[permalink]

Partner Interfaces Cancellation could not be directly executed but a request for cancellation has been sent to destination.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9401

[permalink]

Partner Interfaces Direct cancellation not available. Caller must initiate a cancellation request procedure for cancelling the money transfer order.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9450

[permalink]

Partner Interfaces Request refused. Contact support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9451

[permalink]

Partner Interfaces Request refused due to abnormal sent data. Contact support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9452

[permalink]

Partner Interfaces Request refused due to semantically invalid or missing sent data. Check field values and error details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9460

[permalink]

Partner Interfaces External agent’s adapter refused the request due to abnormal request. Contact support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9461

[permalink]

Partner Interfaces External agent’s adapter refused the request due to abnormal request. Contact support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9462

[permalink]

Partner Interfaces External agent’s adapter refused the request due to abnormal sent data. Contact system’s support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9463

[permalink]

Partner Interfaces External agent’s adapter refused the request due to semantically invalid or missing sent data. Check field values and error details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9464

[permalink]

Partner Interfaces Transaction refused due to recipient/subscriber account balance limit reached.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9465

[permalink]

Partner Interfaces Recipient’s MSISDN not yet registered for e-wallet.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9466

[permalink]

Partner Interfaces Transaction is duplicated in remote system.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9467

[permalink]

Partner Interfaces Velocity exceeded reported by remote system.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9468

[permalink]

Partner Interfaces Account Issue.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9478

[permalink]

Partner Interfaces External agent’s facilities are unavailable. Contact system’s support is the problem persists.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9479

[permalink]

Partner Interfaces External agent’s facilities temporarily unavailable or operation timed-out. Caller may retry the execution. Contact system’s Support if the problem persists.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9499

[permalink]

Partner Interfaces Partner Interface has experienced unexpected error.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9500

[permalink]

Transfer Engine Transaction status already changed. Status change request avoided.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9501

[permalink]

Transfer Engine Transaction is blocked. No status change allowed.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9502

[permalink]

Transfer Engine Transaction status change invalid or not allowed.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9503

[permalink]

Transfer Engine Transaction data amendment invalid or not allowed.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9504

[permalink]

Transfer Engine Transaction was registered but Partner has exceeded the limits and therefore the transaction is blocked. Partner must check with MMH Accounting dept. to verify financial situation. Transaction will be created (but blocked) in the Mobile Money Hub.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9510

[permalink]

Transfer Engine Partner is blocked; therefore, your sending request could not be processed.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9511

[permalink]

Transfer Engine Partner is blocked; therefore your payment request could not be processed.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9570

[permalink]

Transfer Engine Transfer not found.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9571

[permalink]

Transfer Engine Transfer is duplicated.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9599

[permalink]

Transfer Engine Transfer engine undefined error.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9800

[permalink]

Partner Connect Partner requesting the execution is not valid.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9898

[permalink]

Partner Connect Invalid credentials. Your username and/or provided password are not valid.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9899

[permalink]

Partner Connect Invalid request. Revise parameters.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

transferto_error_9999

[permalink]

Partner Connect Undefined error. Contact system’s support.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_301

[permalink]

Max amount exceeded. Transaction amount may have exceeded the maximum specified in the Agent profile.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_302

[permalink]

Daily limit exceeded. Transaction amount may have exceeded the maximum daily total of transactions in one day. Contact MoneyGram to resolve the issue.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_304

[permalink]

Outside of store business hours. Try re-sending the message within the business hours stated in the Agent profile, or contact MoneyGram to have your profile set to not check store hours

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_306

[permalink]

Product not available

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_307

[permalink]

Fee not available

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_308

[permalink]

Wrong MoneyGram type

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_309

[permalink]

Wrong API version

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_310

[permalink]

Time limit expired. Please restart transaction

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_316

[permalink]

Customer is not found (deprecated)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_317

[permalink]

Invalid time zone name

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_318_4166

[permalink]

Plus Name Does Not Match Sender Name. Customer Call MoneyGram for Correction.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_319_4167

[permalink]

The MoneyGram Plus number does not exist, please re-enter the number or contact MoneyGram for assistance.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_320_4168

[permalink]

Plus Name Does Not Match Sender Name. Customer Call MoneyGram for Correction.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_321

[permalink]

Invalid Check Type

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_337

[permalink]

Creator and Receiver persons may not be deleted.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_339

[permalink]

Cannot delete registration creator

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_343

[permalink]

Cannot receive transaction with current POS version. Call MoneyGram Technical Support to upgrade to latest version.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_357_5003

[permalink]

Transaction cannot be received at this time: Have customer contact MoneyGram.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_362

[permalink]

DCC Card Range Match Failure. Contact MG to resolve this issue.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_400

[permalink]

Security failure. Error due to incorrect request header info. Check the credentials sent.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_401

[permalink]

Security failure

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_405

[permalink]

Must do check in or initial setup. DW error. AC user may experience if Token as security model

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406

[permalink]

Transaction not allowed. Do not resend the message. Contact MG with detailed sub error message. Request to verify profile setup.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_1027

[permalink]

RECEIVING AGENT SAME AS SENDING AGENT. (Reference number lookup, receive validation)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_1106

[permalink]

ERROR:BAD STATUS: SEN. INVALID: NOT IN REC STATUS.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4016

[permalink]

RECEIVE OF HOME DELIVERY TRANSACTIONS NOT ALLOWED

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4021

[permalink]

REQUESTING AGENT IS NOT THE ORIGINAL SEND AGENT

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4042

[permalink]

MX TRANSACTION

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4043

[permalink]

DO REPUBLIC TRANSACTION

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4045

[permalink]

UNABLE TO PROCESS AMEND FOR INVALID SUB STATUS

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4046

[permalink]

UNABLE TO PROCESS AMEND FOR CALL CUSTOMER SUPPORT

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4047

[permalink]

UNABLE TO PROCESS AMEND IS CLOSED BETWEEN 9PM CT - 8 AM CT

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4048

[permalink]

Bancomer specific message

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4112

[permalink]

AGENT CLOSED, CANNOT DO TRANSACTIONS - CALL 1-800-444-3010

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4135

[permalink]

UNABLE TO RECEIVE CUBA TRANSACTIONS

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4156

[permalink]

TRANSACTION NOT ACCEPTED. PLEASE CALL CUSTOMER SERVICE: 1-800-656- 9841

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4160

[permalink]

CAN NOT REVERSE DIRECTED SEND TRANSACTION

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_406_4161

[permalink]

AGENT IS NOT A RECEIVING AGENT. Call MG

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_408

[permalink]

Tandem Deauth. Not applicable to AC, DW

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_409

[permalink]

Tandem Communication Failure. Not applicable to AC, DW

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_410

[permalink]

SuperAgent Deauth. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_411

[permalink]

SuperAgent Send Limit Exceeded. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_412

[permalink]

Agent Takeover Not Allowed. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_413

[permalink]

Location Profile has been Deauthorized. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_416

[permalink]

Requesting server not authorized. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_417

[permalink]

Must use userName for security. Not applicable to AC

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_419

[permalink]

Unit has been deactivated. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_420

[permalink]

Software UpGrade Pending. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_421

[permalink]

Security failure. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_422

[permalink]

Invalid field for version. DW error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_423

[permalink]

Promotional Code not valid. Please confirm the promotion details.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_424

[permalink]

Promo code is not allowed for agent. Call MG to check if promo code is enabled for the location.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_425

[permalink]

Send Currency not allowed for product type receive. Error during get fields for product and receive validation APIs.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_426

[permalink]

Cannot perform transaction with current POS version. Please upgrade to latest version. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_427

[permalink]

Unable to process for amount greater than 9099.99 USD, Please transfer to Escalation skill.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_500

[permalink]

GetInitialSetup/ProfileSetup Failure. Error during check in (DW Error)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_501

[permalink]

Error getting POS data. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_502

[permalink]

Profile setup is Incomplete. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_503

[permalink]

Initial Setup Password Failure. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_504

[permalink]

Invalid POS. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_505

[permalink]

Invalid POS Type. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506

[permalink]

Security failure. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506_4105

[permalink]

INVALID AGENT NUMBER. Contact MG to resolve the issue

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506_4127

[permalink]

YOU MUST FILL “FOR AGENT USE ONLY” SECTION ON RECEIPT. COLLECT FUNDS PRIOR TO SENDING ANY TRXN

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506_4131

[permalink]

INVALID SEND AGENT # - PLEASE CALL CUSTOMER SERVICE AT 1-800-444-3010

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506_4126

[permalink]

INVALID AGENT – NUMBER PLEASE CALL CUSTOMER SERVICE AT 1-800-444- 3010

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_506_4109

[permalink]

INVALID AGENT NUMBER – CALL MONEYGRAM

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_507

[permalink]

Invalid Device ID. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_508

[permalink]

Device Already in Service. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_509

[permalink]

Initial Setup Already in Progress. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_510

[permalink]

Device Out Of Service. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_511

[permalink]

Unit Setup Error. DW Error

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_512

[permalink]

Bad Agent Currency. Contact MG to resolve this issue

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_513

[permalink]

Bad Agent Country. Contact MG to resolve this issue

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_514_1111

[permalink]

INVALID PERSONAL IDENTIFICATION NUMBER, PLEASE REENTER

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_515

[permalink]

No registration fields found for agent that are required or optional. There may be incorrect registration info in MG systems. Contact MG to resolve this issue

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_516

[permalink]

Transaction already in progress. Indicates that no record was returned for a particular postal code requested. DMA or Designated Marketing Area is a group of counties in the USA that are covered by a specific group of TV stations.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_517

[permalink]

Could not find DMA for agent’s zip code. 600 level errors indicate errors caused by invalid requests, such as attempting to receive a MoneyGram transaction that does not exist.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_600

[permalink]

Data invalid or not found

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_601

[permalink]

Invalid value

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_602_2003

[permalink]

Fee or rate has changed since quote was issued

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_603

[permalink]

Invalid Check Number. Call MG to resolve this issue

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_603_1066

[permalink]

CHECK NUMBER ERRORS

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_603_1067

[permalink]

CHECK NUMBER 2 ERRORS

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_603_1076

[permalink]

Check number missing

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_604

[permalink]

Invalid reference number. Check the reference number for typo. If error persists, call MG to resolve the issue.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_604_1104

[permalink]

ERROR: XXXXXXXX IS BAD REF# INPUT FROM MC36.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_604_7600

[permalink]

REF#: XXXXXXXX NOT FOUND

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_604_1025

[permalink]

INVALID REFERENCE NUMBER

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_605

[permalink]

Send reversal/cancel must be requested same day

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_605_3401

[permalink]

SEND REVERSAL/CANCEL MUST BE REQUESTED SAME DAY. DATE IS DETERMINED BY USA CENTRAL TIME. (sendReversal, reversalType=C)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_606

[permalink]

Send reversal/cancel is only allowed for standard MoneyGram delivery options

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_607

[permalink]

Transaction is an ExpressPayment and can not be reversed

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_607_3603

[permalink]

TRANSACTION IS AN EXPRESS PAYMENT AND CAN NOT BE REVERSED. PLEASECONTACT CUSTOMER SUPPORT FOR FURTHER ASSISTANCE. (Send reversal)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_608

[permalink]

Reversing agent is not the same as send agent. (Detail lookup/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_608_9004

[permalink]

REQUESTING AGENT IS NOT THE ORIGINAL SEND AGENT

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609

[permalink]

Transaction not in Send status. (Detail lookup/ /receive validation/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609_1077

[permalink]

TRANSACTION WAS PREVIOUSLY RECEIVED. (Detail lookup/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609_1078

[permalink]

TRANSACTION WAS PREVIOUSLY CANCELLED. (Detail lookup/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609_1079

[permalink]

TRANSACTION WAS PREVIOUSLY REFUNDED. (Detail lookup/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609_4017

[permalink]

NOT IN SEN STATUS. (Detail lookup/ send reversal/ amend)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_609_9003

[permalink]

TRANSACTION NOT AVAILABLE. (Send Reversal)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_610

[permalink]

Reversal amount and fee must equal send amount and fee. (Send Reversal)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_610_1065

[permalink]

REVERSAL AMOUNT MUST EQUAL SEND AMOUNT. Or REVERSAL FEE MUST EQUAL SEND FEE. (Send Reversal)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_611

[permalink]

Invalid Transaction.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_611_4140

[permalink]

CONFIRMATION NUMBER NOT ON FILE

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_611_4137

[permalink]

NON NUMERIC CONFIRMATION NUMBER

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_612

[permalink]

Amount must be greater than 0

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_613_1005

[permalink]

AMOUNT SENT DOES NOT EQUAL AT LEAST .01

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_613

[permalink]

Amount must not exceed country receive limit

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_613_1006

[permalink]

AMOUNT exceeds receive country limits.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_614

[permalink]

Amount must not exceed sending limit

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_614_1007

[permalink]

AMOUNT MUST NOT EXCEED $10,000.00 U.S.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_614_1008

[permalink]

Maximum Allowable Send Amount

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_614_1014

[permalink]

SEND AMOUNT EXCEEDED ALLOWABLE AMOUNT

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_615

[permalink]

Invalid account number. BP consumer lookup

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_615_1001

[permalink]

ExpressPayment Account Edit errors

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_616

[permalink]

Customer is not found. (Consumer lookup)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_616_1111

[permalink]

CUSTOMER NOT FOUND ON FREQUENT CUSTOMER FILE OR MONEYSAVER FILE

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617

[permalink]

No agents found. (Directory of Agents)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617_1046

[permalink]

NO AGTS WITHIN 90 MILES- TRY CITY/STATE LOOKUP

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617_1047

[permalink]

NO AGTS WITHIN 90 MILES- ENTER ALTERNATE AREA CODE/PREFIX - IN THE US

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617_1048

[permalink]

NO AGENTS FOUND

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617_1051

[permalink]

NO LISTING AVAILABLE ON THIS SELECTION - PLEASE ENTER ALTERNATE SELECTION

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_617_1052

[permalink]

NO LISTING AVAILABLE ON THIS SELECTION - PLEASE ENTER ALTERNATE ZIPCODE.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_618

[permalink]

No cities with agents found. (Directory of Agents)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_618_1050

[permalink]

NO LISTING AVAILABLE ON THIS REQUEST - PLEASE ENTER ANOTHER CITY SELECTION. (Directory of Agents)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_619

[permalink]

Invalid area code and prefix. (Directory of Agents)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_619_1033

[permalink]

INVALID AREA-CODE AND PREFIX - PLEASE REENTER. (Directory of Agents)

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_624_1005

[permalink]

TRANSACTION CANNOT BE COMPLETED. … WARNING: DO NOT ATTEMPT TO SPLIT THIS TRANSACTION. Correct the amount and resend the message.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_624_2025

[permalink]

Receive cannot be completed via requested process because it exceeds valid limits.

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_625

[permalink]

MoneyGram customer receive number not found

see POST /users/wallets/funds/transfers/overseas/{remittance_providers.code}/{test} for reference.

moneygram_error_626

[permalink]

Too many records returned, please narrow search criteria