Paulibytes UG (haftungsbeschränkt) Kontoauszüge API

Kontoauszüge, Kontoberichte und Avise (camt.052/053/054) sowie Gebührenabrechnungen (camt.086) prüfen und als JSON lesen, einzeln oder als ZIP.

GitHub OpenAPI

Operations 2

POST /statements/validate Kontoauszug prüfen (camt.052/053/054, camt.086) #
POST /statements/parse Kontoauszug als JSON lesen (camt.052/053/054, camt.086) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/finisma-de:finisma-de-kontoausz-ge-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

finisma-de-kontoausz-ge-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: finisma REST Kontoauszüge API
  version: 1.0.0
  description: Elektronische Rechnungen (ZUGFeRD/Factur-X, EN 16931) prüfen und erzeugen. Server-zu-Server-API; nicht für Browser-Aufrufe gedacht. Authentifizierung per API-Key (Bearer fnsm_…), erstellt unter /konto, oder OAuth 2.1 (Bearer fnso_…) für Integrationen, die das Konto des Nutzers verbinden. verify ist kostenlos (Credential nötig), invoices läuft mit Abo, Guthaben (Credits, 1 je Rechnung) oder dem kostenlosen Tageskontingent mit Wasserzeichen, extractions läuft mit Abo oder kostet 1 Credit je Aufruf (Sprachmodell). payments/validate und statements/validate haben ein kostenloses Tageskontingent je Konto, danach Zahlungsverkehr-Abo oder Prüfblock (1 Credit für 10 Prüfungen); statements/parse hat ein kostenloses Monatskontingent, danach Zahlungsverkehr-Abo oder 1 Credit je Aufruf (Details je Endpunkt, x-finisma-pricing). Operationen mit x-finisma-mcp-tool gibt es unter demselben Tool-Namen auch auf dem Remote-MCP-Server /api/mcp.
  termsOfService: https://finisma.de/agb
  contact:
    name: finisma
    email: erechnung@paulibytes.de
    url: https://finisma.de/entwickler
servers:
- url: https://finisma.de/api/v1
security:
- bearerAuth: []
- oauth2:
  - invoice:verify
  - invoice:create
tags:
- name: Kontoauszüge
  description: Kontoauszüge, Kontoberichte und Avise (camt.052/053/054) sowie Gebührenabrechnungen (camt.086) prüfen und als JSON lesen, einzeln oder als ZIP.
