Zum Inhalt springen

Belege

Eingangsbelege mit Texterkennung, Eingangs-Mailadresse und Import.
GET/api/v1/imports

Nur Importe, deren Ziel (Kontakte, Rechnungen, Belege) der Aufrufer lesen darf.

Jeder gültige API-Schlüssel oder OAuth-Token.

Query-Parameter

  • limitinteger
    Anzahl Einträge (1–100)
    1–100 · Standard: 25
  • cursorstring
    `nextCursor` der vorherigen Seite
    max. 500 Zeichen

Antwort 200

  • object"list"Pflicht
  • dataArray<ImportJob>Pflicht
    • idstringPflicht
    • object"import_job"Pflicht
    • provider"lexoffice" | "sevdesk" | "papierkram" | "generic"Pflicht
    • entity"contacts" | "invoices" | "receipts"Pflicht
    • status"uploaded" | "importing" | "completed" | "failed"Pflicht
    • fileNamestringPflicht
    • delimiterstringPflicht
    • encodingstringPflicht
    • rowCountintegerPflicht
      -9007199254740991–9007199254740991
    • headersArray<string>Pflicht
    • mappingobjectPflicht
      Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
    • fieldsArray<object>Pflicht
      • idstringPflicht
      • labelstringPflicht
      • typestringPflicht
      • requiredbooleanPflicht
    • sampleArray<object>Pflicht
      Die ersten Zeilen der Datei
    • countsobject | nullPflicht
      • totalintegerPflicht
        -9007199254740991–9007199254740991
      • createdintegerPflicht
        -9007199254740991–9007199254740991
      • duplicatesintegerPflicht
        -9007199254740991–9007199254740991
      • skippedintegerPflicht
        -9007199254740991–9007199254740991
      • errorsintegerPflicht
        -9007199254740991–9007199254740991
    • errorsArray<object>Pflicht
      • rowintegerPflicht
        -9007199254740991–9007199254740991
      • messagestringPflicht
    • createdAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
    • updatedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
    • completedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • hasMorebooleanPflicht
  • nextCursorstring | nullPflicht

Mögliche Fehler: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/imports' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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"
}
POST/api/v1/imports

CSV-Export aus Lexware Office (lexoffice), sevDesk, Papierkram oder eigene CSV im Feld file, dazu provider und entity (contacts, invoices, receipts). Die Antwort enthält erkannte Spalten, einen Zuordnungsvorschlag (mapping) und die ersten Zeilen. Danach POST /imports/{id}/preview (Prüfung, Dubletten) und POST /imports/{id}/commit. Benötigt den Schreib-Scope des Ziels: contacts:write, invoices:write bzw. receipts:write.

Jeder gültige API-Schlüssel oder OAuth-Token.

Body (multipart/form-data)

  • filestring (binary)Pflicht
    text/csv, text/plain, application/vnd.ms-excel, application/csv, text/comma-separated-values, application/octet-stream, max. 5120 KB
  • provider"lexoffice" | "sevdesk" | "papierkram" | "generic"Pflicht
  • entity"contacts" | "invoices" | "receipts"Pflicht

Antwort 201 · ImportJob

  • idstringPflicht
  • object"import_job"Pflicht
  • provider"lexoffice" | "sevdesk" | "papierkram" | "generic"Pflicht
  • entity"contacts" | "invoices" | "receipts"Pflicht
  • status"uploaded" | "importing" | "completed" | "failed"Pflicht
  • fileNamestringPflicht
  • delimiterstringPflicht
  • encodingstringPflicht
  • rowCountintegerPflicht
    -9007199254740991–9007199254740991
  • headersArray<string>Pflicht
  • mappingobjectPflicht
    Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
  • fieldsArray<object>Pflicht
    • idstringPflicht
    • labelstringPflicht
    • typestringPflicht
    • requiredbooleanPflicht
  • sampleArray<object>Pflicht
    Die ersten Zeilen der Datei
  • countsobject | nullPflicht
    • totalintegerPflicht
      -9007199254740991–9007199254740991
    • createdintegerPflicht
      -9007199254740991–9007199254740991
    • duplicatesintegerPflicht
      -9007199254740991–9007199254740991
    • skippedintegerPflicht
      -9007199254740991–9007199254740991
    • errorsintegerPflicht
      -9007199254740991–9007199254740991
  • errorsArray<object>Pflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
    • messagestringPflicht
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • completedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 413, 415, 429, 500

