Zum Inhalt springen

Bank

Bank accounts, transaction import (CSV/CAMT) and matching.
GET/api/v1/bank-accounts

All bank accounts with balance (opening balance + imported transactions) and the closing balance of the latest CAMT statement.

Permission: banking:read

Query parameters

  • includeArchived"true" | "false"
    including archived accounts
  • limitinteger
    Number of entries (1–100)
    1–100 · Default: 25
  • cursorstring
    `nextCursor` of the previous page
    max. 500 characters

Response 200

  • object"list"required
  • dataArray<BankAccountResource>required
    • idstringrequired
      max. 128 characters
    • namestringrequired
    • ibanstringrequired
    • bicstring | nullrequired
    • bankNamestring | nullrequired
    • currency"EUR"required
    • openingBalanceCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • openingDatestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • balanceCentsintegerrequired
      Opening balance + sum of all imported transactions
      -100000000000–100000000000
    • statementBalanceCentsinteger | nullrequired
      Closing balance according to the last CAMT statement
      -100000000000–100000000000
    • statementBalanceDatestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • transactionCountintegerrequired
      -9007199254740991–9007199254740991
    • lastImportAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
    • lastBookingDatestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • connectionBankConnection | nullrequired
      • providerstringrequired
        Provider of the live connection (PSD2/FinTS), e.g. "finapi"
      • status"pending" | "active" | "expired" | "error"required
      • consentExpiresAtstring (date-time) | nullrequired
        Timestamp (ISO 8601)
      • lastSyncAtstring (date-time) | nullrequired
        Timestamp (ISO 8601)
    • archivedbooleanrequired
    • createdAtstring (date-time)required
      Timestamp (ISO 8601)
    • updatedAtstring (date-time)required
      Timestamp (ISO 8601)
  • hasMorebooleanrequired
  • nextCursorstring | nullrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-accounts' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "string",
      "name": "string",
      "iban": "string",
      "bic": "string",
      "bankName": "string",
      "currency": "EUR",
      "openingBalanceCents": 0,
      "openingDate": "2026-11-01",
      "balanceCents": 0,
      "statementBalanceCents": 0,
      "statementBalanceDate": "2026-11-01",
      "transactionCount": 0,
      "lastImportAt": "2026-11-01T09:30:00.000Z",
      "lastBookingDate": "2026-11-01",
      "connection": {
        "provider": null,
        "status": null,
        "consentExpiresAt": null,
        "lastSyncAt": null
      },
      "archived": false,
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": "string"
}
POST/api/v1/bank-accounts

Creates a bank account (IBAN with check digits). Only one active account is allowed per IBAN.

Permission: banking:write

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON) · BankAccountCreate

  • namestringrequired
    Display name, e.g. "Sparkasse business account"
    max. 80 characters
  • ibanstringrequired
  • bicstring | ""
  • bankNamestring
    max. 80 characters
  • openingBalanceCentsinteger
    Amount in cents
    -100000000000–100000000000 · Default: 0
  • openingDatestring (date)
    Date (YYYY-MM-DD)

Response 201 · BankAccountResource

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • ibanstringrequired
  • bicstring | nullrequired
  • bankNamestring | nullrequired
  • currency"EUR"required
  • openingBalanceCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • balanceCentsintegerrequired
    Opening balance + sum of all imported transactions
    -100000000000–100000000000
  • statementBalanceCentsinteger | nullrequired
    Closing balance according to the last CAMT statement
    -100000000000–100000000000
  • statementBalanceDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • transactionCountintegerrequired
    -9007199254740991–9007199254740991
  • lastImportAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • lastBookingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • connectionBankConnection | nullrequired
    • providerstringrequired
      Provider of the live connection (PSD2/FinTS), e.g. "finapi"
    • status"pending" | "active" | "expired" | "error"required
    • consentExpiresAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
    • lastSyncAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
  • archivedbooleanrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-accounts' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "iban": "string",
  "bic": "string",
  "bankName": "string",
  "openingBalanceCents": 0,
  "openingDate": "2026-11-01"
}'
Response 201
{
  "id": "string",
  "name": "string",
  "iban": "string",
  "bic": "string",
  "bankName": "string",
  "currency": "EUR",
  "openingBalanceCents": 0,
  "openingDate": "2026-11-01",
  "balanceCents": 0,
  "statementBalanceCents": 0,
  "statementBalanceDate": "2026-11-01",
  "transactionCount": 0,
  "lastImportAt": "2026-11-01T09:30:00.000Z",
  "lastBookingDate": "2026-11-01",
  "connection": {
    "provider": "string",
    "status": "pending",
    "consentExpiresAt": "2026-11-01T09:30:00.000Z",
    "lastSyncAt": "2026-11-01T09:30:00.000Z"
  },
  "archived": false,
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
GET/api/v1/bank-accounts/{id}

Permission: banking:read

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 200 · BankAccountResource

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • ibanstringrequired
  • bicstring | nullrequired
  • bankNamestring | nullrequired
  • currency"EUR"required
  • openingBalanceCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • balanceCentsintegerrequired
    Opening balance + sum of all imported transactions
    -100000000000–100000000000
  • statementBalanceCentsinteger | nullrequired
    Closing balance according to the last CAMT statement
    -100000000000–100000000000
  • statementBalanceDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • transactionCountintegerrequired
    -9007199254740991–9007199254740991
  • lastImportAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • lastBookingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • connectionBankConnection | nullrequired
    • providerstringrequired
      Provider of the live connection (PSD2/FinTS), e.g. "finapi"
    • status"pending" | "active" | "expired" | "error"required
    • consentExpiresAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
    • lastSyncAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
  • archivedbooleanrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-accounts/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "name": "string",
  "iban": "string",
  "bic": "string",
  "bankName": "string",
  "currency": "EUR",
  "openingBalanceCents": 0,
  "openingDate": "2026-11-01",
  "balanceCents": 0,
  "statementBalanceCents": 0,
  "statementBalanceDate": "2026-11-01",
  "transactionCount": 0,
  "lastImportAt": "2026-11-01T09:30:00.000Z",
  "lastBookingDate": "2026-11-01",
  "connection": {
    "provider": "string",
    "status": "pending",
    "consentExpiresAt": "2026-11-01T09:30:00.000Z",
    "lastSyncAt": "2026-11-01T09:30:00.000Z"
  },
  "archived": false,
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
PATCH/api/v1/bank-accounts/{id}

Change the name, BIC, bank, opening balance or archive status. The IBAN cannot be changed.

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Body (JSON) · BankAccountUpdate

  • namestring
    max. 80 characters
  • bicstring | ""
  • bankNamestring
    max. 80 characters
  • openingBalanceCentsinteger
    Amount in cents
    -100000000000–100000000000
  • openingDatestring (date) | ""
  • archivedboolean

Response 200 · BankAccountResource

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • ibanstringrequired
  • bicstring | nullrequired
  • bankNamestring | nullrequired
  • currency"EUR"required
  • openingBalanceCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • balanceCentsintegerrequired
    Opening balance + sum of all imported transactions
    -100000000000–100000000000
  • statementBalanceCentsinteger | nullrequired
    Closing balance according to the last CAMT statement
    -100000000000–100000000000
  • statementBalanceDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • transactionCountintegerrequired
    -9007199254740991–9007199254740991
  • lastImportAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • lastBookingDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • connectionBankConnection | nullrequired
    • providerstringrequired
      Provider of the live connection (PSD2/FinTS), e.g. "finapi"
    • status"pending" | "active" | "expired" | "error"required
    • consentExpiresAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
    • lastSyncAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
  • archivedbooleanrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl -X PATCH 'https://www.debt-flow.io/api/v1/bank-accounts/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "bic": "string",
  "bankName": "string",
  "openingBalanceCents": 0,
  "openingDate": "2026-11-01",
  "archived": false
}'
Response 200
{
  "id": "string",
  "name": "string",
  "iban": "string",
  "bic": "string",
  "bankName": "string",
  "currency": "EUR",
  "openingBalanceCents": 0,
  "openingDate": "2026-11-01",
  "balanceCents": 0,
  "statementBalanceCents": 0,
  "statementBalanceDate": "2026-11-01",
  "transactionCount": 0,
  "lastImportAt": "2026-11-01T09:30:00.000Z",
  "lastBookingDate": "2026-11-01",
  "connection": {
    "provider": "string",
    "status": "pending",
    "consentExpiresAt": "2026-11-01T09:30:00.000Z",
    "lastSyncAt": "2026-11-01T09:30:00.000Z"
  },
  "archived": false,
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
DELETE/api/v1/bank-accounts/{id}

Only accounts without transactions. Accounts with transactions are archived (PATCH archived: true).

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 204

Success, no content

Possible errors: 400, 401, 403, 404, 409, 429, 500

curl -X DELETE 'https://www.debt-flow.io/api/v1/bank-accounts/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
GET/api/v1/bank-import-presets

Built-in column mappings for common bank exports. Detected automatically on import or selected via presetId.

Permission: banking:read

Response 200

  • dataArray<BankImportPreset>required
    • idstringrequired
    • bankNamestringrequired
    • notestring | nullrequired
    • mappingBankCsvMappingrequired
      • delimiter";" | "," | "\t" | "|"required
        Delimiter
      • encoding"utf-8" | "windows-1252"required
        Character set
      • decimalSeparator"," | "."required
        Decimal separator of the amounts
      • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
        Default: "auto"
      • headerRowinteger | nullrequired
        0–50
      • columnsobjectrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-import-presets' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "data": [
    {
      "id": "string",
      "bankName": "string",
      "note": "string",
      "mapping": {
        "delimiter": ";",
        "encoding": "utf-8",
        "decimalSeparator": ",",
        "dateFormat": "auto",
        "headerRow": null,
        "columns": {
          "bookingDate": null,
          "valueDate": null,
          "amount": null,
          "debit": null,
          "credit": null,
          "indicator": null,
          "currency": null,
          "counterpartyName": null,
          "payerName": null,
          "payeeName": null,
          "counterpartyIban": null,
          "counterpartyBic": null,
          "purpose": null,
          "bookingText": null,
          "endToEndId": null,
          "mandateId": null,
          "creditorId": null,
          "bankReference": null
        }
      }
    }
  ]
}
GET/api/v1/bank-import-profiles

