Using the API

URL

The API URLs:

Staging https://staging-paymentapi.masspay.io/v1/
Production https://paymentapi.masspay.io/v1/

Authentication

Authentication is managed using an API key that is provided to you. Every HTTP call to our API should contain a custom header called apiKey. The value of this header must be the API key.

Currencies and Amounts

To make our platform support all currencies and to prevent rounding errors, amounts are stored as natural numbers, paired with an exponent. This exponent defines at which position the decimal point/comma is placed, counting from the right.

Say we have and amount of 12.34 USD. It will be stored and presented as 1234 with an exponential of 2. Some currencies, like the Japanese Yen, have no exponent. A transaction amount of ¥1,000 JPY is stored as 1000.

Filtering and Searching

Filters can be used to interact with any object. Objects can be queried by appending parameters to the query string of the URL.

So to get a list of all settled US dollar transactions with an amount equal or greater than 75.00, we would use the following URL:

/v1/transaction?status=SETTLEMENT_COMPLETED&amount>=7500

It's also possible to filter multiple statuses at the same time. For example to retrieve all successful transactions:

/v1/transaction?status[]=SETTLEMENT_COMPLETED&status[]=SETTLEMENT_REQUESTED

Sorting

For list endpoints, you can specify the sort order using the query parameters _sort and _sort-.

Sort order ASC

  • Numerical from lowest first
  • Text in alphabetical order
  • Dates from earliest first

Query parameter: _sort=

/v1/transaction?_sort=created_at

Sort order DESC

  • Numerical from highest first
  • Text in reverse alphabetical order
  • Dates from latest first

Query parameter: _sort-=

/v1/transaction?_sort-=created_at

Populating Results

The API supports population. This means that fields that reference a certain object will be automatically resolved. Population can be achieved by providing the relevant fields the query parameter _populate.

As an example, let's take a payment profile object:

{
    "id": "7c23a50d-8699-431c-a82b-a78718d2b6f6",
    "organisation": "c96b2d81-51db-4a8a-a0e9-19918c168a3c",
    "name": "My profile",
    "currency_code": "USD",
    ...
}

To know the name of the organisation that this payment profile belongs to, we would have to make an api-call requesting the organisation with ID c96b2d81-51db-4a8a-a0e9-19918c168a3c.

Population allows us to let the server do this for us. If we call /paymentprofile/7c23a50d-8699-431c-a82b-a78718d2b6f6?_populate=organisation, we get the following results:

{
    "id": "7c23a50d-8699-431c-a82b-a78718d2b6f6",
    "organisation": {
        "id": "c96b2d81-51db-4a8a-a0e9-19918c168a3c",
        "name": "Example Company",
        "parent_id": "cc5a8e9b-a39a-4e53-b404-668a5426cca2"
    }
    "name": "My profile",
    "currency_code": "USD",
    ...
}

Like with filters it's also possible to populate multiple objects. As an example:

/v1/paymentprofile?_populate[]=organisation&_populate[]=bank_account

Timeout

For any non-GET operation, your system must wait at least 35 seconds for a reply before closing the connection.