VirtualCards.us API document API Reference

This is VirtualCards.us API documentation. 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. Swagger API document is also available.

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 info@terncommerce.com to get account, then login the system 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.

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: info@terncommerce.com
Request Content-Types: application/x-www-form-urlencoded
Response Content-Types: application/json
Schemes: https
Version: 1.0.0

Authentication

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

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",
      "customize": {
        "linkColor": "string",
        "linkActiveColor": "string"
      },
      "subDomain": "string",
      "logo": "string",
      "language": "string",
      "css": "string",
      "cards": [
        {
          "id": "integer",
          "name": "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"
}

States

GET /states

Get all states in the specified country

countryId: integer
in query

Country 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",
      "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"
}

Account Sign-up Process

Step 1: Member Info

POST /register/member-info
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 Male, Female
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

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 2: Verify email

POST /register/verify-email

Check if user's email address is reachable

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
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 Login, Register
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"
}

Authentication

Login

POST /auth/login
username: string
in formData

Email or username

password: string
in formData

Password

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": {
    "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"
}

Id verification

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 PSP, ID, DL
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 <a

 *                             href='#operation--id-verification-upload-post'>Id Verification Upload API</a>
reference: string
in query

Returned reference field of upload API. See <a

 *                                    href='#operation--id-verification-upload-post'>Id Verification Upload
 *                                    API</a>
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"
}

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 should'nt 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 should'nt 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 , initiated, pending, received, loaded, all loaded
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"
}

Card

Issue card

POST /card/issue

The card must be issued before loading or using.

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

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",
        "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",
        "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 false
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",
      "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",
      "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"
}

Inactivate card

POST /card/inactivate

Status will be synced to FirstView. Balance will be unloaded and saved as local balance. Unload fee will be charged.

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"
}

Activate card

POST /card/activate

Status will be synced to FirstView.

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"
}

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",
      "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 mobile_phone, work_phone, home_phone
in formData

'mobile_phone', 'work_phone' or 'home_phone'

msg_type: string SMS, Voice
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",
      "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

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

success: boolean
message: string
data: CardProgram
CardProgram
Example
{
  "success": "boolean",
  "message": "string",
  "data": [
    {
      "id": "integer",
      "name": "string",
      "customize": {
        "linkColor": "string",
        "linkActiveColor": "string"
      },
      "subDomain": "string",
      "logo": "string",
      "language": "string",
      "css": "string",
      "cards": [
        {
          "id": "integer",
          "name": "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"
            }
          ]
        }
      ]
    }
  ]
}

StatesResponse: 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
userId: integer

User ID. Save it so that you can call other APIs later.

token: string

User token. Add it to HTTP header with name "x-token" for future API request.

userCardId: integer

User Card ID. Save it so that you can call other APIs later.

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

IdVerificationUploadResponse: object

success: boolean
message: string
data: object

response detail

id: integer

Id verification ID. Save it so that you can call other APIs later.

reference: string

Reference used to track verify status and result. Save it so that you can call retrieve API later.

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

IdVerificationRetrieveResponse: object

success: boolean
message: string
data: object
processed: boolean

If verification is finished. Recall retrieve API later if it's false

number: string

Last 4 characters of the recognized ID number

requireIssueDate: boolean

Processed, but issue date is required to finish the id verification

requireExpiryDate: boolean

Processed, but expiry date is required to finish the id verification

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

LoginResponse: object

success: boolean
message: string
data: object
token: string

User token. Add it to HTTP header with name "x-token" for future API request.

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

QueryPaymentResponse: object

success: boolean
message: string
data: object
amountText: string
pendingExceed: string | null

If it's not null, the value is the max balance of card, which means user's all amounts in pending loads + his card balance + this load amount has exceed max card balance limit. Should alert user that the amount exceeding this limit won't be loaded. May be null

methods: QueryPaymentMethod
QueryPaymentMethod
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

Load method, partner, and pay amount details

id: integer

Load method id

name: string

Load method name

artwork: string

Load method image URL

partner: object
id: integer
name: string
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
id: integer

Load Id. Save it so that you can call other APIs later.

partner: string

Load partner name

method: string

Load method name

currency: string

User card's currency

loadAmount: Coin
loadFee: Coin
membershipFee: Coin
replacementFee: Coin
otherFees: QuotePaymentOtherFee
QuotePaymentOtherFee
totalAmount: Coin
loadFeeDiscount: string

Load fee discount

membershipFeeDiscount: string

Membership fee discount

payAmount: Coin
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

Other fees that charged directly in payAmount

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
redirect: string

Redirect url for some payment methods that user need to navigate to continue the payment

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

CreatePaymentInstruction: object

Instruction of payment details for some load methods that user need to perform the payment

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

PaymentStatusResponse: object

success: boolean
message: string
data: object
status: string
transactionNo: string
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",
      "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",
      "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