Permission: banking:read

Query parameters

  • limitinteger
    Number of entries (1–100)
    1–100 · Default: 25
  • cursorstring
    `nextCursor` of the previous page
    max. 500 characters

Response 200

  • object"list"required
  • dataArray<BankImportProfile>required
    • idstringrequired
      max. 128 characters
    • namestringrequired
    • bankNamestring | nullrequired
    • mappingBankCsvMappingrequired
      • delimiter";" | "," | "\t" | "|"required
        Delimiter
      • encoding"utf-8" | "windows-1252"required
        Character set
      • decimalSeparator"," | "."required
        Decimal separator of the amounts
      • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
        Default: "auto"
      • headerRowinteger | nullrequired
        0–50
      • columnsobjectrequired
    • headerSignaturestringrequired
      Fingerprint of the header row; recognises matching files automatically
    • lastUsedAtstring (date-time) | nullrequired
      Timestamp (ISO 8601)
    • createdAtstring (date-time)required
      Timestamp (ISO 8601)
    • updatedAtstring (date-time)required
      Timestamp (ISO 8601)
  • hasMorebooleanrequired
  • nextCursorstring | nullrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-import-profiles' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "string",
      "name": "string",
      "bankName": "string",
      "mapping": {
        "delimiter": ";",
        "encoding": "utf-8",
        "decimalSeparator": ",",
        "dateFormat": "auto",
        "headerRow": null,
        "columns": {
          "bookingDate": null,
          "valueDate": null,
          "amount": null,
          "debit": null,
          "credit": null,
          "indicator": null,
          "currency": null,
          "counterpartyName": null,
          "payerName": null,
          "payeeName": null,
          "counterpartyIban": null,
          "counterpartyBic": null,
          "purpose": null,
          "bookingText": null,
          "endToEndId": null,
          "mandateId": null,
          "creditorId": null,
          "bankReference": null
        }
      },
      "headerSignature": "string",
      "lastUsedAt": "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/bank-import-profiles

Saves a column mapping. Files with the same header row will be read with it automatically in future.

Permission: banking:write

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON) · BankImportProfileCreate

  • namestringrequired
    max. 80 characters
  • bankNamestring
    max. 80 characters
  • mappingBankCsvMappingrequired
    • delimiter";" | "," | "\t" | "|"required
      Delimiter
    • encoding"utf-8" | "windows-1252"required
      Character set
    • decimalSeparator"," | "."required
      Decimal separator of the amounts
    • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
      Default: "auto"
    • headerRowinteger | nullrequired
      0–50
    • columnsobjectrequired
      • bookingDatestringrequired
        max. 120 characters
      • valueDatestring
        max. 120 characters
      • amountstring
        max. 120 characters
      • debitstring
        max. 120 characters
      • creditstring
        max. 120 characters
      • indicatorstring
        max. 120 characters
      • currencystring
        max. 120 characters
      • counterpartyNamestring
        max. 120 characters
      • payerNamestring
        max. 120 characters
      • payeeNamestring
        max. 120 characters
      • counterpartyIbanstring
        max. 120 characters
      • counterpartyBicstring
        max. 120 characters
      • purposeArray<string>required
        max. 120 characters
      • bookingTextstring
        max. 120 characters
      • endToEndIdstring
        max. 120 characters
      • mandateIdstring
        max. 120 characters
      • creditorIdstring
        max. 120 characters
      • bankReferencestring
        max. 120 characters
  • headersArray<string>required
    Header row of the sample file (for automatic detection)
    max. 200 characters