curl
curl -X POST 'https://www.debt-flow.io/api/v1/imports' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@datei' \
  -F 'provider=…' \
  -F 'entity=…'
Antwort 201
{
  "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"
}
GET/api/v1/imports/{id}

Jeder gültige API-Schlüssel oder OAuth-Token.

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Antwort 200 · ImportJob

  • idstringPflicht
  • object"import_job"Pflicht
  • provider"lexoffice" | "sevdesk" | "papierkram" | "generic"Pflicht
  • entity"contacts" | "invoices" | "receipts"Pflicht
  • status"uploaded" | "importing" | "completed" | "failed"Pflicht
  • fileNamestringPflicht
  • delimiterstringPflicht
  • encodingstringPflicht
  • rowCountintegerPflicht
    -9007199254740991–9007199254740991
  • headersArray<string>Pflicht
  • mappingobjectPflicht
    Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
  • fieldsArray<object>Pflicht
    • idstringPflicht
    • labelstringPflicht
    • typestringPflicht
    • requiredbooleanPflicht
  • sampleArray<object>Pflicht
    Die ersten Zeilen der Datei
  • countsobject | nullPflicht
    • totalintegerPflicht
      -9007199254740991–9007199254740991
    • createdintegerPflicht
      -9007199254740991–9007199254740991
    • duplicatesintegerPflicht
      -9007199254740991–9007199254740991
    • skippedintegerPflicht
      -9007199254740991–9007199254740991
    • errorsintegerPflicht
      -9007199254740991–9007199254740991
  • errorsArray<object>Pflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
    • messagestringPflicht
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • completedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/imports/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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"
}
DELETE/api/v1/imports/{id}

Löscht den Auftrag und die hochgeladene Datei. Bereits importierte Datensätze bleiben erhalten.

Jeder gültige API-Schlüssel oder OAuth-Token.

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Antwort 204

Erfolg, keine Antwort

Mögliche Fehler: 400, 401, 403, 404, 409, 429, 500

curl -X DELETE 'https://www.debt-flow.io/api/v1/imports/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
POST/api/v1/imports/{id}/commit

Legt die geprüften Datensätze an: Kontakte (Kunden/Lieferanten), Rechnungen (als festgeschriebene Altbelege mit Originalnummer, ohne Nummernkreis) oder Belege (Status review, ohne Datei). Fehlerhafte Zeilen werden übersprungen, Dubletten standardmäßig auch. Ein Auftrag kann nur einmal ausgeführt werden (409 import_completed).

Jeder gültige API-Schlüssel oder OAuth-Token.

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Header

  • Idempotency-Keystring
    Eindeutiger Schlüssel (8–255 Zeichen). Wiederholte Anfragen mit gleichem Schlüssel liefern 24 h lang dieselbe Antwort.
    max. 255 Zeichen

Body (JSON) · ImportCommitRequest

  • mappingobjectPflicht
    Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
  • defaultRole"customer" | "supplier"
    Standard: "customer"
  • skipDuplicatesboolean
    Dubletten überspringen (empfohlen)
    Standard: true

Antwort 200 · ImportJob

  • idstringPflicht
  • object"import_job"Pflicht
  • provider"lexoffice" | "sevdesk" | "papierkram" | "generic"Pflicht
  • entity"contacts" | "invoices" | "receipts"Pflicht
  • status"uploaded" | "importing" | "completed" | "failed"Pflicht
  • fileNamestringPflicht
  • delimiterstringPflicht
  • encodingstringPflicht
  • rowCountintegerPflicht
    -9007199254740991–9007199254740991
  • headersArray<string>Pflicht
  • mappingobjectPflicht
    Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
  • fieldsArray<object>Pflicht
    • idstringPflicht
    • labelstringPflicht
    • typestringPflicht
    • requiredbooleanPflicht
  • sampleArray<object>Pflicht
    Die ersten Zeilen der Datei
  • countsobject | nullPflicht
    • totalintegerPflicht
      -9007199254740991–9007199254740991
    • createdintegerPflicht
      -9007199254740991–9007199254740991
    • duplicatesintegerPflicht
      -9007199254740991–9007199254740991
    • skippedintegerPflicht
      -9007199254740991–9007199254740991
    • errorsintegerPflicht
      -9007199254740991–9007199254740991
  • errorsArray<object>Pflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
    • messagestringPflicht
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • completedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 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
}'
Antwort 200
{
  "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"
}
POST/api/v1/imports/{id}/preview

