VirtualCards.us API documentation API Reference

This is the VirtualCards.us API Developer-Knowledge Portal. Here you will find what functionality is available to you to integrate your VirtualCards.us account into your current and future business processes and to automate your business transactions. There are APIs for most of what you can do via the consumer portal.

To help you navigate, this page is split into 3 vertical sections:

  • the navigation menu on the left,
  • the content in the middle,
  • and usage examples on the right.

To get started, contact [email protected] to get the `x-api-key`. Two accounts will be provided, one for sandbox and one for production environment. The sandbox environment is useful for development and allows to play with test data. Some of the data will be pre-populated so you can start quickly.

Please submit the IP whitelist to us for your production environment. There is no IP limitation on sandbox environment.

Note: all the currency amount(includes card balance, etc) is in `minor unit`(the `exponent`). See https://en.wikipedia.org/wiki/ISO_4217. You may need to format it before displaying to end user.

Login entrance to get/change API key

API Endpoint

  • Sandbox: `https://staging.virtualcards.us/api`
  • Production: `https://www.virtualcards.us/api`

Please DO NOT use production environment until you have tested your integration sufficiently and are happy that it works as expected.

API Endpoint
https://www.virtualcards.us/api
Terms of Service: https://www.virtualcards.us/sandbox-terms-of-service
Contact: [email protected]
Request Content-Types: application/x-www-form-urlencoded
Response Content-Types: application/json
Schemes: https
Version: 1.0.0

HTTP Headers

x-api-key

Used to verify api invoker. Value can has prefix 'Bearer '.

name
x-api-key
type
apiKey
in
header

x-token

User token. Get it by login API. Value can has prefix 'Bearer '.

name
x-token
type
apiKey
in
header

x-timezone

Not security requirement. User's timezone. Optional but highly recommend to add to specify date's timezone in request parameters. Default to be current user's timezone configure or America/New_York if x-token is not provided or timezone is not configured for the user. Value should be one of the timezone names listed in http://php.net/manual/en/timezones.php or an offset value (like +0200).

name
x-timezone
type
apiKey
in
header

x-i18n

Not security requirement. User's language to translate response message. Optional. Default to en. Valid values: en for English, zh for Chinese(中文(简体)), es for Spanish(Español), pt-BR for Brazilian Portuguese(Português do Brasil), ja for Japanese(にほんご), or ar for Arabic(العَرَبِيَّة).

name
x-i18n
type
apiKey
in
header

x-card-program

Not security requirement. Only required in the staging environment. This is the card program id which you are requesting in the staging environment for testing. Refer to the card programs API for more details.

name
x-card-program
type
apiKey
in
header

Basic data

Card programs

GET /card-programs

Get not only available card programs, but also their cards, countries, id verification requirements, load partners/methods and reshippers