Response 201 · BankImportProfile

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • bankNamestring | nullrequired
  • mappingBankCsvMappingrequired
    • delimiter";" | "," | "\t" | "|"required
      Delimiter
    • encoding"utf-8" | "windows-1252"required
      Character set
    • decimalSeparator"," | "."required
      Decimal separator of the amounts
    • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
      Default: "auto"
    • headerRowinteger | nullrequired
      0–50
    • columnsobjectrequired
      • bookingDatestringrequired
        max. 120 characters
      • valueDatestring
        max. 120 characters
      • amountstring
        max. 120 characters
      • debitstring
        max. 120 characters
      • creditstring
        max. 120 characters
      • indicatorstring
        max. 120 characters
      • currencystring
        max. 120 characters
      • counterpartyNamestring
        max. 120 characters
      • payerNamestring
        max. 120 characters
      • payeeNamestring
        max. 120 characters
      • counterpartyIbanstring
        max. 120 characters
      • counterpartyBicstring
        max. 120 characters
      • purposeArray<string>required
        max. 120 characters
      • bookingTextstring
        max. 120 characters
      • endToEndIdstring
        max. 120 characters
      • mandateIdstring
        max. 120 characters
      • creditorIdstring
        max. 120 characters
      • bankReferencestring
        max. 120 characters
  • headerSignaturestringrequired
    Fingerprint of the header row; recognises matching files automatically
  • lastUsedAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-import-profiles' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "bankName": "string",
  "mapping": {
    "delimiter": ";",
    "encoding": "utf-8",
    "decimalSeparator": ",",
    "dateFormat": "auto",
    "headerRow": null,
    "columns": {
      "bookingDate": "string",
      "valueDate": "string",
      "amount": "string",
      "debit": "string",
      "credit": "string",
      "indicator": "string",
      "currency": "string",
      "counterpartyName": "string",
      "payerName": "string",
      "payeeName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": [],
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  },
  "headers": [
    "string"
  ]
}'
Response 201
{
  "id": "string",
  "name": "string",
  "bankName": "string",
  "mapping": {
    "delimiter": ";",
    "encoding": "utf-8",
    "decimalSeparator": ",",
    "dateFormat": "auto",
    "headerRow": null,
    "columns": {
      "bookingDate": "string",
      "valueDate": "string",
      "amount": "string",
      "debit": "string",
      "credit": "string",
      "indicator": "string",
      "currency": "string",
      "counterpartyName": "string",
      "payerName": "string",
      "payeeName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": [],
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  },
  "headerSignature": "string",
  "lastUsedAt": "2026-11-01T09:30:00.000Z",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
GET/api/v1/bank-import-profiles/{id}

Permission: banking:read

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 200 · BankImportProfile

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • bankNamestring | nullrequired
  • mappingBankCsvMappingrequired
    • delimiter";" | "," | "\t" | "|"required
      Delimiter
    • encoding"utf-8" | "windows-1252"required
      Character set
    • decimalSeparator"," | "."required
      Decimal separator of the amounts
    • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
      Default: "auto"
    • headerRowinteger | nullrequired
      0–50
    • columnsobjectrequired
      • bookingDatestringrequired
        max. 120 characters
      • valueDatestring
        max. 120 characters
      • amountstring
        max. 120 characters
      • debitstring
        max. 120 characters
      • creditstring
        max. 120 characters
      • indicatorstring
        max. 120 characters
      • currencystring
        max. 120 characters
      • counterpartyNamestring
        max. 120 characters
      • payerNamestring
        max. 120 characters
      • payeeNamestring
        max. 120 characters
      • counterpartyIbanstring
        max. 120 characters
      • counterpartyBicstring
        max. 120 characters
      • purposeArray<string>required
        max. 120 characters
      • bookingTextstring
        max. 120 characters
      • endToEndIdstring
        max. 120 characters
      • mandateIdstring
        max. 120 characters
      • creditorIdstring
        max. 120 characters
      • bankReferencestring
        max. 120 characters
  • headerSignaturestringrequired
    Fingerprint of the header row; recognises matching files automatically
  • lastUsedAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-import-profiles/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "name": "string",
  "bankName": "string",
  "mapping": {
    "delimiter": ";",
    "encoding": "utf-8",
    "decimalSeparator": ",",
    "dateFormat": "auto",
    "headerRow": null,
    "columns": {
      "bookingDate": "string",
      "valueDate": "string",
      "amount": "string",
      "debit": "string",
      "credit": "string",
      "indicator": "string",
      "currency": "string",
      "counterpartyName": "string",
      "payerName": "string",
      "payeeName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": [],
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  },
  "headerSignature": "string",
  "lastUsedAt": "2026-11-01T09:30:00.000Z",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
PATCH/api/v1/bank-import-profiles/{id}

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Body (JSON) · BankImportProfileUpdate

  • namestring
    max. 80 characters
  • bankNamestring
    max. 80 characters
  • mappingBankCsvMapping
    • delimiter";" | "," | "\t" | "|"required
      Delimiter
    • encoding"utf-8" | "windows-1252"required
      Character set
    • decimalSeparator"," | "."required
      Decimal separator of the amounts
    • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
      Default: "auto"
    • headerRowinteger | nullrequired
      0–50
    • columnsobjectrequired
      • bookingDatestringrequired
        max. 120 characters
      • valueDatestring
        max. 120 characters
      • amountstring
        max. 120 characters
      • debitstring
        max. 120 characters
      • creditstring
        max. 120 characters
      • indicatorstring
        max. 120 characters
      • currencystring
        max. 120 characters
      • counterpartyNamestring
        max. 120 characters
      • payerNamestring
        max. 120 characters
      • payeeNamestring
        max. 120 characters
      • counterpartyIbanstring
        max. 120 characters
      • counterpartyBicstring
        max. 120 characters
      • purposeArray<string>required
        max. 120 characters
      • bookingTextstring
        max. 120 characters
      • endToEndIdstring
        max. 120 characters
      • mandateIdstring
        max. 120 characters
      • creditorIdstring
        max. 120 characters
      • bankReferencestring
        max. 120 characters

Response 200 · BankImportProfile

  • idstringrequired
    max. 128 characters
  • namestringrequired
  • bankNamestring | nullrequired
  • mappingBankCsvMappingrequired
    • delimiter";" | "," | "\t" | "|"required
      Delimiter
    • encoding"utf-8" | "windows-1252"required
      Character set
    • decimalSeparator"," | "."required
      Decimal separator of the amounts
    • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
      Default: "auto"
    • headerRowinteger | nullrequired
      0–50
    • columnsobjectrequired
      • bookingDatestringrequired
        max. 120 characters
      • valueDatestring
        max. 120 characters
      • amountstring
        max. 120 characters
      • debitstring
        max. 120 characters
      • creditstring
        max. 120 characters
      • indicatorstring
        max. 120 characters
      • currencystring
        max. 120 characters
      • counterpartyNamestring
        max. 120 characters
      • payerNamestring
        max. 120 characters
      • payeeNamestring
        max. 120 characters
      • counterpartyIbanstring
        max. 120 characters
      • counterpartyBicstring
        max. 120 characters
      • purposeArray<string>required
        max. 120 characters
      • bookingTextstring
        max. 120 characters
      • endToEndIdstring
        max. 120 characters
      • mandateIdstring
        max. 120 characters
      • creditorIdstring
        max. 120 characters
      • bankReferencestring
        max. 120 characters
  • headerSignaturestringrequired
    Fingerprint of the header row; recognises matching files automatically
  • lastUsedAtstring (date-time) | nullrequired
    Timestamp (ISO 8601)
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl -X PATCH 'https://www.debt-flow.io/api/v1/bank-import-profiles/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "bankName": "string",
  "mapping": {
    "delimiter": ";",
    "encoding": "utf-8",
    "decimalSeparator": ",",
    "dateFormat": "auto",
    "headerRow": null,
    "columns": {
      "bookingDate": "string",
      "valueDate": "string",
      "amount": "string",
      "debit": "string",
      "credit": "string",
      "indicator": "string",
      "currency": "string",
      "counterpartyName": "string",
      "payerName": "string",
      "payeeName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": [],
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  }
}'
Response 200
{
  "id": "string",
  "name": "string",
  "bankName": "string",
  "mapping": {
    "delimiter": ";",
    "encoding": "utf-8",
    "decimalSeparator": ",",
    "dateFormat": "auto",
    "headerRow": null,
    "columns": {
      "bookingDate": "string",
      "valueDate": "string",
      "amount": "string",
      "debit": "string",
      "credit": "string",
      "indicator": "string",
      "currency": "string",
      "counterpartyName": "string",
      "payerName": "string",
      "payeeName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": [],
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  },
  "headerSignature": "string",
  "lastUsedAt": "2026-11-01T09:30:00.000Z",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
DELETE/api/v1/bank-import-profiles/{id}

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 204

Success, no content

Possible errors: 400, 401, 403, 404, 429, 500

curl -X DELETE 'https://www.debt-flow.io/api/v1/bank-import-profiles/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
GET/api/v1/bank-imports

Permission: banking:read

Query parameters

  • bankAccountIdstring
    max. 128 characters
  • limitinteger
    Number of entries (1–100)
    1–100 · Default: 25
  • cursorstring
    `nextCursor` of the previous page
    max. 500 characters

Response 200

  • object"list"required
  • dataArray<BankImport>required
    • idstringrequired
      max. 128 characters
    • bankAccountIdstringrequired
      max. 128 characters
    • format"csv" | "camt053" | "camt052" | "camt054"required
    • fileNamestring | nullrequired
    • profileIdstring | nullrequired
    • presetIdstring | nullrequired
    • status"completed" | "reverted"required
    • countsobjectrequired
      • rowsintegerrequired
        entries read
        -9007199254740991–9007199254740991
      • importedintegerrequired
        newly imported
        -9007199254740991–9007199254740991
      • duplicatesintegerrequired
        already present (skipped) – detected via end-to-end ID, bank reference, mandate or the same file
        -9007199254740991–9007199254740991
      • possibleDuplicatesintegerrequired
        imported, but marked as a possible duplicate (same day, amount and counterparty IBAN, no stable ID)
        -9007199254740991–9007199254740991
      • skippedintegerrequired
        not imported (flagged, empty, invalid)
        -9007199254740991–9007199254740991
      • suggestedintegerrequired
        new transactions with match suggestion
        -9007199254740991–9007199254740991
    • periodFromstring (date) | nullrequired
      Date (YYYY-MM-DD)
    • periodTostring (date) | nullrequired
      Date (YYYY-MM-DD)
    • sumCentsintegerrequired
      Total of newly imported transactions
      -100000000000–100000000000
    • errorsArray<object>required
      • rowinteger | nullrequired
        -9007199254740991–9007199254740991
      • messagestringrequired
    • warningsArray<string>required
    • createdAtstring (date-time)required
      Timestamp (ISO 8601)
  • hasMorebooleanrequired
  • nextCursorstring | nullrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-imports' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "string",
      "bankAccountId": "string",
      "format": "csv",
      "fileName": "string",
      "profileId": "string",
      "presetId": "string",
      "status": "completed",
      "counts": {
        "rows": 0,
        "imported": 0,
        "duplicates": 0,
        "possibleDuplicates": 0,
        "skipped": 0,
        "suggested": 0
      },
      "periodFrom": "2026-11-01",
      "periodTo": "2026-11-01",
      "sumCents": 0,
      "errors": [
        {
          "row": null,
          "message": "string"
        }
      ],
      "warnings": [
        "string"
      ],
      "createdAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": "string"
}
POST/api/v1/bank-imports

Uploads a CSV file (Sparkasse, Volksbank, Deutsche Bank, ING, Commerzbank, N26, DKB, Postbank, Holvi, Kontist, Qonto or any bank with a column mapping) or a CAMT file (camt.053, camt.052, camt.054). Entries that already exist are detected and skipped. Match suggestions are calculated for new transactions. CSV mapping: field mapping (JSON, schema BankCsvMapping), profileId or presetId; if none is given, the mapping is detected automatically. If a required column is missing, the API responds with 422 mapping_required.

Permission: banking:write

Body (multipart/form-data)

  • filestring (binary)required
    text/csv, text/plain, text/xml, application/xml, application/vnd.ms-excel, application/csv, application/octet-stream, application/zip, application/x-zip-compressed, , max. 10240 KB
  • bankAccountIdstringrequired
    max. 128 characters
  • format"auto" | "csv" | "camt053" | "camt052" | "camt054"
    Default: "auto"
  • profileIdstring
    max. 128 characters
  • presetIdstring
    max. 40 characters
  • mappingstring
    CSV column mapping as JSON (BankCsvMapping)
    max. 10000 characters
  • ignoreIbanMismatch"true" | "false"

Response 201 · BankImport

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • format"csv" | "camt053" | "camt052" | "camt054"required
  • fileNamestring | nullrequired
  • profileIdstring | nullrequired
  • presetIdstring | nullrequired
  • status"completed" | "reverted"required
  • countsobjectrequired
    • rowsintegerrequired
      entries read
      -9007199254740991–9007199254740991
    • importedintegerrequired
      newly imported
      -9007199254740991–9007199254740991
    • duplicatesintegerrequired
      already present (skipped) – detected via end-to-end ID, bank reference, mandate or the same file
      -9007199254740991–9007199254740991
    • possibleDuplicatesintegerrequired
      imported, but marked as a possible duplicate (same day, amount and counterparty IBAN, no stable ID)
      -9007199254740991–9007199254740991
    • skippedintegerrequired
      not imported (flagged, empty, invalid)
      -9007199254740991–9007199254740991
    • suggestedintegerrequired
      new transactions with match suggestion
      -9007199254740991–9007199254740991
  • periodFromstring (date) | nullrequired
    Date (YYYY-MM-DD)
  • periodTostring (date) | nullrequired
    Date (YYYY-MM-DD)
  • sumCentsintegerrequired
    Total of newly imported transactions
    -100000000000–100000000000
  • errorsArray<object>required
    • rowinteger | nullrequired
      -9007199254740991–9007199254740991
    • messagestringrequired
  • warningsArray<string>required
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500

curl
curl -X POST 'https://www.debt-flow.io/api/v1/bank-imports' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@file' \
  -F 'bankAccountId=…' \
  -F 'format=…' \
  -F 'profileId=…' \
  -F 'presetId=…' \
  -F 'mapping=…' \
  -F 'ignoreIbanMismatch=…'
Response 201
{
  "id": "string",
  "bankAccountId": "string",
  "format": "csv",
  "fileName": "string",
  "profileId": "string",
  "presetId": "string",
  "status": "completed",
  "counts": {
    "rows": 0,
    "imported": 0,
    "duplicates": 0,
    "possibleDuplicates": 0,
    "skipped": 0,
    "suggested": 0
  },
  "periodFrom": "2026-11-01",
  "periodTo": "2026-11-01",
  "sumCents": 0,
  "errors": [
    {
      "row": 0,
      "message": "string"
    }
  ],
  "warnings": [
    "string"
  ],
  "createdAt": "2026-11-01T09:30:00.000Z"
}
GET/api/v1/bank-imports/{id}

Permission: banking:read

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 200 · BankImport

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • format"csv" | "camt053" | "camt052" | "camt054"required
  • fileNamestring | nullrequired
  • profileIdstring | nullrequired
  • presetIdstring | nullrequired
  • status"completed" | "reverted"required
  • countsobjectrequired
    • rowsintegerrequired
      entries read
      -9007199254740991–9007199254740991
    • importedintegerrequired
      newly imported
      -9007199254740991–9007199254740991
    • duplicatesintegerrequired
      already present (skipped) – detected via end-to-end ID, bank reference, mandate or the same file
      -9007199254740991–9007199254740991
    • possibleDuplicatesintegerrequired
      imported, but marked as a possible duplicate (same day, amount and counterparty IBAN, no stable ID)
      -9007199254740991–9007199254740991
    • skippedintegerrequired
      not imported (flagged, empty, invalid)
      -9007199254740991–9007199254740991
    • suggestedintegerrequired
      new transactions with match suggestion
      -9007199254740991–9007199254740991
  • periodFromstring (date) | nullrequired
    Date (YYYY-MM-DD)
  • periodTostring (date) | nullrequired
    Date (YYYY-MM-DD)
  • sumCentsintegerrequired
    Total of newly imported transactions
    -100000000000–100000000000
  • errorsArray<object>required
    • rowinteger | nullrequired
      -9007199254740991–9007199254740991
    • messagestringrequired
  • warningsArray<string>required
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-imports/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "format": "csv",
  "fileName": "string",
  "profileId": "string",
  "presetId": "string",
  "status": "completed",
  "counts": {
    "rows": 0,
    "imported": 0,
    "duplicates": 0,
    "possibleDuplicates": 0,
    "skipped": 0,
    "suggested": 0
  },
  "periodFrom": "2026-11-01",
  "periodTo": "2026-11-01",
  "sumCents": 0,
  "errors": [
    {
      "row": 0,
      "message": "string"
    }
  ],
  "warnings": [
    "string"
  ],
  "createdAt": "2026-11-01T09:30:00.000Z"
}
POST/api/v1/bank-imports/{id}/revert

Deletes the transactions created by this import. Only possible as long as none of them has been matched.

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Response 200 · BankImport

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • format"csv" | "camt053" | "camt052" | "camt054"required
  • fileNamestring | nullrequired
  • profileIdstring | nullrequired
  • presetIdstring | nullrequired
  • status"completed" | "reverted"required
  • countsobjectrequired
    • rowsintegerrequired
      entries read
      -9007199254740991–9007199254740991
    • importedintegerrequired
      newly imported
      -9007199254740991–9007199254740991
    • duplicatesintegerrequired
      already present (skipped) – detected via end-to-end ID, bank reference, mandate or the same file
      -9007199254740991–9007199254740991
    • possibleDuplicatesintegerrequired
      imported, but marked as a possible duplicate (same day, amount and counterparty IBAN, no stable ID)
      -9007199254740991–9007199254740991
    • skippedintegerrequired
      not imported (flagged, empty, invalid)
      -9007199254740991–9007199254740991
    • suggestedintegerrequired
      new transactions with match suggestion
      -9007199254740991–9007199254740991
  • periodFromstring (date) | nullrequired
    Date (YYYY-MM-DD)
  • periodTostring (date) | nullrequired
    Date (YYYY-MM-DD)
  • sumCentsintegerrequired
    Total of newly imported transactions
    -100000000000–100000000000
  • errorsArray<object>required
    • rowinteger | nullrequired
      -9007199254740991–9007199254740991
    • messagestringrequired
  • warningsArray<string>required
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-imports/ID/revert' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "format": "csv",
  "fileName": "string",
  "profileId": "string",
  "presetId": "string",
  "status": "completed",
  "counts": {
    "rows": 0,
    "imported": 0,
    "duplicates": 0,
    "possibleDuplicates": 0,
    "skipped": 0,
    "suggested": 0
  },
  "periodFrom": "2026-11-01",
  "periodTo": "2026-11-01",
  "sumCents": 0,
  "errors": [
    {
      "row": 0,
      "message": "string"
    }
  ],
  "warnings": [
    "string"
  ],
  "createdAt": "2026-11-01T09:30:00.000Z"
}
POST/api/v1/bank-imports/preview

Reads a CSV or CAMT file without saving anything: detected format, header row, suggested column mapping (saved profile, bank template or automatic detection), missing required columns, CAMT statements with IBAN check and the first entries read.

Permission: banking:write

Body (multipart/form-data)

  • filestring (binary)required
    text/csv, text/plain, text/xml, application/xml, application/vnd.ms-excel, application/csv, application/octet-stream, application/zip, application/x-zip-compressed, , max. 10240 KB
  • bankAccountIdstring
    max. 128 characters
  • profileIdstring
    max. 128 characters
  • presetIdstring
    max. 40 characters
  • mappingstring
    max. 10000 characters

Response 200 · BankImportPreview

  • format"csv" | "camt053" | "camt052" | "camt054"required
  • csvobject | nullrequired
    • headersArray<string>required
    • delimiter";" | "," | "\t" | "|"required
    • decimalSeparator"," | "."required
    • headerRowintegerrequired
      -9007199254740991–9007199254740991
    • sampleRowsArray<Array<string>>required
    • detectedPresetIdstring | nullrequired
    • detectedProfileIdstring | nullrequired
    • mappingBankCsvMapping | nullrequired
      Suggestion (profile, template or automatic detection)
      • delimiter";" | "," | "\t" | "|"required
        Delimiter
      • encoding"utf-8" | "windows-1252"required
        Character set
      • decimalSeparator"," | "."required
        Decimal separator of the amounts
      • dateFormat"auto" | "DD.MM.YYYY" | "DD.MM.YY" | "YYYY-MM-DD" | "DD/MM/YYYY" | "MM/DD/YYYY"required
        Default: "auto"
      • headerRowinteger | nullrequired
        0–50
      • columnsobjectrequired
    • missingArray<string>required
      Mandatory details that still need to be mapped
  • statementsArray<object>required
    • ibanstring | nullrequired
    • fromstring (date) | nullrequired
      Date (YYYY-MM-DD)
    • tostring (date) | nullrequired
      Date (YYYY-MM-DD)
    • entriesintegerrequired
      -9007199254740991–9007199254740991
    • closingBalanceCentsinteger | nullrequired
      Amount in cents
      -100000000000–100000000000
    • matchesAccountboolean | nullrequired
  • rowsArray<object>required
    first entries read
    • rowinteger | nullrequired
      -9007199254740991–9007199254740991
    • bookingDatestring (date)required
      Date (YYYY-MM-DD)
    • valueDatestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • amountCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • currencystringrequired
    • counterpartyNamestring | nullrequired
    • counterpartyIbanstring | nullrequired
    • purposestringrequired
    • bookingTextstring | nullrequired
  • totalRowsintegerrequired
    -9007199254740991–9007199254740991
  • errorsArray<object>required
    • rowinteger | nullrequired
      -9007199254740991–9007199254740991
    • messagestringrequired

Possible errors: 400, 401, 403, 404, 413, 415, 422, 429, 500

curl
curl -X POST 'https://www.debt-flow.io/api/v1/bank-imports/preview' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -F 'file=@file' \
  -F 'bankAccountId=…' \
  -F 'profileId=…' \
  -F 'presetId=…' \
  -F 'mapping=…'
Response 200
{
  "format": "csv",
  "csv": {
    "headers": [
      "string"
    ],
    "delimiter": ";",
    "decimalSeparator": ",",
    "headerRow": 0,
    "sampleRows": [
      [
        "string"
      ]
    ],
    "detectedPresetId": "string",
    "detectedProfileId": "string",
    "mapping": {
      "delimiter": null,
      "encoding": null,
      "decimalSeparator": null,
      "dateFormat": null,
      "headerRow": null,
      "columns": null
    },
    "missing": [
      "string"
    ]
  },
  "statements": [
    {
      "iban": "string",
      "from": "2026-11-01",
      "to": "2026-11-01",
      "entries": 0,
      "closingBalanceCents": 0,
      "matchesAccount": false
    }
  ],
  "rows": [
    {
      "row": 0,
      "bookingDate": "2026-11-01",
      "valueDate": "2026-11-01",
      "amountCents": 0,
      "currency": "string",
      "counterpartyName": "string",
      "counterpartyIban": "string",
      "purpose": "string",
      "bookingText": "string"
    }
  ],
  "totalRows": 0,
  "errors": [
    {
      "row": 0,
      "message": "string"
    }
  ]
}
GET/api/v1/bank-rules

When you confirm a match, DebtFlow remembers which contact a counterparty IBAN belongs to. This improves future suggestions.

Permission: banking:read

Query parameters

  • limitinteger
    Number of entries (1–100)
    1–100 · Default: 25
  • cursorstring
    `nextCursor` of the previous page
    max. 500 characters

Response 200

  • object"list"required
  • dataArray<BankRule>required
    • idstringrequired
      max. 128 characters
    • type"counterparty"required
    • counterpartyIbanstringrequired
    • counterpartyNamestring | nullrequired
    • contactIdstringrequired
    • hitsintegerrequired
      -9007199254740991–9007199254740991
    • createdAtstring (date-time)required
      Timestamp (ISO 8601)
    • updatedAtstring (date-time)required
      Timestamp (ISO 8601)
  • hasMorebooleanrequired
  • nextCursorstring | nullrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-rules' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "string",
      "type": "counterparty",
      "counterpartyIban": "string",
      "counterpartyName": "string",
      "contactId": "string",
      "hits": 0,
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": "string"
}
DELETE/api/v1/bank-rules/{id}

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 204

Success, no content

Possible errors: 400, 401, 403, 404, 429, 500

curl -X DELETE 'https://www.debt-flow.io/api/v1/bank-rules/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
GET/api/v1/bank-transactions

Newest first. Filters: account, status (open = not yet or only partially matched), period, import.

Permission: banking:read

Query parameters

  • bankAccountIdstring
    max. 128 characters
  • statusenum
    open = unmatched + suggested + partially_matched
    Values: unmatched, suggested, partially_matched, matched, ignored, reverted, open
  • fromstring (date)
    Booking date from
  • tostring (date)
    Booking date to
  • importIdstring
    max. 128 characters
  • limitinteger
    Number of entries (1–100)
    1–100 · Default: 25
  • cursorstring
    `nextCursor` of the previous page
    max. 500 characters

Response 200

  • object"list"required
  • dataArray<BankTransaction>required
    • idstringrequired
      max. 128 characters
    • bankAccountIdstringrequired
      max. 128 characters
    • bookingDatestring (date)required
      Date (YYYY-MM-DD)
    • valueDatestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • amountCentsintegerrequired
      Incoming positive, outgoing negative
      -100000000000–100000000000
    • currencystringrequired
    • counterpartyNamestring | nullrequired
    • counterpartyIbanstring | nullrequired
    • counterpartyBicstring | nullrequired
    • purposestringrequired
    • bookingTextstring | nullrequired
    • endToEndIdstring | nullrequired
    • mandateIdstring | nullrequired
    • creditorIdstring | nullrequired
    • bankReferencestring | nullrequired
    • possibleDuplicateOfstring | nullrequired
      possible duplicate of this transaction (same day, amount, counterparty IBAN, different reference text) – please check
    • source"csv" | "camt" | "api" | "live"required
    • importIdstring | nullrequired
    • status"unmatched" | "suggested" | "partially_matched" | "matched" | "ignored" | "reverted"required
    • matchedCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • openCentsintegerrequired
      amount not yet matched (positive)
      -100000000000–100000000000
    • matchesArray<BankMatch>required
      • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
      • idstringrequired
        max. 128 characters
      • amountCentsintegerrequired
        matched amount (positive)
        -100000000000–100000000000
      • labelstringrequired
      • paymentIdstring | nullrequired
        generated payment (payments, invoicePayments or instalment)
      • matchedAtstring (date-time)required
        Timestamp (ISO 8601)
      • matchedByobject | nullrequired
    • suggestionsArray<BankMatchSuggestion>required
      • targetsArray<object>required
      • confidencenumberrequired
        0–1; confident from 0.85
        0–1
      • reasonsArray<enum>required
        Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close
    • notestring | nullrequired
    • createdAtstring (date-time)required
      Timestamp (ISO 8601)
    • updatedAtstring (date-time)required
      Timestamp (ISO 8601)
  • hasMorebooleanrequired
  • nextCursorstring | nullrequired

Possible errors: 400, 401, 403, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-transactions' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "object": "list",
  "data": [
    {
      "id": "string",
      "bankAccountId": "string",
      "bookingDate": "2026-11-01",
      "valueDate": "2026-11-01",
      "amountCents": 0,
      "currency": "string",
      "counterpartyName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": "string",
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string",
      "possibleDuplicateOf": "string",
      "source": "csv",
      "importId": "string",
      "status": "unmatched",
      "matchedCents": 0,
      "openCents": 0,
      "matches": [
        {
          "type": null,
          "id": null,
          "amountCents": null,
          "label": null,
          "paymentId": null,
          "matchedAt": null,
          "matchedBy": null
        }
      ],
      "suggestions": [
        {
          "targets": null,
          "confidence": null,
          "reasons": null
        }
      ],
      "note": "string",
      "createdAt": "2026-11-01T09:30:00.000Z",
      "updatedAt": "2026-11-01T09:30:00.000Z"
    }
  ],
  "hasMore": false,
  "nextCursor": "string"
}
POST/api/v1/bank-transactions