Wendet die Spaltenzuordnung an und prüft jede Zeile: new, duplicate (bereits vorhanden oder doppelt in der Datei) oder error. Fehler und Dubletten werden zuerst gelistet. Speichert die Zuordnung am Auftrag; ändert sonst nichts.

Jeder gültige API-Schlüssel oder OAuth-Token.

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Body (JSON) · ImportPreviewRequest

  • mappingobjectPflicht
    Zielfeld → Spaltenüberschrift der CSV-Datei (null = nicht übernehmen)
  • defaultRole"customer" | "supplier"
    Nur Kontakte: Kontaktart, wenn keine Spalte zugeordnet ist
    Standard: "customer"
  • limitinteger
    1–500 · Standard: 200

Antwort 200 · ImportPreview

  • object"import_preview"Pflicht
  • countsobjectPflicht
    • totalintegerPflicht
      -9007199254740991–9007199254740991
    • newintegerPflicht
      -9007199254740991–9007199254740991
    • duplicatesintegerPflicht
      -9007199254740991–9007199254740991
    • errorsintegerPflicht
      -9007199254740991–9007199254740991
  • rowsArray<object>Pflicht
    • rowintegerPflicht
      Zeilennummer in der Datei (1 = erste Datenzeile)
      -9007199254740991–9007199254740991
    • status"new" | "duplicate" | "error"Pflicht
    • recordobjectPflicht
    • duplicateOfobject | nullPflicht
      • typestringPflicht
      • idstring | nullPflicht
      • labelstringPflicht
    • messagesArray<string>Pflicht

Mögliche Fehler: 400, 401, 403, 404, 410, 429, 500

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
}'
Antwort 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"
      ]
    }
  ]
}
GET/api/v1/receipt-categories

Kategorien für category eines Belegs mit Konten-Vorschlag nach DATEV-Standardkontenrahmen SKR03 und SKR04.

Berechtigung: receipts:read

Antwort 200 · ReceiptCategoryList

  • object"list"Pflicht
  • dataArray<object>Pflicht
    • idenumPflicht
      Ausgabenkategorie (siehe GET /receipt-categories)
      Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
    • labelstringPflicht
    • hintstringPflicht
    • skr03stringPflicht
    • skr04stringPflicht

Mögliche Fehler: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/receipt-categories' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "object": "list",
  "data": [
    {
      "id": "goods",
      "label": "string",
      "hint": "string",
      "skr03": "string",
      "skr04": "string"
    }
  ]
}
GET/api/v1/receipt-inbox

Persönliche Adresse belege-<kennung>@in.debt-flow.io. Anhänge (PDF, Bilder, E-Rechnungen) an diese Adresse werden als Belege angelegt.

Berechtigung: receipts:read

Antwort 200 · ReceiptInbox

  • object"receipt_inbox"Pflicht
  • addressstring | nullPflicht
    belege-<kennung>@… – null, solange nicht eingerichtet
  • activebooleanPflicht
  • allowedSendersArray<string>Pflicht
    Nur diese Absender (E-Mail oder @domain) annehmen; leer = alle
  • receivedCountintegerPflicht
    -9007199254740991–9007199254740991
  • lastReceivedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/receipt-inbox' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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"
}
PATCH/api/v1/receipt-inbox

active: true richtet die Adresse beim ersten Mal ein. allowedSenders beschränkt den Empfang auf bestimmte Absender (E-Mail oder @domain.de).

Berechtigung: receipts:write

Body (JSON) · ReceiptInboxUpdate

  • activeboolean
  • allowedSendersArray<string>