Available card programs and related data. Save it so that you can call other APIs later.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string",
            "supportDDA": "boolean",
            "supportExpense": "boolean",
            "cardsAllowed": "integer",
            "bin": "string",
            "deliveryMethod": "string",
            "kycProviderProgram": "string",
            "cards": [
                {
                    "id": "integer",
                    "name": "string",
                    "description": "string",
                    "benefit": "string",
                    "minLoadAmount": "number (float)",
                    "maxLoadAmount": "number (float)",
                    "maxBalance": "number (float)",
                    "currencies": [
                        "string"
                    ],
                    "artwork": "string",
                    "network": "string"
                }
            ],
            "countries": [
                {
                    "country": {
                        "id": "integer",
                        "name": "string",
                        "iso": "string",
                        "iso3": "string",
                        "phoneCode": "string",
                        "region": "string"
                    },
                    "idVerifications": [
                        {
                            "type": "string",
                            "side": "string"
                        }
                    ],
                    "loadPartners": [
                        {
                            "id": "integer",
                            "name": "string",
                            "methods": [
                                {
                                    "id": "integer",
                                    "name": "string",
                                    "icon": "string",
                                    "currencies": [
                                        "string"
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ],
            "reshippers": [
                {
                    "reshipper": {
                        "id": "integer",
                        "name": "string",
                        "address": "string",
                        "dba": "string",
                        "autoSignup": "boolean"
                    },
                    "addresses": [
                        {
                            "id": "integer",
                            "name": "string",
                            "default": "string",
                            "primary": "string",
                            "second": "string",
                            "phone": "string",
                            "country": "string",
                            "state": "string",
                            "city": "string",
                            "zipCode": "string"
                        }
                    ]
                }
            ]
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Provinces

GET /provinces

Get all provinces in the specified country

country: integer
in query

ISO country code, 3 characters

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string",
            "abbr": "string"
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Issuers

GET /load-method/issuers

Get available issuers of the load method

method: integer
in query

Load method ID. Only available for load method 'iDeal' now. See Card Programs API

currency: string
in query

Currency code, 3 characters, for instance, 'USD'

country: string
in query

Country ISO code, 2 characters, for instance, 'US'

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string"
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Query result

GET /query-result

Query an old request's result according to the specified requestId

requestId: string
in query

Unique ID for the request.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Account Sign-up Process

Step 1: Member Info

POST /register/member-info

This is the first step in the creation of a customer (user type) on the ES SOLO payment processing platfrom. It is important to remember not to register with an email address that is already linked to an user account. In the instance of an email is already registered error message, please call the login API to get a token to perform the desired function.

firstName: string
in formData

First name

lastName: string
in formData

Last name

birthday: string (date)
in formData

Date of birth. Format: YYYY-MM-DD

gender: string
in formData

Gender, Male or Female

emailAddress: string (email)
in formData

Email address

password: string (password)
in formData

Minimum 7 characters include uppercase, lowercase and numeric

cardId: integer
in formData

The card which is applying. CardProgramCardType id, See Card Programs API

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "firstName": "string",
        "lastName": "string",
        "fullName": "string",
        "username": "string",
        "email": "string",
        "gender": "string",
        "locked": "string",
        "avatar": "string",
        "birthday": "string (date)",
        "address": "string",
        "address2": "string",
        "country": {
            "id": "integer",
            "name": "string",
            "iso": "string",
            "iso3": "string",
            "phoneCode": "string",
            "region": "string"
        },
        "state": {
            "id": "integer",
            "name": "string",
            "abbr": "string"
        },
        "status": "string",
        "city": "string",
        "zip": "string",
        "homePhone": "string",
        "mobilePhone": "string",
        "workPhone": "string",
        "vip": "boolean",
        "flags": [
            "string"
        ]
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 2: Verify email

POST /register/verify-email

This is the second step of the customer account creation process. In this step, the user will receive an email that will include the verify parameter within the URL that will be required to complete email verification step in the account sign up process (i.e. https://essolo.virtualcards.us/consumer/verification/page?verify=####). You will be unable to proceed to step 3 until the succesful verification of the user's email.

verify: string
in formData

Verify code sent to email address

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "userId": "integer",
        "token": "string",
        "userCardId": "integer"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 3: Personal info

POST /register/personal-info

This is the final step in the customer account creation process. In this step, the user will provide the personal information related to the associated account. Once this strep is completed, the user can proceed to the KYC verification process. It is important to remember, not to register with a phone number (any, includes Home, Mobile or Work phone) if it already linked to an account. Please call login API to get a token to perform the desired function.

address: string
in formData

First address line

addressline: string
in formData

Second address line

country: string
in formData

ISO country code, 3 characters

state: integer
in formData

State ID

city: string
in formData

City name

phone: string
in formData

Home phone

mobilephone: string
in formData

Mobile phone

workphone: string
in formData

Work phone

zip: string
in formData

Zip/Postal code

currency: string
in formData

Card currency. 3 characters. Must be available for the card type. See Card Programs API

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 4: Billing address

POST /register/billing-address

shipper: integer
in formData

Reshipper id. Also support 0 for auto sign up type, and -2 for custom address. See Card Programs API.

autoSignUpShipper: integer
in formData

Auto sign up shipper id. Required when shipper is 0

address_index: integer
in formData

Address Id, See Card Programs API. Required except for auto sign up, custom, and 'Shop and Ship'

suite: string
in formData

Custom address. Required when address_index is provided.

email: string
in formData

Email address. Required when shipper is 'Shop and Ship'

password: string
in formData

Password. Required when shipper is 'Shop and Ship'

defaultAddress: string
in formData

Required when shipper is -2

secondAddress: string
in formData

Required when shipper is -2, may be empty string

country: integer
in formData

Country ID, See Card Programs API. Required when shipper is -2

state: integer
in formData

State ID, see States API. Required when shipper is -2

city: string
in formData

City name. Required when shipper is -2

zipCode: string
in formData

Zip code. Required when shipper is -2

phone: string
in formData

Phone number. Required when shipper is -2

shipitoType: string
in formData

'Login' or 'Register'. Only shipitoEmail and shipitoPassword are required if it's 'Login'

shipitoFirstName: string
in formData

First name. Required when shipper is 0 and autoSignUpShipper is 'Shipito'

shipitoLastName: string
in formData

Last name. Required when shipper is 0 and autoSignUpShipper is 'Shipito'

shipitoCountry: string
in formData

country ISO code(2 character). Required when shipper is 0 and autoSignUpShipper is 'Shipito'

shipitoEmail: string
in formData

Email address. Required when shipper is 0 and autoSignUpShipper is 'Shipito'

shipitoPassword: string
in formData

Password. Required when shipper is 0 and autoSignUpShipper is 'Shipito'

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Id verification

Upload and verify

POST /essolo/id-verification

Upload your images need to be verified. Id verification is required to load or use your card.

ProofAddressTypeID: integer
in formData

Proof type of your address. Available values: 1 - Utility Bill, 2 - Driver's License, 3 - Passport, 4 - National ID, 5 - Property Tax Receipt, 6 - Lease Agreement, 7 - Insurance Card, 8 - Landline Phone Statement, 9 - Bank Statement, 10 - Other

ProofOfAddress: string
in formData

Base64 string of your address proof file. Only support .jpg, .png and .pdf files

IDTypeID: integer
in formData

Available values: 1 - Driver's License, 2 - National ID, 3 - Passport, 4 - Social Security Card, 5 - Birth Certificate

IDUpload: string
in formData

Base64 string of your id file. Only support .jpg, .png and .pdf files

SSN: string
in formData

Reqruied if you are in United States.

DriverLicenseNo: string
in formData

Required if IDTypeID is 1

PassportNumber: string
in formData

Required if IDTypeID is 3

CountryOfPassport: string
in formData

Required if IDTypeID is 3. Country's full name. See card programs API for more details.

NationalID: string
in formData

Required if IDTypeID is other than 1 and 3.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Get status

GET /id-verification

Get current ID verification status.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "type": "string",
        "issueAt": "string",
        "expireAt": "string",
        "bornAt": "string",
        "status": "string",
        "number": "string",
        "reason": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 1: Upload

POST /id-verification/upload

Upload your images need to be verified. Id verification is required to issue reloadable card.

country: integer
in formData

Country Id. See Card Programs API

type: string
in formData

Image type. Only accept the available values in the country. Valid values: 'PSP', 'ID' and 'DL', means 'Passport', 'ID Card', and 'Driver License'. See Card Programs API

frontImage: file
in formData

Front image of the document, at most 20MB. Required if the side of image type is 'BOTH' or 'FRONT'. See Card Programs API

backImage: file
in formData

Back image of the document. Required if the side of image type is 'BOTH' or 'BACK'. See Card Programs API

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "reference": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 2: Retrieve

GET /id-verification/retrieve

Retrieve id verification status and result. Run this at least 10 minutes later after uploading

id: integer
in query

Returned id field of upload API. See Id Verification Upload API

reference: string
in query

Returned reference field of upload API. See Id Verification Upload API

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "processed": "boolean",
        "number": "string",
        "requireIssueDate": "boolean",
        "requireExpiryDate": "boolean"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 3: Submit

POST /id-verification/finish

Submit required missing fields and finished id verification.

id: integer
in formData

Returned id field of upload API. See Id Verification Upload API

issue_date: string (date)
in formData

Issue date. Format: 'YYYY-MM-DD'. Required if requireIssueDate in retrieve API result is true. See Id Verification Retrieve API

expire_date: string (date)
in formData

Expiry date. Format: 'YYYY-MM-DD'. Required if requireExpiryDate in retrieve API result is true. See Id Verification Retrieve API

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Balance adjustments

Load card

POST /essolo/load

Load user's card with specified amount.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

userCardId: integer
in formData

The card want to load.

amount: number (integer) x ≥ 1
in formData

Load amount(minor unit) in card's currency. Currency code can be found in the response of the card detail API.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Unload card

POST /essolo/unload

Unload user's card with specified amount.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

userCardId: integer
in formData

The card want to unload.

amount: number (integer) x ≥ 1
in formData

Unload amount(minor unit) in card's currency. Currency code can be found in the response of the card detail API.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card to card transfer

POST /essolo/transfer

Transfer the specified amount from a card's balance to another.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

fromUserCardId: integer
in formData

The sending user card Id

toUserCardId: integer
in formData

The receiving user card Id

amount: number (integer) x ≥ 1
in formData

The amount to transfer in fromUserCard's currency. Currency code can be found in the response of the fromUserCard's detail API. It cannot exceed the balance of the sending user card.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Instant registration

Query registration

GET /essolo/register/instant

The GET call will enable the ability to check the status on a given registrationRequestId for an API Invoker.

registrationRequestId: integer
in formData

Unique ID for a request from a particular API Invoker, from the Product Owner/Brand Partner, used to enforce idempotency in the Registration API.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "registrationRequestId": "integer",
        "submissonDateTime": "date",
        "programOwnerId": "string",
        "programOwnerName": "string",
        "nestorProgramId": "integer",
        "programName": "string",
        "issuingBankId": "integer",
        "issuingBankName": "string",
        "cardProcessor": "string",
        "isRegistered": "boolean",
        "registrationDateTime": "date",
        "userCardId": "integer",
        "cardRegistrationKey": "string",
        "cardCreationDate": "date",
        "cardStatus": "string",
        "cardCurrency": "string",
        "bin": "integer",
        "cardProcessorUniqueId": "integer",
        "cardShippingMethod": "integer",
        "shippingAddress1": "string",
        "shippingAddress2": "string",
        "shippingCountryId": "string",
        "shippingCountry": "string",
        "shippingStateProvinceId": "string",
        "shippingCity": "string",
        "shippingPostalCode": "string",
        "userID": "integer",
        "userToken": "string",
        "kycPassed": "boolean",
        "failedKycAttempts": "integer",
        "kycApprovedDate": "date",
        "firstName": "string",
        "lastName": "string",
        "birthday": "string (date)",
        "gender": "string",
        "emailAddress": "string (email)",
        "residenceAddress": "string",
        "residenceAddress2": "string",
        "residenceCountryId": "string",
        "residenceCountryName": "string",
        "residenceStateProvinceId": "integer",
        "residenceCity": "string",
        "residencePostalCode": "string",
        "homePhone": "string",
        "mobilephone": "string",
        "workphone": "string",
        "proofAddressType": "string",
        "proofOfAddress": "string",
        "idTypeId": "string",
        "idUpload": "string",
        "ssn": "string",
        "driversLicenseNo": "string",
        "passportNumber": "string",
        "countryOfPassport": "string",
        "nationalId": "string",
        "lastErrorMessage": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Instant Registration

POST /essolo/register/instant

The intent of the register/instant API call is to perform KYC and onboarding in a single pass (assuming the customer did not fail KYC). In the event of a KYC failure, the user can reupload the needed documents/settings and settings as needed to rectify the matter.

registrationRequestId: integer
in formData

Unique ID for the request, from the Product Owner/Brand Partner, used to enforce idempotency in the Registration API.

If registrationRequestId has been provided by the API Invoker and isKycUpdate = False. Replay the exact previous API response for the registrationRequestId (for idepotance).

If the request ID has been provided by the API Invoker and isKYCUpdate = True & userID has a kycStatus of ‘KYC Failed’ - try to see if the data provided/updated for the request is sufficient to get a pass from Nestor.

If above = yes, continue with card registration.

If above = no, Error = ‘Sorry, this customer has not passed KYC, please resubmit revised KYC data using the same registrationRequestId from the initial request, and set isKycUpdate to True and resubmit KYC info.’

nestorProgramId: integer
in formData

Card Program ID found in the nestor system.
We will store this at the product level. We will obfuscate the Tern Platform Card ID from Program Owners and use the nestorProgramId in API communications, as an attempt to prevent unnecessary confusion.

(use this as lookup to determine if the product requires shipping or not. If the card does not require shipping - the correct Card Program ID is validated to ensure it matches the inventory record in the table correctly. In the event of a Program ID mismatch Error = ‘Program ID mismatch, please try again.')

Note: API Invoker can run the existing Card Programs API call to see what program IDs they have ability to select from.

isKycUpdate: boolean
in formData

True or False.

If True and User Status = KYC Failed - allow for a resubmission of KYC data to see if it passes. If it passes - continue with registration flow.

If it result = False, remain in KYC Failed Status but count the attempts (see output for failedKycAttempts field).

cardProcessorUniqueId: integer
in formData

An example of the unique id’s used to correlate to a given card, for a registered cardholder, per individual processors supported (connectivity wise) today are:

  • GTP = Customer ID
  • NI = Client ID

cardShippingMethod: integer
in formData

1 = standard, 2 = priority, 3 = rush delivery, 4 = registered mail [default = 1/standard]

firstName: string
in formData

First name

lastName: string
in formData

Last name

birthday: string (date)
in formData

Date of birth. Format: YYYY-MM-DD

gender: string
in formData

Gender, Male or Female

emailAddress: string (email)
in formData

Email address

residenceAddress: string
in formData

First address line

residenceAddress2: string
in formData

Second address line

residenceCountryId: string
in formData

ISO country code, 3 characters

residenceStateProvinceId: integer
in formData

Province Id. See the /provinces API.

residenceCity: string
in formData

City name

residencePostalCode: string
in formData

Zip/Postal code

homePhone: string
in formData

Home phone

mobilePhone: string
in formData

Mobile phone

workPhone: string
in formData

Work phone

proofAddressTypeId: integer
in formData

Proof type of your address. Available values: 1 - Utility Bill, 2 - Driver's License, 3 - Passport, 4 - National ID, 5 - Property Tax Receipt, 6 - Lease Agreement, 7 - Insurance Card, 8 - Landline Phone Statement, 9 - Bank Statement, 10 - Other

proofOfAddress: string
in formData

Base64 string of your address proof file. Only support .jpg, .png and .pdf files. Optional if proofOfAddressFile is provided.

proofOfAddressFile: file
in formData

Address proof file. Only support .jpg, .png and .pdf files. Optional and will be ignored if proofOfAddress is provided.

shippingAddress1: string
in formData

The place that the card will be shipped. This will only be required on shipped programs.

shippingAddress2: string
in formData

Shipping Address Line 2

shippingCountryId: string
in formData

ISO country code, 3 characters

shippingCountry: string
in formData

Shipping Country Name

shippingStateProvinceId: string
in formData

Province Id. See the /provinces API.

shippingCity: string
in formData

City Name

shippingPostalCode: string
in formData

Postal Code

idTypeId: integer
in formData

Available values: 1 - Driver's License, 2 - National ID, 3 - Passport, 4 - Social Security Card, 5 - Birth Certificate

idUpload: string
in formData

Base64 string of your id file. Only support .jpg, .png and .pdf files. Optional if idUploadFile is provided.

idUploadFile: file
in formData

Id file. Only support .jpg, .png and .pdf files. Optional and will be ignored if idUpload is provided.

ssn: string
in formData

Reqruied if you are in United States.

driverLicenseNo: string
in formData

Required if IDTypeID is 1

passportNumber: string
in formData

Required if IDTypeID is 3

countryOfPassport: string
in formData

Required if IDTypeID is 3. Country's full name. See card programs API for more details.

nationalId: string
in formData

Required if IDTypeID is other than 1 and 3.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "registrationRequestId": "integer",
        "submissonDateTime": "date",
        "programOwnerId": "string",
        "programOwnerName": "string",
        "nestorProgramId": "integer",
        "programName": "string",
        "issuingBankId": "integer",
        "issuingBankName": "string",
        "cardProcessor": "string",
        "isRegistered": "boolean",
        "registrationDateTime": "date",
        "userCardId": "integer",
        "cardRegistrationKey": "string",
        "cardCreationDate": "date",
        "cardStatus": "string",
        "cardCurrency": "string",
        "bin": "integer",
        "cardProcessorUniqueId": "integer",
        "cardShippingMethod": "integer",
        "shippingAddress1": "string",
        "shippingAddress2": "string",
        "shippingCountryId": "string",
        "shippingCountry": "string",
        "shippingStateProvinceId": "string",
        "shippingCity": "string",
        "shippingPostalCode": "string",
        "userID": "integer",
        "userToken": "string",
        "kycPassed": "boolean",
        "failedKycAttempts": "integer",
        "kycApprovedDate": "date",
        "firstName": "string",
        "lastName": "string",
        "birthday": "string (date)",
        "gender": "string",
        "emailAddress": "string (email)",
        "residenceAddress": "string",
        "residenceAddress2": "string",
        "residenceCountryId": "string",
        "residenceCountryName": "string",
        "residenceStateProvinceId": "integer",
        "residenceCity": "string",
        "residencePostalCode": "string",
        "homePhone": "string",
        "mobilephone": "string",
        "workphone": "string",
        "proofAddressType": "string",
        "proofOfAddress": "string",
        "idTypeId": "string",
        "idUpload": "string",
        "ssn": "string",
        "driversLicenseNo": "string",
        "passportNumber": "string",
        "countryOfPassport": "string",
        "nationalId": "string",
        "lastErrorMessage": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Resubmit registration KYC

POST /essolo/register/instant

The intent of the register/instant API call is to perform KYC and onboarding in a single pass (assuming the customer did not fail KYC). In the event of a KYC failure, the user can reupload the needed documents/settings and settings as needed to rectify the matter.

registrationRequestId: integer
in formData

Unique ID for the request, from the Product Owner/Brand Partner, used to enforce idempotency in the Registration API.

If registrationRequestId has been provided by the API Invoker and isKycUpdate = False. Replay the exact previous API response for the registrationRequestId (for idepotance).

If the request ID has been provided by the API Invoker and isKYCUpdate = True & userID has a kycStatus of ‘KYC Failed’ - try to see if the data provided/updated for the request is sufficient to get a pass from Nestor.

If above = yes, continue with card registration.

If above = no, Error = ‘Sorry, this customer has not passed KYC, please resubmit revised KYC data using the same registrationRequestId from the initial request, and set isKycUpdate to True and resubmit KYC info.’

nestorProgramId: integer
in formData

Card Program ID found in the nestor system.
We will store this at the product level. We will obfuscate the Tern Platform Card ID from Program Owners and use the nestorProgramId in API communications, as an attempt to prevent unnecessary confusion.

(use this as lookup to determine if the product requires shipping or not. If the card does not require shipping - the correct Card Program ID is validated to ensure it matches the inventory record in the table correctly. In the event of a Program ID mismatch Error = ‘Program ID mismatch, please try again.')

Note: API Invoker can run the existing Card Programs API call to see what program IDs they have ability to select from.

isKycUpdate: boolean
in formData

True or False.

If True and User Status = KYC Failed - allow for a resubmission of KYC data to see if it passes. If it passes - continue with registration flow.

If it result = False, remain in KYC Failed Status but count the attempts (see output for failedKycAttempts field).

cardProcessorUniqueId: integer
in formData

An example of the unique id’s used to correlate to a given card, for a registered cardholder, per individual processors supported (connectivity wise) today are:

  • GTP = Customer ID
  • NI = Client ID

cardShippingMethod: integer
in formData

1 = standard, 2 = priority, 3 = rush delivery, 4 = registered mail [default = 1/standard]

firstName: string
in formData

First name

lastName: string
in formData

Last name

birthday: string (date)
in formData

Date of birth. Format: YYYY-MM-DD

gender: string
in formData

Gender, Male or Female

emailAddress: string (email)
in formData

Email address

residenceAddress: string
in formData

First address line

residenceAddress2: string
in formData

Second address line

residenceCountryId: string
in formData

ISO country code, 3 characters

residenceStateProvinceId: integer
in formData

Province Id. See the /provinces API.

residenceCity: string
in formData

City name

residencePostalCode: string
in formData

Zip/Postal code

homePhone: string
in formData

Home phone

mobilePhone: string
in formData

Mobile phone

workPhone: string
in formData

Work phone

proofAddressTypeId: integer
in formData

Proof type of your address. Available values: 1 - Utility Bill, 2 - Driver's License, 3 - Passport, 4 - National ID, 5 - Property Tax Receipt, 6 - Lease Agreement, 7 - Insurance Card, 8 - Landline Phone Statement, 9 - Bank Statement, 10 - Other

proofOfAddress: string
in formData

Base64 string of your address proof file. Only support .jpg, .png and .pdf files. Optional if proofOfAddressFile is provided.

proofOfAddressFile: file
in formData

Address proof file. Only support .jpg, .png and .pdf files. Optional and will be ignored if proofOfAddress is provided.

shippingAddress1: string
in formData

The place that the card will be shipped. This will only be required on shipped programs.

shippingAddress2: string
in formData

Shipping Address Line 2

shippingCountryId: string
in formData

ISO country code, 3 characters

shippingCountry: string
in formData

Shipping Country Name

shippingStateProvinceId: string
in formData

Province Id. See the /provinces API.

shippingCity: string
in formData

City Name

shippingPostalCode: string
in formData

Postal Code

idTypeId: integer
in formData

Available values: 1 - Driver's License, 2 - National ID, 3 - Passport, 4 - Social Security Card, 5 - Birth Certificate

idUpload: string
in formData

Base64 string of your id file. Only support .jpg, .png and .pdf files. Optional if idUploadFile is provided.

idUploadFile: file
in formData

Id file. Only support .jpg, .png and .pdf files. Optional and will be ignored if idUpload is provided.

ssn: string
in formData

Reqruied if you are in United States.

driverLicenseNo: string
in formData

Required if IDTypeID is 1

passportNumber: string
in formData

Required if IDTypeID is 3

countryOfPassport: string
in formData

Required if IDTypeID is 3. Country's full name. See card programs API for more details.

nationalId: string
in formData

Required if IDTypeID is other than 1 and 3.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "registrationRequestId": "integer",
        "submissonDateTime": "date",
        "programOwnerId": "string",
        "programOwnerName": "string",
        "nestorProgramId": "integer",
        "programName": "string",
        "issuingBankId": "integer",
        "issuingBankName": "string",
        "cardProcessor": "string",
        "isRegistered": "boolean",
        "registrationDateTime": "date",
        "userCardId": "integer",
        "cardRegistrationKey": "string",
        "cardCreationDate": "date",
        "cardStatus": "string",
        "cardCurrency": "string",
        "bin": "integer",
        "cardProcessorUniqueId": "integer",
        "cardShippingMethod": "integer",
        "shippingAddress1": "string",
        "shippingAddress2": "string",
        "shippingCountryId": "string",
        "shippingCountry": "string",
        "shippingStateProvinceId": "string",
        "shippingCity": "string",
        "shippingPostalCode": "string",
        "userID": "integer",
        "userToken": "string",
        "kycPassed": "boolean",
        "failedKycAttempts": "integer",
        "kycApprovedDate": "date",
        "firstName": "string",
        "lastName": "string",
        "birthday": "string (date)",
        "gender": "string",
        "emailAddress": "string (email)",
        "residenceAddress": "string",
        "residenceAddress2": "string",
        "residenceCountryId": "string",
        "residenceCountryName": "string",
        "residenceStateProvinceId": "integer",
        "residenceCity": "string",
        "residencePostalCode": "string",
        "homePhone": "string",
        "mobilephone": "string",
        "workphone": "string",
        "proofAddressType": "string",
        "proofOfAddress": "string",
        "idTypeId": "string",
        "idUpload": "string",
        "ssn": "string",
        "driversLicenseNo": "string",
        "passportNumber": "string",
        "countryOfPassport": "string",
        "nationalId": "string",
        "lastErrorMessage": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card information

Card Transactions

GET /essolo/transactions

Card usage details.

userCardId: integer
in query

The card want to check transaction history. It should be the value of 'userCardId' field in result of member info or card list APIs

startAt: string (date)
in query

Start date filter. Format: YYYY-MM-DD

endAt: string (date)
in query

End date filter. Format: YYYY-MM-DD

number: integer
in query

Max transactions to return. Defaults to 100

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Issue card

POST /card/issue

The card must be issued before loading or using.

userCardId: integer
in formData

The user card want to issue. It should be the value of userCardId field in the response of member info or card list API. See Card Programs API and Member Info API

cardId: integer
in formData

The card program card type you want to use to issue a new card. This parameter will be ignored if userCardId is specified, and is required if userCardId is not specified. The total cards amount cannot exceed the cardsAllowed value in card program settings. See Card Programs API

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card list

GET /card/list

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "card": {
                "id": "integer",
                "name": "string",
                "description": "string",
                "benefit": "string",
                "minLoadAmount": "number (float)",
                "maxLoadAmount": "number (float)",
                "maxBalance": "number (float)",
                "currencies": [
                    "string"
                ],
                "artwork": "string",
                "network": "string"
            },
            "hash": "string",
            "pan": "string",
            "holder": "string",
            "balance": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "status": "string",
            "issued": "boolean",
            "lastTransaction": {
                "id": "integer",
                "tranId": "string",
                "amount": "integer",
                "currency": "string",
                "coin": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                },
                "balance": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                },
                "time": "string (date)",
                "merchant": {
                    "id": "integer",
                    "name": "string",
                    "type": "string",
                    "mcc": "string",
                    "list": "string"
                },
                "type": "string",
                "description": "string",
                "order": "integer"
            }
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card detail

GET /card/detail

Check card's balance and other information.

userCardId: integer
in query

The card want to check balance. It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

refresh: boolean
in query

Whether to get latest card balance.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "card": {
            "id": "integer",
            "name": "string",
            "description": "string",
            "benefit": "string",
            "minLoadAmount": "number (float)",
            "maxLoadAmount": "number (float)",
            "maxBalance": "number (float)",
            "currencies": [
                "string"
            ],
            "artwork": "string",
            "network": "string"
        },
        "hash": "string",
        "pan": "string",
        "holder": "string",
        "balance": "integer",
        "currency": "string",
        "coin": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "status": "string",
        "issued": "boolean",
        "lastTransaction": {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card protected data

POST /card/protected-data

Get card's protected data such as full number, expiration date and cvc.

userCardId: integer
in query

It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

user_pin: string
in query

3-Digit Security PIN.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "number": "string",
        "expireAt": "string (date)",
        "cvc": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Authentication

Login

POST /auth/login

username: string
in formData

Email or username

password: string
in formData

Password

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "token": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Forgot password

POST /auth/forgot-password

Request to reset password. Each account can only request to reset password once in 2 hrs.

username: string
in formData

Email or username

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Reset password

POST /auth/reset-password

auth_code: string
in formData

Should be retrieved from the email sent via forgot password API

password: string (password)
in formData

New password. Minimum 7 characters include uppercase, lowercase and numeric

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Logout

POST /auth/logout

Token will be expired after logging out.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Load card

Step 1: Query payment

POST /load/query-payment

Get available load methods, and related pay amount(with fee) and supported currencies.

userCardId: integer
in formData

The card want to issue. It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

amount: number (integer) x ≥ 1
in formData

Load amount(minor unit) in card's currency. The currency is set in personal info step. Load amount should be between maximum and minimum limit of the card type. The card balance shouldn't exceed the maximum balance limit of the card type. See Card Programs API and Member Info API

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "amountText": "string",
        "pendingExceed": "string",
        "methods": [
            {
                "id": "integer",
                "name": "string",
                "artwork": "string",
                "partner": {
                    "id": "integer",
                    "name": "string"
                },
                "loadFee": "string",
                "payAmounts": [
                    {
                        "amount": "integer",
                        "currency": "string",
                        "formatted": "string",
                        "symbol": "string,"
                    }
                ]
            }
        ]
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 2: Quote payment

POST /load/quote-payment

Get the payment details include load fee, membership fee, other possible fees, possible discounts, and the final amount user need to pay. Non-reloadable card can only be loaded once. Membership fee will be charged in first load attempt. Load fee will be charged in each load attempt.

userCardId: integer
in formData

The card want to issue. It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

amount: number (integer) x ≥ 1
in formData

Load amount(minor unit) in card's currency. The currency is set in personal info step. Load amount should be between maximum and minimum limit of the card type. The card balance shouldn't exceed the maximum balance limit of the card type. See Card Programs API and Member Info API

partner: integer
in formData

Load partner Id. See Card Programs API

method: integer
in formData

Load method Id. See Card Programs API

currency: string
in formData

Pay in which currency. It must be supported by the load method. See Card Programs API

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "partner": "string",
        "method": "string",
        "currency": "string",
        "loadAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "loadFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "membershipFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "replacementFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "otherFees": [
            {
                "type": "string",
                "amount": "string",
                "currency": "string",
                "coin": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                }
            }
        ],
        "totalAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "loadFeeDiscount": "string",
        "membershipFeeDiscount": "string",
        "payAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        }
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 3: Create payment

POST /load/create-payment

Submit the load order. This API will actually create the payment and return the pay instruction.

loadId: integer
in formData

The load Id in the quote payment API response

issuerId: string
in formData

Issuer (Bank) Id. Required if load method is 'iDeal'. See Load Method Issuers API

state: string
in formData

State/Region (2 letter state code). Required if load method is 'BrazilPayBoleto'

documentId: string
in formData

Document Id (CPF/CNPJ). Required if load method is 'BrazilPayBoleto'

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "redirect": "string",
        "instruction": [
            {
                "key": "string",
                "value": "string"
            }
        ]
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Step 4: Payment status

POST /load/payment-status

Get the payment detail includes status and transaction number

loadId: integer
in formData

The load Id in the quote payment API response

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "status": "string",
        "transactionNo": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Load history

GET /load/history

Load card history details.

userCardId: integer
in query

The card want to check load history. It should be the value of 'userCardId' field in result of member info or card list APIs

startAt: string (date)
in query

Start date filter. Format: YYYY-MM-DD

endAt: string (date)
in query

End date filter. Format: YYYY-MM-DD

status: string
in query

Load status filter. Default is 'loaded'

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "partner": "string",
            "method": "string",
            "transactionId": "string",
            "totalAmount": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "totalCost": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "totalReceived": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "loadAmount": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "loadFee": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "membershipFee": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "replacementFee": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "discount": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "createdAt": "string (date)",
            "loadAt": "string (date)",
            "order": "integer"
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Status changes

Inactivate card

POST /card/inactivate

Status will be synced to card issuer. Balance will be unloaded if the unload parameter is true.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

userCardId: integer
in formData

The card want to update status. It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

unload: boolean
in formData

Whether to unload the card before deactivating it.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Activate card

POST /card/activate

Status will be synced to card issuer.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

userCardId: integer
in formData

The card want to update status. It should be the value of userCardId field in result of member info API. See Card Programs API and Member Info API

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Close card

POST /card/close

Status will be synced to card issuer. Balance will be unloaded. The user is able to register another card.

requestId: string
in formData

Unique ID for the request. It will be returned in the response. You can query the result of previous request with the same requestId and GET method. This parameter is optional but recommended.

userCardId: integer
in formData

The card want to update status.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Reshipper

Card billing address

GET /reshipper

Get user card's billing address detail.

userCardId: integer
in query

The card want to get billing address.

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "reshipper": {
            "id": "integer",
            "name": "string",
            "address": "string",
            "dba": "string",
            "autoSignup": "boolean"
        },
        "address": {
            "id": "integer",
            "name": "string",
            "default": "string",
            "primary": "string",
            "second": "string",
            "phone": "string",
            "country": "string",
            "state": "string",
            "city": "string",
            "zipCode": "string"
        },
        "custom": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card transaction

Statement activity

GET /transaction/statement-activity

Includes card usages, load card, and charge fee history.

userCardId: integer
in query

The card want to check statement activity. It should be the value of 'userCardId' field in result of member info or card list APIs

startAt: string (date)
in query

Start date filter. Format: YYYY-MM-DD

endAt: string (date)
in query

End date filter. Format: YYYY-MM-DD

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "date": "string",
        "description": "string",
        "amount": "string",
        "currency": "string",
        "merchant": "string",
        "mcc": "string",
        "type": "string",
        "balance": "string"
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Transaction history

GET /transaction/history

Card usage details.

userCardId: integer
in query

The card want to check transaction history. It should be the value of 'userCardId' field in result of member info or card list APIs

startAt: string (date)
in query

Start date filter. Format: YYYY-MM-DD

endAt: string (date)
in query

End date filter. Format: YYYY-MM-DD

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    ]
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

User

Request PIN

POST /user/pin/request

Send the 3-Digit Security PIN to user's phone. Used to update profile or access card secure data.

phone_type: string
in formData

'mobile_phone', 'work_phone' or 'home_phone'

msg_type: string
in formData

'SMS' or 'Voice' message

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Verify PIN

POST /user/pin/verify

Verify if the 3-Digit Security PIN is correct. User will be blocked if failed 5 times.

user_pin: string
in formData

3-Digit Security PIN

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Card and transaction summary

GET /user/summary

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "coin": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "balance": "integer",
        "currency": "string",
        "activeCard": "integer",
        "lastTransaction": {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

User profile

GET /user/profile

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "firstName": "string",
        "lastName": "string",
        "fullName": "string",
        "username": "string",
        "email": "string",
        "gender": "string",
        "locked": "string",
        "avatar": "string",
        "birthday": "string (date)",
        "address": "string",
        "address2": "string",
        "country": {
            "id": "integer",
            "name": "string",
            "iso": "string",
            "iso3": "string",
            "phoneCode": "string",
            "region": "string"
        },
        "state": {
            "id": "integer",
            "name": "string",
            "abbr": "string"
        },
        "status": "string",
        "city": "string",
        "zip": "string",
        "homePhone": "string",
        "mobilePhone": "string",
        "workPhone": "string",
        "vip": "boolean",
        "flags": [
            "string"
        ]
    }
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Update profile

POST /user/profile/update

Only provide the parameters that you want to update. Some fields like firstName, lastName, birthday won't be updated if they have been provided in ID document. Request's Content-Type should be multipart/form-data if parameter picture is provided.

firstName: string
in formData

First name

lastName: string
in formData

Last name

emailAddress: string
in formData

Email address

birthday: string (date)
in formData

Day of birth. Format: YYYY-MM-DD.

address: string
in formData

First address line

addressline: string
in formData

Second address line

state: integer
in formData

State ID

city: string
in formData

City name

code: string
in formData

3-Digit Security Pin or last 4 digits of ID document. Required if you want to update any phone number(Any of them are provided in parameters)

phone: string
in formData

Home phone

mobilephone: string
in formData

Mobile phone

workphone: string
in formData

Work phone

zip: string
in formData

Zip/Postal code

password: string (password)
in formData

New password. Minimum 7 characters include uppercase, lowercase and numeric

picture: file
in formData

Profile picture. At most 20MB.

200 OK

400 Bad Request

Parameter error

401 Unauthorized

Authentication Required

403 Forbidden

Failed to authenticate

Response Example (200 OK)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (400 Bad Request)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (401 Unauthorized)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}
Response Example (403 Forbidden)
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

Schema Definitions

Response: object

success: boolean

Operation failed or not

message: string

Error or success message

data: object

Operation Result

Example
{
    "success": "boolean",
    "message": "string",
    "data": "object"
}

CardProgramsResponse: object

success: boolean

message: string

data: CardProgram
CardProgram

Example
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string",
            "supportDDA": "boolean",
            "supportExpense": "boolean",
            "cardsAllowed": "integer",
            "bin": "string",
            "deliveryMethod": "string",
            "kycProviderProgram": "string",
            "cards": [
                {
                    "id": "integer",
                    "name": "string",
                    "description": "string",
                    "benefit": "string",
                    "minLoadAmount": "number (float)",
                    "maxLoadAmount": "number (float)",
                    "maxBalance": "number (float)",
                    "currencies": [
                        "string"
                    ],
                    "artwork": "string",
                    "network": "string"
                }
            ],
            "countries": [
                {
                    "country": {
                        "id": "integer",
                        "name": "string",
                        "iso": "string",
                        "iso3": "string",
                        "phoneCode": "string",
                        "region": "string"
                    },
                    "idVerifications": [
                        {
                            "type": "string",
                            "side": "string"
                        }
                    ],
                    "loadPartners": [
                        {
                            "id": "integer",
                            "name": "string",
                            "methods": [
                                {
                                    "id": "integer",
                                    "name": "string",
                                    "icon": "string",
                                    "currencies": [
                                        "string"
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ],
            "reshippers": [
                {
                    "reshipper": {
                        "id": "integer",
                        "name": "string",
                        "address": "string",
                        "dba": "string",
                        "autoSignup": "boolean"
                    },
                    "addresses": [
                        {
                            "id": "integer",
                            "name": "string",
                            "default": "string",
                            "primary": "string",
                            "second": "string",
                            "phone": "string",
                            "country": "string",
                            "state": "string",
                            "city": "string",
                            "zipCode": "string"
                        }
                    ]
                }
            ]
        }
    ]
}

ProvincesResponse: object

success: boolean

message: string

data: State
State

Example
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string",
            "abbr": "string"
        }
    ]
}

VerifyEmailResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "userId": "integer",
        "token": "string",
        "userCardId": "integer"
    }
}

IdVerificationUploadResponse: object

success: boolean

message: string

data: object

response detail

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "reference": "string"
    }
}

IdVerificationRetrieveResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "processed": "boolean",
        "number": "string",
        "requireIssueDate": "boolean",
        "requireExpiryDate": "boolean"
    }
}

IdVerificationStatusResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "type": "string",
        "issueAt": "string",
        "expireAt": "string",
        "bornAt": "string",
        "status": "string",
        "number": "string",
        "reason": "string"
    }
}

LoginResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "token": "string"
    }
}

QueryPaymentResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "amountText": "string",
        "pendingExceed": "string",
        "methods": [
            {
                "id": "integer",
                "name": "string",
                "artwork": "string",
                "partner": {
                    "id": "integer",
                    "name": "string"
                },
                "loadFee": "string",
                "payAmounts": [
                    {
                        "amount": "integer",
                        "currency": "string",
                        "formatted": "string",
                        "symbol": "string,"
                    }
                ]
            }
        ]
    }
}

QueryPaymentMethod: object

id: integer

Load method id

name: string

Load method name

artwork: string

Load method image URL

partner: object

loadFee: string

Formatted load fee detail

payAmounts: Coin
Coin

Example
{
    "id": "integer",
    "name": "string",
    "artwork": "string",
    "partner": {
        "id": "integer",
        "name": "string"
    },
    "loadFee": "string",
    "payAmounts": [
        {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        }
    ]
}

QuotePaymentResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "partner": "string",
        "method": "string",
        "currency": "string",
        "loadAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "loadFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "membershipFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "replacementFee": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "otherFees": [
            {
                "type": "string",
                "amount": "string",
                "currency": "string",
                "coin": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                }
            }
        ],
        "totalAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "loadFeeDiscount": "string",
        "membershipFeeDiscount": "string",
        "payAmount": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        }
    }
}