coin: Coin
balance: integer
currency: string
activeCard: integer

Active user card id. 0 means no active card.

lastTransaction: UserCardTransaction | null

May be null

Example
{
  "success": "boolean",
  "message": "string",
  "data": {
    "coin": {
      "amount": "integer",
      "currency": "string",
      "formatted": "string",
      "symbol": "string,"
    },
    "balance": "integer",
    "currency": "string",
    "activeCard": "integer",
    "lastTransaction": {
      "id": "integer",
      "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",
        "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",
        "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 | null

May be null

holder: string | null

May be null

balance: integer | null

May be null

currency: string
coin: Coin
status: string active, inactive

inactive status also means closed

issued: boolean
lastTransaction: UserCardTransaction | null

May be null

Example
{
  "id": "integer",
  "card": {
    "id": "integer",
    "name": "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",
    "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
date: string

ISO-8601 date format

description: string
amount: string
currency: string
merchant: string
mcc: string
type: string
balance: string
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",
      "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
customize: object

Maybe have more properties then listed

linkColor: string

Format: #ffffff

linkActiveColor: string

Format: #ffffff

subDomain: string

sub-domain name, for instance, 'usunlocked' in 'usunlocked.virtualcards.us'

logo: string

URL of logo

language: string en, zh, es, pt-BR, ja, ar

language key, en = English, zh = 中文(简体), es = Español, pt-BR = Português do Brasil, ja = にほんご, ar = العَرَبِيَّة

css: string

body of Cascading Style Sheets

cards: CardProgramCardType
CardProgramCardType
countries: CardProgramCountry
CardProgramCountry
reshippers: CardProgramReshipper
CardProgramReshipper
Example
{
  "id": "integer",
  "name": "string",
  "customize": {
    "linkColor": "string",
    "linkActiveColor": "string"
  },
  "subDomain": "string",
  "logo": "string",
  "language": "string",
  "css": "string",
  "cards": [
    {
      "id": "integer",
      "name": "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
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(deprecated) or MasterCard

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

CardProgramCountry: object

country: Country
idVerifications: IdVerificationRequirement

Id verification requirements

IdVerificationRequirement
loadPartners: LoadPartner

Available load partners in this card program

LoadPartner
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[]

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

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

Address: object

id: integer
name: string
default: string
primary: string

Same as default

second: string | null

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
amount: integer
currency: string
coin: Coin
balance: Coin
time: string (date)
merchant: Merchant
type: string Credet, Debit
description: string
order: integer | null

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

Example
{
  "id": "integer",
  "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

id: integer
name: string
type: string
mcc: string
list: string | null White, Grey, Restricted

May be null

Example
{
  "id": "integer",
  "name": "string",
  "type": "string",
  "mcc": "string",
  "list": "string"
}

LoadMethodIssuer: object

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

User: object

id: integer
firstName: string
lastName: string
fullName: string
username: string
email: string
gender: string Male, Female, null
locked: string Unlock, Lock
avatar: string | null

May be null

birthday: string (date)
address: string
address2: string | null

May be null

country: Country | null

May be null

state: State | null

May be null

status: string active, inactive, closed, banned, under_review
city: string | null

May be null

zip: string | null

May be null

homePhone: string | null

May be null

mobilePhone: string | null

May be null

workPhone: string | null

May be null

vip: boolean
flags: string[]
string
Example
{
  "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"
  ]
}

UserProfileResponse: object

success: boolean
message: string
data: User
Example
{
  "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"
    ]
  }
}

Coin: object

amount: integer

Minor unit of the currency

currency: string

ISO currency code

formatted: string

Formatted amount text in primary unit

symbol: string,

Currency symbol

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

UserReshipperResponse: object

success: boolean
message: string
data: object
reshipper: Reshipper
address: Address
custom: string

User's (mailbox) id in the reshipper

Example
{
  "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"
  }
}

LoadHistoryResponse: object

success: boolean
message: string
data: UserCardLoad
UserCardLoad
Example
{
  "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"
    }
  ]
}

UserCardLoad: object

id: integer
partner: string

Load partner name

method: string

Load method name

transactionId: string

Transaction ID

totalAmount: Coin
totalCost: Coin
totalReceived: Coin
loadAmount: Coin
loadFee: Coin
membershipFee: Coin
replacementFee: Coin
discount: Coin
createdAt: string (date)
loadAt: string (date)
order: integer

Load order

Example
{
  "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"
}

ErrorParamResponse: object

Parameter error

success: boolean

Operation failed or not

message: string

Error or success message

data: object

Operation Result

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

RequireAuthResponse: object

Authentication Required

success: boolean

Operation failed or not

message: string

Error or success message

data: object

Operation Result

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

AuthFailedResponse: object

Failed to authenticate

success: boolean

Operation failed or not

message: string

Error or success message

data: object

Operation Result

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