Antwort 200 · ReceiptInbox

  • object"receipt_inbox"Pflicht
  • addressstring | nullPflicht
    belege-<kennung>@… – null, solange nicht eingerichtet
  • activebooleanPflicht
  • allowedSendersArray<string>Pflicht
    Nur diese Absender (E-Mail oder @domain) annehmen; leer = alle
  • receivedCountintegerPflicht
    -9007199254740991–9007199254740991
  • lastReceivedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 429, 500

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"
  ]
}'
Antwort 200
{
  "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"
}
POST/api/v1/receipt-inbox/rotate

Vergibt eine neue Kennung. Die bisherige Adresse nimmt sofort keine Belege mehr an (z. B. bei Spam).

Berechtigung: receipts:write

Header

  • Idempotency-Keystring
    Eindeutiger Schlüssel (8–255 Zeichen). Wiederholte Anfragen mit gleichem Schlüssel liefern 24 h lang dieselbe Antwort.
    max. 255 Zeichen

Antwort 200 · ReceiptInbox

  • object"receipt_inbox"Pflicht
  • addressstring | nullPflicht
    belege-<kennung>@… – null, solange nicht eingerichtet
  • activebooleanPflicht
  • allowedSendersArray<string>Pflicht
    Nur diese Absender (E-Mail oder @domain) annehmen; leer = alle
  • receivedCountintegerPflicht
    -9007199254740991–9007199254740991
  • lastReceivedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/receipt-inbox/rotate' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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"
}
GET/api/v1/receipts

Neueste zuerst. Filter nach Status (inbox, processing, review, booked), Herkunft und Zahlungsstatus.

Berechtigung: receipts:read

Query-Parameter

  • status"inbox" | "processing" | "review" | "booked"
  • source"upload" | "app" | "email" | "import"
  • paymentStatus"open" | "paid"
  • limitinteger
    Anzahl Einträge (1–100)
    1–100 · Standard: 25
  • cursorstring
    `nextCursor` der vorherigen Seite
    max. 500 Zeichen

Antwort 200

  • object"list"Pflicht
  • dataArray<Receipt>Pflicht
    • idstringPflicht
    • object"receipt"Pflicht
    • status"inbox" | "processing" | "review" | "booked"Pflicht
    • source"upload" | "app" | "email" | "import"Pflicht
    • numberstring | nullPflicht
      Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
    • fileReceiptFile | nullPflicht
      Originaldatei; null bei importierten Belegen ohne Datei
      • fileNamestringPflicht
      • contentTypestringPflicht
      • sizeintegerPflicht
        -9007199254740991–9007199254740991
      • sha256stringPflicht
        SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
    • supplierContactIdstring | nullPflicht
    • supplierNamestring | nullPflicht
    • supplierVatIdstring | nullPflicht
    • supplierIbanstring | nullPflicht
    • documentNumberstring | nullPflicht
      Rechnungsnummer des Lieferanten
    • documentDatestring (date) | nullPflicht
      Datum (YYYY-MM-DD)
    • dueDatestring (date) | nullPflicht
      Datum (YYYY-MM-DD)
    • currency"EUR"Pflicht
    • totalsReceiptTotalsPflicht
      • netCentsintegerPflicht
        Betrag in Cent
        -100000000000–100000000000
      • taxCentsintegerPflicht
        Betrag in Cent
        -100000000000–100000000000
      • grossCentsintegerPflicht
        Betrag in Cent
        -100000000000–100000000000
    • taxLinesArray<ReceiptTaxLine>Pflicht
      • taxRatenumberPflicht
        Steuersatz in Prozent (19, 7, 0 …)
        0–100
      • netCentsintegerPflicht
        Betrag in Cent
        -100000000000–100000000000
      • taxCentsintegerPflicht
        Betrag in Cent
        -100000000000–100000000000
    • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
      Steuerbehandlung des Belegs
    • categoryenum | nullPflicht
      Ausgabenkategorie (siehe GET /receipt-categories)
      Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
    • accountsobject | nullPflicht
      Konten-Vorschlag zur Kategorie (SKR03/SKR04)
      • skr03stringPflicht
      • skr04stringPflicht
    • descriptionstring | nullPflicht
    • notesstring | nullPflicht
    • paymentStatus"open" | "paid"Pflicht
    • paidAtstring (date) | nullPflicht
      Datum (YYYY-MM-DD)
    • bankTransactionIdstring | nullPflicht
    • einvoiceobject | nullPflicht
      Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
      • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
      • profilestring | nullPflicht
    • ocrReceiptOcrPflicht
      • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
      • enginestring | nullPflicht
        gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
      • confidencenumber | nullPflicht
        0–1
      • errorstring | nullPflicht
      • attemptsintegerPflicht
        -9007199254740991–9007199254740991
      • processedAtstring (date-time) | nullPflicht
        Zeitpunkt (ISO 8601)
    • duplicateOfstring | nullPflicht
      ID eines möglicherweise identischen Belegs
    • emailobject | nullPflicht
      Herkunft bei Eingang per E-Mail
      • fromstringPflicht
      • subjectstringPflicht
      • receivedAtstring (date-time)Pflicht
        Zeitpunkt (ISO 8601)
    • importobject | nullPflicht
      • providerstringPflicht
      • jobIdstringPflicht
      • rowintegerPflicht
        -9007199254740991–9007199254740991
    • lockedbooleanPflicht
    • bookedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
    • createdAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
    • updatedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • hasMorebooleanPflicht
  • nextCursorstring | nullPflicht