QuotePaymentOtherFee: object

type: string

Other fee type

amount: string

Other fee amount

currency: string

ISO currency code

coin: Coin

Example
{
    "type": "string",
    "amount": "string",
    "currency": "string",
    "coin": {
        "amount": "integer",
        "currency": "string",
        "formatted": "string",
        "symbol": "string,"
    }
}

CreatePaymentResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "redirect": "string",
        "instruction": [
            {
                "key": "string",
                "value": "string"
            }
        ]
    }
}

CreatePaymentInstruction: object

key: string

value: string

Example
{
    "key": "string",
    "value": "string"
}

PaymentStatusResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "status": "string",
        "transactionNo": "string"
    }
}

CardDetailResponse: object

success: boolean

message: string

data: UserCard

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "card": {
            "id": "integer",
            "name": "string",
            "description": "string",
            "benefit": "string",
            "minLoadAmount": "number (float)",
            "maxLoadAmount": "number (float)",
            "maxBalance": "number (float)",
            "currencies": [
                "string"
            ],
            "artwork": "string",
            "network": "string"
        },
        "hash": "string",
        "pan": "string",
        "holder": "string",
        "balance": "integer",
        "currency": "string",
        "coin": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "status": "string",
        "issued": "boolean",
        "lastTransaction": {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    }
}

