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
}
'{
"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,
"amount_paid": null,
"last_payment_date": null,
"amount_open": 1190.00,
"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 from data (no PDF)
Create an invoice from JSON, without a file. Every call creates a new invoice on the claim; its amounts
add to the claim’s total_claim_amount. No automatic reading runs on this path, so data_extraction_status
is manual. Amounts take at most two decimal places.
Reminder fees (creditor_reminder_fees_incurred) can no longer be added once a collection letter including
them has gone out (400).
Partly paid before handover: keep invoice_amount_gross at the amount on the invoice and send what the
debtor already paid you in amount_paid (optionally with last_payment_date). We then collect only the open
rest. Send reminder fees the debtor has paid only for the part still open. Do not report such a payment
through /payments — that endpoint records money paid during collection.
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
}
'{
"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,
"amount_paid": null,
"last_payment_date": null,
"amount_open": 1190.00,
"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 unless your partner agreement requires them (see Partner intake rules in the API description:
default_date,creditor_reminder_dates,contract_date,subject). Amounts must be non-negative and dates must be valid ISO 8601 (YYYY-MM-DD); invalid values return a400. default_date,creditor_reminder_dates,default_basisandcontract_datestate how and when the debtor fell into default.default_basis: "bgb_286_3"(default 30 days after the due date and receipt of the invoice, § 286 (3) BGB) needs no reminder dates; against a consumer it applies only if the invoice pointed this out.- If your agreement prohibits health data,
subject,invoice_issuerandinvoice_recipientare checked; a match returns400 PROHIBITED_DATAnaming the field.
Authentication
Requires API Token authentication via Bearer token.Path Parameters
Request Body (JSON)
claims.total_claim_amount (minus amount_paid).YYYY-MM-DD)YYYY-MM-DD)claims.total_claim_amount.invoice_amount_gross in the same request and must be less than it (a fully paid invoice is not handed over). We collect only the open rest; interest and our collection fees are calculated on it, and the collection letter shows “invoice amount – paid – open”. It is not recorded as a payment and sends no payment notification.amount_paid, ISO 8601 (YYYY-MM-DD), not in the future. Requires amount_paid. Shown on the letter when given.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,
"amount_paid": null,
"last_payment_date": null,
"amount_open": 1190.00,
"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_gross(minusamount_paid) andcreditor_reminder_fees_incurredautomatically update the claim’stotal_claim_amountvia database triggers.- Partly paid before handover: send the invoice amount in
invoice_amount_grossand the paid part inamount_paid, e.g."invoice_amount_gross": 59.56, "amount_paid": 43.57, "last_payment_date": "2024-11-05". The response then showsinvoice_amount_gross: 59.56,amount_paid: 43.57,amount_open: 15.99. Do not report such a payment through/payments— that endpoint records money paid during collection. Reminder fees the debtor has paid are sent only for the part still open.
Authorizations
An API key (ico_live_…), sent as Authorization: Bearer <key>. Not a JWT.
Path Parameters
Body
The creditor's name on the invoice
The debtor's name on the invoice
x >= 0Adds to the claim's total_claim_amount
x >= 0Reminder fees the creditor already charged and that are still unpaid
x >= 0Amount the debtor already paid you on this invoice before you handed it over to us. Requires
invoice_amount_gross in the same request and must be less than it. We collect only the rest
(amount_open); interest and our collection fees are calculated on it, and the letter shows
"invoice amount – paid – open". It is not recorded as a payment.
x >= 0.01Date of the (last) payment counted in amount_paid; not in the future. Requires amount_paid
The date the debtor fell into default (Verzug)
The dates of your own reminders before you handed the invoice over. Not needed when default_basis is bgb_286_3.
1How the default arose. reminder (the default when not sent): by a reminder after the due date (§ 286 (1)
BGB). bgb_286_3: 30 days after the due date and receipt of the invoice without a reminder (§ 286 (3) BGB)
— against a consumer only when the invoice pointed out this consequence.
reminder, bgb_286_3 The date of the contract the invoice is based on