Accepts up to 1000 transactions for an account, e.g. from your own FinTS or PSD2 connection. Same duplicate detection as the file import: submitting again does not create anything twice. transactionIds contains the IDs of all submitted transactions in input order (new or already existing).

Permission: banking:write

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON) · BankTransactionBulkCreate

  • bankAccountIdstringrequired
    max. 128 characters
  • transactionsArray<BankTransactionInput>required
    • bookingDatestring (date)required
      Date (YYYY-MM-DD)
    • valueDatestring (date)
      Date (YYYY-MM-DD)
    • amountCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • currency"EUR"
      Default: "EUR"
    • counterpartyNamestring
      max. 200 characters
    • counterpartyIbanstring
      max. 40 characters
    • counterpartyBicstring
      max. 11 characters
    • purposestring
      max. 1000 characters · Default: ""
    • bookingTextstring
      max. 200 characters
    • endToEndIdstring
      max. 100 characters
    • mandateIdstring
      max. 100 characters
    • creditorIdstring
      max. 100 characters
    • bankReferencestring
      max. 100 characters

Response 201 · BankTransactionBulkResult

  • importedintegerrequired
    -9007199254740991–9007199254740991
  • duplicatesintegerrequired
    -9007199254740991–9007199254740991
  • transactionIdsArray<string>required