CardProtectedDataResponse: object

success: boolean

message: string

data: UserCardProtectedData

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "id": "integer",
        "number": "string",
        "expireAt": "string (date)",
        "cvc": "string"
    }
}

UserSummaryResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "coin": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "balance": "integer",
        "currency": "string",
        "activeCard": "integer",
        "lastTransaction": {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    }
}

CardListResponse: object

success: boolean

message: string

data: UserCard
UserCard

Example
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "card": {
                "id": "integer",
                "name": "string",
                "description": "string",
                "benefit": "string",
                "minLoadAmount": "number (float)",
                "maxLoadAmount": "number (float)",
                "maxBalance": "number (float)",
                "currencies": [
                    "string"
                ],
                "artwork": "string",
                "network": "string"
            },
            "hash": "string",
            "pan": "string",
            "holder": "string",
            "balance": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "status": "string",
            "issued": "boolean",
            "lastTransaction": {
                "id": "integer",
                "tranId": "string",
                "amount": "integer",
                "currency": "string",
                "coin": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                },
                "balance": {
                    "amount": "integer",
                    "currency": "string",
                    "formatted": "string",
                    "symbol": "string,"
                },
                "time": "string (date)",
                "merchant": {
                    "id": "integer",
                    "name": "string",
                    "type": "string",
                    "mcc": "string",
                    "list": "string"
                },
                "type": "string",
                "description": "string",
                "order": "integer"
            }
        }
    ]
}