Mögliche Fehler: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/receipts' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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",
      "accounts": {
        "skr03": "string",
        "skr04": "string"
      },
      "description": "string",
      "notes": "string",
      "paymentStatus": "open",
      "paidAt": "2026-11-01",
      "bankTransactionId": "string",
      "einvoice": {
        "format": "zugferd",
        "profile": "string"
      },
      "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"
}
POST/api/v1/receipts

Datei (PDF, Bild oder E-Rechnung als XML/ZUGFeRD-PDF) als multipart/form-data im Feld file. E-Rechnungen werden strukturiert gelesen, alle anderen per Texterkennung (Lieferant, Datum, Beträge je Steuersatz, Kategorie). Mit process=sync (Standard) enthält die Antwort bereits die erkannten Werte; bei async den Status über GET /receipts/{id} abfragen.

Berechtigung: receipts:write

Body (multipart/form-data)

  • filestring (binary)Pflicht
    application/pdf, image/jpeg, image/png, image/webp, image/heic, image/heif, application/xml, text/xml, max. 9216 KB
  • notesstring
    max. 2000 Zeichen
  • process"sync" | "async" | "none"
    Texterkennung: sync (abwarten), async (Hintergrund) oder none
    Standard: "sync"

Antwort 201 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 413, 415, 429, 500

curl
curl -X POST 'https://www.debt-flow.io/api/v1/receipts' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@datei' \
  -F 'notes=…' \
  -F 'process=…'
Antwort 201
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
GET/api/v1/receipts/{id}

Berechtigung: receipts:read

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Antwort 200 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/receipts/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Antwort 200
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
PATCH/api/v1/receipts/{id}

Nur übergebene Felder werden geändert. Beträge über taxLines (je Steuersatz) oder grossCents + taxRate; Summen berechnet der Server. Gebuchte Belege sind festgeschrieben – dann sind nur paymentStatus und paidAt änderbar (sonst 409 document_locked).

Berechtigung: receipts:write

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Body (JSON) · ReceiptUpdate

  • supplierContactIdstring | null
    max. 128 Zeichen
  • supplierNamestring | null
    max. 200 Zeichen
  • supplierVatIdstring | null | ""
  • supplierIbanstring | null
  • documentNumberstring | null
    max. 80 Zeichen
  • documentDatestring (date) | null
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | null
    Datum (YYYY-MM-DD)
  • taxLinesArray<ReceiptTaxLine>
    Netto/Steuer je Steuersatz; Summen werden daraus berechnet
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • grossCentsinteger
    Nur ohne taxLines: Bruttobetrag; mit taxRate wird Netto/Steuer berechnet
    -100000000000–100000000000
  • taxRatenumber
    Steuersatz in Prozent (19, 7, 0 …)
    0–100
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"
    Steuerbehandlung des Belegs
  • categoryenum | null
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • descriptionstring | null
    max. 500 Zeichen
  • notesstring | null
    max. 2000 Zeichen
  • paymentStatus"open" | "paid"
  • paidAtstring (date) | null
    Datum (YYYY-MM-DD)