paths:
  /statements/validate:
    post:
      operationId: validateBankStatement
      summary: Kontoauszug prüfen (camt.052/053/054, camt.086)
      tags:
      - Kontoauszüge
      description: 'Prüft camt.052, camt.053 und camt.054 (Versionen .02 und .08) sowie camt.086 (.01 bis .05), einzeln oder mehrere Dateien als ZIP. Je Datei: Nachricht, Version, Befunde der Prüfregeln (Salden, Summen, IBAN-Prüfziffern, Reihenfolge, bei camt.086 Menge mal Preis und Steuern), Schemaprüfung gegen das ISO-Schema mit Zeile und Spalte, Urteil; dazu ein Gesamturteil. Nichts wird gespeichert. Kostenlos bis 5 Aufrufe pro Tag und Konto. Mit dem Zahlungsverkehr-Abo (Feature payments) ohne Limit. Ohne Abo kauft 1 Credit einen Prüfblock mit 10 weiteren Prüfungen (für Zahlungsdateien und Kontoauszüge gemeinsam, ohne Ablaufdatum). Ein Konto (API-Key oder OAuth) ist immer nötig.'
      x-finisma-mcp-tool: validate_bank_statement
      x-finisma-pricing:
        freeQuota: 5
        freePeriod: day
        subscriptionFeature: payments
        checkBlock:
          credits: 1
          checks: 10
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: 'Die Datei: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB).'
              required:
              - file
          application/json:
            schema:
              type: object
              properties:
                xml:
                  type: string
                  description: Die Datei als XML-Text (max. 10 MB). Alternativ 'file_base64'.
                file_base64:
                  type: string
                  contentEncoding: base64
                  description: 'Die Datei Base64-kodiert: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB). Alternativ ''xml''.'
                filename:
                  type: string
                  description: Optionaler Dateiname, erscheint in den Meldungen.
              additionalProperties: false
      responses:
        '200':
          description: Ergebnis; billing nennt, womit bezahlt wurde.
          content:
            application/json:
              schema:
                type: object
                properties:
                  summary:
                    type: string
                    description: Kurzfassung des Ergebnisses.
                  result:
                    type: object
                    properties:
                      files:
                        type: array
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                            message:
                              type: string
                              enum:
                              - camt.052
                              - camt.053
                              - camt.054
                              - camt.086
                            version:
                              type: string
                              description: Schema-Version, z. B. 08.
                            statements:
                              type: integer
                            items:
                              type: integer
                              description: Buchungen bzw. Services (camt.086).
                            findings:
                              type: array
                              items:
                                type: object
                                properties:
                                  code:
                                    type: string
                                    description: Maschinencode der Prüfregel.
                                  severity:
                                    type: string
                                    enum:
                                    - error
                                    - warning
                                    - info
                                  message:
                                    type: string
                                    description: Deutsche Meldung.
                                  path:
                                    type: string
                                    description: Punkt-Pfad in das gelesene Modell.
                                required:
                                - code
                                - severity
                                - message
                            xsd:
                              type: object
                              description: 'Schemaprüfung über den Validierungsdienst. available=false heißt: nicht verfügbar, das Urteil beruht dann nur auf den Prüfregeln.'
                              properties:
                                available:
                                  type: boolean
                                ruleset:
                                  type: string
                                  description: Prüfgrundlage, z. B. iso.20022:camt053:08.
                                valid:
                                  type: boolean
                                verdict:
                                  type: string
                                  enum:
                                  - valid
                                  - valid_with_warnings
                                  - invalid
                                errorCount:
                                  type: integer
                                warningCount:
                                  type: integer
                                findings:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      code:
                                        type: string
                                      severity:
                                        type: string
                                        enum:
                                        - error
                                        - warning
                                        - info
                                      message:
                                        type: string
                                      line:
                                        type:
                                        - integer
                                        - 'null'
                                      column:
                                        type:
                                        - integer
                                        - 'null'
                                      location:
                                        type:
                                        - string
                                        - 'null'
                                    required:
                                    - code
                                    - severity
                                    - message
                                note:
                                  type: string
                              required:
                              - available
                              - ruleset
                            verdict:
                              type: string
                              enum:
                              - valid
                              - valid_with_warnings
                              - invalid
                          required:
                          - name
                          - message
                          - version
                          - findings
                          - xsd
                          - verdict
                      deliveryFindings:
                        type: array
                        items:
                          type: object
                          properties:
                            code:
                              type: string
                              description: Maschinencode der Prüfregel.
                            severity:
                              type: string
                              enum:
                              - error
                              - warning
                              - info
                            message:
                              type: string
                              description: Deutsche Meldung.
                            path:
                              type: string
                              description: Punkt-Pfad in das gelesene Modell.
                          required:
                          - code
                          - severity
                          - message
                      skipped:
                        type: array
                        description: Dateien im ZIP-Archiv, die keine unterstützte camt-Datei sind.
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                            reason:
                              type: string
                          required:
                          - name
                          - reason
                      verdict:
                        type: string
                        enum:
                        - valid
                        - valid_with_warnings
                        - invalid
                      schemaChecked:
                        type: boolean
                        description: false, wenn die Schemaprüfung für mindestens eine Datei nicht verfügbar war.
                      billing:
                        type: object
                        description: 'Womit der Aufruf bezahlt wurde: free_quota (Freikontingent), subscription (Zahlungsverkehr-Abo), check_block (Prüfblock: 1 Credit für 10 Prüfungen) oder credit (Guthaben).'
                        properties:
                          via:
                            type: string
                            enum:
                            - free_quota
                            - subscription
                            - check_block
                            - credit
                          freeRemaining:
                            type:
                            - integer
                            - 'null'
                            description: Verbleibende kostenlose Aufrufe im laufenden Zeitraum (Europe/Berlin); beim Abo null.
                          freePeriod:
                            type: string
                            enum:
                            - day
                            - month
                            description: 'Zeitraum des Freikontingents: day beim Prüfen, month beim Auslesen.'
                          checkBlockRemaining:
                            type: integer
                            description: 'Nur bei via check_block: offene Prüfungen im Prüfblock nach diesem Aufruf.'
                          creditsCharged:
                            type: integer
                            description: 'Abgebuchte Credits: bei via credit und beim Kauf eines neuen Prüfblocks.'
                          refunded:
                            type: boolean
                            description: true, wenn der Aufruf zurückgebucht wurde, weil die Schemaprüfung nicht erreichbar war.
                        required:
                        - via
                        - freeRemaining
                        - freePeriod
                    required:
                    - files
                    - deliveryFindings
                    - skipped
                    - verdict
                    - billing
                required:
                - summary
                - result
        '400':
          description: Keine Datei, kein unterstütztes Format oder eine nicht unterstützte Version (code invalid_input). Abgewiesene Dateien kosten nichts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Kein oder ungültiges Credential.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Tageskontingent (5 pro Tag) aufgebraucht, keine offene Prüfung im Prüfblock, kein Zahlungsverkehr-Abo und kein Guthaben (code payment_required). Retry-After nennt die Sekunden bis zum Neubeginn des Kontingents (Mitternacht, Europe/Berlin).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Datei größer als 10 MB (code payload_too_large).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate-Limit (30/min je Key).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Fehler im nachgelagerten Dienst.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /statements/parse:
    post:
      operationId: parseBankStatement
      summary: Kontoauszug als JSON lesen (camt.052/053/054, camt.086)
      tags:
      - Kontoauszüge
      description: 'Liest dieselben Formate in strukturiertes JSON: bei camt.052/053/054 Konten, Salden und Buchungen mit Transaktionen (Gegenpartei, IBAN, Verwendungszweck, End-to-End-Referenz, BkTxCd mit GVC), bei camt.086 Abrechnungen mit Services und Summen je Währung. Keine Schemaprüfung. Nichts wird gespeichert. Kostenlos bis 5 Aufrufe pro Monat und Konto. Mit dem Zahlungsverkehr-Abo (Feature payments) ohne Limit. Ohne Abo kostet jeder weitere Aufruf 1 Credit. Ein Konto (API-Key oder OAuth) ist immer nötig.'
      x-finisma-mcp-tool: parse_bank_statement
      x-finisma-pricing:
        freeQuota: 5
        freePeriod: month
        subscriptionFeature: payments
        creditsPerCall: 1
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: 'Die Datei: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB).'
              required:
              - file
          application/json:
            schema:
              type: object
              properties:
                xml:
                  type: string
                  description: Die Datei als XML-Text (max. 10 MB). Alternativ 'file_base64'.
                file_base64:
                  type: string
                  contentEncoding: base64
                  description: 'Die Datei Base64-kodiert: eine XML-Datei oder ein ZIP mit mehreren XML-Dateien (max. 10 MB). Alternativ ''xml''.'
                filename:
                  type: string
                  description: Optionaler Dateiname, erscheint in den Meldungen.
              additionalProperties: false
      responses:
        '200':
          description: Ergebnis; billing nennt, womit bezahlt wurde.
          content:
            application/json:
              schema:
                type: object
                properties:
                  summary:
                    type: string
                    description: Kurzfassung des Ergebnisses.
                  result:
                    type: object
                    properties:
                      files:
                        type: array
                        items:
                          type: object
                          description: 'Eine gelesene Datei. statements folgt dem Modell aus @erechnung/camt: bei camt.052/053/054 je Auszug account, balances, summary und entries (bookingDate, valueDate, amount, currency, creditDebit, status, bankTxCode mit gvc, transactions[] mit counterparty, remittance, refs.endToEndId); bei camt.086 je Abrechnung account, services, taxRegions, balances.'
                          properties:
                            name:
                              type: string
                            message:
                              type: string
                              enum:
                              - camt.052
                              - camt.053
                              - camt.054
                              - camt.086
                            version:
                              type: string
                            header:
                              type: object
                            statements:
                              type: array
                              items:
                                type: object
                            totals:
                              type: array
                              description: 'Nur camt.086: Summen je Preiswährung.'
                              items:
                                type: object
                                properties:
                                  currency:
                                    type: string
                                  services:
                                    type: integer
                                  net:
                                    type: number
                                  waived:
                                    type: number
                                  tax:
                                    type: number
                                  gross:
                                    type: number
                            settlementTotals:
                              type: array
                              description: 'Nur camt.086: Belastung in abweichender Abrechnungswährung.'
                              items:
                                type: object
                                properties:
                                  value:
                                    type: number
                                  currency:
                                    type: string
                                  services:
                                    type: integer
                            parseFindings:
                              type: array
                              items:
                                type: object
                                properties:
                                  code:
                                    type: string
                                    description: Maschinencode der Prüfregel.
                                  severity:
                                    type: string
                                    enum:
                                    - error
                                    - warning
                                    - info
                                  message:
                                    type: string
                                    description: Deutsche Meldung.
                                  path:
                                    type: string
                                    description: Punkt-Pfad in das gelesene Modell.
                                required:
                                - code
                                - severity
                                - message
                          required:
                          - name
                          - message
                          - version
                          - header
                          - statements
                          - parseFindings
                      skipped:
                        type: array
                        description: Dateien im ZIP-Archiv, die keine unterstützte camt-Datei sind.
                        items:
                          type: object
                          properties:
                            name:
                              type: string
                            reason:
                              type: string
                          required:
                          - name
                          - reason
                      billing:
                        type: object
                        description: 'Womit der Aufruf bezahlt wurde: free_quota (Freikontingent), subscription (Zahlungsverkehr-Abo), check_block (Prüfblock: 1 Credit für 10 Prüfungen) oder credit (Guthaben).'
                        properties:
                          via:
                            type: string
                            enum:
                            - free_quota
                            - subscription
                            - check_block
                            - credit
                          freeRemaining:
                            type:
                            - integer
                            - 'null'
                            description: Verbleibende kostenlose Aufrufe im laufenden Zeitraum (Europe/Berlin); beim Abo null.
                          freePeriod:
                            type: string
                            enum:
                            - day
                            - month
                            description: 'Zeitraum des Freikontingents: day beim Prüfen, month beim Auslesen.'
                          checkBlockRemaining:
                            type: integer
                            description: 'Nur bei via check_block: offene Prüfungen im Prüfblock nach diesem Aufruf.'
                          creditsCharged:
                            type: integer
                            description: 'Abgebuchte Credits: bei via credit und beim Kauf eines neuen Prüfblocks.'
                          refunded:
                            type: boolean
                            description: true, wenn der Aufruf zurückgebucht wurde, weil die Schemaprüfung nicht erreichbar war.
                        required:
                        - via
                        - freeRemaining
                        - freePeriod
                    required:
                    - files
                    - skipped
                    - billing
                required:
                - summary
                - result
        '400':
          description: Keine Datei, kein unterstütztes Format oder eine nicht unterstützte Version (code invalid_input). Abgewiesene Dateien kosten nichts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Kein oder ungültiges Credential.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: Monatskontingent (5 pro Monat) aufgebraucht, kein Zahlungsverkehr-Abo und kein Guthaben (code payment_required). Retry-After nennt die Sekunden bis zum Neubeginn des Kontingents (Monatsanfang, Europe/Berlin).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: Datei größer als 10 MB (code payload_too_large).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Rate-Limit (30/min je Key).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Fehler im nachgelagerten Dienst.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: Menschenlesbare Fehlermeldung.
        code:
          type: string
          enum:
          - invalid_input
          - auth_required
          - invalid_key
          - subscription_required
          - free_quota_exhausted
          - payment_required
          - payload_too_large
          - insufficient_scope
          - rate_limited
          - not_found
          - upstream_error
        details:
          description: Optionale strukturierte Details, z. B. Validierungs-Issues.
      required:
      - error
      - code
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API-Key (fnsm_…) aus dem finisma-Konto unter /konto oder OAuth-Zugriffstoken (fnso_…).
    oauth2:
      type: oauth2
      description: OAuth 2.1 mit PKCE (S256). Clients können sich per Dynamic Client Registration unter /api/oauth/register selbst anmelden.
      flows:
        authorizationCode:
          authorizationUrl: https://finisma.de/api/oauth/authorize
          tokenUrl: https://finisma.de/api/oauth/token
          refreshUrl: https://finisma.de/api/oauth/token
          scopes:
            invoice:verify: E-Rechnungen prüfen
            invoice:create: ZUGFeRD-Rechnungen erzeugen