Finance API (2.1)

Introduction

The Finance API is used to fetch finance-related information that is processed through Zettle. The information includes account balance, all the transactions processed through Zettle, and payout.

Base URL

ServerEnvironment
https://finance.izettle.com/v2 Production

Authentication

ZettleOauth

For more information, see the OAuth API documentation.

Security Scheme TypeOAuth2
authorizationCode OAuth Flow
Authorization URL: https://oauth.zettle.com/authorize
Token URL: https://oauth.zettle.com/token
Scopes:
  • READ:FINANCE -

    Access to read finance data

accounts

GETGet account balance

Returns the balance in a merchant's preliminary or liquid account at a specific time.

Request

SECURITY
ZettleOauth
READ:FINANCE

PATH PARAMETERS
accountTypeGrouprequiredstring

The type of a merchant's Zettle account. You can use one of the following account types:

  • PRELIMINARY account where transactions are to be confirmed.
  • LIQUID account where transactions are to be paid out to the merchant.

QUERY PARAMETERS
atstring<YYYY-MM-DDThh:mm:ss.sTZD>Default: NOW()

Used to fetch account balance at a certain point in time. The time is specified in ISO 8601 date time format with timezone. If this parameter is used, any transaction after that point will be ignored. If not, the balance of all transactions at the current point in time is returned. Make sure that you encode the characters that are not permitted in a URL. For example, "2022-03-01T12:42:10.452+02:00" must be URL encoded because "+" is not a valid query parameter character.


Responses

400

Returns when a required parameter is missing or in a wrong format in the request

401

Returns when one of the following occurs:

  • The authentication information is missing in the request.
  • The authentication token has expired.
  • The authentication token is invalid.
403

Returns when the scope being used in the request is incorrect.

GET/accounts/{accountTypeGroup}/balance
1
curl --request GET \
2
--url 'https://finance.izettle.com/v2/accounts/LIQUID/balance?at=2022-04-01T11:42:10.452-01:00' \
3
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
1
const request = require('request');
2
3
const options = {
4
method: 'GET',
5
url: 'https://finance.izettle.com/v2/accounts/LIQUID/balance',
6
qs: {at: '2022-04-01T11:42:10.452-01:00'},
7
headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
8
};
9
10
request(options, function (error, response, body) {
11
if (error) throw new Error(error);
12
13
console.log(body);
14
});
1
HttpResponse<String> response = Unirest.get("https://finance.izettle.com/v2/accounts/LIQUID/balance?at=2022-04-01T11:42:10.452-01:00")
2
.header("Authorization", "Bearer REPLACE_BEARER_TOKEN")
3
.asString();
1
import http.client
2
3
conn = http.client.HTTPSConnection("finance.izettle.com")
4
5
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
6
7
conn.request("GET", "/v2/accounts/LIQUID/balance?at=2022-04-01T11:42:10.452-01:00", headers=headers)
8
9
res = conn.getresponse()
10
data = res.read()
11
12
print(data.decode("utf-8"))
1
package main
2
3
import (
4
"fmt"
5
"net/http"
6
"io/ioutil"
7
)
8
9
func main() {
10
11
url := "https://finance.izettle.com/v2/accounts/LIQUID/balance?at=2022-04-01T11:42:10.452-01:00"
12
13
req, _ := http.NewRequest("GET", url, nil)
14
15
req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN")
16
17
res, _ := http.DefaultClient.Do(req)
18
19
defer res.Body.Close()
20
body, _ := ioutil.ReadAll(res.Body)
21
22
fmt.Println(res)
23
fmt.Println(string(body))
24
25
}
1
{
2
"totalBalance": 300,
3
"currencyId": "GBP"
4
}

GETGet account transactions

Returns all transactions or transactions of certain types from a merchant's preliminary or liquid account during a specific period.

Request

SECURITY
ZettleOauth
READ:FINANCE

PATH PARAMETERS
accountTypeGrouprequiredstring

The type of a merchant's Zettle account. You can use one of the following account types:

  • PRELIMINARY account where transactions are to be confirmed.
  • LIQUID account where transactions are to be paid out to the merchant.

QUERY PARAMETERS
startrequiredstring<YYYY-MM-DDThh:mm:ss.sTZD>

The start time in ISO 8601 date time format with timezone (inclusive) from when the transactions will be fetched. Make sure that you encode the characters that are not permitted in a URL. For example, "2022-03-01T12:42:10.452+02:00" must be URL encoded because "+" is not a valid query parameter character.

endrequiredstring<YYYY-MM-DDThh:mm:ss.sTZD>

The end time in ISO 8601 date time format with timezone (exclusive) before when the transactions will be fetched. Make sure that you encode the characters that are not permitted in a URL. For example, "2022-03-01T12:42:10.452+02:00" must be URL encoded because "+" is not a valid query parameter character.

includeTransactionTypearray

Specifies the transaction types to fetch. Multiple transaction types can be specified. Available transaction types are:

Transaction typeDescriptionApplicable for account type
ADJUSTMENTA bookkeeping adjustmentLIQUID, PRELIMINARY
ADVANCEThe cash advance given by Zettle to a merchant in the liquid account. A cash advance is a type of financing that is offered to merchants based on their sales history. The advance is paid back with monthly down payments.LIQUID
ADVANCE_DOWNPAYMENTA down payment on a previously paid out cash advance in the liquid account.LIQUID
ADVANCE_FEE_DOWNPAYMENTThe netting of a cash advance fee in the liquid account.LIQUID
BANK_ACCOUNT_VERIFICATION (Deprecated)Not applicable.Not applicable
CASHBACKMoney given to a merchant to retroactively adjust the card payment fee rate.LIQUID
FAILED_PAYOUTA previous payout transaction failed and was made void. The payout money is returned to the merchant's liquid account.LIQUID
FROZEN_FUNDSThe money that is frozen to cover a chargeback. When the issuing bank initiates a chargeback, the money will be removed from the merchant's liquid account and marked as frozen to cover the chargeback. If the chargeback is later revoked, the money will be returned to the merchant's liquid account with a new and positive transaction of the same type. It effectively makes the initial FROZEN_FUNDS transaction void.LIQUID
INVOICE_PAYMENTAn invoice payment. If an invoice is paid through a card payment, the payment type is PAYMENT.LIQUID, PRELIMINARY
INVOICE_PAYMENT_FEEAn invoice payment fee. If an invoice is paid through a card payment, the payment fee type is PAYMENT_FEE.LIQUID, PRELIMINARY
PAYMENTA payment where Zettle handles the funds. This includes any type of payment, such as card payments and other alternative payment methods. In the case of a refund, a transaction of the same type will occur but with the inverted amount. Contains a reference to the payment in the Purchase API.LIQUID, PRELIMINARY
PAYMENT_FEEThe fee for a payment where Zettle handles the funds. The amount is positive in case of a refund. Contains a reference to the payment fee in the Purchase API.LIQUID, PRELIMINARY
PAYMENT_PAYOUTA payment payout with a negative amount is a transfer of money for a single payment from merchant's liquid account to PayPal Wallet. A payment payout with a positive amount is a transfer of money for a refund from PayPal Wallet to the merchant's liquid account.LIQUID
PAYOUTA payout can be positive or negative. If the account balance is paid out from the merchant’s liquid account to the merchant’s bank account or to PayPal Wallet for PayPal users, the payout is negative. If the merchant’s configuration has a minimum account balance, the payout is the liquid account balance minus the minimum account balance. For example, if the account balance is £147 and the minimum account balance is £47, the payout is £100. For PayPal users, if a refund happens, a payout will be made from PayPal Wallet to the liquid account. In this case, the amount is positive.LIQUID

Note: Deprecated transaction types are no longer in use, but may appear in historic data.

limitintegerDefault: 10000

The maximum number of transactions to return in a response. You must specify limit with any integer greater than 0. To avoid a big dataset in a response, use limit and offset together to set response pagination. For example, to return only three transactions at a time from a collection of transactions for a specific period, set limit as 3 and offset as 0 in the first request. Then set limit as 3 and increment offset with 3 in the second request and repeat the request until all transactions are fetched.

offsetinteger0

The number of transactions to skip before beginning to return in a response. You must specify offset with any integer greater than or equal to 0. Use limit and offset together to set pagination on the response to avoid returning a big dataset.


Responses

400

Returns when a required parameter is missing or in a wrong format in the request.

401

Returns when one of the following occurs:

  • The authentication information is missing in the request.
  • The authentication token has expired.
  • The authentication token is invalid.
403

Returns when the scope being used in the request is incorrect.

