Erechio Prüfen API

E-Rechnung prüfen

GitHub OpenAPI

Operations 1

POST /v1/validate E-Rechnung prüfen #

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/erechio:erechio-pr-fen-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

erechio-pr-fen-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Erechio Prüfen API
  version: 1.3.0
  summary: E-Rechnungen (XRechnung UBL/CII, ZUGFeRD-/Factur-X-XML) mit den KoSIT-Regeln prüfen, Fehler auf Deutsch erklärt.
  description: 'Prüft eine E-Rechnung gegen das XML-Schema (XSD: UBL 2.1 bzw. UN/CEFACT CII D16B) und mit denselben Schematron-Regeln und Szenarien wie die Prüfkonfiguration der KoSIT für XRechnung 3.0.2 (EN 16931 für UBL Invoice, UBL CreditNote und CII sowie die nationalen Regeln BR-DE). Jede Meldung trägt Regelcode, Fehlerstufe, Fundstelle und – für die häufigsten Regeln – eine deutsche Erklärung mit Hinweis zur Behebung.


    Ergebnis in zwei Stufen: `regelpruefung_bestanden` (keine Fehler in den Schematron-Regeln, Spezifikationskennung passt zu einem KoSIT-Szenario) und `vollstaendig_validiert` (zusätzlich schemagültig – das entspricht der Annahme durch das KoSIT-Prüftool). Nicht geprüft wird die inhaltliche und steuerliche Richtigkeit. Keine PDF-Annahme (bei ZUGFeRD das eingebettete XML senden).


    Änderungen 1.3.0 (2026-10-23): `GET /v1/status` meldet den echten Zustand – `ok` (200) nur mit bereitem Prüfprozess, lesbaren Schlüsseln und speicherbaren Nutzungsdaten, sonst `gestört` (503) mit `gruende`; Prüfungen werden dann mit 503 `gestoert` abgelehnt und nicht gezählt. Gezählt wird erst, wenn die Antwort 200 vollständig gesendet ist. Trennt der Client die Verbindung, wird die Prüfung beendet (auch in der Warteschlange) und nicht gezählt.


    Wichtig: HTTP 200 heißt „Prüfung ausgeführt“, nicht „Rechnung fehlerfrei“. Maßgeblich sind `vollstaendig_validiert` und `regelpruefung_bestanden`.


    Änderungen 1.2.0 (2026-10-22): neues Feld `regelstand` in Prüfergebnis und Status – Kennung der verwendeten Regel- und Schemadateien (Anfang ihrer SHA-256); Herkunft, Prüfsummen und Änderungsprotokoll des Prüfverhaltens auf https://erechio.de/aenderungen.html.


    Änderungen 1.1.0 (2026-10-21): XSD-Schemaprüfung ergänzt; neue Felder `vollstaendig_validiert`, `regelpruefung_bestanden`, `schemapruefung`; `valid` ist veraltet und gleich `vollstaendig_validiert` (in 1.0.0 war `valid` schon bei bestandener Regelprüfung ohne Schemaprüfung `true`); `ohne` nennt jetzt die inhaltliche Prüfung; Kontingent wird vor der Prüfung reserviert und nur bei 200 gezählt; neu Status 503 (`zeitlimit`, `ausgelastet`); Meldungen mit Code `XSD` (Schemafehler, Fundstelle als Zeile) und `ABBRUCH` (Regelprüfung wegen eines Werts im falschen Format abgebrochen). Änderungsprotokoll: https://erechio.de/api/#aenderungen


    Die Rechnung wird nur im Arbeitsspeicher geprüft und nicht gespeichert. Die Basisadresse steht in der Mail mit Ihrem Schlüssel. Testschlüssel kostenlos (50 Dokumente im Monat), Starter 500 Dokumente im Monat für 14 € inkl. 19 % MwSt. (netto 11,76 €). Nur für Unternehmer (§ 14 BGB) mit Sitz in Deutschland. Eine Verfügbarkeit wird nicht zugesagt.


    Technische Hinweise zum Datenformat, keine Steuer- oder Rechtsberatung. Erechio ist kein Angebot der KoSIT.'
  termsOfService: https://erechio.de/agb.html
  contact:
    name: Erechio
    url: https://erechio.de/api/
    email: info@erechio.de
  x-logo:
    url: https://erechio.de/logo.svg
servers:
- url: '{ERECHIO_URL}'
  description: Erechio API (Nürnberg)
  variables:
    ERECHIO_URL:
      default: https://api.erechio.de
      description: Basisadresse der API
tags:
- name: Prüfen
  description: E-Rechnung prüfen
