cURL
curl --request POST \
--url https://api.maesn.dev/accounting/bookings \
--header 'Content-Type: application/json' \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"accounNumbertLength": "4",
"chartOfAccount": "SKR03",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01"
}
'import requests
url = "https://api.maesn.dev/accounting/bookings"
payload = {
"accounNumbertLength": "4",
"chartOfAccount": "SKR03",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01"
}
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<x-api-key>',
'X-ACCOUNT-KEY': '<x-account-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
accounNumbertLength: '4',
chartOfAccount: 'SKR03',
entries: [
{
accountNumber: '70000',
amount: '1500',
bookingDate: '2021-01-01T00:00:00Z',
bookingTaxCode: '9',
bookingType: 'PARTIAL_INVOICE',
contraAccountNumber: '4900',
currency: 'EUR',
description: 'payment',
dimension1: 'Marketing',
dimension2: 'Service and Maintenance',
documentNumber: 'Rg32029/2024',
dueDate: '2021-01-01T00:00:00Z',
fileId: 'AA7N4ICJ0SJIU38'
}
],
fiscalYearStartDate: '2025-01-01'
})
};
fetch('https://api.maesn.dev/accounting/bookings', 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/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accounNumbertLength' => '4',
'chartOfAccount' => 'SKR03',
'entries' => [
[
'accountNumber' => '70000',
'amount' => '1500',
'bookingDate' => '2021-01-01T00:00:00Z',
'bookingTaxCode' => '9',
'bookingType' => 'PARTIAL_INVOICE',
'contraAccountNumber' => '4900',
'currency' => 'EUR',
'description' => 'payment',
'dimension1' => 'Marketing',
'dimension2' => 'Service and Maintenance',
'documentNumber' => 'Rg32029/2024',
'dueDate' => '2021-01-01T00:00:00Z',
'fileId' => 'AA7N4ICJ0SJIU38'
]
],
'fiscalYearStartDate' => '2025-01-01'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.maesn.dev/accounting/bookings"
payload := strings.NewReader("{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("X-ACCOUNT-KEY", "<x-account-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.maesn.dev/accounting/bookings")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.header("Content-Type", "application/json")
.body("{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["X-ACCOUNT-KEY"] = '<x-account-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}"
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": "433445",
"accountNumberLength": "4",
"chartOfAccount": "SKR03",
"createdDate": "2021-01-01T00:00:00Z",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01",
"taskId": "ABBDU8834993NND"
}
}Create bookings
POST
/
accounting
/
bookings
cURL
curl --request POST \
--url https://api.maesn.dev/accounting/bookings \
--header 'Content-Type: application/json' \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>' \
--data '
{
"accounNumbertLength": "4",
"chartOfAccount": "SKR03",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01"
}
'import requests
url = "https://api.maesn.dev/accounting/bookings"
payload = {
"accounNumbertLength": "4",
"chartOfAccount": "SKR03",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01"
}
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-KEY': '<x-api-key>',
'X-ACCOUNT-KEY': '<x-account-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
accounNumbertLength: '4',
chartOfAccount: 'SKR03',
entries: [
{
accountNumber: '70000',
amount: '1500',
bookingDate: '2021-01-01T00:00:00Z',
bookingTaxCode: '9',
bookingType: 'PARTIAL_INVOICE',
contraAccountNumber: '4900',
currency: 'EUR',
description: 'payment',
dimension1: 'Marketing',
dimension2: 'Service and Maintenance',
documentNumber: 'Rg32029/2024',
dueDate: '2021-01-01T00:00:00Z',
fileId: 'AA7N4ICJ0SJIU38'
}
],
fiscalYearStartDate: '2025-01-01'
})
};
fetch('https://api.maesn.dev/accounting/bookings', 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/bookings",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'accounNumbertLength' => '4',
'chartOfAccount' => 'SKR03',
'entries' => [
[
'accountNumber' => '70000',
'amount' => '1500',
'bookingDate' => '2021-01-01T00:00:00Z',
'bookingTaxCode' => '9',
'bookingType' => 'PARTIAL_INVOICE',
'contraAccountNumber' => '4900',
'currency' => 'EUR',
'description' => 'payment',
'dimension1' => 'Marketing',
'dimension2' => 'Service and Maintenance',
'documentNumber' => 'Rg32029/2024',
'dueDate' => '2021-01-01T00:00:00Z',
'fileId' => 'AA7N4ICJ0SJIU38'
]
],
'fiscalYearStartDate' => '2025-01-01'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.maesn.dev/accounting/bookings"
payload := strings.NewReader("{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<x-api-key>")
req.Header.Add("X-ACCOUNT-KEY", "<x-account-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.maesn.dev/accounting/bookings")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.header("Content-Type", "application/json")
.body("{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/bookings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<x-api-key>'
request["X-ACCOUNT-KEY"] = '<x-account-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accounNumbertLength\": \"4\",\n \"chartOfAccount\": \"SKR03\",\n \"entries\": [\n {\n \"accountNumber\": \"70000\",\n \"amount\": \"1500\",\n \"bookingDate\": \"2021-01-01T00:00:00Z\",\n \"bookingTaxCode\": \"9\",\n \"bookingType\": \"PARTIAL_INVOICE\",\n \"contraAccountNumber\": \"4900\",\n \"currency\": \"EUR\",\n \"description\": \"payment\",\n \"dimension1\": \"Marketing\",\n \"dimension2\": \"Service and Maintenance\",\n \"documentNumber\": \"Rg32029/2024\",\n \"dueDate\": \"2021-01-01T00:00:00Z\",\n \"fileId\": \"AA7N4ICJ0SJIU38\"\n }\n ],\n \"fiscalYearStartDate\": \"2025-01-01\"\n}"
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": "433445",
"accountNumberLength": "4",
"chartOfAccount": "SKR03",
"createdDate": "2021-01-01T00:00:00Z",
"entries": [
{
"accountNumber": "70000",
"amount": "1500",
"bookingDate": "2021-01-01T00:00:00Z",
"bookingTaxCode": "9",
"bookingType": "PARTIAL_INVOICE",
"contraAccountNumber": "4900",
"currency": "EUR",
"description": "payment",
"dimension1": "Marketing",
"dimension2": "Service and Maintenance",
"documentNumber": "Rg32029/2024",
"dueDate": "2021-01-01T00:00:00Z",
"fileId": "AA7N4ICJ0SJIU38"
}
],
"fiscalYearStartDate": "2025-01-01",
"taskId": "ABBDU8834993NND"
}
}Field support per integration