UserCard: object

id: integer

card: CardProgramCardType

hash: string

pan: string

May be null

holder: string

May be null

balance: integer

May be null

currency: string

coin: Coin

status: string active, inactive

inactive status also means closed

issued: boolean

lastTransaction: UserCardTransaction

May be null

Example
{
    "id": "integer",
    "card": {
        "id": "integer",
        "name": "string",
        "description": "string",
        "benefit": "string",
        "minLoadAmount": "number (float)",
        "maxLoadAmount": "number (float)",
        "maxBalance": "number (float)",
        "currencies": [
            "string"
        ],
        "artwork": "string",
        "network": "string"
    },
    "hash": "string",
    "pan": "string",
    "holder": "string",
    "balance": "integer",
    "currency": "string",
    "coin": {
        "amount": "integer",
        "currency": "string",
        "formatted": "string",
        "symbol": "string,"
    },
    "status": "string",
    "issued": "boolean",
    "lastTransaction": {
        "id": "integer",
        "tranId": "string",
        "amount": "integer",
        "currency": "string",
        "coin": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "balance": {
            "amount": "integer",
            "currency": "string",
            "formatted": "string",
            "symbol": "string,"
        },
        "time": "string (date)",
        "merchant": {
            "id": "integer",
            "name": "string",
            "type": "string",
            "mcc": "string",
            "list": "string"
        },
        "type": "string",
        "description": "string",
        "order": "integer"
    }
}

