Receipts
/api/v1/importsOnly imports whose target (contacts, invoices, receipts) the caller is allowed to read.
Any valid API key or OAuth token.
Query parameters
limitintegerNumber of entries (1–100)1–100 · Default: 25cursorstring`nextCursor` of the previous pagemax. 500 characters
Response 200
object"list"requireddataArray<ImportJob>requiredidstringrequiredobject"import_job"requiredprovider"lexoffice" | "sevdesk" | "papierkram" | "generic"requiredentity"contacts" | "invoices" | "receipts"requiredstatus"uploaded" | "importing" | "completed" | "failed"requiredfileNamestringrequireddelimiterstringrequiredencodingstringrequiredrowCountintegerrequired-9007199254740991–9007199254740991headersArray<string>requiredmappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)fieldsArray<object>requiredidstringrequiredlabelstringrequiredtypestringrequiredrequiredbooleanrequired
sampleArray<object>requiredThe first lines of the filecountsobject | nullrequiredtotalintegerrequired-9007199254740991–9007199254740991createdintegerrequired-9007199254740991–9007199254740991duplicatesintegerrequired-9007199254740991–9007199254740991skippedintegerrequired-9007199254740991–9007199254740991errorsintegerrequired-9007199254740991–9007199254740991
errorsArray<object>requiredrowintegerrequired-9007199254740991–9007199254740991messagestringrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)completedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
hasMorebooleanrequirednextCursorstring | nullrequired
curl 'https://www.debt-flow.io/api/v1/imports' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "string",
"object": "import_job",
"provider": "lexoffice",
"entity": "contacts",
"status": "uploaded",
"fileName": "string",
"delimiter": "string",
"encoding": "string",
"rowCount": 0,
"headers": [
"string"
],
"mapping": {},
"fields": [
{
"id": "string",
"label": "string",
"type": "string",
"required": false
}
],
"sample": [
{}
],
"counts": {
"total": 0,
"created": 0,
"duplicates": 0,
"skipped": 0,
"errors": 0
},
"errors": [
{
"row": 0,
"message": "string"
}
],
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"completedAt": "2026-11-01T09:30:00.000Z"
}
],
"hasMore": false,
"nextCursor": "string"
}/api/v1/importsCSV export from Lexware Office (lexoffice), sevDesk, Papierkram or your own CSV in the field file, plus provider and entity (contacts, invoices, receipts). The response contains the detected columns, a suggested mapping (mapping) and the first rows. Then POST /imports/{id}/preview (validation, duplicates) and POST /imports/{id}/commit. Requires the write scope of the target: contacts:write, invoices:write or receipts:write respectively.
Any valid API key or OAuth token.
Body (multipart/form-data)
filestring (binary)requiredtext/csv, text/plain, application/vnd.ms-excel, application/csv, text/comma-separated-values, application/octet-stream, max. 5120 KBprovider"lexoffice" | "sevdesk" | "papierkram" | "generic"requiredentity"contacts" | "invoices" | "receipts"required
Response 201 · ImportJob
idstringrequiredobject"import_job"requiredprovider"lexoffice" | "sevdesk" | "papierkram" | "generic"requiredentity"contacts" | "invoices" | "receipts"requiredstatus"uploaded" | "importing" | "completed" | "failed"requiredfileNamestringrequireddelimiterstringrequiredencodingstringrequiredrowCountintegerrequired-9007199254740991–9007199254740991headersArray<string>requiredmappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)fieldsArray<object>requiredidstringrequiredlabelstringrequiredtypestringrequiredrequiredbooleanrequired
sampleArray<object>requiredThe first lines of the filecountsobject | nullrequiredtotalintegerrequired-9007199254740991–9007199254740991createdintegerrequired-9007199254740991–9007199254740991duplicatesintegerrequired-9007199254740991–9007199254740991skippedintegerrequired-9007199254740991–9007199254740991errorsintegerrequired-9007199254740991–9007199254740991
errorsArray<object>requiredrowintegerrequired-9007199254740991–9007199254740991messagestringrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)completedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/imports' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-F 'file=@file' \
-F 'provider=…' \
-F 'entity=…'{
"id": "string",
"object": "import_job",
"provider": "lexoffice",
"entity": "contacts",
"status": "uploaded",
"fileName": "string",
"delimiter": "string",
"encoding": "string",
"rowCount": 0,
"headers": [
"string"
],
"mapping": {},
"fields": [
{
"id": "string",
"label": "string",
"type": "string",
"required": false
}
],
"sample": [
{}
],
"counts": {
"total": 0,
"created": 0,
"duplicates": 0,
"skipped": 0,
"errors": 0
},
"errors": [
{
"row": 0,
"message": "string"
}
],
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"completedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/imports/{id}Any valid API key or OAuth token.
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · ImportJob
idstringrequiredobject"import_job"requiredprovider"lexoffice" | "sevdesk" | "papierkram" | "generic"requiredentity"contacts" | "invoices" | "receipts"requiredstatus"uploaded" | "importing" | "completed" | "failed"requiredfileNamestringrequireddelimiterstringrequiredencodingstringrequiredrowCountintegerrequired-9007199254740991–9007199254740991headersArray<string>requiredmappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)fieldsArray<object>requiredidstringrequiredlabelstringrequiredtypestringrequiredrequiredbooleanrequired
sampleArray<object>requiredThe first lines of the filecountsobject | nullrequiredtotalintegerrequired-9007199254740991–9007199254740991createdintegerrequired-9007199254740991–9007199254740991duplicatesintegerrequired-9007199254740991–9007199254740991skippedintegerrequired-9007199254740991–9007199254740991errorsintegerrequired-9007199254740991–9007199254740991
errorsArray<object>requiredrowintegerrequired-9007199254740991–9007199254740991messagestringrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)completedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/imports/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "string",
"object": "import_job",
"provider": "lexoffice",
"entity": "contacts",
"status": "uploaded",
"fileName": "string",
"delimiter": "string",
"encoding": "string",
"rowCount": 0,
"headers": [
"string"
],
"mapping": {},
"fields": [
{
"id": "string",
"label": "string",
"type": "string",
"required": false
}
],
"sample": [
{}
],
"counts": {
"total": 0,
"created": 0,
"duplicates": 0,
"skipped": 0,
"errors": 0
},
"errors": [
{
"row": 0,
"message": "string"
}
],
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"completedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/imports/{id}Deletes the job and the uploaded file. Records that have already been imported are kept.
Any valid API key or OAuth token.
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 204
Success, no content
curl -X DELETE 'https://www.debt-flow.io/api/v1/imports/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"/api/v1/imports/{id}/commitCreates the validated records: contacts (customers/suppliers), invoices (as finalised legacy documents with their original number, without a number range) or receipts (status review, without a file). Rows with errors are skipped, as are duplicates by default. A job can only be run once (409 import_completed).
Any valid API key or OAuth token.
Path parameters
idstringrequiredResource IDmax. 128 characters
Headers
Idempotency-KeystringUnique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.max. 255 characters
Body (JSON) · ImportCommitRequest
mappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)defaultRole"customer" | "supplier"Default: "customer"skipDuplicatesbooleanSkip duplicates (recommended)Default: true
Response 200 · ImportJob
idstringrequiredobject"import_job"requiredprovider"lexoffice" | "sevdesk" | "papierkram" | "generic"requiredentity"contacts" | "invoices" | "receipts"requiredstatus"uploaded" | "importing" | "completed" | "failed"requiredfileNamestringrequireddelimiterstringrequiredencodingstringrequiredrowCountintegerrequired-9007199254740991–9007199254740991headersArray<string>requiredmappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)fieldsArray<object>requiredidstringrequiredlabelstringrequiredtypestringrequiredrequiredbooleanrequired
sampleArray<object>requiredThe first lines of the filecountsobject | nullrequiredtotalintegerrequired-9007199254740991–9007199254740991createdintegerrequired-9007199254740991–9007199254740991duplicatesintegerrequired-9007199254740991–9007199254740991skippedintegerrequired-9007199254740991–9007199254740991errorsintegerrequired-9007199254740991–9007199254740991
errorsArray<object>requiredrowintegerrequired-9007199254740991–9007199254740991messagestringrequired
createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)completedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
Possible errors: 400, 401, 403, 404, 409, 410, 422, 429, 500
curl -X POST 'https://www.debt-flow.io/api/v1/imports/ID/commit' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"mapping": {},
"defaultRole": "customer",
"skipDuplicates": true
}'{
"id": "string",
"object": "import_job",
"provider": "lexoffice",
"entity": "contacts",
"status": "uploaded",
"fileName": "string",
"delimiter": "string",
"encoding": "string",
"rowCount": 0,
"headers": [
"string"
],
"mapping": {},
"fields": [
{
"id": "string",
"label": "string",
"type": "string",
"required": false
}
],
"sample": [
{}
],
"counts": {
"total": 0,
"created": 0,
"duplicates": 0,
"skipped": 0,
"errors": 0
},
"errors": [
{
"row": 0,
"message": "string"
}
],
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z",
"completedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/imports/{id}/previewApplies the column mapping and checks each row: new, duplicate (already exists or appears twice in the file) or error. Errors and duplicates are listed first. Saves the mapping on the job; otherwise changes nothing.
Any valid API key or OAuth token.
Path parameters
idstringrequiredResource IDmax. 128 characters
Body (JSON) · ImportPreviewRequest
mappingobjectrequiredTarget field → column heading of the CSV file (null = do not import)defaultRole"customer" | "supplier"Contacts only: contact type if no column is mappedDefault: "customer"limitinteger1–500 · Default: 200
Response 200 · ImportPreview
object"import_preview"requiredcountsobjectrequiredtotalintegerrequired-9007199254740991–9007199254740991newintegerrequired-9007199254740991–9007199254740991duplicatesintegerrequired-9007199254740991–9007199254740991errorsintegerrequired-9007199254740991–9007199254740991
rowsArray<object>requiredrowintegerrequiredLine number in the file (1 = first data row)-9007199254740991–9007199254740991status"new" | "duplicate" | "error"requiredrecordobjectrequiredduplicateOfobject | nullrequiredtypestringrequiredidstring | nullrequiredlabelstringrequired
messagesArray<string>required
curl -X POST 'https://www.debt-flow.io/api/v1/imports/ID/preview' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"mapping": {},
"defaultRole": "customer",
"limit": 200
}'{
"object": "import_preview",
"counts": {
"total": 0,
"new": 0,
"duplicates": 0,
"errors": 0
},
"rows": [
{
"row": 0,
"status": "new",
"record": {},
"duplicateOf": {
"type": "string",
"id": "string",
"label": "string"
},
"messages": [
"string"
]
}
]
}/api/v1/receipt-categoriesCategories for a receipt's category, with suggested accounts according to the DATEV standard charts of accounts SKR03 and SKR04.
Permission: receipts:read
Response 200 · ReceiptCategoryList
object"list"requireddataArray<object>requiredidenumrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherlabelstringrequiredhintstringrequiredskr03stringrequiredskr04stringrequired
curl 'https://www.debt-flow.io/api/v1/receipt-categories' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "goods",
"label": "string",
"hint": "string",
"skr03": "string",
"skr04": "string"
}
]
}/api/v1/receipt-inboxPersonal address belege-<kennung>@in.debt-flow.io. Attachments (PDF, images, e-invoices) sent to this address are created as receipts.
Permission: receipts:read
Response 200 · ReceiptInbox
object"receipt_inbox"requiredaddressstring | nullrequiredbelege-<identifier>@… – null until set upactivebooleanrequiredallowedSendersArray<string>requiredOnly accept these senders (email or @domain); empty = allreceivedCountintegerrequired-9007199254740991–9007199254740991lastReceivedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/receipt-inbox' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "receipt_inbox",
"address": "string",
"active": false,
"allowedSenders": [
"string"
],
"receivedCount": 0,
"lastReceivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipt-inboxactive: true sets up the address the first time. allowedSenders restricts receiving to specific senders (email or @domain.de).
Permission: receipts:write
Body (JSON) · ReceiptInboxUpdate
activebooleanallowedSendersArray<string>
Response 200 · ReceiptInbox
object"receipt_inbox"requiredaddressstring | nullrequiredbelege-<identifier>@… – null until set upactivebooleanrequiredallowedSendersArray<string>requiredOnly accept these senders (email or @domain); empty = allreceivedCountintegerrequired-9007199254740991–9007199254740991lastReceivedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl -X PATCH 'https://www.debt-flow.io/api/v1/receipt-inbox' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"active": false,
"allowedSenders": [
"string"
]
}'{
"object": "receipt_inbox",
"address": "string",
"active": false,
"allowedSenders": [
"string"
],
"receivedCount": 0,
"lastReceivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipt-inbox/rotateAssigns a new identifier. The previous address immediately stops accepting receipts (e.g. in case of spam).
Permission: receipts:write
Headers
Idempotency-KeystringUnique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.max. 255 characters
Response 200 · ReceiptInbox
object"receipt_inbox"requiredaddressstring | nullrequiredbelege-<identifier>@… – null until set upactivebooleanrequiredallowedSendersArray<string>requiredOnly accept these senders (email or @domain); empty = allreceivedCountintegerrequired-9007199254740991–9007199254740991lastReceivedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/receipt-inbox/rotate' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "receipt_inbox",
"address": "string",
"active": false,
"allowedSenders": [
"string"
],
"receivedCount": 0,
"lastReceivedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receiptsNewest first. Filter by status (inbox, processing, review, booked), source and payment status.
Permission: receipts:read
Query parameters
status"inbox" | "processing" | "review" | "booked"source"upload" | "app" | "email" | "import"paymentStatus"open" | "paid"limitintegerNumber of entries (1–100)1–100 · Default: 25cursorstring`nextCursor` of the previous pagemax. 500 characters
Response 200
object"list"requireddataArray<Receipt>requiredidstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)vatBreakdownArray<object>requiredpayableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredparserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)xmlobject | nullrequiredOriginal XML (archived, § 147 AO)
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
hasMorebooleanrequirednextCursorstring | nullrequired
curl 'https://www.debt-flow.io/api/v1/receipts' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"object": "list",
"data": [
{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": null,
"contentType": null,
"size": null,
"sha256": null
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": null,
"netCents": null,
"taxCents": null
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": null,
"durableAsset": null,
"businessEntertainment": null,
"giftValuePerRecipientCents": null,
"giftRecipients": null,
"travelKind": null
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": null,
"profile": null,
"formatLabel": null,
"typeCode": null,
"number": null,
"currency": null,
"lineCount": null,
"lines": null,
"vatBreakdown": null,
"payableCents": null,
"validation": null,
"parserWarnings": null,
"extension": null,
"xml": null
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": null,
"error": "string",
"attempts": 0,
"processedAt": null
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}
],
"hasMore": false,
"nextCursor": "string"
}/api/v1/receiptsFile (PDF, image or e-invoice as XML/ZUGFeRD PDF) as multipart/form-data in the file field. E-invoices are read as structured data, all others via OCR (supplier, date, amounts per tax rate, category). With process=sync (default), the response already contains the recognised values; with async, query the status via GET /receipts/{id}.
Permission: receipts:write
Body (multipart/form-data)
filestring (binary)requiredapplication/pdf, image/jpeg, image/png, image/webp, image/heic, image/heif, application/xml, text/xml, max. 9216 KBnotesstringmax. 2000 charactersprocess"sync" | "async" | "none"OCR: sync (wait), async (background) or noneDefault: "sync"
Response 201 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/receipts' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-F 'file=@file' \
-F 'notes=…' \
-F 'process=…'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/{id}Permission: receipts:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl 'https://www.debt-flow.io/api/v1/receipts/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/{id}Only the fields you pass are changed. Amounts via taxLines (per tax rate) or grossCents + taxRate; the server calculates the totals. Posted receipts are finalised – then only paymentStatus and paidAt can be changed (otherwise 409 document_locked).
Permission: receipts:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Body (JSON) · ReceiptUpdate
supplierContactIdstring | nullmax. 128 characterssupplierNamestring | nullmax. 200 characterssupplierVatIdstring | null | ""supplierIbanstring | nulldocumentNumberstring | nullmax. 80 charactersdocumentDatestring (date) | nullDate (YYYY-MM-DD)dueDatestring (date) | nullDate (YYYY-MM-DD)taxLinesArray<ReceiptTaxLine>Net/tax per tax rate; totals are calculated from thesetaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
grossCentsintegerOnly without taxLines: gross amount; with taxRate, net/tax is calculated-100000000000–100000000000taxRatenumberTax rate in per cent (19, 7, 0 …)0–100taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Tax treatment of the receiptcategoryenum | nullExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullFacts for the account assignment engine (tax assistant)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
descriptionstring | nullmax. 500 charactersnotesstring | nullmax. 2000 characterspaymentStatus"open" | "paid"paidAtstring (date) | nullDate (YYYY-MM-DD)
Response 200 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X PATCH 'https://www.debt-flow.io/api/v1/receipts/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"grossCents": 0,
"taxRate": 0,
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01"
}'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/{id}Only unposted receipts. Posted receipts are subject to the statutory retention obligation (409 document_locked).
Permission: receipts:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 204
Success, no content
curl -X DELETE 'https://www.debt-flow.io/api/v1/receipts/ID' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"/api/v1/receipts/{id}/bookAssigns the internal document number (receipt number range, without gaps) and finalises the receipt (GoBD). After that, only the payment status and bank match can be changed. Prerequisites: document date, supplier, amount and category. If a duplicate is suspected, 409 possible_duplicate – post anyway with confirmDuplicate: true.
Permission: receipts:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Headers
Idempotency-KeystringUnique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.max. 255 characters
Body (JSON)
confirmDuplicatebooleanPost despite duplicate warning
Response 200 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/receipts/ID/book' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"confirmDuplicate": false
}'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/{id}/e-invoiceReads the archived receipt file again with the full e-invoice parser: all lines, taxes, sub-lines and third-party payments of the XRechnung extension (invoice.extension), the validation report (structure and – if configured – the official KoSIT validator in external) and the original XML (originalXml). 404 if the receipt is not an e-invoice.
Permission: receipts:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200
container"xml" | "pdf"requiredplain XML file or PDF with embedded XML (ZUGFeRD/Factur-X)syntax"ubl" | "cii"requiredprofile"en16931" | "xrechnung"requiredrule set detected from BT-24formatLabelstringrequirede.g. “XRechnung 3.0 (UBL)”embeddedFilenamestring | nullrequiredName of the embedded XML for PDFinvoiceEInvoicerequiredcustomizationIdstringrequiredBT-24 Specification identifiermax. 300 charactersprofileIdstringBT-23 Business processmax. 300 charactersnumberstringrequiredBT-1 Invoice numbermax. 200 charactersissueDatestringrequiredBT-2 Invoice date (YYYY-MM-DD)max. 10 characterstypeCodestringrequiredBT-3 Invoice type (380 invoice, 381 credit note, 384 corrected invoice …)max. 10 characterscurrencystringrequiredBT-5 Currencymax. 3 characterstaxPointDatestringBT-7max. 10 charactersdueDatestringBT-9 Due datemax. 10 charactersbuyerReferencestringBT-10 Buyer reference / Leitweg-IDmax. 200 charactersprojectReferencestringBT-11max. 200 characterscontractReferencestringBT-12max. 200 charactersorderReferencestringBT-13 Purchase order numbermax. 200 characterssalesOrderReferencestringBT-14 Sales order numbermax. 200 charactersaccountingReferencestringBT-19 Accounting referencemax. 200 charactersnotesArray<object>requiredBG-1 NotessubjectCodestringmax. 10 characterstextstringrequiredmax. 10000 characters
precedingInvoicesArray<object>requiredBG-3 Reference to preceding invoicesnumberstringrequiredmax. 200 charactersissueDatestringmax. 10 characters
sellerEInvoicePartyrequiredBG-4 SellernamestringrequiredBT-27/44 Namemax. 300 characterstradingNamestringBT-28/45 Trading namemax. 300 charactersidentifiersArray<object>requiredBT-29/46 IdentifierslegalRegistrationIdobjectBT-30/47 Registration numbervatIdstringBT-31/48 VAT IDmax. 30 characterstaxNumberstringBT-32 Tax number (seller only)max. 30 charactersadditionalLegalInfostringBT-33 Additional legal information (seller only)max. 1000 characterselectronicAddressobjectBT-34/49 Electronic address (scheme EM = email, 0204 = Leitweg-ID)addressEInvoiceAddressrequiredcontactobjectBG-6/BG-9 Contact
buyerEInvoicePartyrequiredBG-7 BuyernamestringrequiredBT-27/44 Namemax. 300 characterstradingNamestringBT-28/45 Trading namemax. 300 charactersidentifiersArray<object>requiredBT-29/46 IdentifierslegalRegistrationIdobjectBT-30/47 Registration numbervatIdstringBT-31/48 VAT IDmax. 30 characterstaxNumberstringBT-32 Tax number (seller only)max. 30 charactersadditionalLegalInfostringBT-33 Additional legal information (seller only)max. 1000 characterselectronicAddressobjectBT-34/49 Electronic address (scheme EM = email, 0204 = Leitweg-ID)addressEInvoiceAddressrequiredcontactobjectBG-6/BG-9 Contact
payeeNamestringBT-59 Payee, if differentmax. 300 charactersdeliveryobjectpartyNamestringBT-70max. 300 charactersdatestringBT-72 Delivery/service datemax. 10 charactersaddressEInvoiceAddressBG-15 Delivery address
invoicingPeriodobjectBG-14 Invoicing periodstartstringmax. 10 charactersendstringmax. 10 characters
paymentMeansEInvoicePaymentMeansBG-16typeCodestringrequiredBT-81 Payment means (UNTDID 4461, 58 = SEPA credit transfer)max. 10 characterstextstringBT-82max. 300 charactersremittanceInfostringBT-83 Payment referencemax. 300 charactersaccountsArray<object>requiredBG-17 Credit transfercardobjectBG-18 Card payment (last digits only)directDebitobjectBG-19 Direct debit
paymentTermsstringBT-20 Payment termsmax. 2000 charactersallowanceChargesArray<EInvoiceAllowanceCharge>requiredBG-20/BG-21 Document-level allowances/chargeschargeIndicatorbooleanrequiredtrue = surcharge, false = discountamountCentsintegerrequiredBT-92/99/136/141 Amount-9007199254740991–9007199254740991baseAmountCentsintegerBT-93/100/137/142 Base amount-9007199254740991–9007199254740991percentnumberBT-94/101/138/143 PercentagereasonstringBT-97/104/139/144 Reasonmax. 500 charactersreasonCodestringBT-98/105/140/145 Reason (code)max. 10 characterstaxCategorystringBT-95/102 VAT category (document level only)max. 3 characterstaxRatenumber | nullBT-96/103 VAT rate (document level only)
totalsEInvoiceTotalsrequiredBG-22lineNetCentsintegerrequiredBT-106 Sum of line net amounts-9007199254740991–9007199254740991allowancesCentsintegerrequiredBT-107 Sum of allowances-9007199254740991–9007199254740991chargesCentsintegerrequiredBT-108 Sum of charges-9007199254740991–9007199254740991taxExclusiveCentsintegerrequiredBT-109 Total net amount-9007199254740991–9007199254740991taxCentsintegerrequiredBT-110 Total VAT-9007199254740991–9007199254740991taxInclusiveCentsintegerrequiredBT-112 Total gross amount-9007199254740991–9007199254740991prepaidCentsintegerrequiredBT-113 Already paid-9007199254740991–9007199254740991roundingCentsintegerrequiredBT-114 Rounding-9007199254740991–9007199254740991payableCentsintegerrequiredBT-115 Amount due-9007199254740991–9007199254740991
vatBreakdownArray<EInvoiceVatBreakdown>requiredBG-23categorystringrequiredBT-118 Categorymax. 3 charactersratenumber | nullrequiredBT-119 Rate in percent (null for O)taxableCentsintegerrequiredBT-116 Taxable amount-9007199254740991–9007199254740991taxCentsintegerrequiredBT-117 Tax amount-9007199254740991–9007199254740991exemptionReasonstringBT-120 Exemption reasonmax. 1000 charactersexemptionReasonCodestringBT-121 Exemption reason (VATEX code)max. 30 characters
linesArray<EInvoiceLine>requiredBG-25idstringrequiredBT-126 Line numbermax. 100 charactersparentLineIdstringparent line (CII ParentLineID, incoming only)max. 100 charactersstatusReasonCodestringCII LineStatusReasonCode (DETAIL, GROUP, INFORMATION; incoming only)max. 20 charactersnotestringBT-127 Line notemax. 2000 charactersquantitynumberrequiredBT-129 QuantityunitCodestringrequiredBT-130 Unit (UN/ECE Rec. 20/21)max. 10 charactersnetAmountCentsintegerrequiredBT-131 Line net amount-9007199254740991–9007199254740991orderLineReferencestringBT-132 Purchase order line numbermax. 100 charactersperiodobjectBG-26 Invoice line periodallowanceChargesArray<EInvoiceAllowanceCharge>requiredBG-27/BG-28netPriceCentsnumberrequiredBT-146 Net pricegrossPriceCentsnumberBT-148 Gross price (before price discount)priceDiscountCentsnumberBT-147 Price discountbaseQuantitynumberBT-149 Base quantityvatobjectrequireditemobjectrequired
attachmentsArray<EInvoiceAttachment>requiredBG-24idstringrequiredBT-122 Identifiermax. 200 charactersdescriptionstringBT-123max. 1000 charactersuristringBT-124 External locationmax. 1000 charactersfilenamestringBT-125 File namemax. 300 charactersmimeCodestringmax. 100 characterssizeBytesinteger-9007199254740991–9007199254740991contentBase64stringBT-125 Content (Base64)
extensionEInvoiceExtensionDataXRechnung extension: sub-lines, third-party payments (incoming only)subLinesArray<EInvoiceSubLine>requiredthirdPartyPaymentsArray<EInvoiceThirdPartyPayment>required
language"de" | "en"Language of the free texts and the human-readable rendering (internal; EN 16931/XRechnung have no language field in the invoice header)
validationEInvoiceValidationReportrequiredprofile"en16931" | "xrechnung"requiredvalidbooleanrequiredno errors (warnings allowed)errorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<EInvoiceValidationIssue>requiredseverity"error" | "warning"requiredrulestringrequiredRule ID, e.g. BR-16, BR-DE-15, BR-S-02fieldsArray<string>requiredaffected business terms, e.g. ["BT-10"]pathstringPath in the data model, e.g. seller.contact.phonemessagestringrequiredhuman-readable message (German)hintstringHow to fix it (for your own invoices)
scope"structure"requiredStructural check (mandatory fields, totals, tax rules). The full KoSIT check is returned in `external`.
receiptDraftEInvoiceReceiptDraftrequireddocumentType"invoice" | "credit_note"requiredsupplierNamestringrequiredsupplierVatIdstring | nullrequiredsupplierTaxNumberstring | nullrequiredsupplierIbanstring | nullrequiredsupplierEmailstring | nullrequireddocumentNumberstringrequireddocumentDatestring | nullrequireddueDatestring | nullrequiredcurrencystringrequiredtotalsobjectrequirednetCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991taxCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991grossCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991
payableCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991taxLinesArray<object>requiredtaxRatenumberrequiredcategorystringrequirednetCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991taxCentsintegerrequiredAmount in cents-9007199254740991–9007199254740991
paymentReferencestring | nullrequireddescriptionstringrequiredShort description from the first line items
parserWarningsArray<string>requiredunparseable or unknown detailsxmlstring | nullrequiredextracted XML (PDF only)externalEInvoiceExternalValidationReport | nullResult of the official KoSIT validator (only if requested and the service is configured)status"passed" | "failed" | "unavailable" | "skipped"requiredmode"required" | "optional" | "off"requireddocumentKind"xml" | "zugferd_pdf"requiredsha256stringrequiredSHA-256 of the validated documentcheckedAtstringrequiredTime of validation (ISO 8601)baselinestringrequiredValidation basis (versions, ER-09)resultsArray<EInvoiceExternalValidatorResult>requiredvalidator"kosit" | "verapdf" | "mustang"requiredversionstring | nullrequiredversion reported by the service or configuredstatus"passed" | "failed" | "unavailable" | "skipped"requiredscenariostring | nullrequiredKoSIT scenario, veraPDF profile or ZUGFeRD profileerrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991messagesArray<EInvoiceExternalValidationMessage>requiredat most 200 messagesdurationMsinteger | nullrequired-9007199254740991–9007199254740991errorstring | nullrequiredtechnical error (only for unavailable)
originalXmlstringrequiredXML of the e-invoice (for a PDF: the embedded file)
curl 'https://www.debt-flow.io/api/v1/receipts/ID/e-invoice' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"{
"container": "xml",
"syntax": "ubl",
"profile": "en16931",
"formatLabel": "string",
"embeddedFilename": "string",
"invoice": {
"customizationId": "string",
"profileId": "string",
"number": "string",
"issueDate": "string",
"typeCode": "string",
"currency": "string",
"taxPointDate": "string",
"dueDate": "string",
"buyerReference": "string",
"projectReference": "string",
"contractReference": "string",
"orderReference": "string",
"salesOrderReference": "string",
"accountingReference": "string",
"notes": [],
"precedingInvoices": [],
"seller": {
"name": "string",
"tradingName": "string",
"identifiers": [],
"legalRegistrationId": {
"id": "string",
"scheme": "string"
},
"vatId": "string",
"taxNumber": "string",
"additionalLegalInfo": "string",
"electronicAddress": {
"scheme": "string",
"value": "string"
},
"address": {
"line1": null,
"line2": null,
"line3": null,
"city": null,
"postCode": null,
"subdivision": null,
"countryCode": null
},
"contact": {
"name": "string",
"phone": "string",
"email": "string"
}
},
"buyer": {
"name": "string",
"tradingName": "string",
"identifiers": [],
"legalRegistrationId": {
"id": "string",
"scheme": "string"
},
"vatId": "string",
"taxNumber": "string",
"additionalLegalInfo": "string",
"electronicAddress": {
"scheme": "string",
"value": "string"
},
"address": {
"line1": null,
"line2": null,
"line3": null,
"city": null,
"postCode": null,
"subdivision": null,
"countryCode": null
},
"contact": {
"name": "string",
"phone": "string",
"email": "string"
}
},
"payeeName": "string",
"delivery": {
"partyName": "string",
"date": "string",
"address": {
"line1": "string",
"line2": "string",
"line3": "string",
"city": "string",
"postCode": "string",
"subdivision": "string",
"countryCode": "string"
}
},
"invoicingPeriod": {
"start": "string",
"end": "string"
},
"paymentMeans": {
"typeCode": "string",
"text": "string",
"remittanceInfo": "string",
"accounts": [],
"card": {
"pan": "string",
"holder": "string"
},
"directDebit": {
"mandateId": "string",
"creditorId": "string",
"debitedAccount": "string"
}
},
"paymentTerms": "string",
"allowanceCharges": [],
"totals": {
"lineNetCents": 0,
"allowancesCents": 0,
"chargesCents": 0,
"taxExclusiveCents": 0,
"taxCents": 0,
"taxInclusiveCents": 0,
"prepaidCents": 0,
"roundingCents": 0,
"payableCents": 0
},
"vatBreakdown": [
{
"category": "string",
"rate": 0,
"taxableCents": 0,
"taxCents": 0,
"exemptionReason": "string",
"exemptionReasonCode": "string"
}
],
"lines": [
{
"id": "string",
"parentLineId": "string",
"statusReasonCode": "string",
"note": "string",
"quantity": 0,
"unitCode": "string",
"netAmountCents": 0,
"orderLineReference": "string",
"period": {
"start": null,
"end": null
},
"allowanceCharges": [],
"netPriceCents": 0,
"grossPriceCents": 0,
"priceDiscountCents": 0,
"baseQuantity": 0,
"vat": {
"category": null,
"rate": null
},
"item": {
"name": null,
"description": null,
"sellerId": null,
"buyerId": null,
"standardId": null,
"classifications": null,
"originCountry": null,
"attributes": null
}
}
],
"attachments": [],
"extension": {
"subLines": [],
"thirdPartyPayments": []
},
"language": "de"
},
"validation": {
"profile": "en16931",
"valid": false,
"errorCount": 0,
"warningCount": 0,
"issues": [
{
"severity": "error",
"rule": "string",
"fields": [
null
],
"path": "string",
"message": "string",
"hint": "string"
}
],
"scope": "structure"
},
"receiptDraft": {
"documentType": "invoice",
"supplierName": "string",
"supplierVatId": "string",
"supplierTaxNumber": "string",
"supplierIban": "string",
"supplierEmail": "string",
"documentNumber": "string",
"documentDate": "string",
"dueDate": "string",
"currency": "string",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"payableCents": 0,
"taxLines": [
{
"taxRate": 0,
"category": "string",
"netCents": 0,
"taxCents": 0
}
],
"paymentReference": "string",
"description": "string"
},
"parserWarnings": [
"string"
],
"xml": "string",
"external": {
"status": "passed",
"mode": "required",
"documentKind": "xml",
"sha256": "string",
"checkedAt": "string",
"baseline": "string",
"results": [
{
"validator": null,
"version": null,
"status": null,
"scenario": null,
"errorCount": null,
"warningCount": null,
"messages": null,
"durationMs": null,
"error": null
}
]
},
"originalXml": "string"
}/api/v1/receipts/{id}/fileOriginal file, unchanged (for the SHA-256, see file.sha256). XML is delivered as a download.
Permission: receipts:read
Path parameters
idstringrequiredResource IDmax. 128 characters
Response 200
File (application/octet-stream).
curl 'https://www.debt-flow.io/api/v1/receipts/ID/file' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY"/api/v1/receipts/{id}/fileOnly unposted receipts, e.g. for imported receipts without a file. Recognition is then scheduled again.
Permission: receipts:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Body (multipart/form-data)
filestring (binary)requiredapplication/pdf, image/jpeg, image/png, image/webp, image/heic, image/heif, application/xml, text/xml, max. 9216 KB
Response 200 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
Possible errors: 400, 401, 403, 404, 409, 413, 415, 429, 500
curl -X PUT 'https://www.debt-flow.io/api/v1/receipts/ID/file' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-F 'file=@file'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/{id}/processRestarts recognition (e-invoice or OCR). With overwrite: true, fields that are already filled in are also overwritten. If the AI quota is exhausted, ocr.status remains pending and recognition is retried automatically.
Permission: receipts:write
Path parameters
idstringrequiredResource IDmax. 128 characters
Body (JSON)
overwritebooleanDefault: false
Response 200 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/receipts/ID/process' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"overwrite": false
}'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}/api/v1/receipts/photosFor mobile apps: photo (JPEG, PNG, WebP, HEIC) in the file field. Responds immediately with 202 and status inbox; OCR runs in the background (event receipt.processed or GET /receipts/{id}). Recommendation: resize the photo to a maximum of 2500 px on the long edge, JPEG quality 80 %.
Permission: receipts:write
Body (multipart/form-data)
filestring (binary)requiredimage/jpeg, image/png, image/webp, image/heic, image/heif, max. 9216 KBnotesstringmax. 2000 characterscapturedAtstring (date-time)Capture time in the app
Response 202 · Receipt
idstringrequiredobject"receipt"requiredstatus"inbox" | "processing" | "review" | "booked"requiredsource"upload" | "app" | "email" | "import"requirednumberstring | nullrequiredInternal document number (number range “receipt”), assigned on postingfileReceiptFile | nullrequiredOriginal file; null for imported receipts without a filefileNamestringrequiredcontentTypestringrequiredsizeintegerrequired-9007199254740991–9007199254740991sha256stringrequiredSHA-256 of the original (GoBD evidence, duplicate check)
supplierContactIdstring | nullrequiredsupplierNamestring | nullrequiredsupplierVatIdstring | nullrequiredsupplierIbanstring | nullrequireddocumentNumberstring | nullrequiredSupplier's invoice numberdocumentDatestring (date) | nullrequiredDate (YYYY-MM-DD)dueDatestring (date) | nullrequiredDate (YYYY-MM-DD)currency"EUR"requiredtotalsReceiptTotalsrequirednetCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000grossCentsintegerrequiredAmount in cents-100000000000–100000000000
taxLinesArray<ReceiptTaxLine>requiredtaxRatenumberrequiredTax rate in per cent (19, 7, 0 …)0–100netCentsintegerrequiredAmount in cents-100000000000–100000000000taxCentsintegerrequiredAmount in cents-100000000000–100000000000
taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"requiredTax treatment of the receiptcategoryenum | nullrequiredExpense category (see GET /receipt-categories)Values: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_tax, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, travel_meals, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, fixed_assets, otherpostingFactsReceiptPostingFacts | nullrequiredFacts for the account assignment (low-value assets, software, entertainment, gifts, travel expenses)softwareKind"subscription" | "purchase" | "own_development" | nullSoftware: subscription = subscription/maintenance, purchase = purchase, own_development = in-house developmentdurableAssetboolean | nullIndependently usable asset with a useful life of more than one yearbusinessEntertainmentboolean | nullBusiness entertainment (70/30 split)giftValuePerRecipientCentsinteger | nullGifts: value of all gifts to the same recipient in the financial year (net, gross for small businesses) in cents0–9007199254740991giftRecipientsstring | nullGifts: recipient (record-keeping obligation § 4 (7) EStG)max. 500 characterstravelKind"fares" | "lodging" | "meals" | "other" | nullTravel expenses: fares = fares, lodging = accommodation, meals = meals, other = incidental costs
accountsobject | nullrequiredSuggested account for the category (SKR03/SKR04)skr03stringrequiredskr04stringrequired
descriptionstring | nullrequirednotesstring | nullrequiredpaymentStatus"open" | "paid"requiredpaidAtstring (date) | nullrequiredDate (YYYY-MM-DD)bankTransactionIdstring | nullrequiredeinvoiceReceiptEInvoice | nullrequiredDetected e-invoice (structured data instead of OCR)format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"requiredprofilestring | nullrequiredSpecification identifier (BT-24)formatLabelstring | nullrequiredtypeCodestring | nullrequiredBT-3 invoice type code (380, 381 …)numberstring | nullrequiredcurrencystring | nullrequiredlineCountintegerrequired-9007199254740991–9007199254740991linesArray<object>requiredLines (at most 200; all via /e-invoice)idstringrequirednamestringrequiredquantitynumberrequiredunitCodestringrequirednetPriceCentsnumberrequirednetAmountCentsintegerrequired-9007199254740991–9007199254740991vatCategorystringrequiredvatRatenumber | nullrequired
vatBreakdownArray<object>requiredcategorystringrequiredratenumber | nullrequiredtaxableCentsintegerrequired-9007199254740991–9007199254740991taxCentsintegerrequired-9007199254740991–9007199254740991exemptionReasonstring | nullrequired
payableCentsinteger | nullrequired-9007199254740991–9007199254740991validationobject | nullrequiredvalidbooleanrequirederrorCountintegerrequired-9007199254740991–9007199254740991warningCountintegerrequired-9007199254740991–9007199254740991issuesArray<object>requiredat most 50externalobject | nullrequiredofficial KoSIT validator
parserWarningsArray<string>requiredextensionobject | nullrequiredXRechnung extension: fully preserved, display to follow (ER-10)subLineCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentCountintegerrequired-9007199254740991–9007199254740991thirdPartyPaymentsCentsintegerrequired-9007199254740991–9007199254740991
xmlobject | nullrequiredOriginal XML (archived, § 147 AO)source"original" | "extracted"requiredoriginal = uploaded XML file, extracted = taken from the PDFsha256stringrequiredsizeintegerrequired-9007199254740991–9007199254740991archiveRecordIdstring | nullrequired
ocrReceiptOcrrequiredstatus"pending" | "running" | "done" | "failed" | "skipped"requiredenginestring | nullrequiredgemini-… (OCR) or einvoice (structured e-invoice)confidencenumber | nullrequired0–1errorstring | nullrequiredattemptsintegerrequired-9007199254740991–9007199254740991processedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)
duplicateOfstring | nullrequiredID of a possibly identical receiptemailobject | nullrequiredOrigin when received by emailfromstringrequiredsubjectstringrequiredreceivedAtstring (date-time)requiredTimestamp (ISO 8601)
importobject | nullrequiredproviderstringrequiredjobIdstringrequiredrowintegerrequired-9007199254740991–9007199254740991
lockedbooleanrequiredbookedAtstring (date-time) | nullrequiredTimestamp (ISO 8601)createdAtstring (date-time)requiredTimestamp (ISO 8601)updatedAtstring (date-time)requiredTimestamp (ISO 8601)
curl -X POST 'https://www.debt-flow.io/api/v1/receipts/photos' \
-H "Authorization: Bearer $DEBTFLOW_API_KEY" \
-F 'file=@file' \
-F 'notes=…' \
-F 'capturedAt=…'{
"id": "string",
"object": "receipt",
"status": "inbox",
"source": "upload",
"number": "string",
"file": {
"fileName": "string",
"contentType": "string",
"size": 0,
"sha256": "string"
},
"supplierContactId": "string",
"supplierName": "string",
"supplierVatId": "string",
"supplierIban": "string",
"documentNumber": "string",
"documentDate": "2026-11-01",
"dueDate": "2026-11-01",
"currency": "EUR",
"totals": {
"netCents": 0,
"taxCents": 0,
"grossCents": 0
},
"taxLines": [
{
"taxRate": 0,
"netCents": 0,
"taxCents": 0
}
],
"taxTreatment": "regular",
"category": "goods",
"postingFacts": {
"softwareKind": "subscription",
"durableAsset": false,
"businessEntertainment": false,
"giftValuePerRecipientCents": 0,
"giftRecipients": "string",
"travelKind": "fares"
},
"accounts": {
"skr03": "string",
"skr04": "string"
},
"description": "string",
"notes": "string",
"paymentStatus": "open",
"paidAt": "2026-11-01",
"bankTransactionId": "string",
"einvoice": {
"format": "zugferd",
"profile": "string",
"formatLabel": "string",
"typeCode": "string",
"number": "string",
"currency": "string",
"lineCount": 0,
"lines": [
{
"id": null,
"name": null,
"quantity": null,
"unitCode": null,
"netPriceCents": null,
"netAmountCents": null,
"vatCategory": null,
"vatRate": null
}
],
"vatBreakdown": [
{
"category": null,
"rate": null,
"taxableCents": null,
"taxCents": null,
"exemptionReason": null
}
],
"payableCents": 0,
"validation": {
"valid": null,
"errorCount": null,
"warningCount": null,
"issues": null,
"external": null
},
"parserWarnings": [
"string"
],
"extension": {
"subLineCount": null,
"thirdPartyPaymentCount": null,
"thirdPartyPaymentsCents": null
},
"xml": {
"source": null,
"sha256": null,
"size": null,
"archiveRecordId": null
}
},
"ocr": {
"status": "pending",
"engine": "string",
"confidence": 0,
"error": "string",
"attempts": 0,
"processedAt": "2026-11-01T09:30:00.000Z"
},
"duplicateOf": "string",
"email": {
"from": "string",
"subject": "string",
"receivedAt": "2026-11-01T09:30:00.000Z"
},
"import": {
"provider": "string",
"jobId": "string",
"row": 0
},
"locked": false,
"bookedAt": "2026-11-01T09:30:00.000Z",
"createdAt": "2026-11-01T09:30:00.000Z",
"updatedAt": "2026-11-01T09:30:00.000Z"
}