cURL
curl --request POST \
--url https://api.maesn.dev/accounting/files/async \
--header 'Content-Type: multipart/form-data' \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>' \
--form file='@example-file' \
--form documentType=Rechnungsausgang \
--form documentDate=2025-03-26T08:25:54.060Z \
--form documentId=b5e624e5-fb9e-4836-a443-87a3820f5b48 \
--form 'integrationSource=3rd party app' \
--form 'note=note for the document' \
--form folderName=Invoiceimport requests
url = "https://api.maesn.dev/accounting/files/async"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"documentType": "Rechnungsausgang",
"documentDate": "2025-03-26T08:25:54.060Z",
"documentId": "b5e624e5-fb9e-4836-a443-87a3820f5b48",
"integrationSource": "3rd party app",
"note": "note for the document",
"folderName": "Invoice"
}
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('documentType', 'Rechnungsausgang');
form.append('documentDate', '2025-03-26T08:25:54.060Z');
form.append('documentId', 'b5e624e5-fb9e-4836-a443-87a3820f5b48');
form.append('integrationSource', '3rd party app');
form.append('note', 'note for the document');
form.append('folderName', 'Invoice');
const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'X-ACCOUNT-KEY': '<x-account-key>'}
};
options.body = form;
fetch('https://api.maesn.dev/accounting/files/async', 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/files/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"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/files/async"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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.post("https://api.maesn.dev/accounting/files/async")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/files/async")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--"
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": {
"taskId": "02cc5849-b23c-48fe-8a9b-96f74bfc9571"
}
}Files
Upload file async
POST
/
accounting
/
files
/
async
cURL
curl --request POST \
--url https://api.maesn.dev/accounting/files/async \
--header 'Content-Type: multipart/form-data' \
--header 'X-ACCOUNT-KEY: <x-account-key>' \
--header 'X-API-KEY: <x-api-key>' \
--form file='@example-file' \
--form documentType=Rechnungsausgang \
--form documentDate=2025-03-26T08:25:54.060Z \
--form documentId=b5e624e5-fb9e-4836-a443-87a3820f5b48 \
--form 'integrationSource=3rd party app' \
--form 'note=note for the document' \
--form folderName=Invoiceimport requests
url = "https://api.maesn.dev/accounting/files/async"
files = { "file": ("example-file", open("example-file", "rb")) }
payload = {
"documentType": "Rechnungsausgang",
"documentDate": "2025-03-26T08:25:54.060Z",
"documentId": "b5e624e5-fb9e-4836-a443-87a3820f5b48",
"integrationSource": "3rd party app",
"note": "note for the document",
"folderName": "Invoice"
}
headers = {
"X-API-KEY": "<x-api-key>",
"X-ACCOUNT-KEY": "<x-account-key>"
}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('file', '<string>');
form.append('documentType', 'Rechnungsausgang');
form.append('documentDate', '2025-03-26T08:25:54.060Z');
form.append('documentId', 'b5e624e5-fb9e-4836-a443-87a3820f5b48');
form.append('integrationSource', '3rd party app');
form.append('note', 'note for the document');
form.append('folderName', 'Invoice');
const options = {
method: 'POST',
headers: {'X-API-KEY': '<x-api-key>', 'X-ACCOUNT-KEY': '<x-account-key>'}
};
options.body = form;
fetch('https://api.maesn.dev/accounting/files/async', 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/files/async",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"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/files/async"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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.post("https://api.maesn.dev/accounting/files/async")
.header("X-API-KEY", "<x-api-key>")
.header("X-ACCOUNT-KEY", "<x-account-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.maesn.dev/accounting/files/async")
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.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentType\"\r\n\r\nRechnungsausgang\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentDate\"\r\n\r\n2025-03-26T08:25:54.060Z\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"documentId\"\r\n\r\nb5e624e5-fb9e-4836-a443-87a3820f5b48\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"integrationSource\"\r\n\r\n3rd party app\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"note\"\r\n\r\nnote for the document\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"folderName\"\r\n\r\nInvoice\r\n-----011000010111000001101001--"
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": {
"taskId": "02cc5849-b23c-48fe-8a9b-96f74bfc9571"
}
}Field support per integration

DATEV Unternehmen Online
DATEV Unternehmen Online
This endpoint 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.File
required
The name of the uploaded file must include the file extension, for example
invoice.pdf.The file name must not exceed 255 characters in length.
string
The
documentId field can be used to uniquely identify a document. If provided, it must be a valid GUID.string
required
The
documentType field must match one of the document types returned by the GET Document Types endpoint.string

DATEV Rechnungswesen
DATEV Rechnungswesen
This endpoint 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.File
required
The name of the uploaded file must include the file extension, for example
invoice.pdf.The file name must not exceed 255 characters in length.
string
required
string
The
documentId field can be used to uniquely identify a document. If provided, it must be a valid GUID.string
required
The
documentType field must match one of the document types returned by the GET Document Types endpoint.string
required
The
integrationSource field should be set to the name of your application integrating with DATEV.string
string
Query Parameters
Body
multipart/form-data
Example:
"Rechnungsausgang"
Example:
"2025-03-26T08:25:54.060Z"
Example:
"b5e624e5-fb9e-4836-a443-87a3820f5b48"
Example:
"3rd party app"
Example:
"note for the document"
Example:
"Invoice"
Last modified on September 15, 2026
Was this page helpful?