GET/accounts/{accountTypeGroup}/transactions
1
curl --request GET \
2
--url 'https://finance.izettle.com/v2/accounts/LIQUID/transactions?start=2022-04-01T11:42:10.452-01:00&end=2022-04-01T11:42:10.452-01:00&includeTransactionType=SOME_ARRAY_VALUE&limit=1000&offset=3' \
3
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
1
const request = require('request');
2
3
const options = {
4
method: 'GET',
5
url: 'https://finance.izettle.com/v2/accounts/LIQUID/transactions',
6
qs: {
7
start: '2022-04-01T11:42:10.452-01:00',
8
end: '2022-04-01T11:42:10.452-01:00',
9
includeTransactionType: 'SOME_ARRAY_VALUE',
10
limit: '1000',
11
offset: '3'
12
},
13
headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
14
};
15
16
request(options, function (error, response, body) {
17
if (error) throw new Error(error);
18
19
console.log(body);
20
});
1
HttpResponse<String> response = Unirest.get("https://finance.izettle.com/v2/accounts/LIQUID/transactions?start=2022-04-01T11:42:10.452-01:00&end=2022-04-01T11:42:10.452-01:00&includeTransactionType=SOME_ARRAY_VALUE&limit=1000&offset=3")
2
.header("Authorization", "Bearer REPLACE_BEARER_TOKEN")
3
.asString();
1
import http.client
2
3
conn = http.client.HTTPSConnection("finance.izettle.com")
4
5
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
6
7
conn.request("GET", "/v2/accounts/LIQUID/transactions?start=2022-04-01T11:42:10.452-01:00&end=2022-04-01T11:42:10.452-01:00&includeTransactionType=SOME_ARRAY_VALUE&limit=1000&offset=3", headers=headers)
8
9
res = conn.getresponse()
10
data = res.read()
11
12
print(data.decode("utf-8"))
1
package main
2
3
import (
4
"fmt"
5
"net/http"
6
"io/ioutil"
7
)
8
9
func main() {
10
11
url := "https://finance.izettle.com/v2/accounts/LIQUID/transactions?start=2022-04-01T11:42:10.452-01:00&end=2022-04-01T11:42:10.452-01:00&includeTransactionType=SOME_ARRAY_VALUE&limit=1000&offset=3"
12
13
req, _ := http.NewRequest("GET", url, nil)
14
15
req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN")
16
17
res, _ := http.DefaultClient.Do(req)
18
19
defer res.Body.Close()
20
body, _ := ioutil.ReadAll(res.Body)
21
22
fmt.Println(res)
23
fmt.Println(string(body))
24
25
}
1
[
2
{
3
"timestamp": "2022-03-01T12:42:10",
4
"amount": 300,
5
"originatorTransactionType": "PAYOUT",
6
"originatorTransactionUuid": "5e8673e4-a52f-11ec-b909-0242ac120002"
7
}
8
]

payout

GETGet payout info

Returns payout related information from a merchant's liquid account. A payout is a deposit made to a merchant's bank account or a PayPal Wallet for PayPal users. If the merchant's configuration has a minimum account balance, then the payout will deposit the account balance minus the minimum account balance.

Request

SECURITY
ZettleOauth
READ:FINANCE

QUERY PARAMETERS
atstring<YYYY-MM-DDThh:mm:ss.sTZD>Default: NOW()

Used to fetch payouts at a certain point in time. The time is specified in ISO 8601 date time format with timezone. If this parameter is used, any transaction after that time will be ignored. If not, the account balance at the current point in time is returned. Make sure that you encode the characters that are not permitted in a URL. For example, "2022-03-01T12:42:10.452+02:00" must be URL encoded because "+" is not a valid query parameter character.


Responses

400

Returns when a required parameter is missing or in a wrong format in the request.

401

Returns when one of the following occurs:

  • The authentication information is missing in the request.
  • The authentication token has expired.
  • The authentication token is invalid.
403

Returns when the scope being used in the request is incorrect.

GET/payout-info
1
curl --request GET \
2
--url 'https://finance.izettle.com/v2/payout-info?at=2022-04-01T11:42:10.452-01:00' \
3
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN'
1
const request = require('request');
2
3
const options = {
4
method: 'GET',
5
url: 'https://finance.izettle.com/v2/payout-info',
6
qs: {at: '2022-04-01T11:42:10.452-01:00'},
7
headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}
8
};
9
10
request(options, function (error, response, body) {
11
if (error) throw new Error(error);
12
13
console.log(body);
14
});
1
HttpResponse<String> response = Unirest.get("https://finance.izettle.com/v2/payout-info?at=2022-04-01T11:42:10.452-01:00")
2
.header("Authorization", "Bearer REPLACE_BEARER_TOKEN")
3
.asString();
1
import http.client
2
3
conn = http.client.HTTPSConnection("finance.izettle.com")
4
5
headers = { 'Authorization': "Bearer REPLACE_BEARER_TOKEN" }
6
7
conn.request("GET", "/v2/payout-info?at=2022-04-01T11:42:10.452-01:00", headers=headers)
8
9
res = conn.getresponse()
10
data = res.read()
11
12
print(data.decode("utf-8"))
1
package main
2
3
import (
4
"fmt"
5
"net/http"
6
"io/ioutil"
7
)
8
9
func main() {
10
11
url := "https://finance.izettle.com/v2/payout-info?at=2022-04-01T11:42:10.452-01:00"
12
13
req, _ := http.NewRequest("GET", url, nil)
14
15
req.Header.Add("Authorization", "Bearer REPLACE_BEARER_TOKEN")
16
17
res, _ := http.DefaultClient.Do(req)
18
19
defer res.Body.Close()
20
body, _ := ioutil.ReadAll(res.Body)
21
22
fmt.Println(res)
23
fmt.Println(string(body))
24
25
}
1
{
2
"totalBalance": 300,
3
"currencyId": "GBP",
4
"nextPayoutAmount": 2000,
5
"discountRemaining": 9800,
6
"periodicity": "DAILY"
7
}