Possible errors: 400, 401, 403, 404, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-transactions' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "bankAccountId": "string",
  "transactions": [
    {
      "bookingDate": "2026-11-01",
      "valueDate": "2026-11-01",
      "amountCents": 0,
      "currency": "EUR",
      "counterpartyName": "string",
      "counterpartyIban": "string",
      "counterpartyBic": "string",
      "purpose": "",
      "bookingText": "string",
      "endToEndId": "string",
      "mandateId": "string",
      "creditorId": "string",
      "bankReference": "string"
    }
  ]
}'
Response 201
{
  "imported": 0,
  "duplicates": 0,
  "transactionIds": [
    "string"
  ]
}
GET/api/v1/bank-transactions/{id}

Permission: banking:read

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Response 200 · BankTransaction

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • bookingDatestring (date)required
    Date (YYYY-MM-DD)
  • valueDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • amountCentsintegerrequired
    Incoming positive, outgoing negative
    -100000000000–100000000000
  • currencystringrequired
  • counterpartyNamestring | nullrequired
  • counterpartyIbanstring | nullrequired
  • counterpartyBicstring | nullrequired
  • purposestringrequired
  • bookingTextstring | nullrequired
  • endToEndIdstring | nullrequired
  • mandateIdstring | nullrequired
  • creditorIdstring | nullrequired
  • bankReferencestring | nullrequired
  • possibleDuplicateOfstring | nullrequired
    possible duplicate of this transaction (same day, amount, counterparty IBAN, different reference text) – please check
  • source"csv" | "camt" | "api" | "live"required
  • importIdstring | nullrequired
  • status"unmatched" | "suggested" | "partially_matched" | "matched" | "ignored" | "reverted"required
  • matchedCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openCentsintegerrequired
    amount not yet matched (positive)
    -100000000000–100000000000
  • matchesArray<BankMatch>required
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • amountCentsintegerrequired
      matched amount (positive)
      -100000000000–100000000000
    • labelstringrequired
    • paymentIdstring | nullrequired
      generated payment (payments, invoicePayments or instalment)
    • matchedAtstring (date-time)required
      Timestamp (ISO 8601)
    • matchedByobject | nullrequired
      • typestringrequired
      • idstringrequired
  • suggestionsArray<BankMatchSuggestion>required
    • targetsArray<object>required
      • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
      • idstringrequired
        max. 128 characters
      • amountCentsintegerrequired
        matched amount (positive)
        -100000000000–100000000000
      • labelstringrequired
    • confidencenumberrequired
      0–1; confident from 0.85
      0–1
    • reasonsArray<enum>required
      Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close
  • notestring | nullrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-transactions/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "bookingDate": "2026-11-01",
  "valueDate": "2026-11-01",
  "amountCents": 0,
  "currency": "string",
  "counterpartyName": "string",
  "counterpartyIban": "string",
  "counterpartyBic": "string",
  "purpose": "string",
  "bookingText": "string",
  "endToEndId": "string",
  "mandateId": "string",
  "creditorId": "string",
  "bankReference": "string",
  "possibleDuplicateOf": "string",
  "source": "csv",
  "importId": "string",
  "status": "unmatched",
  "matchedCents": 0,
  "openCents": 0,
  "matches": [
    {
      "type": "invoice",
      "id": "string",
      "amountCents": 0,
      "label": "string",
      "paymentId": "string",
      "matchedAt": "2026-11-01T09:30:00.000Z",
      "matchedBy": {
        "type": null,
        "id": null
      }
    }
  ],
  "suggestions": [
    {
      "targets": [
        {
          "type": null,
          "id": null,
          "amountCents": null,
          "label": null
        }
      ],
      "confidence": 0,
      "reasons": [
        "reference"
      ]
    }
  ],
  "note": "string",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
