cURL
curl --request GET \
--url https://api.maesn.dev/accounting/expenses/{expenseId} \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.maesn.dev/accounting/expenses/{expenseId}"
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-API-KEY': '<x-api-key>', 'X-ACCOUNT-KEY': '<x-account-key>'}
};
fetch('https://api.maesn.dev/accounting/expenses/{expenseId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.maesn.dev/accounting/expenses/{expenseId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-ACCOUNT-KEY: <x-account-key>",
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.maesn.dev/accounting/expenses/{expenseId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("X-ACCOUNT-KEY", "<x-account-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.maesn.dev/accounting/expenses/{expenseId}")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/expenses/{expenseId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["X-ACCOUNT-KEY"] = '<x-account-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"warnings": [
"Field not used by target system"
],
"pagination": {
"total": 125,
"perPage": 50,
"currentPage": 1,
"totalPages": 3
}
},
"data": [
{
"id": "9dea18d2-748e-4bda-9f4c-02b08a9622cd",
"accountCode ": "200",
"accountId ": "6527a18d2-748e-4bda-9f4c-02b08a9622cd",
"accountNumber ": 70000,
"createdDate": "2025-07-15T00:00:00Z",
"currency": "EUR",
"customerId": "8a32de4f-55cc-4962-b000-a2a20662b821",
"description": "Expense_07/25 for business trip",
"documentId": "c77fbedb-1ff3-4fed-8716-4d3e3fc85ccf",
"exchangeRate": "1",
"expenseLines": [
{
"id": "b9dade6b-2b69-42c9-bcd4-841960f6cd9f",
"accountCode": "200",
"accountId": "56dec6c2-b14c-43ea-87bb-cc67b0ba2545",
"accountNumber": 4900,
"createdDate ": "2025-07-15T00:00:00Z",
"currency": "EUR",
"description": "Gasoline for business trip",
"dimensions": [
{
"id": "efa82f42-fd85-11e1-a21f-0800200c9a33",
"categoryName": "CostCenter",
"name": "Material/Waren"
}
],
"documentNumber": "EXP-12345",
"exchangeRate": 1,
"itemId": "9fc4f3a2-5b8e-4d1b-8a0c-9f6e7d2f3e4b",
"taxRate": {
"id": "1895b05b-38a6-4a6a-9653-166389894350",
"code": "03",
"name": "Tax19",
"taxRatePercentage": "19"
},
"totalGrossAmount": 119,
"totalNetAmount": 100,
"updatedDate": "2025-07-15T00:00:00Z"
}
],
"files": [
"file1.pdf"
],
"journalCode": "60",
"ledgerName": "Payroll",
"note": "Gasoline for business trip",
"paymentTermId": "d2f3e4b5-6a7b-8c9d-0e1f-2g3h4i5j6k7l",
"paymentType": "CASH",
"supplierId": "52c049b9-91b7-4828-b346-e1eeadfa31dd",
"taskId ": "ADB4457839PXTC2220",
"type": "EXPENSE",
"totalGrossAmount": 119,
"totalNetAmount": 100,
"totalTaxAmount": 19,
"transactionDate": "2025-07-15T00:00:00Z",
"updatedDate": "2025-07-15T00:00:00Z"
}
]
}Expenses
Get expense
GET
/
accounting
/
expenses
/
{expenseId}
cURL
curl --request GET \
--url https://api.maesn.dev/accounting/expenses/{expenseId} \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.maesn.dev/accounting/expenses/{expenseId}"
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-API-KEY': '<x-api-key>', 'X-ACCOUNT-KEY': '<x-account-key>'}
};
fetch('https://api.maesn.dev/accounting/expenses/{expenseId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.maesn.dev/accounting/expenses/{expenseId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-ACCOUNT-KEY: <x-account-key>",
"X-API-KEY: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.maesn.dev/accounting/expenses/{expenseId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("X-ACCOUNT-KEY", "<x-account-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.maesn.dev/accounting/expenses/{expenseId}")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/expenses/{expenseId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["X-ACCOUNT-KEY"] = '<x-account-key>'
response = http.request(request)
puts response.read_body{
"meta": {
"warnings": [
"Field not used by target system"
],
"pagination": {
"total": 125,
"perPage": 50,
"currentPage": 1,
"totalPages": 3
}
},
"data": [
{
"id": "9dea18d2-748e-4bda-9f4c-02b08a9622cd",
"accountCode ": "200",
"accountId ": "6527a18d2-748e-4bda-9f4c-02b08a9622cd",
"accountNumber ": 70000,
"createdDate": "2025-07-15T00:00:00Z",
"currency": "EUR",
"customerId": "8a32de4f-55cc-4962-b000-a2a20662b821",
"description": "Expense_07/25 for business trip",
"documentId": "c77fbedb-1ff3-4fed-8716-4d3e3fc85ccf",
"exchangeRate": "1",
"expenseLines": [
{
"id": "b9dade6b-2b69-42c9-bcd4-841960f6cd9f",
"accountCode": "200",
"accountId": "56dec6c2-b14c-43ea-87bb-cc67b0ba2545",
"accountNumber": 4900,
"createdDate ": "2025-07-15T00:00:00Z",
"currency": "EUR",
"description": "Gasoline for business trip",
"dimensions": [
{
"id": "efa82f42-fd85-11e1-a21f-0800200c9a33",
"categoryName": "CostCenter",
"name": "Material/Waren"
}
],
"documentNumber": "EXP-12345",
"exchangeRate": 1,
"itemId": "9fc4f3a2-5b8e-4d1b-8a0c-9f6e7d2f3e4b",
"taxRate": {
"id": "1895b05b-38a6-4a6a-9653-166389894350",
"code": "03",
"name": "Tax19",
"taxRatePercentage": "19"
},
"totalGrossAmount": 119,
"totalNetAmount": 100,
"updatedDate": "2025-07-15T00:00:00Z"
}
],
"files": [
"file1.pdf"
],
"journalCode": "60",
"ledgerName": "Payroll",
"note": "Gasoline for business trip",
"paymentTermId": "d2f3e4b5-6a7b-8c9d-0e1f-2g3h4i5j6k7l",
"paymentType": "CASH",
"supplierId": "52c049b9-91b7-4828-b346-e1eeadfa31dd",
"taskId ": "ADB4457839PXTC2220",
"type": "EXPENSE",
"totalGrossAmount": 119,
"totalNetAmount": 100,
"totalTaxAmount": 19,
"transactionDate": "2025-07-15T00:00:00Z",
"updatedDate": "2025-07-15T00:00:00Z"
}
]
}Field support per integration

Exact Online
Exact Online
If you’re not using the Interactive Authentication Flow, make sure the query parameter
companyId is correctly populated.
You can obtain this value by using the GET Companies endpoint available under the Authentication section.boolean
string
string
enum
Available options (3-letter ISO 4217):
AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CVE, CZK, DJF, DKK, DOP, DZD, EEK, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GQE, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MUR, MVR, MWK, MXN, MYR, MZM, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD, SYP, SZL, THB, TJS, TMT, TND, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEB, VND, VUV, WST, XAF, XCD, XDR, XOF, XPF, YER, ZAR, ZMK, ZWRstring
string
The
documentId is the ID of the document that is attached to the expense.string
JournalLineItem[]
string
string
string
Available options:
CASH, COLLECTION, CREDITstring
string
Available options:
EXPENSEnumber
number
string
string

Twinfield
Twinfield
If you’re not using the Interactive Authentication Flow, make sure the query parameter
companyId is correctly populated.
You can obtain this value by using the GET Companies endpoint available under the Authentication section.Make sure the query parameter
journalCode is correctly populated.
In order to get the journalCode you can use the GET Journals endpoint available under the Accounting section.string
number
string
string
JournalLineItem[]
string

Xero
Xero
Query parameters:Supported response fields:
boolean
string
string
string
string
enum
Available options (3-letter ISO 4217):
AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CVE, CZK, DJF, DKK, DOP, DZD, EEK, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GQE, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LTL, LVL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MUR, MVR, MWK, MXN, MYR, MZM, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD, SYP, SZL, THB, TJS, TMT, TND, TRY, TTD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEB, VND, VUV, WST, XAF, XCD, XDR, XOF, XPF, YER, ZAR, ZMK, ZWRstring
string
JournalLineItem[]
string
enum
string
Available options:
EXPENSE, REFUNDnumber
number
number
string
string
Headers
API key
Example:
"example value"
Account key
Example:
"example value"
Path Parameters
Last modified on July 9, 2026
Was this page helpful?