Antwort 200 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 409, 429, 500

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",
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01"
}'
Antwort 200
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
DELETE/api/v1/receipts/{id}

Nur ungebuchte Belege. Gebuchte Belege unterliegen der Aufbewahrungspflicht (409 document_locked).

Berechtigung: receipts:write

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Antwort 204

Erfolg, keine Antwort

Mögliche Fehler: 400, 401, 403, 404, 409, 429, 500

curl -X DELETE 'https://www.debt-flow.io/api/v1/receipts/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
POST/api/v1/receipts/{id}/book

Vergibt die interne Belegnummer (Nummernkreis receipt, lückenlos) und schreibt den Beleg fest (GoBD). Danach sind nur Zahlungsstatus und Bankzuordnung änderbar. Voraussetzung: Belegdatum, Lieferant, Betrag und Kategorie. Bei Dubletten-Verdacht 409 possible_duplicate – mit confirmDuplicate: true trotzdem buchen.

Berechtigung: receipts:write

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Header

  • Idempotency-Keystring
    Eindeutiger Schlüssel (8–255 Zeichen). Wiederholte Anfragen mit gleichem Schlüssel liefern 24 h lang dieselbe Antwort.
    max. 255 Zeichen

Body (JSON)

  • confirmDuplicateboolean
    Trotz Dubletten-Hinweis buchen

Antwort 200 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 409, 422, 429, 500

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
}'
Antwort 200
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
GET/api/v1/receipts/{id}/file

Originaldatei unverändert (SHA-256 siehe file.sha256). XML wird als Download ausgeliefert.

Berechtigung: receipts:read

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Antwort 200

Datei (application/octet-stream).

Mögliche Fehler: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/receipts/ID/file' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
PUT/api/v1/receipts/{id}/file

Nur ungebuchte Belege, z. B. für importierte Belege ohne Datei. Die Erkennung wird danach erneut eingeplant.

Berechtigung: receipts:write

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Body (multipart/form-data)

  • filestring (binary)Pflicht
    application/pdf, image/jpeg, image/png, image/webp, image/heic, image/heif, application/xml, text/xml, max. 9216 KB

Antwort 200 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 409, 413, 415, 429, 500

curl
curl -X PUT 'https://www.debt-flow.io/api/v1/receipts/ID/file' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@datei'
Antwort 200
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
POST/api/v1/receipts/{id}/process

Startet die Erkennung (E-Rechnung bzw. Texterkennung) erneut. Mit overwrite: true werden auch bereits ausgefüllte Felder überschrieben. Bei ausgeschöpftem KI-Kontingent bleibt ocr.status auf pending und die Erkennung wird automatisch wiederholt.

Berechtigung: receipts:write

Pfadparameter

  • idstringPflicht
    ID der Ressource
    max. 128 Zeichen

Body (JSON)

  • overwriteboolean
    Standard: false

Antwort 200 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 404, 409, 429, 500

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
}'
Antwort 200
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}
POST/api/v1/receipts/photos

Für Mobile-Apps: Foto (JPEG, PNG, WebP, HEIC) im Feld file. Antwortet sofort mit 202 und Status inbox; die Texterkennung läuft im Hintergrund (Ereignis receipt.processed bzw. GET /receipts/{id}). Empfehlung: Foto auf max. 2500 px lange Kante verkleinern, JPEG-Qualität 80 %.

Berechtigung: receipts:write

Body (multipart/form-data)

  • filestring (binary)Pflicht
    image/jpeg, image/png, image/webp, image/heic, image/heif, max. 9216 KB
  • notesstring
    max. 2000 Zeichen
  • capturedAtstring (date-time)
    Aufnahmezeitpunkt in der App

