curl --request POST \
--url https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000,
"invoice_amount_gross": 1190,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0
}
'import requests
url = "https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual"
payload = {
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000,
"invoice_amount_gross": 1190,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invoice_number: 'RE-2026-0042',
invoice_issuer: 'Muster GmbH',
invoice_recipient: 'Max Mustermann',
subject: 'Consulting services March 2026',
invoice_amount_net: 1000,
invoice_amount_gross: 1190,
invoice_issue_date: '2026-03-01',
invoice_due_date: '2026-03-15',
creditor_reminder_fees_incurred: 0
})
};
fetch('https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual', 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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual",
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([
'invoice_number' => 'RE-2026-0042',
'invoice_issuer' => 'Muster GmbH',
'invoice_recipient' => 'Max Mustermann',
'subject' => 'Consulting services March 2026',
'invoice_amount_net' => 1000,
'invoice_amount_gross' => 1190,
'invoice_issue_date' => '2026-03-01',
'invoice_due_date' => '2026-03-15',
'creditor_reminder_fees_incurred' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual"
payload := strings.NewReader("{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "b7c2d6ba-9d2c-42b6-8e1f-4a8e3d9e9c77",
"claim_id": "3c90c3cc-0d44-4b50-8888-8dd257363052",
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000.00,
"invoice_amount_gross": 1190.00,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0,
"data_extraction_status": "manual",
"created_at": "2026-03-01T10:30:00Z"
}
}
{
"success": false,
"error": "VALIDATION_ERROR",
"message": "Validation failed",
"details": []
}
{
"success": false,
"message": "Claim not found"
}
Create invoice manually (JSON, no PDF)
Create an invoice by submitting the invoice data as structured JSON, without uploading a PDF document. Use this when you have no invoice file and want to pass all fields manually.
The invoice amounts automatically update the claim’s total_claim_amount via
database triggers. No OCR runs on this path, so data_extraction_status is set to
manual.
For uploading an actual PDF invoice (with OCR extraction), use
POST /openapi/claims/{claim_id}/invoices instead.
curl --request POST \
--url https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000,
"invoice_amount_gross": 1190,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0
}
'import requests
url = "https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual"
payload = {
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000,
"invoice_amount_gross": 1190,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
invoice_number: 'RE-2026-0042',
invoice_issuer: 'Muster GmbH',
invoice_recipient: 'Max Mustermann',
subject: 'Consulting services March 2026',
invoice_amount_net: 1000,
invoice_amount_gross: 1190,
invoice_issue_date: '2026-03-01',
invoice_due_date: '2026-03-15',
creditor_reminder_fees_incurred: 0
})
};
fetch('https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual', 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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual",
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([
'invoice_number' => 'RE-2026-0042',
'invoice_issuer' => 'Muster GmbH',
'invoice_recipient' => 'Max Mustermann',
'subject' => 'Consulting services March 2026',
'invoice_amount_net' => 1000,
'invoice_amount_gross' => 1190,
'invoice_issue_date' => '2026-03-01',
'invoice_due_date' => '2026-03-15',
'creditor_reminder_fees_incurred' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual"
payload := strings.NewReader("{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://service.incaseof.law/openapi/claims/{claim_id}/invoices/manual")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"invoice_number\": \"RE-2026-0042\",\n \"invoice_issuer\": \"Muster GmbH\",\n \"invoice_recipient\": \"Max Mustermann\",\n \"subject\": \"Consulting services March 2026\",\n \"invoice_amount_net\": 1000,\n \"invoice_amount_gross\": 1190,\n \"invoice_issue_date\": \"2026-03-01\",\n \"invoice_due_date\": \"2026-03-15\",\n \"creditor_reminder_fees_incurred\": 0\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "b7c2d6ba-9d2c-42b6-8e1f-4a8e3d9e9c77",
"claim_id": "3c90c3cc-0d44-4b50-8888-8dd257363052",
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000.00,
"invoice_amount_gross": 1190.00,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0,
"data_extraction_status": "manual",
"created_at": "2026-03-01T10:30:00Z"
}
}
{
"success": false,
"error": "VALIDATION_ERROR",
"message": "Validation failed",
"details": []
}
{
"success": false,
"message": "Claim not found"
}
Overview
Create an invoice by submitting the invoice data as structured JSON, without uploading a PDF document. Use this endpoint when you have no invoice file and want to pass all fields manually. Unlike the PDF upload endpoint, no OCR runs on this path, so the created invoice is marked withdata_extraction_status: "manual". The invoice amounts automatically update the claim’s total_claim_amount via database triggers.
POST /openapi/claims//invoices (multipart/form-data) instead.Request Format
- Content-Type:
application/json - All fields are optional. Amounts must be non-negative and dates must be valid ISO 8601 (
YYYY-MM-DD); invalid values return a400.
Authentication
Requires API Token authentication via Bearer token.Path Parameters
Request Body (JSON)
claims.total_claim_amount.YYYY-MM-DD)YYYY-MM-DD)claims.total_claim_amount.Examples
curl -X POST \
'https://<host>/openapi/claims/3c90c3cc-0d44-4b50-8888-8dd257363052/invoices/manual' \
-H 'Authorization: Bearer YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000.00,
"invoice_amount_gross": 1190.00,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0
}'
const res = await fetch(
'https://<host>/openapi/claims/3c90c3cc-0d44-4b50-8888-8dd257363052/invoices/manual',
{
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
invoice_number: 'RE-2026-0042',
invoice_issuer: 'Muster GmbH',
invoice_recipient: 'Max Mustermann',
subject: 'Consulting services March 2026',
invoice_amount_net: 1000.0,
invoice_amount_gross: 1190.0,
invoice_issue_date: '2026-03-01',
invoice_due_date: '2026-03-15',
creditor_reminder_fees_incurred: 0,
}),
}
)
const json = await res.json()
import requests
url = 'https://<host>/openapi/claims/3c90c3cc-0d44-4b50-8888-8dd257363052/invoices/manual'
headers = {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json',
}
payload = {
'invoice_number': 'RE-2026-0042',
'invoice_issuer': 'Muster GmbH',
'invoice_recipient': 'Max Mustermann',
'subject': 'Consulting services March 2026',
'invoice_amount_net': 1000.00,
'invoice_amount_gross': 1190.00,
'invoice_issue_date': '2026-03-01',
'invoice_due_date': '2026-03-15',
'creditor_reminder_fees_incurred': 0,
}
response = requests.post(url, headers=headers, json=payload)
print(response.status_code, response.text)
Responses
{
"success": true,
"data": {
"id": "b7c2d6ba-9d2c-42b6-8e1f-4a8e3d9e9c77",
"claim_id": "3c90c3cc-0d44-4b50-8888-8dd257363052",
"invoice_number": "RE-2026-0042",
"invoice_issuer": "Muster GmbH",
"invoice_recipient": "Max Mustermann",
"subject": "Consulting services March 2026",
"invoice_amount_net": 1000.00,
"invoice_amount_gross": 1190.00,
"invoice_issue_date": "2026-03-01",
"invoice_due_date": "2026-03-15",
"creditor_reminder_fees_incurred": 0,
"data_extraction_status": "manual",
"created_at": "2026-03-01T10:30:00Z"
}
}
{
"success": false,
"error": "VALIDATION_ERROR",
"message": "Validation failed",
"details": []
}
{
"success": false,
"message": "Claim not found"
}
Notes
- This endpoint only accepts JSON; it does not handle file uploads.
- No OCR runs; the invoice is stored with
data_extraction_status: "manual". invoice_amount_grossandcreditor_reminder_fees_incurredautomatically update the claim’stotal_claim_amountvia database triggers.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
UUID of the claim to attach the invoice to
Body
Invoice number/reference
Name of the invoice issuer (creditor)
Name of the invoice recipient (debtor)
Invoice subject/description
Net invoice amount (before tax)
x >= 0Gross invoice amount. Feeds claims.total_claim_amount.
x >= 0Invoice issue date (ISO 8601, YYYY-MM-DD)
Invoice due date (ISO 8601, YYYY-MM-DD)
Reminder fees already incurred by creditor. Feeds claims.total_claim_amount.
x >= 0