PATCH/api/v1/bank-transactions/{id}

Set a note or mark the transaction as done without a match (ignored: true, e.g. internal transfer, private withdrawal, bank fee). The bank's booking data cannot be changed.

Permission: banking:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Body (JSON) · BankTransactionUpdate

  • notestring | null
    max. 500 characters
  • ignoredboolean
    true = done without match, false = open again

Response 200 · BankTransaction

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • bookingDatestring (date)required
    Date (YYYY-MM-DD)
  • valueDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • amountCentsintegerrequired
    Incoming positive, outgoing negative
    -100000000000–100000000000
  • currencystringrequired
  • counterpartyNamestring | nullrequired
  • counterpartyIbanstring | nullrequired
  • counterpartyBicstring | nullrequired
  • purposestringrequired
  • bookingTextstring | nullrequired
  • endToEndIdstring | nullrequired
  • mandateIdstring | nullrequired
  • creditorIdstring | nullrequired
  • bankReferencestring | nullrequired
  • possibleDuplicateOfstring | nullrequired
    possible duplicate of this transaction (same day, amount, counterparty IBAN, different reference text) – please check
  • source"csv" | "camt" | "api" | "live"required
  • importIdstring | nullrequired
  • status"unmatched" | "suggested" | "partially_matched" | "matched" | "ignored" | "reverted"required
  • matchedCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openCentsintegerrequired
    amount not yet matched (positive)
    -100000000000–100000000000
  • matchesArray<BankMatch>required
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • amountCentsintegerrequired
      matched amount (positive)
      -100000000000–100000000000
    • labelstringrequired
    • paymentIdstring | nullrequired
      generated payment (payments, invoicePayments or instalment)
    • matchedAtstring (date-time)required
      Timestamp (ISO 8601)
    • matchedByobject | nullrequired
      • typestringrequired
      • idstringrequired
  • suggestionsArray<BankMatchSuggestion>required
    • targetsArray<object>required
      • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
      • idstringrequired
        max. 128 characters
      • amountCentsintegerrequired
        matched amount (positive)
        -100000000000–100000000000
      • labelstringrequired
    • confidencenumberrequired
      0–1; confident from 0.85
      0–1
    • reasonsArray<enum>required
      Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close
  • notestring | nullrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 409, 429, 500