Antwort 202 · Receipt

  • idstringPflicht
  • object"receipt"Pflicht
  • status"inbox" | "processing" | "review" | "booked"Pflicht
  • source"upload" | "app" | "email" | "import"Pflicht
  • numberstring | nullPflicht
    Interne Belegnummer (Nummernkreis „receipt“), vergeben beim Buchen
  • fileReceiptFile | nullPflicht
    Originaldatei; null bei importierten Belegen ohne Datei
    • fileNamestringPflicht
    • contentTypestringPflicht
    • sizeintegerPflicht
      -9007199254740991–9007199254740991
    • sha256stringPflicht
      SHA-256 des Originals (GoBD-Nachweis, Dublettenprüfung)
  • supplierContactIdstring | nullPflicht
  • supplierNamestring | nullPflicht
  • supplierVatIdstring | nullPflicht
  • supplierIbanstring | nullPflicht
  • documentNumberstring | nullPflicht
    Rechnungsnummer des Lieferanten
  • documentDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • dueDatestring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • currency"EUR"Pflicht
  • totalsReceiptTotalsPflicht
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • grossCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxLinesArray<ReceiptTaxLine>Pflicht
    • taxRatenumberPflicht
      Steuersatz in Prozent (19, 7, 0 …)
      0–100
    • netCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
    • taxCentsintegerPflicht
      Betrag in Cent
      -100000000000–100000000000
  • taxTreatment"regular" | "small_business" | "reverse_charge" | "intra_eu_supply" | "export" | "non_taxable"Pflicht
    Steuerbehandlung des Belegs
  • categoryenum | nullPflicht
    Ausgabenkategorie (siehe GET /receipt-categories)
    Werte: goods, goods_reduced, subcontractors, rent, utilities, cleaning, insurance, fees, vehicle_insurance, vehicle_running, vehicle_repairs, vehicle_leasing, advertising, gifts, entertainment, travel, travel_fares, travel_lodging, packaging, repairs, software, postage, phone, internet, office_supplies, literature, training, legal_advice, bookkeeping, equipment_rent, bank_fees, tools, low_value_assets, other
  • accountsobject | nullPflicht
    Konten-Vorschlag zur Kategorie (SKR03/SKR04)
    • skr03stringPflicht
    • skr04stringPflicht
  • descriptionstring | nullPflicht
  • notesstring | nullPflicht
  • paymentStatus"open" | "paid"Pflicht
  • paidAtstring (date) | nullPflicht
    Datum (YYYY-MM-DD)
  • bankTransactionIdstring | nullPflicht
  • einvoiceobject | nullPflicht
    Erkannte E-Rechnung (strukturierte Daten statt Texterkennung)
    • format"zugferd" | "xrechnung_cii" | "xrechnung_ubl"Pflicht
    • profilestring | nullPflicht
  • ocrReceiptOcrPflicht
    • status"pending" | "running" | "done" | "failed" | "skipped"Pflicht
    • enginestring | nullPflicht
      gemini-… (Texterkennung) oder einvoice (strukturierte E-Rechnung)
    • confidencenumber | nullPflicht
      0–1
    • errorstring | nullPflicht
    • attemptsintegerPflicht
      -9007199254740991–9007199254740991
    • processedAtstring (date-time) | nullPflicht
      Zeitpunkt (ISO 8601)
  • duplicateOfstring | nullPflicht
    ID eines möglicherweise identischen Belegs
  • emailobject | nullPflicht
    Herkunft bei Eingang per E-Mail
    • fromstringPflicht
    • subjectstringPflicht
    • receivedAtstring (date-time)Pflicht
      Zeitpunkt (ISO 8601)
  • importobject | nullPflicht
    • providerstringPflicht
    • jobIdstringPflicht
    • rowintegerPflicht
      -9007199254740991–9007199254740991
  • lockedbooleanPflicht
  • bookedAtstring (date-time) | nullPflicht
    Zeitpunkt (ISO 8601)
  • createdAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)
  • updatedAtstring (date-time)Pflicht
    Zeitpunkt (ISO 8601)

Mögliche Fehler: 400, 401, 403, 413, 415, 429, 500

curl
curl -X POST 'https://www.debt-flow.io/api/v1/receipts/photos' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@datei' \
  -F 'notes=…' \
  -F 'capturedAt=…'
Antwort 202
{
  "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",
  "accounts": {
    "skr03": "string",
    "skr04": "string"
  },
  "description": "string",
  "notes": "string",
  "paymentStatus": "open",
  "paidAt": "2026-11-01",
  "bankTransactionId": "string",
  "einvoice": {
    "format": "zugferd",
    "profile": "string"
  },
  "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"
}