paths:
  /v1/validate:
    post:
      tags:
      - Prüfen
      operationId: validateInvoice
      summary: E-Rechnung prüfen
      description: Rechnung als XML im Body, höchstens 2 MB. DOCTYPE- und ENTITY-Deklarationen werden abgelehnt. Zählt ein Dokument im Monatskontingent nur, wenn die Antwort 200 gesendet wurde. Das Kontingent wird vor der Prüfung reserviert, gleichzeitige Anfragen können es also nicht überschreiten. Abgelehnte (400/413/422), abgebrochene (503, getrennte Verbindung) und fehlgeschlagene (500) Prüfungen zählen nicht.
      security:
      - bearer: []
      - apiKey: []
      requestBody:
        required: true
        description: XRechnung (UBL Invoice, UBL CreditNote oder CII) bzw. das XML einer ZUGFeRD-/Factur-X-Rechnung.
        content:
          application/xml:
            schema:
              type: string
              maxLength: 2097152
          text/xml:
            schema:
              type: string
              maxLength: 2097152
      responses:
        '200':
          description: Prüfung ausgeführt – das heißt nicht „Rechnung fehlerfrei“. Das Ergebnis steht in `vollstaendig_validiert` (maßgeblich für die Annahme), `regelpruefung_bestanden`, `schemapruefung` und `meldungen`. Gezählt wird die Prüfung, wenn diese Antwort vollständig gesendet ist.
          headers:
            X-Kontingent-Rest:
              description: Verbleibende Dokumente im laufenden Monat
              required: true
              schema:
                type: integer
                minimum: 0
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Ergebnis'
              example:
                vollstaendig_validiert: false
                regelpruefung_bestanden: false
                schemapruefung: bestanden
                valid: false
                syntax: UBL
                spezifikation: urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0
                szenario: EN16931 XRechnung (UBL Invoice)
                geprueft:
                - XML-Schema (UBL 2.1)
                - EN 16931 (UBL)
                - XRechnung 3.0 (BR-DE)
                fehler: 1
                warnungen: 0
                meldungen:
                - code: BR-DE-15
                  level: fehler
                  text: 'Das Element "Buyer reference" (BT-10 (Käuferreferenz (bei Behörden: Leitweg-ID))) muss übermittelt werden.'
                  location: /Invoice
                  erklaerung:
                    titel: Käuferreferenz (Leitweg-ID) fehlt
                    was: XRechnung verlangt in jeder Rechnung eine Käuferreferenz (BT-10). …
                    beheben: 'Tragen Sie die Referenz ein, die Ihr Kunde Ihnen vorgibt: …'
                    pfad: cbc:BuyerReference
                    mehr: https://erechio.de/fehler/br-de-15.html
                kontingent:
                  genutzt: 1
                  limit: 500
                  rest: 499
                regeln: KoSIT XRechnung 3.0.2, EN 16931 Schematron 1.3.16, XSD UBL 2.1 / CII D16B
                regelstand: e17455c9cb03
                ohne: Inhaltliche und steuerliche Richtigkeit der Angaben
                dauer_ms: 396
        '400':
          $ref: '#/components/responses/Fehler400'
        '401':
          $ref: '#/components/responses/Fehler401'
        '405':
          $ref: '#/components/responses/Fehler405'
        '413':
          $ref: '#/components/responses/Fehler413'
        '422':
          $ref: '#/components/responses/Fehler422'
        '429':
          $ref: '#/components/responses/Fehler429'
        '500':
          $ref: '#/components/responses/Fehler500'
        '503':
          $ref: '#/components/responses/Fehler503'
