cURL
curl --request GET \
--url https://api.maesn.dev/accounting/customers/{contactId} \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.maesn.dev/accounting/customers/{contactId}"
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/customers/{contactId}', 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/customers/{contactId}",
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/customers/{contactId}"
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/customers/{contactId}")
.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/customers/{contactId}")
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
},
"partialErrors": [
{
"code": "FILE_UPLOAD_FAILED",
"message": "Attachment invoice.pdf could not be uploaded to the target system."
}
]
},
"data": {
"id": "92c4f3a2-5b8e-4d1b-8a0c-9f6e7d2f3e4b",
"addresses": [
{
"addressLine1": "Lucky street 1",
"addressLine2": "2nd floor",
"city": "Berlin",
"countryCode": "DE",
"postalCode": "10243",
"type": "BILLING"
}
],
"bankAccounts": [
{
"bic": "COBADEFFXXX",
"holder": "John Doe",
"iban": "DE89370400440532013000",
"sepa": true,
"isMainAccount": true,
"name": "Sparkasse"
}
],
"companyName": "maesn",
"contactType": "CONTACT_PERSON",
"contactPersons": [
{
"emailAddresses": [
{
"email": "john.doe@company.com",
"type": "BUSINESS"
}
],
"firstName": "John",
"lastName": "Doe",
"phoneNumbers": [
{
"number": "+49 7163307056",
"type": "MOBILE"
}
],
"salutation": "Mr"
}
],
"documentId": "Z1248601M",
"emailAddresses": [
{
"email": "john.doe@company.com",
"type": "BUSINESS"
}
],
"number": "1042",
"phoneNumbers": [
{
"number": "+49 7163307056",
"type": "MOBILE"
}
],
"projectId": "3",
"updatedDate": "2018-01-01T13:00:00.000Z",
"vatId": "DE123456789"
}
}Customers
Get customer
GET
/
accounting
/
customers
/
{contactId}
cURL
curl --request GET \
--url https://api.maesn.dev/accounting/customers/{contactId} \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>'import requests
url = "https://api.maesn.dev/accounting/customers/{contactId}"
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/customers/{contactId}', 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/customers/{contactId}",
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/customers/{contactId}"
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/customers/{contactId}")
.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/customers/{contactId}")
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
},
"partialErrors": [
{
"code": "FILE_UPLOAD_FAILED",
"message": "Attachment invoice.pdf could not be uploaded to the target system."
}
]
},
"data": {
"id": "92c4f3a2-5b8e-4d1b-8a0c-9f6e7d2f3e4b",
"addresses": [
{
"addressLine1": "Lucky street 1",
"addressLine2": "2nd floor",
"city": "Berlin",
"countryCode": "DE",
"postalCode": "10243",
"type": "BILLING"
}
],
"bankAccounts": [
{
"bic": "COBADEFFXXX",
"holder": "John Doe",
"iban": "DE89370400440532013000",
"sepa": true,
"isMainAccount": true,
"name": "Sparkasse"
}
],
"companyName": "maesn",
"contactType": "CONTACT_PERSON",
"contactPersons": [
{
"emailAddresses": [
{
"email": "john.doe@company.com",
"type": "BUSINESS"
}
],
"firstName": "John",
"lastName": "Doe",
"phoneNumbers": [
{
"number": "+49 7163307056",
"type": "MOBILE"
}
],
"salutation": "Mr"
}
],
"documentId": "Z1248601M",
"emailAddresses": [
{
"email": "john.doe@company.com",
"type": "BUSINESS"
}
],
"number": "1042",
"phoneNumbers": [
{
"number": "+49 7163307056",
"type": "MOBILE"
}
],
"projectId": "3",
"updatedDate": "2018-01-01T13:00:00.000Z",
"vatId": "DE123456789"
}
}Field support per integration

abacus
abacus
Please ensure the query parameter
environmentName is accurately populated with the appropriate environment.
You can obtain this value by using the GET Environments endpoint available under the Authentication section.boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string

BuchhaltungsButler
BuchhaltungsButler
Supported response fields:
string
enum
Available options:
COMPANYstring
Address[]
string

Business Central
Business Central
If you’re not using the Interactive Authentication Flow, make sure the query parameters
environmentName and companyId are correctly populated.
You can obtain these values by using the GET Environments and GET Companies endpoints available under the Authentication section.boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
BankAccount[]
string
string

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
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string
string
string

fortnox
fortnox
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string
string

FreeAgent
FreeAgent
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]

FreshBooks
FreshBooks
Ensure that the query parameter
_companyId_ is correctly filled with the account ID associated with the contact.
This value can be retrieved by using the GET Companies endpoint in the Authentication section. Use the returned id as the value for _companyId_.boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]

Holded
Holded
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string

Lexware Office
Lexware Office
Query parameters:Supported response fields:
boolean
string
Address[]
string
ContactPerson[]
enum
Available options:
CONTACT_PERSON, COMPANYstring

Pennylane
Pennylane
Query parameters:Supported response fields:
boolean
string
Address[]
string
enum
Available options:
CONTACT_PERSON, COMPANYContactPerson[]

QuickBooks
QuickBooks
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string

Sage Accounting
Sage Accounting
This endpoint is available only for the following countries:
Accounting Plus: Canada, United Kingdom, Ireland
Accounting Standard: United Kingdom, Ireland
Accounting Start: Canada, United Kingdom, Ireland
Accounting Standard: United Kingdom, Ireland
Accounting Start: Canada, United Kingdom, Ireland
When handling a new connection in your integration, it is advisable to first determine which subscription your customer is using to ensure compatibility. To do this, you can use the
GET Companies call to retrieve all businesses available for the user. The user will then select one of these businesses.
It is also a good practice to verify that the active property of the selected business is set to true before proceeding with the integration setup.boolean
string
enum
Available options:
UNDEFINEDstring
ContactPerson[]

Sage Active
Sage Active
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. Please use the id field as the companyId.boolean
string
enum
Available options:
COMPANYstring
ContactPerson[]
Address[]
string
string

sevdesk
sevdesk
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
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.boolean
string
enum
Available options:
COMPANYstring
Address[]
string

Visma e-conomic
Visma e-conomic
Query parameters:Supported response fields:
boolean
string
enum
Available options:
COMPANYstring
ContactPerson[]
Address[]
string
string

Visma eAccounting
Visma eAccounting
Query parameters:Supported response fields:
boolean
string
enum
Available options:
COMPANYstring
ContactPerson[]
Address[]
string
string

weclapp
weclapp
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string

Xentral
Xentral
Query parameters:Supported response fields:
boolean
string
enum
Available options:
CONTACT_PERSON, COMPANYstring
ContactPerson[]
Address[]
string

Xero
Xero
Xero allows up to six contact persons per company.
boolean
string
enum
Available options:
UNDEFINEDstring
ContactPerson[]
Address[]
string
Last modified on November 5, 2026
Was this page helpful?