UserCardProtectedData: object

id: integer

number: string

Full card number

expireAt: string (date)

cvc: string

Example
{
    "id": "integer",
    "number": "string",
    "expireAt": "string (date)",
    "cvc": "string"
}

StatementActivityResponse: object

success: boolean

message: string

data: object

Example
{
    "success": "boolean",
    "message": "string",
    "data": {
        "date": "string",
        "description": "string",
        "amount": "string",
        "currency": "string",
        "merchant": "string",
        "mcc": "string",
        "type": "string",
        "balance": "string"
    }
}

CardTransactionHistoryResponse: object

success: boolean

message: string

data: UserCardTransaction
UserCardTransaction

Example
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "tranId": "string",
            "amount": "integer",
            "currency": "string",
            "coin": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "balance": {
                "amount": "integer",
                "currency": "string",
                "formatted": "string",
                "symbol": "string,"
            },
            "time": "string (date)",
            "merchant": {
                "id": "integer",
                "name": "string",
                "type": "string",
                "mcc": "string",
                "list": "string"
            },
            "type": "string",
            "description": "string",
            "order": "integer"
        }
    ]
}

LoadMethodIssuersResponse: object

success: boolean

message: string

data: LoadMethodIssuer
LoadMethodIssuer

Example
{
    "success": "boolean",
    "message": "string",
    "data": [
        {
            "id": "integer",
            "name": "string"
        }
    ]
}

