curl --request POST \
--url https://api.comstruct.com/v1/invoices/custom \
--header 'Content-Type: application/pdf' \
--header 'X-API-Key: <api-key>' \
--data '"<string>"'import requests
url = "https://api.comstruct.com/v1/invoices/custom"
payload = "<string>"
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/pdf"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/pdf'},
body: JSON.stringify('<string>')
};
fetch('https://api.comstruct.com/v1/invoices/custom', 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.comstruct.com/v1/invoices/custom",
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('<string>'),
CURLOPT_HTTPHEADER => [
"Content-Type: application/pdf",
"X-API-Key: <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.comstruct.com/v1/invoices/custom"
payload := strings.NewReader("\"<string>\"")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/pdf")
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.comstruct.com/v1/invoices/custom")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/pdf")
.body("\"<string>\"")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.comstruct.com/v1/invoices/custom")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/pdf'
request.body = "\"<string>\""
response = http.request(request)
puts response.read_body{
"invoiceId": "invoice-abc123def456",
"success": true,
"jobId": "job-789xyz012"
}Rechnung verarbeiten (eigenes Format)
Erforderliche Berechtigungen: invoices:write
Verarbeitet ein benutzerdefiniertes Rechnungsformat mittels GPT/KI-Parsing. Akzeptiert PDF- oder TIFF-Dateien bis zu 32MiB und verarbeitet sie mittels generativer KI zur Rechnungsdatenextraktion.
Optionale Request-Header können vordefinierte Werte für Lieferant, Projekt und externe Dokument-ID übergeben und damit die von der KI extrahierten Felder überschreiben.
Der API-Schlüssel muss mit einem Lieferanten verknüpft sein.
Akzeptiert entweder einen einzelnen rohen PDF-/TIFF-Body (Legacy) oder multipart/form-data
mit optionalem xml-Teil und einem oder mehreren pdf-Teilen. Bei XML laufen die
automatisierten Prüfungen auf dem XML; die PDF(s) dienen der Visualisierung (mehrere PDFs werden gemerged).
curl --request POST \
--url https://api.comstruct.com/v1/invoices/custom \
--header 'Content-Type: application/pdf' \
--header 'X-API-Key: <api-key>' \
--data '"<string>"'import requests
url = "https://api.comstruct.com/v1/invoices/custom"
payload = "<string>"
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/pdf"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/pdf'},
body: JSON.stringify('<string>')
};
fetch('https://api.comstruct.com/v1/invoices/custom', 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.comstruct.com/v1/invoices/custom",
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('<string>'),
CURLOPT_HTTPHEADER => [
"Content-Type: application/pdf",
"X-API-Key: <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.comstruct.com/v1/invoices/custom"
payload := strings.NewReader("\"<string>\"")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/pdf")
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.comstruct.com/v1/invoices/custom")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/pdf")
.body("\"<string>\"")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.comstruct.com/v1/invoices/custom")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/pdf'
request.body = "\"<string>\""
response = http.request(request)
puts response.read_body{
"invoiceId": "invoice-abc123def456",
"success": true,
"jobId": "job-789xyz012"
}Übersicht
Verarbeitet Rechnungen als PDF- oder TIFF-Datei mit KI-gestützter Datenextraktion. Optionale Request-Header können vordefinierte Werte für Lieferant, Projekt und externe Dokument-ID übergeben und damit die von der KI extrahierten Felder überschreiben. Akzeptiert entweder einen einzelnen rohen PDF-/TIFF-Body (Legacy) odermultipart/form-data mit optionalem xml-Teil und einem oder mehreren pdf-Teilen. Bei XML laufen die automatisierten Prüfungen auf dem XML; die PDF(s) dienen der Visualisierung (mehrere PDFs werden gemerged).
Berechtigungen
| Scope | Tenant-Typ |
|---|---|
invoices:write | Lieferant (SUPPLIER_ONLY) |
Header
| Header | Pflicht | Beschreibung |
|---|---|---|
x-api-key | Ja | API-Schlüssel mit Scope invoices:write |
Content-Type | Ja | application/pdf, application/tiff oder multipart/form-data |
kreditorname | Nein | Lieferantenname; überschreibt den von der KI extrahierten Lieferantennamen |
archivdocument | Nein | Externe Dokument-ID für Archivierungszwecke; wird als external_id der Rechnung gespeichert |
projekt | Nein | Projektnummer; überschreibt die von der KI extrahierte Projektzuordnung |
buchungskreis | Nein | Buchungskreis (juristische Einheit); Fallback für die Projektnummer, wenn projekt leer ist — Format HQ-{buchungskreis} |
Verhalten der Preset-Header
kreditornamesetztsupplier_namein der Rechnungsverarbeitung.projektsetztproject_number. Wennprojektfehlt oder leer ist, wird stattdessenHQ-{buchungskreis}verwendet (sofernbuchungskreisgesetzt ist).archivdocumentwird als externe Rechnungs-ID (external_id) gespeichert.
Beispiel (Legacy PDF-Body)
curl -X POST "https://api.comstruct.com/v1/invoices/custom" \
-H "x-api-key: IHR_API_SCHLUESSEL" \
-H "Content-Type: application/pdf" \
-H "kreditorname: Beispiel Lieferant GmbH" \
-H "archivdocument: ARCH-2024-001" \
-H "projekt: PRJ-001" \
--data-binary @rechnung.pdf
Beispiel (multipart mit XML + PDF)
curl -X POST "https://api.comstruct.com/v1/invoices/custom" \
-H "x-api-key: IHR_API_SCHLUESSEL" \
-H "kreditorname: Beispiel Lieferant GmbH" \
-H "archivdocument: ARCH-2024-001" \
-H "projekt: PRJ-001" \
-F "xml=@rechnung.xml" \
-F "pdf=@visualisierung.pdf"
Autorisierungen
API-Schlüssel zur Authentifizierung. Kontaktieren Sie Ihren Customer Success Manager, um einen API-Schlüssel zu erhalten.
Jeder Endpunkt erfordert spezifische Berechtigungen (Scopes); die erforderlichen Scopes werden pro Endpunkt angezeigt.
Header
Lieferantenname; überschreibt den von der KI extrahierten Lieferantennamen
Externe Dokument-ID für Archivierungszwecke; wird als external_id der Rechnung gespeichert
Projektnummer; überschreibt die von der KI extrahierte Projektzuordnung
Buchungskreis (juristische Einheit); Fallback für die Projektnummer, wenn projekt leer ist (HQ-{buchungskreis})
Abfrageparameter
Initialer Rechnungsstatus. Wird nur für Mandanten ohne Invoice-Workflows-Feature ausgewertet; sonst ignoriert.
NEW, PROCESSING, FACTUAL_CHECKING, PRICE_CHECKING, POSITIONS_CHECK, CHECKED, CANCELLED, ERROR, OPEN Body
Rohe PDF-Rechnungsdaten (Legacy, bis zu 32MiB)
Antwort
Rechnung erfolgreich verarbeitet und zur Hintergrundverarbeitung eingereiht