Datev Rechnungswesen
Datev Rechnungswesen
This endpoints is asynchronous. To check the status of the request, use the
GET asyncTask endpoint.For more info about asynchronous tasks visit the Asynchronous Task section.If you’re not using the Interactive Authentication Flow, make sure the query parameter
companyId is accurately populated with the appropriate company ID. You can obtain this value by using the GET Companies endpoint available under the Authentication section.The
accountNumberLength field specifies the length of the G/L accounts.
The value must match the configuration defined in the end user’s mandate settings within the DATEV application.Available options:
SKR03, SKR04, SKR42, SKR51, SKR14Show properties
Show properties
This is typically the customer or supplier account number.
ISO-8601 date format, e.g., 2024-01-01T00:00:00Z
Available options:
PARTIAL_INVOICE, ADVANCED_PAYMENT_RECEIVED, FINAL_INVOICE, OTHERThis is the opposing account number used for the booking entry.It might be a bank, revenue, or expense account, depending on the nature of the transaction.
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, ZWRAvailable options:
DEBIT, CREDITDEBIT indicates a debit on the accountNumber and a credit on the contraAccountNumber.CREDIT indicates a credit on the accountNumber and a debit on the contraAccountNumber.The
dimension1 field represents the information for cost accounting (KOST1)The
dimension2 field represents the information for cost accounting (KOST2)ISO-8601 date format, e.g., 2024-01-01T00:00:00Z
The
fileId field is used to attach a file to the booking entry.
This is the ID of the file that you previously uploaded using the POST Files endpoint.YYYY-MM-DD date format, e.g., 2025-01-01The
fiscalYearStartDate field should be set to the first day of the fiscal year, which is usually January 1st.
If the end user’s fiscal year begins on a different date, please adjust this field accordingly.If the provided date does not match the actual fiscal year start date, DATEV will not return an error code. However, the booking entries will not be posted in Rechnungswesen.
Headers
API key
Example:
"example value"
Account key
Example:
"example value"
Query Parameters
Body
application/json
Last modified on July 9, 2026
Was this page helpful?
⌘I