CardProgram: object

id: integer

name: string

supportDDA: boolean

supportExpense: boolean

cardsAllowed: integer

The max cards user can hold. 0 means no limit.

bin: string

6-8 digit BIN of a card

deliveryMethod: string

hand = Hand to customer directly (instant issue), while mail = Mail to customer (requires shipping)

kycProviderProgram: string

Program Id of the KYC Provider if required

cards: CardProgramCardType
CardProgramCardType

countries: CardProgramCountry
CardProgramCountry

reshippers: CardProgramReshipper
CardProgramReshipper

Example
{
    "id": "integer",
    "name": "string",
    "supportDDA": "boolean",
    "supportExpense": "boolean",
    "cardsAllowed": "integer",
    "bin": "string",
    "deliveryMethod": "string",
    "kycProviderProgram": "string",
    "cards": [
        {
            "id": "integer",
            "name": "string",
            "description": "string",
            "benefit": "string",
            "minLoadAmount": "number (float)",
            "maxLoadAmount": "number (float)",
            "maxBalance": "number (float)",
            "currencies": [
                "string"
            ],
            "artwork": "string",
            "network": "string"
        }
    ],
    "countries": [
        {
            "country": {
                "id": "integer",
                "name": "string",
                "iso": "string",
                "iso3": "string",
                "phoneCode": "string",
                "region": "string"
            },
            "idVerifications": [
                {
                    "type": "string",
                    "side": "string"
                }
            ],
            "loadPartners": [
                {
                    "id": "integer",
                    "name": "string",
                    "methods": [
                        {
                            "id": "integer",
                            "name": "string",
                            "icon": "string",
                            "currencies": [
                                "string"
                            ]
                        }
                    ]
                }
            ]
        }
    ],
    "reshippers": [
        {
            "reshipper": {
                "id": "integer",
                "name": "string",
                "address": "string",
                "dba": "string",
                "autoSignup": "boolean"
            },
            "addresses": [
                {
                    "id": "integer",
                    "name": "string",
                    "default": "string",
                    "primary": "string",
                    "second": "string",
                    "phone": "string",
                    "country": "string",
                    "state": "string",
                    "city": "string",
                    "zipCode": "string"
                }
            ]
        }
    ]
}

CardProgramCardType: object

id: integer

name: string

description: string

benefit: string

minLoadAmount: number (float)

Minimum load amount in USD cents

maxLoadAmount: number (float)

Maximum load amount in USD cents

maxBalance: number (float)

Minimum card balance in USD cents

currencies: string[]
string

artwork: string

Card's image url

network: string visa, master

Visa or MasterCard

Example
{
    "id": "integer",
    "name": "string",
    "description": "string",
    "benefit": "string",
    "minLoadAmount": "number (float)",
    "maxLoadAmount": "number (float)",
    "maxBalance": "number (float)",
    "currencies": [
        "string"
    ],
    "artwork": "string",
    "network": "string"
}

CardProgramCountry: object

country: Country

idVerifications: IdVerificationRequirement
IdVerificationRequirement

Id verification requirements

loadPartners: LoadPartner
LoadPartner

Available load partners in this card program

Example
{
    "country": {
        "id": "integer",
        "name": "string",
        "iso": "string",
        "iso3": "string",
        "phoneCode": "string",
        "region": "string"
    },
    "idVerifications": [
        {
            "type": "string",
            "side": "string"
        }
    ],
    "loadPartners": [
        {
            "id": "integer",
            "name": "string",
            "methods": [
                {
                    "id": "integer",
                    "name": "string",
                    "icon": "string",
                    "currencies": [
                        "string"
                    ]
                }
            ]
        }
    ]
}

CardProgramReshipper: object

reshipper: Reshipper

addresses: Address
Address

Example
{
    "reshipper": {
        "id": "integer",
        "name": "string",
        "address": "string",
        "dba": "string",
        "autoSignup": "boolean"
    },
    "addresses": [
        {
            "id": "integer",
            "name": "string",
            "default": "string",
            "primary": "string",
            "second": "string",
            "phone": "string",
            "country": "string",
            "state": "string",
            "city": "string",
            "zipCode": "string"
        }
    ]
}

Country: object

id: integer

name: string

iso: string

ISO code (2 characters), for instance, US

iso3: string

ISO code (3 characters), for instance, USA

phoneCode: string

region: string EMEA, AMERICAS, APAC,

Example
{
    "id": "integer",
    "name": "string",
    "iso": "string",
    "iso3": "string",
    "phoneCode": "string",
    "region": "string"
}

Reshipper: object

id: integer

name: string

Custom means this card program support custom address

address: string

dba: string

autoSignup: boolean

true means this reshipper also support auto sign up

Example
{
    "id": "integer",
    "name": "string",
    "address": "string",
    "dba": "string",
    "autoSignup": "boolean"
}

IdVerificationRequirement: object

type: string PSP, ID, DL

side: string BOTH, FRONT, BACK

Example
{
    "type": "string",
    "side": "string"
}

LoadPartner: object

id: integer

name: string

methods: LoadMethod
LoadMethod

Example
{
    "id": "integer",
    "name": "string",
    "methods": [
        {
            "id": "integer",
            "name": "string",
            "icon": "string",
            "currencies": [
                "string"
            ]
        }
    ]
}

LoadMethod: object

id: integer

name: string

icon: string

Load method's logo image

currencies: string[]
string

The currency list this load method support. ISO currency code.

Example
{
    "id": "integer",
    "name": "string",
    "icon": "string",
    "currencies": [
        "string"
    ]
}

Address: object

id: integer

name: string

default: string

primary: string

Same as default

second: string

May be null

phone: string

country: string

state: string

city: string

zipCode: string

Example
{
    "id": "integer",
    "name": "string",
    "default": "string",
    "primary": "string",
    "second": "string",
    "phone": "string",
    "country": "string",
    "state": "string",
    "city": "string",
    "zipCode": "string"
}

State: object

id: integer

name: string

abbr: string

Example
{
    "id": "integer",
    "name": "string",
    "abbr": "string"
}

UserCardTransaction: object

id: integer

tranId: string

Internal transaction ID

amount: integer

currency: string

coin: Coin

balance: Coin

time: string (date)

merchant: Merchant

May be null

type: string Credet, Debit

description: string

order: integer

Transaction order of the user card. Start from 1. Only count for POS purchase(00040) May be null

Example
{
    "id": "integer",
    "tranId": "string",
    "amount": "integer",
    "currency": "string",
    "coin": {
        "amount": "integer",
        "currency": "string",
        "formatted": "string",
        "symbol": "string,"
    },
    "balance": {
        "amount": "integer",
        "currency": "string",
        "formatted": "string",
        "symbol": "string,"
    },
    "time": "string (date)",
    "merchant": {
        "id": "integer",
        "name": "string",
        "type": "string",
        "mcc": "string",
        "list": "string"
    },
    "type": "string",
    "description": "string",
    "order": "integer"
}

Merchant: object