curl -X PATCH 'https://www.debt-flow.io/api/v1/bank-transactions/ID' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "note": "string",
  "ignored": false
}'
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "bookingDate": "2026-11-01",
  "valueDate": "2026-11-01",
  "amountCents": 0,
  "currency": "string",
  "counterpartyName": "string",
  "counterpartyIban": "string",
  "counterpartyBic": "string",
  "purpose": "string",
  "bookingText": "string",
  "endToEndId": "string",
  "mandateId": "string",
  "creditorId": "string",
  "bankReference": "string",
  "possibleDuplicateOf": "string",
  "source": "csv",
  "importId": "string",
  "status": "unmatched",
  "matchedCents": 0,
  "openCents": 0,
  "matches": [
    {
      "type": "invoice",
      "id": "string",
      "amountCents": 0,
      "label": "string",
      "paymentId": "string",
      "matchedAt": "2026-11-01T09:30:00.000Z",
      "matchedBy": {
        "type": null,
        "id": null
      }
    }
  ],
  "suggestions": [
    {
      "targets": [
        {
          "type": null,
          "id": null,
          "amountCents": null,
          "label": null
        }
      ],
      "confidence": 0,
      "reasons": [
        "reference"
      ]
    }
  ],
  "note": "string",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
GET/api/v1/bank-transactions/{id}/candidates

All open invoices, debts, instalments and recorded payments (for incoming transactions) or receipts (for outgoing transactions), ranked by how well they fit the transaction – for manual matching.

Permission: banking:read

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Query parameters

  • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"
  • qstring
    Search in title, contact and number
    max. 100 characters
  • limitinteger
    1–200 · Default: 100

Response 200

  • dataArray<BankMatchCandidate>required
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • labelstringrequired
    • contactIdstring | nullrequired
    • contactNamestring | nullrequired
    • referencestring | nullrequired
    • openCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • totalCentsintegerrequired
      Amount in cents
      -100000000000–100000000000
    • datestring (date) | nullrequired
      Date (YYYY-MM-DD)
    • confidencenumberrequired
      0–1
    • reasonsArray<enum>required
      Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close

Possible errors: 400, 401, 403, 404, 429, 500

curl 'https://www.debt-flow.io/api/v1/bank-transactions/ID/candidates' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "data": [
    {
      "type": "invoice",
      "id": "string",
      "label": "string",
      "contactId": "string",
      "contactName": "string",
      "reference": "string",
      "openCents": 0,
      "totalCents": 0,
      "date": "2026-11-01",
      "confidence": 0,
      "reasons": [
        "reference"
      ]
    }
  ]
}
POST/api/v1/bank-transactions/{id}/match

Matches the transaction to one or more items and creates the payment: debt → payment (marked as paid if paid in full), instalment → instalment payment, invoice → incoming payment (status partially paid/paid), receipt → paid, recorded payment → linked only. Events: payment.received, bank_transaction.matched, if applicable invoice.paid / debt.paid. Scopes per target: invoice additionally requires invoices:write, receipt additionally receipts:write.

Permission: banking:write, payments:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON) · BankMatchRequest

  • targetsArray<object>required
    Targets; without amountCents the open amount (at most the remaining amount of the transaction) is matched
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • amountCentsinteger
      Amount in cents
      max. 100000000000
  • markDebtPaidboolean
    Mark the debt as paid if this settles it in full
    Default: true
  • notestring
    max. 500 characters

Response 200 · BankTransaction

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • bookingDatestring (date)required
    Date (YYYY-MM-DD)
  • valueDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • amountCentsintegerrequired
    Incoming positive, outgoing negative
    -100000000000–100000000000
  • currencystringrequired
  • counterpartyNamestring | nullrequired
  • counterpartyIbanstring | nullrequired
  • counterpartyBicstring | nullrequired
  • purposestringrequired
  • bookingTextstring | nullrequired
  • endToEndIdstring | nullrequired
  • mandateIdstring | nullrequired
  • creditorIdstring | nullrequired
  • bankReferencestring | nullrequired
  • possibleDuplicateOfstring | nullrequired
    possible duplicate of this transaction (same day, amount, counterparty IBAN, different reference text) – please check
  • source"csv" | "camt" | "api" | "live"required
  • importIdstring | nullrequired
  • status"unmatched" | "suggested" | "partially_matched" | "matched" | "ignored" | "reverted"required
  • matchedCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openCentsintegerrequired
    amount not yet matched (positive)
    -100000000000–100000000000
  • matchesArray<BankMatch>required
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • amountCentsintegerrequired
      matched amount (positive)
      -100000000000–100000000000
    • labelstringrequired
    • paymentIdstring | nullrequired
      generated payment (payments, invoicePayments or instalment)
    • matchedAtstring (date-time)required
      Timestamp (ISO 8601)
    • matchedByobject | nullrequired
      • typestringrequired
      • idstringrequired
  • suggestionsArray<BankMatchSuggestion>required
    • targetsArray<object>required
      • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
      • idstringrequired
        max. 128 characters
      • amountCentsintegerrequired
        matched amount (positive)
        -100000000000–100000000000
      • labelstringrequired
    • confidencenumberrequired
      0–1; confident from 0.85
      0–1
    • reasonsArray<enum>required
      Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close
  • notestring | nullrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-transactions/ID/match' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "targets": [
    {
      "type": "invoice",
      "id": "string",
      "amountCents": 0
    }
  ],
  "markDebtPaid": true,
  "note": "string"
}'
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "bookingDate": "2026-11-01",
  "valueDate": "2026-11-01",
  "amountCents": 0,
  "currency": "string",
  "counterpartyName": "string",
  "counterpartyIban": "string",
  "counterpartyBic": "string",
  "purpose": "string",
  "bookingText": "string",
  "endToEndId": "string",
  "mandateId": "string",
  "creditorId": "string",
  "bankReference": "string",
  "possibleDuplicateOf": "string",
  "source": "csv",
  "importId": "string",
  "status": "unmatched",
  "matchedCents": 0,
  "openCents": 0,
  "matches": [
    {
      "type": "invoice",
      "id": "string",
      "amountCents": 0,
      "label": "string",
      "paymentId": "string",
      "matchedAt": "2026-11-01T09:30:00.000Z",
      "matchedBy": {
        "type": null,
        "id": null
      }
    }
  ],
  "suggestions": [
    {
      "targets": [
        {
          "type": null,
          "id": null,
          "amountCents": null,
          "label": null
        }
      ],
      "confidence": 0,
      "reasons": [
        "reference"
      ]
    }
  ],
  "note": "string",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