components:
  schemas:
    LeitwegId:
      type: object
      description: Nur gesetzt, wenn BT-10 wie eine Leitweg-ID aussieht. Hinweis, ändert das KoSIT-Ergebnis nicht.
      required:
      - wert
      - pruefziffer_ok
      properties:
        wert:
          type: string
        pruefziffer_ok:
          type: boolean
          description: Prüfziffer nach ISO 7064 Mod 97-10
        erwartet:
          type: string
          description: Richtige Prüfziffer, nur wenn `pruefziffer_ok` false ist
    Fehler:
      type: object
      required:
      - fehler
      properties:
        fehler:
          type: object
          required:
          - code
          - text
          properties:
            code:
              type: string
              enum:
              - kein_xml
              - dtd
              - schluessel
              - methode
              - zu_gross
              - kein_format
              - xml_fehler
              - rate
              - kontingent
              - nicht_gefunden
              - intern
              - zeitlimit
              - ausgelastet
              - gestoert
            text:
              type: string
    Kontingent:
      type: object
      required:
      - genutzt
      - limit
      - rest
      properties:
        genutzt:
          type: integer
          minimum: 0
        limit:
          type: integer
          minimum: 0
        rest:
          type: integer
          minimum: 0
    Meldung:
      type: object
      required:
      - code
      - level
      - text
      properties:
        code:
          type: string
          description: Regelcode, z. B. BR-DE-15; `XSD` für Schemafehler, `ABBRUCH`, wenn die Regelprüfung wegen eines Werts im falschen Format abbrach
          examples:
          - BR-DE-15
        level:
          type: string
          enum:
          - fehler
          - warnung
          - hinweis
        text:
          type: string
          description: Meldungstext mit deutschen BT-/BG-Namen
        location:
          type:
          - string
          - 'null'
          description: XPath der Fundstelle; bei Schemafehlern „Zeile n“
        erklaerung:
          $ref: '#/components/schemas/Erklaerung'
    Erklaerung:
      type: object
      description: Deutsche Erklärung; nur für Regeln, zu denen es eine ausführliche Erklärung gibt
      required:
      - titel
      - was
      - beheben
      - mehr
      properties:
        titel:
          type: string
        was:
          type: string
          description: Was die Regel verlangt
        beheben:
          type: string
          description: Wie man den Fehler behebt
        pfad:
          type:
          - string
          - 'null'
          description: Element in der jeweiligen Syntax (UBL oder CII)
        mehr:
          type: string
          format: uri
          description: Ausführliche Seite zum Regelcode
    Ergebnis:
      type: object
      required:
      - vollstaendig_validiert
      - regelpruefung_bestanden
      - schemapruefung
      - valid
      - syntax
      - spezifikation
      - geprueft
      - fehler
      - warnungen
      - meldungen
      - kontingent
      - regeln
      - regelstand
      - ohne
      - dauer_ms
      properties:
        vollstaendig_validiert:
          type: boolean
          description: '`true` nur, wenn die Rechnung schemagültig ist (XSD) und die Regelprüfung bestanden hat – entspricht der Annahme durch das KoSIT-Prüftool. Sagt nichts über die inhaltliche oder steuerliche Richtigkeit.'
        regelpruefung_bestanden:
          type: boolean
          description: '`true`, wenn die Schematron-Regeln (EN 16931, bei XRechnung BR-DE) keinen Fehler melden und die Spezifikationskennung (BT-24) zu einem KoSIT-Szenario passt. Allein noch keine vollständige Validierung.'
        schemapruefung:
          type: string
          enum:
          - bestanden
          - fehlgeschlagen
          description: Ergebnis der XSD-Schemaprüfung (UBL 2.1 bzw. CII D16B). Schemafehler stehen in `meldungen` mit Code `XSD`.
        valid:
          type: boolean
          deprecated: true
          description: Veraltet seit 1.1.0, gleich `vollstaendig_validiert`. In 1.0.0 war `valid` schon ohne Schemaprüfung `true`.
        syntax:
          type: string
          enum:
          - UBL
          - CII
        spezifikation:
          type:
          - string
          - 'null'
          description: Spezifikationskennung BT-24 aus der Rechnung
        szenario:
          type:
          - string
          - 'null'
          description: Gewähltes KoSIT-Szenario; fehlt, wenn keins passt
        hinweis:
          type: string
          description: Nur gesetzt, wenn kein KoSIT-Szenario passt (dann nur EN 16931 geprüft)
        geprueft:
          type: array
          items:
            type: string
          description: Angewandte Regelwerke
        fehler:
          type: integer
          minimum: 0
        warnungen:
          type: integer
          minimum: 0
        leitweg_id:
          $ref: '#/components/schemas/LeitwegId'
        meldungen:
          type: array
          items:
            $ref: '#/components/schemas/Meldung'
        kontingent:
          $ref: '#/components/schemas/Kontingent'
        regeln:
          type: string
          description: Regelstand
        regelstand:
          type: string
          pattern: ^[0-9a-f]{12}$
          description: 'Kennung des Regelstands: Anfang der SHA-256 über alle Regel- und Schemadateien. Gleiche Kennung = gleiche Regeln. Details: https://erechio.de/aenderungen.html (seit 1.2.0)'
        ohne:
          type: string
          description: Was nicht geprüft wird
        dauer_ms:
          type: integer
          minimum: 0
  responses:
    Fehler400:
      description: Body ist kein XML (`kein_xml`) oder enthält DOCTYPE-/ENTITY-Deklarationen (`dtd`)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler401:
      description: API-Schlüssel fehlt oder ist ungültig (`schluessel`)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler405:
      description: Falsche Methode (`methode`), nur POST
      headers:
        Allow:
          required: true
          schema:
            type: string
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler503:
      description: 'Keine Prüfung: Zeitlimit überschritten (`zeitlimit`), Dienst ausgelastet (`ausgelastet`) oder gestört (`gestoert`, siehe `GET /v1/status`). Zählt nicht im Kontingent.'
      headers:
        Retry-After:
          required: true
          description: Sekunden bis zum nächsten Versuch
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler413:
      description: Rechnung größer als 2 MB (`zu_gross`)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler500:
      description: Interner Fehler (`intern`); die Rechnung wurde nicht gespeichert
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler429:
      description: Mehr als 60 Prüfungen pro Minute (`rate`, mit `Retry-After`) oder Monatskontingent erreicht (`kontingent`; laufende Prüfungen sind eingerechnet)
      headers:
        Retry-After:
          description: Sekunden bis zum nächsten Versuch, nur bei `rate`
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
    Fehler422:
      description: Kein E-Rechnungsformat (`kein_format`) oder XML nicht wohlgeformt (`xml_fehler`)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Fehler'
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: 'Header `Authorization: Bearer pk_…`'
    apiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: Alternativ zum Bearer-Header
externalDocs:
  description: Dokumentation mit Beispielen
  url: https://erechio.de/api/