Finance API

Version: 2.1
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.

API base URL

EnvironmentURL
Productionhttps://finance.izettle.com/v2

Security

Zettle Oauth: Oauth2
For more information, see the OAuth API documentation.
Authorization Code OAuth Flow
Authorizations URL:https://oauth.zettle.com/authorize
Token URL: https://oauth.zettle.com/token
Scopes:
  • READ:FINANCE
    : Access to read finance data

Accounts

Get account balance

Returns the balance in a merchant's preliminary or liquid account at a specific time.
Request
SECURITY
ZettleOauth
READ:FINANCE
PATH PARAMETERS
accountTypeGroup
required
string
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
at
string<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.
Request code samples
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
val client = OkHttpClient()
2
3
val request = Request.Builder()
4
.url("https://finance.izettle.com/v2/accounts/LIQUID/balance?at=2022-04-01T11:42:10.452-01:00")
5
.get()
6
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
7
.build()
8
9
val response = client.newCall(request).execute()
Response code samples
1
{
2
"totalBalance": 300,
3
"currencyId": "GBP"
4
}

Get 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
accountTypeGroup
required
string
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
start
required
string<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.
end
required
string<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.
includeTransactionType
array
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.
limit
integer
Default: 1000
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. The maximum limit allowed is 10000. 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.
offset
integer0
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.
Request code samples
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=100&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: '100',
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=100&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=100&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=100&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
val client = OkHttpClient()
2
3
val request = Request.Builder()
4
.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=100&offset=3")
5
.get()
6
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
7
.build()
8
9
val response = client.newCall(request).execute()
Response code samples
1
[
2
{
3
"timestamp": "2022-03-01T12:42:10.452+0000",
4
"amount": 300,
5
"originatorTransactionType": "PAYOUT",
6
"originatingTransactionUuid": "5e8673e4-a52f-11ec-b909-0242ac120002"
7
}
8
]

Payout

Get 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
at
string<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.
Request code samples
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
val client = OkHttpClient()
2
3
val request = Request.Builder()
4
.url("https://finance.izettle.com/v2/payout-info?at=2022-04-01T11:42:10.452-01:00")
5
.get()
6
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
7
.build()
8
9
val response = client.newCall(request).execute()
Response code samples
1
{
2
"totalBalance": 300,
3
"currencyId": "GBP",
4
"nextPayoutAmount": 2000,
5
"discountRemaining": 9800,
6
"periodicity": "DAILY"
7
}
;