POST/api/v1/bank-transactions/{id}/unmatch

Removes all matches of the transaction and reverses the payments created by them (event payment.deleted). Scopes per target: invoice additionally requires invoices:write, receipt additionally receipts:write.

Permission: banking:write, payments:write

Path parameters

  • idstringrequired
    Resource ID
    max. 128 characters

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Response 200 · BankTransaction

  • idstringrequired
    max. 128 characters
  • bankAccountIdstringrequired
    max. 128 characters
  • bookingDatestring (date)required
    Date (YYYY-MM-DD)
  • valueDatestring (date) | nullrequired
    Date (YYYY-MM-DD)
  • amountCentsintegerrequired
    Incoming positive, outgoing negative
    -100000000000–100000000000
  • currencystringrequired
  • counterpartyNamestring | nullrequired
  • counterpartyIbanstring | nullrequired
  • counterpartyBicstring | nullrequired
  • purposestringrequired
  • bookingTextstring | nullrequired
  • endToEndIdstring | nullrequired
  • mandateIdstring | nullrequired
  • creditorIdstring | nullrequired
  • bankReferencestring | nullrequired
  • possibleDuplicateOfstring | nullrequired
    possible duplicate of this transaction (same day, amount, counterparty IBAN, different reference text) – please check
  • source"csv" | "camt" | "api" | "live"required
  • importIdstring | nullrequired
  • status"unmatched" | "suggested" | "partially_matched" | "matched" | "ignored" | "reverted"required
  • matchedCentsintegerrequired
    Amount in cents
    -100000000000–100000000000
  • openCentsintegerrequired
    amount not yet matched (positive)
    -100000000000–100000000000
  • matchesArray<BankMatch>required
    • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
    • idstringrequired
      max. 128 characters
    • amountCentsintegerrequired
      matched amount (positive)
      -100000000000–100000000000
    • labelstringrequired
    • paymentIdstring | nullrequired
      generated payment (payments, invoicePayments or instalment)
    • matchedAtstring (date-time)required
      Timestamp (ISO 8601)
    • matchedByobject | nullrequired
      • typestringrequired
      • idstringrequired
  • suggestionsArray<BankMatchSuggestion>required
    • targetsArray<object>required
      • type"invoice" | "debt" | "installment_plan" | "receipt" | "payment"required
      • idstringrequired
        max. 128 characters
      • amountCentsintegerrequired
        matched amount (positive)
        -100000000000–100000000000
      • labelstringrequired
    • confidencenumberrequired
      0–1; confident from 0.85
      0–1
    • reasonsArray<enum>required
      Values: reference, reference_partial, amount_exact, amount_total, amount_partial, amount_sum, iban, name, date_close
  • notestring | nullrequired
  • createdAtstring (date-time)required
    Timestamp (ISO 8601)
  • updatedAtstring (date-time)required
    Timestamp (ISO 8601)

Possible errors: 400, 401, 403, 404, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-transactions/ID/unmatch' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY"
Response 200
{
  "id": "string",
  "bankAccountId": "string",
  "bookingDate": "2026-11-01",
  "valueDate": "2026-11-01",
  "amountCents": 0,
  "currency": "string",
  "counterpartyName": "string",
  "counterpartyIban": "string",
  "counterpartyBic": "string",
  "purpose": "string",
  "bookingText": "string",
  "endToEndId": "string",
  "mandateId": "string",
  "creditorId": "string",
  "bankReference": "string",
  "possibleDuplicateOf": "string",
  "source": "csv",
  "importId": "string",
  "status": "unmatched",
  "matchedCents": 0,
  "openCents": 0,
  "matches": [
    {
      "type": "invoice",
      "id": "string",
      "amountCents": 0,
      "label": "string",
      "paymentId": "string",
      "matchedAt": "2026-11-01T09:30:00.000Z",
      "matchedBy": {
        "type": null,
        "id": null
      }
    }
  ],
  "suggestions": [
    {
      "targets": [
        {
          "type": null,
          "id": null,
          "amountCents": null,
          "label": null
        }
      ],
      "confidence": 0,
      "reasons": [
        "reference"
      ]
    }
  ],
  "note": "string",
  "createdAt": "2026-11-01T09:30:00.000Z",
  "updatedAt": "2026-11-01T09:30:00.000Z"
}
POST/api/v1/bank-transactions/auto-match

Recalculates the suggestions for open transactions (e.g. after new invoices). Does not confirm anything – use POST /bank-transactions/{id}/match or POST /bank-transactions/confirm-suggestions for that.

Permission: banking:write

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON)

  • bankAccountIdstring
    max. 128 characters
  • transactionIdsArray<string>
    max. 128 characters

Response 200 · BankAutoMatchResult

  • checkedintegerrequired
    -9007199254740991–9007199254740991
  • suggestedintegerrequired
    -9007199254740991–9007199254740991
  • highConfidenceintegerrequired
    -9007199254740991–9007199254740991

Possible errors: 400, 401, 403, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-transactions/auto-match' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{}'
Response 200
{
  "checked": 0,
  "suggested": 0,
  "highConfidence": 0
}
POST/api/v1/bank-transactions/confirm-suggestions

For each specified transaction, confirms the best suggestion if it reaches the minimum confidence (default 0.85). Suggestions for invoices or receipts are skipped without invoices:write or receipts:write (skipped with reason).

Permission: banking:write, payments:write

Headers

  • Idempotency-Keystring
    Unique key (8–255 characters). Repeated requests with the same key return the same response for 24 h.
    max. 255 characters

Body (JSON) · BankConfirmSuggestions

  • transactionIdsArray<string>required
    max. 128 characters
  • minConfidencenumber
    0–1 · Default: 0.85

Response 200 · BankConfirmSuggestionsResult

  • confirmedArray<string>required
    max. 128 characters
  • skippedArray<object>required
    • idstringrequired
      max. 128 characters
    • reasonstringrequired

Possible errors: 400, 401, 403, 409, 422, 429, 500

curl -X POST 'https://www.debt-flow.io/api/v1/bank-transactions/confirm-suggestions' \
  -H "Authorization: Bearer $DEBTFLOW_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
  "transactionIds": [
    "string"
  ],
  "minConfidence": 0.85
}'
Response 200
{
  "confirmed": [
    "string"
  ],
  "skipped": [
    {
      "id": "string",
      "reason": "string"
    }
  ]
}