Skip to content
Developer

Bilanzierung

Accounting41 EndpointsBilling / Bilanzierung

Der Vorschlag für die Eröffnungsbilanz eines Geschäftsjahres.

GET/api/invoice/opening_balance/{identifier}

Path parameters

identifierrequiredstring

Responses

200Vorschlag mit abgeleiteten Positionen und Übergangsgewinn

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/opening_balance/42 \
  --header 'x-iw-jwt-token: <TOKEN>'

Bucht die Eröffnungsbilanz aus den geprüften Positionen.

POST/api/invoice/opening_balance/{identifier}

Das Eigenkapital wird nicht mitgegeben - es ergibt sich als Differenz und wird serverseitig errechnet. Eine Eröffnungsbilanz geht so immer auf, und ein negatives Kapital ist eine Aussage, kein Fehler.

Path parameters

identifierrequiredstring

Request body application/json

  • positionsarray<object>
    Show fields (4)
    • account_numberstring
    • sidestring
    • amountnumber
    • labelstring

Responses

200Die erzeugte EröffnungsbuchungJournalEntry

Show fields (21)
  • debit_totalnumber (float)

    Summe der Sollbeträge.

  • credit_totalnumber (float)

    Summe der Habenbeträge.

  • is_balancedboolean

    Soll gleich Haben - die Grundregel der doppelten Buchführung.

  • idinteger

    Primary key of the journal entry. Internal ID.

  • entry_numberstring

    Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

  • entry_datestring (date-time)

    Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

  • document_datestring (date-time)

    Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

  • document_numberstring

    Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

  • fiscal_yearFiscalYear

    Fiscal year the entry belongs to.

    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • periodinteger

    Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

  • statusstring

    Status of the entry, for example draft or posted.

  • source_typestring

    Source of the entry, for example invoice or payment.

  • source_idinteger

    Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

  • reversal_ofJournalEntry

    Die Buchung, die durch diese hier storniert wird.

  • posted_atstring (date-time)

    Time the entry was posted.

  • posted_byUser14

    Login user who posted the entry.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • linesarray<JournalEntryLine>

    Lines of the entry.

    Show fields (9)
    • idinteger

      Primary key of the journal entry line. Internal ID.

    • ledger_accountLedgerAccount

      Ledger account that is booked.

    • cost_centerCostCenter

      Cost center of the booking.

    • debitnumber (float)

      Sollbetrag. Aktiv- und Aufwandskonten mehren sich hier. DECIMAL und nicht DOUBLE. Ein binaerer Fliesskommawert kann 0,10 Euro nicht darstellen; bei einer einzelnen Buchung faellt das durch das Runden auf Cent nicht auf, ueber eine Summenspalte mit zehntausend Zeilen schon. Die Datenbank rechnet DECIMAL exakt, und genau ueber diese Spalten laufen die Summen der Saldenliste. Nach aussen bleibt es float: Doctrine liefert DECIMAL als Zeichenkette, die Getter wandeln um, und die Setter schreiben sie auf zwei Nachkommastellen normiert zurueck.

    • creditnumber (float)

      Habenbetrag. Passiv-, Eigenkapital- und Ertragskonten mehren sich hier.

    • line_descriptionstring

      Buchungstext der Zeile. Fehlt er, gilt der Text des Buchungssatzes.

    • positioninteger

      Position of the line in the journal entry.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/opening_balance/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "positions": [
    {
      "account_number": "1200",
      "side": "debit",
      "amount": 1234.56,
      "label": "Bankguthaben"
    }
  ]
}
'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "debit_total": 1.5,
  "credit_total": 1.5,
  "is_balanced": true,
  "entry_number": "string",
  "entry_date": "2026-10-15T09:30:00+02:00",
  "document_date": "2026-10-15T09:30:00+02:00",
  "document_number": "string",
  "fiscal_year": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true,
    "closed_at": "2026-10-15T09:30:00+02:00",
    "closed_by": {
      "id": 42,
      "name": "Beispiel",
      "username": "lena.hartmann@example.org",
      "email": "lena.hartmann@example.org",
      "profile_picture_url": "https://vynst.de",
      "positioningeneral": "string",
      "archived": true,
      "require2fa": true,
      "search_string": "string"
    },
    "deleted": true,
    "created": "2026-10-15T09:30:00+02:00"
  }
}

Bilanz eines Geschäftsjahres.

GET/api/invoice/accounting/{identifier}/balance_sheet

Path parameters

identifierrequiredstring

Query parameters

cost_centerstringAuf eine Sphäre eingrenzen

Responses

200Bilanz zum Stichtag

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/balance_sheet \
  --header 'x-iw-jwt-token: <TOKEN>'

Gewinn- und Verlustrechnung eines Geschäftsjahres.

GET/api/invoice/accounting/{identifier}/profit_and_loss

Path parameters

identifierrequiredstring

Query parameters

cost_centerstring

Responses

200Gewinn- und Verlustrechnung

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/profit_and_loss \
  --header 'x-iw-jwt-token: <TOKEN>'

Summen- und Saldenliste eines Geschäftsjahres.

GET/api/invoice/accounting/{identifier}/trial_balance

Path parameters

identifierrequiredstring

Responses

200Summen- und Saldenliste

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/trial_balance \
  --header 'x-iw-jwt-token: <TOKEN>'

Ergebnis je steuerlicher Sphäre.

GET/api/invoice/accounting/{identifier}/spheres

Für den gemeinnützigen Verein die entscheidende Auswertung: nur der wirtschaftliche Geschäftsbetrieb ist steuerpflichtig.

Path parameters

identifierrequiredstring

Responses

200Ergebnis je Sphäre

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/spheres \
  --header 'x-iw-jwt-token: <TOKEN>'

Bilanz in der Gliederung des § 266 HGB, mit Vorjahreswerten.

GET/api/invoice/accounting/{identifier}/hgb_balance_sheet

Die gewoehnliche Bilanz ist eine Kontenliste - richtig gerechnet, aber nicht in der Form, die das Gesetz vorgibt. Hier stehen die Posten des § 266 HGB, je mit dem Vorjahresbetrag (§ 265 Abs. 2 HGB) und den Konten, aus denen sie entstanden sind.

Path parameters

identifierrequiredstring

Query parameters

cost_centerstringAuf eine Sphaere eingrenzen

Responses

200Bilanz nach § 266 HGB

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/hgb_balance_sheet \
  --header 'x-iw-jwt-token: <TOKEN>'

Gewinn- und Verlustrechnung in der Staffelform des § 275 Abs. 2 HGB.

GET/api/invoice/accounting/{identifier}/hgb_profit_and_loss

Path parameters

identifierrequiredstring

Query parameters

cost_centerstring

Responses

200GuV nach § 275 Abs. 2 HGB

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/hgb_profit_and_loss \
  --header 'x-iw-jwt-token: <TOKEN>'

Offene Posten - Debitoren und Kreditoren mit Faelligkeitsstaffel.

GET/api/invoice/accounting/open_items

Was noch nicht bezahlt ist, und seit wann. Die Staffel sagt, welche Handlung ein Posten verlangt: zehn Tage ueberfaellig wird gemahnt, neunzig Tage ueberfaellig wird wertberichtigt.

Query parameters

as_ofstringStichtag, Vorgabe heute

Responses

200Offene Posten beider Seiten

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/open_items \
  --header 'x-iw-jwt-token: <TOKEN>'

Datentraegerueberlassung nach § 147 Abs. 6 AO.

GET/api/invoice/accounting/{identifier}/gobd_export

Der Export, nach dem eine Betriebspruefung fragt: die steuerrelevanten Daten in maschinell auswertbarer Form, samt der index.xml des GoBD-Beschreibungsstandards. Ohne sie waere ein CSV-Ordner kein Export, sondern ein Haufen Dateien.

Ausgegeben werden nur festgeschriebene Buchungen - Entwuerfe sind keine Buchfuehrung.

Path parameters

identifierrequiredstring

Responses

200ZIP mit index.xml und den Datendateien

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/gobd_export \
  --header 'x-iw-jwt-token: <TOKEN>'

Zeitabhaengige steuerliche Wertgrenzen eines Jahres.

GET/api/invoice/accounting/tax_thresholds

Freigrenze des wirtschaftlichen Geschaeftsbetriebs, Zweckbetriebsgrenze, Uebungsleiterfreibetrag und Ehrenamtspauschale - je mit Fundstelle, Anwendungsjahr und Verlauf.

Query parameters

yearstringJahr, Vorgabe das laufende

Responses

200Die Wertgrenzen des Jahres

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/tax_thresholds \
  --header 'x-iw-jwt-token: <TOKEN>'

Katalog der bilanziellen Abschlussarbeiten.

GET/api/invoice/accounting/year_end_adjustments

Welche Umbuchungen zum Jahresabschluss gehoeren, auf welche Konten sie laufen und woher sie kommen. Der Dienst rechnet nichts aus - wie hoch eine Rueckstellung ist, entscheidet ein Mensch -, aber er kennt die Konten und die richtige Seite.

Responses

200Die Abschlussbuchungen des eingestellten Kontenrahmens

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/year_end_adjustments \
  --header 'x-iw-jwt-token: <TOKEN>'

Checkliste der Abschlussarbeiten eines Geschaeftsjahres.

GET/api/invoice/accounting/{identifier}/year_end_checklist

Keine Blocker: eine Rueckstellung laesst sich nicht erzwingen, und ein Betrieb ohne Warenlager braucht keine Inventur. Die Liste sagt, woran zu denken ist, und ob im Jahr schon etwas davon gebucht wurde.

Path parameters

identifierrequiredstring

Responses

200Checkliste mit dem Stand des Jahres

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/year_end_checklist \
  --header 'x-iw-jwt-token: <TOKEN>'

Bucht eine Abschlussbuchung.

POST/api/invoice/accounting/{identifier}/year_end_adjustment

Path parameters

identifierrequiredstring

Request body application/json

  • typestringrequired
  • amountstringrequired
  • descriptionstringrequired
  • counter_accountstring
  • entry_datestring
  • tax_ratestring
  • cost_centerstring
  • document_numberstring

Responses

201Der gebuchte Satz

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/year_end_adjustment \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "type": "string",
  "amount": "string",
  "description": "Text",
  "counter_account": "string",
  "entry_date": "2026-10-15T09:30:00+02:00",
  "tax_rate": "string"
}
'

Eine Auswertung als CSV.

GET/api/invoice/accounting/{identifier}/report.csv

Die Auswertungen selbst bleiben JSON - die Oberflaeche liest sie. Wer damit weiterrechnen will, holt sie hier: deutsches Format mit Semikolon und Komma, damit Excel die Zahlen als Zahlen liest und nicht als Text.

Path parameters

identifierrequiredstring

Query parameters

reportstringWelche Auswertung
cost_centerstring
as_ofstringStichtag der offenen Posten

Responses

200Die Auswertung als CSV

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/report.csv \
  --header 'x-iw-jwt-token: <TOKEN>'

Was der Buchungsstapel enthalten wuerde - ohne ihn zu erzeugen.

GET/api/invoice/accounting/{identifier}/datev_export/preview

Die Kanzlei bekommt den Stapel einmal; wenn darin etwas fehlt, faellt es dort auf und nicht hier. Deshalb zuerst die Vorschau: wie viele Saetze es werden, und welche Buchungen sich nicht als Buchungssatz abbilden lassen, samt Grund. Was hier steht, muss die Kanzlei von Hand erfassen - besser sie weiss es vorher.

Path parameters

identifierrequiredstring

Query parameters

fromstringBeginn des Zeitraums, Vorgabe der Jahresbeginn
tostringEnde des Zeitraums, Vorgabe das Jahresende

Responses

200Anzahl der Saetze und die uebersprungenen Buchungen

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/datev_export/preview \
  --header 'x-iw-jwt-token: <TOKEN>'

Der Buchungsstapel im DATEV-Format.

GET/api/invoice/accounting/{identifier}/datev_export

Die Datei, die eine Kanzlei in DATEV Kanzlei-Rechnungswesen einliest. Ausgegeben werden ausschliesslich festgeschriebene Buchungen - ein Entwurf ist keine Buchfuehrung, und ein Stapel mit Entwuerfen darin wuerde in der Kanzlei zu Buchungen, die es bei uns nie gab.

Path parameters

identifierrequiredstring

Query parameters

fromstringBeginn des Zeitraums, Vorgabe der Jahresbeginn
tostringEnde des Zeitraums, Vorgabe das Jahresende

Responses

200Der Buchungsstapel als CSV im DATEV-Format

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/42/datev_export \
  --header 'x-iw-jwt-token: <TOKEN>'

Kontenblatt: alle Buchungszeilen eines Kontos mit laufendem Saldo.

GET/api/invoice/accounting/ledger/{identifier}

Ohne chart_of_accounts wird der Bezeichner als Id gelesen. Das ist hier die einzige eindeutige Angabe: Kontonummern sind selbst Zahlen, und "1200" wäre sonst nicht zu unterscheiden von der Id 1200 - bei über tausend Konten je Rahmen fast immer ein anderes Konto, ohne dass es auffiele. Wer in Kontonummern denkt, gibt den Rahmen dazu an; innerhalb eines Rahmens ist die Nummer eindeutig.

Path parameters

identifierrequiredstring

Query parameters

fiscal_yearstringGeschäftsjahr
chart_of_accountsstringDen Bezeichner als Kontonummer dieses Rahmens lesen

Responses

200Kontenblatt

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/accounting/ledger/42 \
  --header 'x-iw-jwt-token: <TOKEN>'

Sachkonten.

GET/api/invoice/ledger_account

Mit "search" wird über Nummer und Bezeichnung gesucht statt gefiltert. Ein voller Kontenrahmen hat über tausend Konten; eine Auswahlliste zum Durchblättern wäre unbrauchbar, und die übrigen Filter treffen nur exakt. Die Trefferzahl ist begrenzt - wer sucht, will die ersten passenden sehen, nicht alle.

Query parameters

idstring
deletedbooleanThis property is used to mark an entity as deleted / archived | Default value: false
numberstringKontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.
namestring
chartOfAccountsstring
accountTypestring
defaultTaxstringSteuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.
taxAccountstringGegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.
expenseCategorystringBrücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.
costCenterRequiredbooleanOb auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.
isSystembooleanVom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.
isActivebooleanKonten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.
createdstring
updatedstring
searchStringstringtext to search for in the list
orderFieldNamestringname of the order field
orderFieldSortstringsorting modeAllowed: DESCASC
pageintegerpage of the list
pageSizeintegernumber of entries for each page
withMaxPageNumberstringreturns the number of pages available as a header if this is set

Responses

200Sachkontenarray<LedgerAccount>

Show fields (15)
  • display_namestring
  • idinteger

    Primary key of the ledger account. Internal ID.

  • numberstring

    Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

  • chart_of_accountsstring

    Chart of accounts the account belongs to, for example SKR03.

  • account_typestring

    Type of the account, for example asset or revenue.

  • default_taxTax

    Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    Show fields (6)
    • idinteger

      Primary key of the tax rate. Internal ID.

    • namestringrequired

      Name of the tax rate, for example 19 percent.

    • valuenumber (float)

      Tax rate in percent.

    • deletedboolean

      The tax rate is deleted.

    • global_defaultboolean

      Default tax rate for new items.

    • datev_tax_keyinteger

      DATEV Steuerschlüssel für Umsatzsteuer (Ausgangsrechnungen). Wird von BuchhaltungsButler und DATEV-Export genutzt. Standardwerte: 0 = Kein Steuerausweis (0%) 2 = Umsatzsteuer 7% (ermäßigt) 3 = Umsatzsteuer 19% (Regelsteuersatz) Für Vorsteuer (Eingangsrechnungen) gibt es eine spiegelbildliche Zuordnung: 0 = Keine Vorsteuer (0%) 5 = Vorsteuer 7% 8 = Vorsteuer 19%

  • tax_accountLedgerAccount

    Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

  • expense_categoryExpenseCategory10

    Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    Show fields (19)
    • idinteger

      Primary key of the expense category. Internal ID.

    • codestring

      Kurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")

    • eur_line_numberinteger

      Zeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)

    • eur_line_namestring

      Bezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")

    • category_typestring

      Typ der Kategorie (expense, income, neutral, asset, private)

    • default_taxTax

      Standard-Steuersatz für diese Kategorie

    • cost_centerCostCenter

      Kostenstelle der Kategorie - bei Vereinen die steuerliche Sphäre. Ein Beleg trägt keine eigene Sphäre; über seine Kategorie bekommt er eine. Die EÜR des wirtschaftlichen Geschäftsbetriebs liest sie (billing_euer_commercial_sphere_only), die automatische Buchung setzt sie auf die Buchungszeilen (billing_accounting_cost_center_from_category).

    • is_vat_deductibleboolean

      Ist Vorsteuerabzug möglich?

    • is_immediate_deductionboolean

      Ist die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)

    • depreciation_yearsinteger

      Abschreibungsdauer in Jahren (für Anlagevermögen)

    • sort_orderinteger

      Sortierreihenfolge

    • is_activeboolean

      Ist die Kategorie aktiv/sichtbar?

    • colorstring

      Farbe für UI-Darstellung (Hex-Code)

    • iconstring

      Icon-Name für UI-Darstellung

    • is_systemboolean

      Ist dies eine System-Kategorie? (nicht löschbar)

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • cost_center_requiredboolean

    Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

  • is_systemboolean

    Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

  • is_activeboolean

    Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/ledger_account \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
[
  {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "chart_of_accounts": "string",
    "account_type": "string",
    "default_tax": {
      "name": "Beispiel",
      "id": 42,
      "value": 1.5,
      "deleted": true,
      "global_default": true,
      "datev_tax_key": 1
    },
    "expense_category": {
      "id": 42,
      "eur_line_name": "Beispiel",
      "color": "#3f5efb",
      "name": "Beispiel",
      "code": "string",
      "eur_line_number": 1,
      "category_type": "string",
      "is_vat_deductible": true,
      "is_immediate_deduction": true,
      "depreciation_years": 1
    },
    "cost_center_required": true,
    "is_system": true
  }
]

Creates a new ledger account entry.

POST/api/invoice/ledger_account

Request body application/json

  • dataLedgerAccount
    Show fields (15)
    • display_namestring
    • idinteger

      Primary key of the ledger account. Internal ID.

    • numberstring

      Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

    • chart_of_accountsstring

      Chart of accounts the account belongs to, for example SKR03.

    • account_typestring

      Type of the account, for example asset or revenue.

    • default_taxTax

      Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    • tax_accountLedgerAccount

      Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

    • expense_categoryExpenseCategory10

      Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    • cost_center_requiredboolean

      Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

    • is_systemboolean

      Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

    • is_activeboolean

      Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Sachkonto anlegenLedgerAccount

Show fields (15)
  • display_namestring
  • idinteger

    Primary key of the ledger account. Internal ID.

  • numberstring

    Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

  • chart_of_accountsstring

    Chart of accounts the account belongs to, for example SKR03.

  • account_typestring

    Type of the account, for example asset or revenue.

  • default_taxTax

    Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    Show fields (6)
    • idinteger

      Primary key of the tax rate. Internal ID.

    • namestringrequired

      Name of the tax rate, for example 19 percent.

    • valuenumber (float)

      Tax rate in percent.

    • deletedboolean

      The tax rate is deleted.

    • global_defaultboolean

      Default tax rate for new items.

    • datev_tax_keyinteger

      DATEV Steuerschlüssel für Umsatzsteuer (Ausgangsrechnungen). Wird von BuchhaltungsButler und DATEV-Export genutzt. Standardwerte: 0 = Kein Steuerausweis (0%) 2 = Umsatzsteuer 7% (ermäßigt) 3 = Umsatzsteuer 19% (Regelsteuersatz) Für Vorsteuer (Eingangsrechnungen) gibt es eine spiegelbildliche Zuordnung: 0 = Keine Vorsteuer (0%) 5 = Vorsteuer 7% 8 = Vorsteuer 19%

  • tax_accountLedgerAccount

    Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

  • expense_categoryExpenseCategory10

    Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    Show fields (19)
    • idinteger

      Primary key of the expense category. Internal ID.

    • codestring

      Kurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")

    • eur_line_numberinteger

      Zeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)

    • eur_line_namestring

      Bezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")

    • category_typestring

      Typ der Kategorie (expense, income, neutral, asset, private)

    • default_taxTax

      Standard-Steuersatz für diese Kategorie

    • cost_centerCostCenter

      Kostenstelle der Kategorie - bei Vereinen die steuerliche Sphäre. Ein Beleg trägt keine eigene Sphäre; über seine Kategorie bekommt er eine. Die EÜR des wirtschaftlichen Geschäftsbetriebs liest sie (billing_euer_commercial_sphere_only), die automatische Buchung setzt sie auf die Buchungszeilen (billing_accounting_cost_center_from_category).

    • is_vat_deductibleboolean

      Ist Vorsteuerabzug möglich?

    • is_immediate_deductionboolean

      Ist die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)

    • depreciation_yearsinteger

      Abschreibungsdauer in Jahren (für Anlagevermögen)

    • sort_orderinteger

      Sortierreihenfolge

    • is_activeboolean

      Ist die Kategorie aktiv/sichtbar?

    • colorstring

      Farbe für UI-Darstellung (Hex-Code)

    • iconstring

      Icon-Name für UI-Darstellung

    • is_systemboolean

      Ist dies eine System-Kategorie? (nicht löschbar)

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • cost_center_requiredboolean

    Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

  • is_systemboolean

    Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

  • is_activeboolean

    Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/ledger_account \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "chart_of_accounts": "string",
    "account_type": "string"
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "chart_of_accounts": "string",
  "account_type": "string",
  "default_tax": {
    "name": "Beispiel",
    "id": 42,
    "value": 1.5,
    "deleted": true,
    "global_default": true,
    "datev_tax_key": 1
  },
  "expense_category": {
    "id": 42,
    "eur_line_name": "Beispiel",
    "color": "#3f5efb",
    "name": "Beispiel",
    "code": "string",
    "eur_line_number": 1,
    "category_type": "string",
    "default_tax": {
      "name": "Beispiel",
      "id": 42,
      "value": 1.5,
      "deleted": true,
      "global_default": true,
      "datev_tax_key": 1
    },
    "cost_center": {
      "display_name": "Beispiel",
      "id": 42,
      "name": "Beispiel",
      "number": "string",
      "sphere": "string",
      "is_system": true,
      "is_active": true,
      "deleted": true,
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    },
    "is_vat_deductible": true
  },
  "cost_center_required": true,
  "is_system": true
}

Returns a single ledger account entry.

GET/api/invoice/ledger_account/{identifier}

Path parameters

identifierrequiredstring

Responses

200SachkontoLedgerAccount

Show fields (15)
  • display_namestring
  • idinteger

    Primary key of the ledger account. Internal ID.

  • numberstring

    Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

  • chart_of_accountsstring

    Chart of accounts the account belongs to, for example SKR03.

  • account_typestring

    Type of the account, for example asset or revenue.

  • default_taxTax

    Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    Show fields (6)
    • idinteger

      Primary key of the tax rate. Internal ID.

    • namestringrequired

      Name of the tax rate, for example 19 percent.

    • valuenumber (float)

      Tax rate in percent.

    • deletedboolean

      The tax rate is deleted.

    • global_defaultboolean

      Default tax rate for new items.

    • datev_tax_keyinteger

      DATEV Steuerschlüssel für Umsatzsteuer (Ausgangsrechnungen). Wird von BuchhaltungsButler und DATEV-Export genutzt. Standardwerte: 0 = Kein Steuerausweis (0%) 2 = Umsatzsteuer 7% (ermäßigt) 3 = Umsatzsteuer 19% (Regelsteuersatz) Für Vorsteuer (Eingangsrechnungen) gibt es eine spiegelbildliche Zuordnung: 0 = Keine Vorsteuer (0%) 5 = Vorsteuer 7% 8 = Vorsteuer 19%

  • tax_accountLedgerAccount

    Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

  • expense_categoryExpenseCategory10

    Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    Show fields (19)
    • idinteger

      Primary key of the expense category. Internal ID.

    • codestring

      Kurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")

    • eur_line_numberinteger

      Zeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)

    • eur_line_namestring

      Bezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")

    • category_typestring

      Typ der Kategorie (expense, income, neutral, asset, private)

    • default_taxTax

      Standard-Steuersatz für diese Kategorie

    • cost_centerCostCenter

      Kostenstelle der Kategorie - bei Vereinen die steuerliche Sphäre. Ein Beleg trägt keine eigene Sphäre; über seine Kategorie bekommt er eine. Die EÜR des wirtschaftlichen Geschäftsbetriebs liest sie (billing_euer_commercial_sphere_only), die automatische Buchung setzt sie auf die Buchungszeilen (billing_accounting_cost_center_from_category).

    • is_vat_deductibleboolean

      Ist Vorsteuerabzug möglich?

    • is_immediate_deductionboolean

      Ist die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)

    • depreciation_yearsinteger

      Abschreibungsdauer in Jahren (für Anlagevermögen)

    • sort_orderinteger

      Sortierreihenfolge

    • is_activeboolean

      Ist die Kategorie aktiv/sichtbar?

    • colorstring

      Farbe für UI-Darstellung (Hex-Code)

    • iconstring

      Icon-Name für UI-Darstellung

    • is_systemboolean

      Ist dies eine System-Kategorie? (nicht löschbar)

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • cost_center_requiredboolean

    Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

  • is_systemboolean

    Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

  • is_activeboolean

    Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/ledger_account/42 \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "chart_of_accounts": "string",
  "account_type": "string",
  "default_tax": {
    "name": "Beispiel",
    "id": 42,
    "value": 1.5,
    "deleted": true,
    "global_default": true,
    "datev_tax_key": 1
  },
  "expense_category": {
    "id": 42,
    "eur_line_name": "Beispiel",
    "color": "#3f5efb",
    "name": "Beispiel",
    "code": "string",
    "eur_line_number": 1,
    "category_type": "string",
    "default_tax": {
      "name": "Beispiel",
      "id": 42,
      "value": 1.5,
      "deleted": true,
      "global_default": true,
      "datev_tax_key": 1
    },
    "cost_center": {
      "display_name": "Beispiel",
      "id": 42,
      "name": "Beispiel",
      "number": "string",
      "sphere": "string",
      "is_system": true,
      "is_active": true,
      "deleted": true,
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    },
    "is_vat_deductible": true
  },
  "cost_center_required": true,
  "is_system": true
}

Updates an existing ledger account entry.

PUT/api/invoice/ledger_account/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataLedgerAccount
    Show fields (15)
    • display_namestring
    • idinteger

      Primary key of the ledger account. Internal ID.

    • numberstring

      Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

    • chart_of_accountsstring

      Chart of accounts the account belongs to, for example SKR03.

    • account_typestring

      Type of the account, for example asset or revenue.

    • default_taxTax

      Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    • tax_accountLedgerAccount

      Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

    • expense_categoryExpenseCategory10

      Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    • cost_center_requiredboolean

      Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

    • is_systemboolean

      Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

    • is_activeboolean

      Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Sachkonto ändernLedgerAccount

Show fields (15)
  • display_namestring
  • idinteger

    Primary key of the ledger account. Internal ID.

  • numberstring

    Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

  • chart_of_accountsstring

    Chart of accounts the account belongs to, for example SKR03.

  • account_typestring

    Type of the account, for example asset or revenue.

  • default_taxTax

    Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    Show fields (6)
    • idinteger

      Primary key of the tax rate. Internal ID.

    • namestringrequired

      Name of the tax rate, for example 19 percent.

    • valuenumber (float)

      Tax rate in percent.

    • deletedboolean

      The tax rate is deleted.

    • global_defaultboolean

      Default tax rate for new items.

    • datev_tax_keyinteger

      DATEV Steuerschlüssel für Umsatzsteuer (Ausgangsrechnungen). Wird von BuchhaltungsButler und DATEV-Export genutzt. Standardwerte: 0 = Kein Steuerausweis (0%) 2 = Umsatzsteuer 7% (ermäßigt) 3 = Umsatzsteuer 19% (Regelsteuersatz) Für Vorsteuer (Eingangsrechnungen) gibt es eine spiegelbildliche Zuordnung: 0 = Keine Vorsteuer (0%) 5 = Vorsteuer 7% 8 = Vorsteuer 19%

  • tax_accountLedgerAccount

    Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

  • expense_categoryExpenseCategory10

    Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    Show fields (19)
    • idinteger

      Primary key of the expense category. Internal ID.

    • codestring

      Kurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")

    • eur_line_numberinteger

      Zeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)

    • eur_line_namestring

      Bezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")

    • category_typestring

      Typ der Kategorie (expense, income, neutral, asset, private)

    • default_taxTax

      Standard-Steuersatz für diese Kategorie

    • cost_centerCostCenter

      Kostenstelle der Kategorie - bei Vereinen die steuerliche Sphäre. Ein Beleg trägt keine eigene Sphäre; über seine Kategorie bekommt er eine. Die EÜR des wirtschaftlichen Geschäftsbetriebs liest sie (billing_euer_commercial_sphere_only), die automatische Buchung setzt sie auf die Buchungszeilen (billing_accounting_cost_center_from_category).

    • is_vat_deductibleboolean

      Ist Vorsteuerabzug möglich?

    • is_immediate_deductionboolean

      Ist die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)

    • depreciation_yearsinteger

      Abschreibungsdauer in Jahren (für Anlagevermögen)

    • sort_orderinteger

      Sortierreihenfolge

    • is_activeboolean

      Ist die Kategorie aktiv/sichtbar?

    • colorstring

      Farbe für UI-Darstellung (Hex-Code)

    • iconstring

      Icon-Name für UI-Darstellung

    • is_systemboolean

      Ist dies eine System-Kategorie? (nicht löschbar)

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • cost_center_requiredboolean

    Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

  • is_systemboolean

    Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

  • is_activeboolean

    Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PUT \
  --url https://your-instance.iw-erp.de/api/invoice/ledger_account/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "chart_of_accounts": "string",
    "account_type": "string"
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "chart_of_accounts": "string",
  "account_type": "string",
  "default_tax": {
    "name": "Beispiel",
    "id": 42,
    "value": 1.5,
    "deleted": true,
    "global_default": true,
    "datev_tax_key": 1
  },
  "expense_category": {
    "id": 42,
    "eur_line_name": "Beispiel",
    "color": "#3f5efb",
    "name": "Beispiel",
    "code": "string",
    "eur_line_number": 1,
    "category_type": "string",
    "default_tax": {
      "name": "Beispiel",
      "id": 42,
      "value": 1.5,
      "deleted": true,
      "global_default": true,
      "datev_tax_key": 1
    },
    "cost_center": {
      "display_name": "Beispiel",
      "id": 42,
      "name": "Beispiel",
      "number": "string",
      "sphere": "string",
      "is_system": true,
      "is_active": true,
      "deleted": true,
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    },
    "is_vat_deductible": true
  },
  "cost_center_required": true,
  "is_system": true
}

Updates an existing ledger account entry.

PATCH/api/invoice/ledger_account/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataLedgerAccount
    Show fields (15)
    • display_namestring
    • idinteger

      Primary key of the ledger account. Internal ID.

    • numberstring

      Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

    • chart_of_accountsstring

      Chart of accounts the account belongs to, for example SKR03.

    • account_typestring

      Type of the account, for example asset or revenue.

    • default_taxTax

      Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    • tax_accountLedgerAccount

      Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

    • expense_categoryExpenseCategory10

      Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    • cost_center_requiredboolean

      Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

    • is_systemboolean

      Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

    • is_activeboolean

      Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Sachkonto ändernLedgerAccount

Show fields (15)
  • display_namestring
  • idinteger

    Primary key of the ledger account. Internal ID.

  • numberstring

    Kontonummer im Kontenrahmen, z.B. "1200" (SKR03 Bank) oder "40000" (SKR42). Als String geführt, weil SKR42 fünfstellig ist und führende Nullen bedeutungstragend sein können.

  • chart_of_accountsstring

    Chart of accounts the account belongs to, for example SKR03.

  • account_typestring

    Type of the account, for example asset or revenue.

  • default_taxTax

    Steuersatz, der beim Buchen auf dieses Konto vorgeschlagen wird. Bei Erlös- und Aufwandskonten ist der Satz durch die Kontonummer vorgegeben (etwa "Erlöse 19% USt"), deshalb hängt er am Konto und nicht an der einzelnen Buchung.

    Show fields (6)
    • idinteger

      Primary key of the tax rate. Internal ID.

    • namestringrequired

      Name of the tax rate, for example 19 percent.

    • valuenumber (float)

      Tax rate in percent.

    • deletedboolean

      The tax rate is deleted.

    • global_defaultboolean

      Default tax rate for new items.

    • datev_tax_keyinteger

      DATEV Steuerschlüssel für Umsatzsteuer (Ausgangsrechnungen). Wird von BuchhaltungsButler und DATEV-Export genutzt. Standardwerte: 0 = Kein Steuerausweis (0%) 2 = Umsatzsteuer 7% (ermäßigt) 3 = Umsatzsteuer 19% (Regelsteuersatz) Für Vorsteuer (Eingangsrechnungen) gibt es eine spiegelbildliche Zuordnung: 0 = Keine Vorsteuer (0%) 5 = Vorsteuer 7% 8 = Vorsteuer 19%

  • tax_accountLedgerAccount

    Gegenkonto für die Steuer, die beim Buchen auf dieses Konto entsteht. Bei Erlöskonten das Umsatzsteuerkonto, bei Aufwandskonten das Vorsteuerkonto. Damit lässt sich aus einem Bruttobetrag automatisch der dreizeilige Buchungssatz erzeugen.

  • expense_categoryExpenseCategory10

    Brücke zur EÜR: auf welcher Zeile der Anlage EÜR dieses Konto zählt. Erlaubt es, beide Gewinnermittlungsarten aus denselben Belegen zu bedienen - etwa im Wechseljahr oder wenn ein Verein den wirtschaftlichen Geschäftsbetrieb per EÜR und den Rest bilanziell führt.

    Show fields (19)
    • idinteger

      Primary key of the expense category. Internal ID.

    • codestring

      Kurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")

    • eur_line_numberinteger

      Zeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)

    • eur_line_namestring

      Bezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")

    • category_typestring

      Typ der Kategorie (expense, income, neutral, asset, private)

    • default_taxTax

      Standard-Steuersatz für diese Kategorie

    • cost_centerCostCenter

      Kostenstelle der Kategorie - bei Vereinen die steuerliche Sphäre. Ein Beleg trägt keine eigene Sphäre; über seine Kategorie bekommt er eine. Die EÜR des wirtschaftlichen Geschäftsbetriebs liest sie (billing_euer_commercial_sphere_only), die automatische Buchung setzt sie auf die Buchungszeilen (billing_accounting_cost_center_from_category).

    • is_vat_deductibleboolean

      Ist Vorsteuerabzug möglich?

    • is_immediate_deductionboolean

      Ist die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)

    • depreciation_yearsinteger

      Abschreibungsdauer in Jahren (für Anlagevermögen)

    • sort_orderinteger

      Sortierreihenfolge

    • is_activeboolean

      Ist die Kategorie aktiv/sichtbar?

    • colorstring

      Farbe für UI-Darstellung (Hex-Code)

    • iconstring

      Icon-Name für UI-Darstellung

    • is_systemboolean

      Ist dies eine System-Kategorie? (nicht löschbar)

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • cost_center_requiredboolean

    Ob auf diesem Konto eine Kostenstelle angegeben werden muss. Der SKR42 bildet die vier steuerlichen Sphären eines gemeinnützigen Vereins über Kostenstellen ab, nicht über getrennte Konten. Für die Erfolgskonten ist die Angabe dort deshalb Pflicht.

  • is_systemboolean

    Vom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.

  • is_activeboolean

    Konten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PATCH \
  --url https://your-instance.iw-erp.de/api/invoice/ledger_account/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "chart_of_accounts": "string",
    "account_type": "string"
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "chart_of_accounts": "string",
  "account_type": "string",
  "default_tax": {
    "name": "Beispiel",
    "id": 42,
    "value": 1.5,
    "deleted": true,
    "global_default": true,
    "datev_tax_key": 1
  },
  "expense_category": {
    "id": 42,
    "eur_line_name": "Beispiel",
    "color": "#3f5efb",
    "name": "Beispiel",
    "code": "string",
    "eur_line_number": 1,
    "category_type": "string",
    "default_tax": {
      "name": "Beispiel",
      "id": 42,
      "value": 1.5,
      "deleted": true,
      "global_default": true,
      "datev_tax_key": 1
    },
    "cost_center": {
      "display_name": "Beispiel",
      "id": 42,
      "name": "Beispiel",
      "number": "string",
      "sphere": "string",
      "is_system": true,
      "is_active": true,
      "deleted": true,
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    },
    "is_vat_deductible": true
  },
  "cost_center_required": true,
  "is_system": true
}

Returns a list of cost center entries.

GET/api/invoice/cost_center

Query parameters

idstring
deletedbooleanThis property is used to mark an entity as deleted / archived | Default value: false
numberstring
namestring
spherestringSteuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.
isSystemboolean
isActiveboolean
createdstring
updatedstring
searchStringstringtext to search for in the list
orderFieldNamestringname of the order field
orderFieldSortstringsorting modeAllowed: DESCASC
pageintegerpage of the list
pageSizeintegernumber of entries for each page
withMaxPageNumberstringreturns the number of pages available as a header if this is set

Responses

200Kostenstellenarray<CostCenter>

Show fields (10)
  • display_namestring
  • idinteger

    Primary key of the cost center. Internal ID.

  • numberstring

    Number of the cost center.

  • spherestring

    Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

  • is_systemboolean

    The cost center is created by the system and cannot be deleted.

  • is_activeboolean

    The cost center is active.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/cost_center \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
[
  {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "sphere": "string",
    "is_system": true,
    "is_active": true,
    "deleted": true,
    "created": "2026-10-15T09:30:00+02:00",
    "updated": "2026-10-15T09:30:00+02:00"
  }
]

Creates a new cost center entry.

POST/api/invoice/cost_center

Request body application/json

  • dataCostCenter
    Show fields (10)
    • display_namestring
    • idinteger

      Primary key of the cost center. Internal ID.

    • numberstring

      Number of the cost center.

    • spherestring

      Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

    • is_systemboolean

      The cost center is created by the system and cannot be deleted.

    • is_activeboolean

      The cost center is active.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Kostenstelle anlegenCostCenter

Show fields (10)
  • display_namestring
  • idinteger

    Primary key of the cost center. Internal ID.

  • numberstring

    Number of the cost center.

  • spherestring

    Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

  • is_systemboolean

    The cost center is created by the system and cannot be deleted.

  • is_activeboolean

    The cost center is active.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/cost_center \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "sphere": "string",
    "is_system": true
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "sphere": "string",
  "is_system": true,
  "is_active": true,
  "deleted": true,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00"
}

Returns a single cost center entry.

GET/api/invoice/cost_center/{identifier}

Path parameters

identifierrequiredstring

Responses

200KostenstelleCostCenter

Show fields (10)
  • display_namestring
  • idinteger

    Primary key of the cost center. Internal ID.

  • numberstring

    Number of the cost center.

  • spherestring

    Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

  • is_systemboolean

    The cost center is created by the system and cannot be deleted.

  • is_activeboolean

    The cost center is active.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/cost_center/42 \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "sphere": "string",
  "is_system": true,
  "is_active": true,
  "deleted": true,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00"
}

Updates an existing cost center entry.

PUT/api/invoice/cost_center/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataCostCenter
    Show fields (10)
    • display_namestring
    • idinteger

      Primary key of the cost center. Internal ID.

    • numberstring

      Number of the cost center.

    • spherestring

      Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

    • is_systemboolean

      The cost center is created by the system and cannot be deleted.

    • is_activeboolean

      The cost center is active.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Kostenstelle ändernCostCenter

Show fields (10)
  • display_namestring
  • idinteger

    Primary key of the cost center. Internal ID.

  • numberstring

    Number of the cost center.

  • spherestring

    Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

  • is_systemboolean

    The cost center is created by the system and cannot be deleted.

  • is_activeboolean

    The cost center is active.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PUT \
  --url https://your-instance.iw-erp.de/api/invoice/cost_center/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "sphere": "string",
    "is_system": true
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "sphere": "string",
  "is_system": true,
  "is_active": true,
  "deleted": true,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00"
}

Updates an existing cost center entry.

PATCH/api/invoice/cost_center/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataCostCenter
    Show fields (10)
    • display_namestring
    • idinteger

      Primary key of the cost center. Internal ID.

    • numberstring

      Number of the cost center.

    • spherestring

      Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

    • is_systemboolean

      The cost center is created by the system and cannot be deleted.

    • is_activeboolean

      The cost center is active.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Kostenstelle ändernCostCenter

Show fields (10)
  • display_namestring
  • idinteger

    Primary key of the cost center. Internal ID.

  • numberstring

    Number of the cost center.

  • spherestring

    Steuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.

  • is_systemboolean

    The cost center is created by the system and cannot be deleted.

  • is_activeboolean

    The cost center is active.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PATCH \
  --url https://your-instance.iw-erp.de/api/invoice/cost_center/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "display_name": "Beispiel",
    "id": 42,
    "name": "Beispiel",
    "number": "string",
    "sphere": "string",
    "is_system": true
  }
}
'
Response 200 application/json
{
  "display_name": "Beispiel",
  "id": 42,
  "name": "Beispiel",
  "number": "string",
  "sphere": "string",
  "is_system": true,
  "is_active": true,
  "deleted": true,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00"
}

Returns a list of fiscal year entries.

GET/api/invoice/fiscal_year

Query parameters

idstring
deletedbooleanThis property is used to mark an entity as deleted / archived | Default value: false
namestring
startDatestring
endDatestring
statusstring
openingBalanceEnteredbooleanOb die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.
closingEntrystringDie Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.
closedAtstring
closedBystring
createdstring
updatedstring
searchStringstringtext to search for in the list
orderFieldNamestringname of the order field
orderFieldSortstringsorting modeAllowed: DESCASC
pageintegerpage of the list
pageSizeintegernumber of entries for each page
withMaxPageNumberstringreturns the number of pages available as a header if this is set

Responses

200Geschaeftsjahrearray<FiscalYear>

Show fields (12)
  • idinteger

    Primary key of the fiscal year. Internal ID.

  • start_datestring (date-time)

    Start date of the fiscal year.

  • end_datestring (date-time)

    End date of the fiscal year.

  • statusstring

    Status of the fiscal year, for example open or closed.

  • opening_balance_enteredboolean

    Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

  • closed_atstring (date-time)

    Time the fiscal year was closed.

  • closed_byUser14

    Login user who closed the fiscal year.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • closing_entryJournalEntry

    Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    Show fields (21)
    • debit_totalnumber (float)

      Summe der Sollbeträge.

    • credit_totalnumber (float)

      Summe der Habenbeträge.

    • is_balancedboolean

      Soll gleich Haben - die Grundregel der doppelten Buchführung.

    • idinteger

      Primary key of the journal entry. Internal ID.

    • entry_numberstring

      Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

    • entry_datestring (date-time)

      Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

    • document_datestring (date-time)

      Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

    • document_numberstring

      Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

    • fiscal_yearFiscalYear

      Fiscal year the entry belongs to.

    • periodinteger

      Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

    • statusstring

      Status of the entry, for example draft or posted.

    • source_typestring

      Source of the entry, for example invoice or payment.

    • source_idinteger

      Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

    • reversal_ofJournalEntry

      Die Buchung, die durch diese hier storniert wird.

    • posted_atstring (date-time)

      Time the entry was posted.

    • posted_byUser14

      Login user who posted the entry.

    • linesarray<JournalEntryLine>

      Lines of the entry.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
[
  {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true,
    "closed_at": "2026-10-15T09:30:00+02:00",
    "closed_by": {
      "id": 42,
      "name": "Beispiel",
      "username": "lena.hartmann@example.org",
      "email": "lena.hartmann@example.org",
      "profile_picture_url": "https://vynst.de",
      "positioningeneral": "string",
      "archived": true,
      "require2fa": true,
      "search_string": "string"
    },
    "closing_entry": {
      "id": 42,
      "name": "Beispiel",
      "debit_total": 1.5,
      "credit_total": 1.5,
      "is_balanced": true,
      "entry_number": "string",
      "entry_date": "2026-10-15T09:30:00+02:00",
      "document_date": "2026-10-15T09:30:00+02:00",
      "document_number": "string",
      "period": 1
    },
    "deleted": true
  }
]

Creates a new fiscal year entry.

POST/api/invoice/fiscal_year

Request body application/json

  • dataFiscalYear
    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Geschaeftsjahr anlegenFiscalYear

Show fields (12)
  • idinteger

    Primary key of the fiscal year. Internal ID.

  • start_datestring (date-time)

    Start date of the fiscal year.

  • end_datestring (date-time)

    End date of the fiscal year.

  • statusstring

    Status of the fiscal year, for example open or closed.

  • opening_balance_enteredboolean

    Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

  • closed_atstring (date-time)

    Time the fiscal year was closed.

  • closed_byUser14

    Login user who closed the fiscal year.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • closing_entryJournalEntry

    Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    Show fields (21)
    • debit_totalnumber (float)

      Summe der Sollbeträge.

    • credit_totalnumber (float)

      Summe der Habenbeträge.

    • is_balancedboolean

      Soll gleich Haben - die Grundregel der doppelten Buchführung.

    • idinteger

      Primary key of the journal entry. Internal ID.

    • entry_numberstring

      Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

    • entry_datestring (date-time)

      Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

    • document_datestring (date-time)

      Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

    • document_numberstring

      Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

    • fiscal_yearFiscalYear

      Fiscal year the entry belongs to.

    • periodinteger

      Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

    • statusstring

      Status of the entry, for example draft or posted.

    • source_typestring

      Source of the entry, for example invoice or payment.

    • source_idinteger

      Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

    • reversal_ofJournalEntry

      Die Buchung, die durch diese hier storniert wird.

    • posted_atstring (date-time)

      Time the entry was posted.

    • posted_byUser14

      Login user who posted the entry.

    • linesarray<JournalEntryLine>

      Lines of the entry.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true
  }
}
'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "start_date": "2026-10-15T09:30:00+02:00",
  "end_date": "2026-10-15T09:30:00+02:00",
  "status": "string",
  "opening_balance_entered": true,
  "closed_at": "2026-10-15T09:30:00+02:00",
  "closed_by": {
    "id": 42,
    "name": "Beispiel",
    "username": "lena.hartmann@example.org",
    "email": "lena.hartmann@example.org",
    "profile_picture_url": "https://vynst.de",
    "positioningeneral": "string",
    "crm_person": {
      "id": 42,
      "first_name": "Lena",
      "last_name": "Hartmann",
      "title": "Beispiel",
      "language": "de",
      "support_description": "Text",
      "profile_picture_url": "https://vynst.de",
      "address_street": "Jakobistr. 39",
      "address_city": "Hannover",
      "address_zip": "30163"
    },
    "archived": true,
    "require2fa": true,
    "search_string": "string"
  },
  "closing_entry": {
    "id": 42,
    "name": "Beispiel",
    "debit_total": 1.5,
    "credit_total": 1.5,
    "is_balanced": true,
    "entry_number": "string",
    "entry_date": "2026-10-15T09:30:00+02:00",
    "document_date": "2026-10-15T09:30:00+02:00",
    "document_number": "string",
    "period": 1
  },
  "deleted": true
}

Returns a single fiscal year entry.

GET/api/invoice/fiscal_year/{identifier}

Path parameters

identifierrequiredstring

Responses

200GeschaeftsjahrFiscalYear

Show fields (12)
  • idinteger

    Primary key of the fiscal year. Internal ID.

  • start_datestring (date-time)

    Start date of the fiscal year.

  • end_datestring (date-time)

    End date of the fiscal year.

  • statusstring

    Status of the fiscal year, for example open or closed.

  • opening_balance_enteredboolean

    Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

  • closed_atstring (date-time)

    Time the fiscal year was closed.

  • closed_byUser14

    Login user who closed the fiscal year.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • closing_entryJournalEntry

    Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    Show fields (21)
    • debit_totalnumber (float)

      Summe der Sollbeträge.

    • credit_totalnumber (float)

      Summe der Habenbeträge.

    • is_balancedboolean

      Soll gleich Haben - die Grundregel der doppelten Buchführung.

    • idinteger

      Primary key of the journal entry. Internal ID.

    • entry_numberstring

      Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

    • entry_datestring (date-time)

      Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

    • document_datestring (date-time)

      Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

    • document_numberstring

      Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

    • fiscal_yearFiscalYear

      Fiscal year the entry belongs to.

    • periodinteger

      Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

    • statusstring

      Status of the entry, for example draft or posted.

    • source_typestring

      Source of the entry, for example invoice or payment.

    • source_idinteger

      Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

    • reversal_ofJournalEntry

      Die Buchung, die durch diese hier storniert wird.

    • posted_atstring (date-time)

      Time the entry was posted.

    • posted_byUser14

      Login user who posted the entry.

    • linesarray<JournalEntryLine>

      Lines of the entry.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42 \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "start_date": "2026-10-15T09:30:00+02:00",
  "end_date": "2026-10-15T09:30:00+02:00",
  "status": "string",
  "opening_balance_entered": true,
  "closed_at": "2026-10-15T09:30:00+02:00",
  "closed_by": {
    "id": 42,
    "name": "Beispiel",
    "username": "lena.hartmann@example.org",
    "email": "lena.hartmann@example.org",
    "profile_picture_url": "https://vynst.de",
    "positioningeneral": "string",
    "crm_person": {
      "id": 42,
      "first_name": "Lena",
      "last_name": "Hartmann",
      "title": "Beispiel",
      "language": "de",
      "support_description": "Text",
      "profile_picture_url": "https://vynst.de",
      "address_street": "Jakobistr. 39",
      "address_city": "Hannover",
      "address_zip": "30163"
    },
    "archived": true,
    "require2fa": true,
    "search_string": "string"
  },
  "closing_entry": {
    "id": 42,
    "name": "Beispiel",
    "debit_total": 1.5,
    "credit_total": 1.5,
    "is_balanced": true,
    "entry_number": "string",
    "entry_date": "2026-10-15T09:30:00+02:00",
    "document_date": "2026-10-15T09:30:00+02:00",
    "document_number": "string",
    "period": 1
  },
  "deleted": true
}

Updates an existing fiscal year entry.

PUT/api/invoice/fiscal_year/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataFiscalYear
    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Geschaeftsjahr ändernFiscalYear

Show fields (12)
  • idinteger

    Primary key of the fiscal year. Internal ID.

  • start_datestring (date-time)

    Start date of the fiscal year.

  • end_datestring (date-time)

    End date of the fiscal year.

  • statusstring

    Status of the fiscal year, for example open or closed.

  • opening_balance_enteredboolean

    Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

  • closed_atstring (date-time)

    Time the fiscal year was closed.

  • closed_byUser14

    Login user who closed the fiscal year.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • closing_entryJournalEntry

    Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    Show fields (21)
    • debit_totalnumber (float)

      Summe der Sollbeträge.

    • credit_totalnumber (float)

      Summe der Habenbeträge.

    • is_balancedboolean

      Soll gleich Haben - die Grundregel der doppelten Buchführung.

    • idinteger

      Primary key of the journal entry. Internal ID.

    • entry_numberstring

      Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

    • entry_datestring (date-time)

      Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

    • document_datestring (date-time)

      Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

    • document_numberstring

      Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

    • fiscal_yearFiscalYear

      Fiscal year the entry belongs to.

    • periodinteger

      Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

    • statusstring

      Status of the entry, for example draft or posted.

    • source_typestring

      Source of the entry, for example invoice or payment.

    • source_idinteger

      Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

    • reversal_ofJournalEntry

      Die Buchung, die durch diese hier storniert wird.

    • posted_atstring (date-time)

      Time the entry was posted.

    • posted_byUser14

      Login user who posted the entry.

    • linesarray<JournalEntryLine>

      Lines of the entry.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PUT \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true
  }
}
'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "start_date": "2026-10-15T09:30:00+02:00",
  "end_date": "2026-10-15T09:30:00+02:00",
  "status": "string",
  "opening_balance_entered": true,
  "closed_at": "2026-10-15T09:30:00+02:00",
  "closed_by": {
    "id": 42,
    "name": "Beispiel",
    "username": "lena.hartmann@example.org",
    "email": "lena.hartmann@example.org",
    "profile_picture_url": "https://vynst.de",
    "positioningeneral": "string",
    "crm_person": {
      "id": 42,
      "first_name": "Lena",
      "last_name": "Hartmann",
      "title": "Beispiel",
      "language": "de",
      "support_description": "Text",
      "profile_picture_url": "https://vynst.de",
      "address_street": "Jakobistr. 39",
      "address_city": "Hannover",
      "address_zip": "30163"
    },
    "archived": true,
    "require2fa": true,
    "search_string": "string"
  },
  "closing_entry": {
    "id": 42,
    "name": "Beispiel",
    "debit_total": 1.5,
    "credit_total": 1.5,
    "is_balanced": true,
    "entry_number": "string",
    "entry_date": "2026-10-15T09:30:00+02:00",
    "document_date": "2026-10-15T09:30:00+02:00",
    "document_number": "string",
    "period": 1
  },
  "deleted": true
}

Updates an existing fiscal year entry.

PATCH/api/invoice/fiscal_year/{identifier}

Path parameters

identifierrequiredstring

Request body application/json

  • dataFiscalYear
    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

Responses

200Geschaeftsjahr ändernFiscalYear

Show fields (12)
  • idinteger

    Primary key of the fiscal year. Internal ID.

  • start_datestring (date-time)

    Start date of the fiscal year.

  • end_datestring (date-time)

    End date of the fiscal year.

  • statusstring

    Status of the fiscal year, for example open or closed.

  • opening_balance_enteredboolean

    Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

  • closed_atstring (date-time)

    Time the fiscal year was closed.

  • closed_byUser14

    Login user who closed the fiscal year.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • closing_entryJournalEntry

    Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    Show fields (21)
    • debit_totalnumber (float)

      Summe der Sollbeträge.

    • credit_totalnumber (float)

      Summe der Habenbeträge.

    • is_balancedboolean

      Soll gleich Haben - die Grundregel der doppelten Buchführung.

    • idinteger

      Primary key of the journal entry. Internal ID.

    • entry_numberstring

      Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

    • entry_datestring (date-time)

      Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

    • document_datestring (date-time)

      Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

    • document_numberstring

      Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

    • fiscal_yearFiscalYear

      Fiscal year the entry belongs to.

    • periodinteger

      Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

    • statusstring

      Status of the entry, for example draft or posted.

    • source_typestring

      Source of the entry, for example invoice or payment.

    • source_idinteger

      Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

    • reversal_ofJournalEntry

      Die Buchung, die durch diese hier storniert wird.

    • posted_atstring (date-time)

      Time the entry was posted.

    • posted_byUser14

      Login user who posted the entry.

    • linesarray<JournalEntryLine>

      Lines of the entry.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request PATCH \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42 \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "data": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true
  }
}
'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "start_date": "2026-10-15T09:30:00+02:00",
  "end_date": "2026-10-15T09:30:00+02:00",
  "status": "string",
  "opening_balance_entered": true,
  "closed_at": "2026-10-15T09:30:00+02:00",
  "closed_by": {
    "id": 42,
    "name": "Beispiel",
    "username": "lena.hartmann@example.org",
    "email": "lena.hartmann@example.org",
    "profile_picture_url": "https://vynst.de",
    "positioningeneral": "string",
    "crm_person": {
      "id": 42,
      "first_name": "Lena",
      "last_name": "Hartmann",
      "title": "Beispiel",
      "language": "de",
      "support_description": "Text",
      "profile_picture_url": "https://vynst.de",
      "address_street": "Jakobistr. 39",
      "address_city": "Hannover",
      "address_zip": "30163"
    },
    "archived": true,
    "require2fa": true,
    "search_string": "string"
  },
  "closing_entry": {
    "id": 42,
    "name": "Beispiel",
    "debit_total": 1.5,
    "credit_total": 1.5,
    "is_balanced": true,
    "entry_number": "string",
    "entry_date": "2026-10-15T09:30:00+02:00",
    "document_date": "2026-10-15T09:30:00+02:00",
    "document_number": "string",
    "period": 1
  },
  "deleted": true
}

Was einem Abschluss noch im Weg steht.

GET/api/invoice/fiscal_year/{identifier}/closing_blockers

Wird vor dem Abschluss angezeigt, damit niemand gegen eine Ausnahme laeuft.

Path parameters

identifierrequiredstring

Responses

200Offene Punkte vor dem Abschluss

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42/closing_blockers \
  --header 'x-iw-jwt-token: <TOKEN>'

Geschaeftsjahr abschliessen.

POST/api/invoice/fiscal_year/{identifier}/close

Schliesst die Erfolgskonten ueber das Ergebnis auf das Eigenkapital ab. Vorlaeufig laesst sich das Jahr noch einmal oeffnen, endgueltig nicht.

Path parameters

identifierrequiredstring

Request body application/json

  • chartstring
  • provisionalboolean

Responses

200Die erzeugte Abschlussbuchung

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42/close \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "chart": "SKR04",
  "provisional": true
}
'

Ein vorlaeufig abgeschlossenes Jahr wieder oeffnen.

POST/api/invoice/fiscal_year/{identifier}/reopen

Path parameters

identifierrequiredstring

Responses

200Das wieder geoeffnete Geschaeftsjahr

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42/reopen \
  --header 'x-iw-jwt-token: <TOKEN>'

Saldenvortrag ins Folgejahr.

POST/api/invoice/fiscal_year/{identifier}/carry_forward

Uebertraegt die Bestaende der Bilanzkonten - ohne diesen Schritt begaenne das neue Jahr mit leeren Konten.

Path parameters

identifierrequiredstring

Request body application/json

  • target_fiscal_yearstring
  • chartstring

Responses

200Die erzeugte Eroeffnungsbuchung

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/fiscal_year/42/carry_forward \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "target_fiscal_year": "2027",
  "chart": "SKR04"
}
'

Journal - alle Buchungssätze.

GET/api/invoice/journal_entry

Query parameters

idstring
deletedbooleanThis property is used to mark an entity as deleted / archived | Default value: false
entryNumberstringFortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.
entryDatestringBuchungsdatum - bestimmt, in welche Periode die Buchung fällt.
documentDatestringBelegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.
documentNumberstringBelegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").
fiscalYearstring
periodstringBuchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.
statusstring
sourceTypestring
sourceIdstringId des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.
reversalOfstringDie Buchung, die durch diese hier storniert wird.
postedAtstring
postedBystring
createdstring
updatedstring
searchStringstringtext to search for in the list
orderFieldNamestringname of the order field
orderFieldSortstringsorting modeAllowed: DESCASC
pageintegerpage of the list
pageSizeintegernumber of entries for each page
withMaxPageNumberstringreturns the number of pages available as a header if this is set

Responses

200Buchungssätzearray<JournalEntry>

Show fields (21)
  • debit_totalnumber (float)

    Summe der Sollbeträge.

  • credit_totalnumber (float)

    Summe der Habenbeträge.

  • is_balancedboolean

    Soll gleich Haben - die Grundregel der doppelten Buchführung.

  • idinteger

    Primary key of the journal entry. Internal ID.

  • entry_numberstring

    Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

  • entry_datestring (date-time)

    Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

  • document_datestring (date-time)

    Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

  • document_numberstring

    Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

  • fiscal_yearFiscalYear

    Fiscal year the entry belongs to.

    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • periodinteger

    Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

  • statusstring

    Status of the entry, for example draft or posted.

  • source_typestring

    Source of the entry, for example invoice or payment.

  • source_idinteger

    Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

  • reversal_ofJournalEntry

    Die Buchung, die durch diese hier storniert wird.

  • posted_atstring (date-time)

    Time the entry was posted.

  • posted_byUser14

    Login user who posted the entry.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • linesarray<JournalEntryLine>

    Lines of the entry.

    Show fields (9)
    • idinteger

      Primary key of the journal entry line. Internal ID.

    • ledger_accountLedgerAccount

      Ledger account that is booked.

    • cost_centerCostCenter

      Cost center of the booking.

    • debitnumber (float)

      Sollbetrag. Aktiv- und Aufwandskonten mehren sich hier. DECIMAL und nicht DOUBLE. Ein binaerer Fliesskommawert kann 0,10 Euro nicht darstellen; bei einer einzelnen Buchung faellt das durch das Runden auf Cent nicht auf, ueber eine Summenspalte mit zehntausend Zeilen schon. Die Datenbank rechnet DECIMAL exakt, und genau ueber diese Spalten laufen die Summen der Saldenliste. Nach aussen bleibt es float: Doctrine liefert DECIMAL als Zeichenkette, die Getter wandeln um, und die Setter schreiben sie auf zwei Nachkommastellen normiert zurueck.

    • creditnumber (float)

      Habenbetrag. Passiv-, Eigenkapital- und Ertragskonten mehren sich hier.

    • line_descriptionstring

      Buchungstext der Zeile. Fehlt er, gilt der Text des Buchungssatzes.

    • positioninteger

      Position of the line in the journal entry.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/journal_entry \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
[
  {
    "id": 42,
    "name": "Beispiel",
    "debit_total": 1.5,
    "credit_total": 1.5,
    "is_balanced": true,
    "entry_number": "string",
    "entry_date": "2026-10-15T09:30:00+02:00",
    "document_date": "2026-10-15T09:30:00+02:00",
    "document_number": "string",
    "fiscal_year": {
      "id": 42,
      "name": "Beispiel",
      "start_date": "2026-10-15T09:30:00+02:00",
      "end_date": "2026-10-15T09:30:00+02:00",
      "status": "string",
      "opening_balance_entered": true,
      "closed_at": "2026-10-15T09:30:00+02:00",
      "deleted": true,
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    }
  }
]

Buchungssatz erfassen.

POST/api/invoice/journal_entry

Der Satz entsteht als Entwurf. Erst das Festschreiben macht ihn unveränderlich.

Request body application/json

  • dataobject
  • linesarray<object>

Responses

200Buchungssatz anlegenJournalEntry

Show fields (21)
  • debit_totalnumber (float)

    Summe der Sollbeträge.

  • credit_totalnumber (float)

    Summe der Habenbeträge.

  • is_balancedboolean

    Soll gleich Haben - die Grundregel der doppelten Buchführung.

  • idinteger

    Primary key of the journal entry. Internal ID.

  • entry_numberstring

    Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

  • entry_datestring (date-time)

    Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

  • document_datestring (date-time)

    Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

  • document_numberstring

    Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

  • fiscal_yearFiscalYear

    Fiscal year the entry belongs to.

    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • periodinteger

    Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

  • statusstring

    Status of the entry, for example draft or posted.

  • source_typestring

    Source of the entry, for example invoice or payment.

  • source_idinteger

    Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

  • reversal_ofJournalEntry

    Die Buchung, die durch diese hier storniert wird.

  • posted_atstring (date-time)

    Time the entry was posted.

  • posted_byUser14

    Login user who posted the entry.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • linesarray<JournalEntryLine>

    Lines of the entry.

    Show fields (9)
    • idinteger

      Primary key of the journal entry line. Internal ID.

    • ledger_accountLedgerAccount

      Ledger account that is booked.

    • cost_centerCostCenter

      Cost center of the booking.

    • debitnumber (float)

      Sollbetrag. Aktiv- und Aufwandskonten mehren sich hier. DECIMAL und nicht DOUBLE. Ein binaerer Fliesskommawert kann 0,10 Euro nicht darstellen; bei einer einzelnen Buchung faellt das durch das Runden auf Cent nicht auf, ueber eine Summenspalte mit zehntausend Zeilen schon. Die Datenbank rechnet DECIMAL exakt, und genau ueber diese Spalten laufen die Summen der Saldenliste. Nach aussen bleibt es float: Doctrine liefert DECIMAL als Zeichenkette, die Getter wandeln um, und die Setter schreiben sie auf zwei Nachkommastellen normiert zurueck.

    • creditnumber (float)

      Habenbetrag. Passiv-, Eigenkapital- und Ertragskonten mehren sich hier.

    • line_descriptionstring

      Buchungstext der Zeile. Fehlt er, gilt der Text des Buchungssatzes.

    • positioninteger

      Position of the line in the journal entry.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/journal_entry \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '{"lines":[{}]}'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "debit_total": 1.5,
  "credit_total": 1.5,
  "is_balanced": true,
  "entry_number": "string",
  "entry_date": "2026-10-15T09:30:00+02:00",
  "document_date": "2026-10-15T09:30:00+02:00",
  "document_number": "string",
  "fiscal_year": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true,
    "closed_at": "2026-10-15T09:30:00+02:00",
    "closed_by": {
      "id": 42,
      "name": "Beispiel",
      "username": "lena.hartmann@example.org",
      "email": "lena.hartmann@example.org",
      "profile_picture_url": "https://vynst.de",
      "positioningeneral": "string",
      "archived": true,
      "require2fa": true,
      "search_string": "string"
    },
    "deleted": true,
    "created": "2026-10-15T09:30:00+02:00"
  }
}

Prüfen, ohne zu speichern.

GET/api/invoice/journal_entry/{identifier}/validate

Path parameters

identifierrequiredstring

Responses

200Gefundene Mängel, leer wenn buchbar

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/invoice/journal_entry/42/validate \
  --header 'x-iw-jwt-token: <TOKEN>'

Buchungssatz stornieren.

POST/api/invoice/journal_entry/{identifier}/reverse

Erzeugt eine Gegenbuchung; die ursprüngliche bleibt unangetastet.

Path parameters

identifierrequiredstring

Request body application/json

  • reversal_datestring (date)

Responses

200Die erzeugte StornobuchungJournalEntry

Show fields (21)
  • debit_totalnumber (float)

    Summe der Sollbeträge.

  • credit_totalnumber (float)

    Summe der Habenbeträge.

  • is_balancedboolean

    Soll gleich Haben - die Grundregel der doppelten Buchführung.

  • idinteger

    Primary key of the journal entry. Internal ID.

  • entry_numberstring

    Fortlaufende Buchungsnummer, vergeben beim Festschreiben. Erst dann, weil die GoBD eine lückenlose Nummerierung der festgeschriebenen Buchungen verlangt - eine verworfene Erfassung darf keine Lücke hinterlassen.

  • entry_datestring (date-time)

    Buchungsdatum - bestimmt, in welche Periode die Buchung fällt.

  • document_datestring (date-time)

    Belegdatum - das Datum auf dem Papier. Kann vom Buchungsdatum abweichen.

  • document_numberstring

    Belegnummer - die Brücke zwischen Buchung und Beleg. Ohne sie ist die Buchung nicht nachvollziehbar ("keine Buchung ohne Beleg").

  • fiscal_yearFiscalYear

    Fiscal year the entry belongs to.

    Show fields (12)
    • idinteger

      Primary key of the fiscal year. Internal ID.

    • start_datestring (date-time)

      Start date of the fiscal year.

    • end_datestring (date-time)

      End date of the fiscal year.

    • statusstring

      Status of the fiscal year, for example open or closed.

    • opening_balance_enteredboolean

      Ob die Eröffnungsbilanzwerte erfasst sind. Beim ersten Geschäftsjahr einer Installation - oder beim Wechsel von der EÜR zur Bilanzierung - müssen die Anfangsbestände einmalig eingebucht werden, sonst stimmt die Bilanz nicht.

    • closed_atstring (date-time)

      Time the fiscal year was closed.

    • closed_byUser14

      Login user who closed the fiscal year.

    • closing_entryJournalEntry

      Die Abschlussbuchung dieses Jahres. Ohne diesen Verweis war der vorläufige Abschluss eine Sackgasse: das Wiederöffnen setzte den Status zurück, die Buchung blieb stehen, und der endgültige Abschluss fand keine Salden mehr vor. Mit dem Verweis lässt sich die Buchung beim Wiederöffnen stornieren und der Abschluss beliebig oft wiederholen.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

    • namestring

      Name of the entity.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • periodinteger

    Buchungsperiode innerhalb des Geschäftsjahres. 1 bis 12 für die laufenden Monate, 13 für die Abschlussperiode. Die Zahl wird aus dem Buchungsdatum abgeleitet, sobald sie nicht ausdrücklich gesetzt ist - nur der Abschluss setzt sie selbst. Die Spalte heisst `accounting_period` und nicht `period`: MariaDB hält PERIOD seit der System-Versionierung (`PERIOD FOR SYSTEM_TIME`) als Schlüsselwort frei, und die Migration scheitert daran. Das Feld in PHP bleibt `period` - DQL und die JSON-Ausgabe ändern sich damit nicht.

  • statusstring

    Status of the entry, for example draft or posted.

  • source_typestring

    Source of the entry, for example invoice or payment.

  • source_idinteger

    Id des auslösenden Belegs, damit sich Buchung und Beleg gegenseitig finden - und damit derselbe Beleg nicht zweimal gebucht wird.

  • reversal_ofJournalEntry

    Die Buchung, die durch diese hier storniert wird.

  • posted_atstring (date-time)

    Time the entry was posted.

  • posted_byUser14

    Login user who posted the entry.

    Show fields (10)
    • idinteger

      Primary key of the user. Internal ID of the login user.

    • namestring

      Display name of the user. Shown in the UI and in audit entries.

    • usernamestring

      Login name of the user. Must be unique across all users.

    • emailstring

      E-mail address of the user. Used for login notifications, password resets and as a login alias.

    • positioningeneralstring

      Free text describing the position or role of the user.

    • crm_personCRMPerson10

      CRM person linked to this login user. Connects the login account with the person record.

    • profile_picture_urlstring

      URL of the profile picture of the user.

    • archivedboolean

      Marks the user as archived. Archived users are kept for history and are not active.

    • require2faboolean

      Two-factor authentication is required for this user.

    • search_stringstring

      Text that the entity can be searched by.

  • linesarray<JournalEntryLine>

    Lines of the entry.

    Show fields (9)
    • idinteger

      Primary key of the journal entry line. Internal ID.

    • ledger_accountLedgerAccount

      Ledger account that is booked.

    • cost_centerCostCenter

      Cost center of the booking.

    • debitnumber (float)

      Sollbetrag. Aktiv- und Aufwandskonten mehren sich hier. DECIMAL und nicht DOUBLE. Ein binaerer Fliesskommawert kann 0,10 Euro nicht darstellen; bei einer einzelnen Buchung faellt das durch das Runden auf Cent nicht auf, ueber eine Summenspalte mit zehntausend Zeilen schon. Die Datenbank rechnet DECIMAL exakt, und genau ueber diese Spalten laufen die Summen der Saldenliste. Nach aussen bleibt es float: Doctrine liefert DECIMAL als Zeichenkette, die Getter wandeln um, und die Setter schreiben sie auf zwei Nachkommastellen normiert zurueck.

    • creditnumber (float)

      Habenbetrag. Passiv-, Eigenkapital- und Ertragskonten mehren sich hier.

    • line_descriptionstring

      Buchungstext der Zeile. Fehlt er, gilt der Text des Buchungssatzes.

    • positioninteger

      Position of the line in the journal entry.

    • createdstring (date-time)

      Point in time the entity was created.

    • updatedstring (date-time)

      Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

  • namestring

    Name of the entity.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

Request
curl --request POST \
  --url https://your-instance.iw-erp.de/api/invoice/journal_entry/42/reverse \
  --header 'content-type: application/json' \
  --header 'x-iw-jwt-token: <TOKEN>' \
  --data '
{
  "reversal_date": "2026-10-15"
}
'
Response 200 application/json
{
  "id": 42,
  "name": "Beispiel",
  "debit_total": 1.5,
  "credit_total": 1.5,
  "is_balanced": true,
  "entry_number": "string",
  "entry_date": "2026-10-15T09:30:00+02:00",
  "document_date": "2026-10-15T09:30:00+02:00",
  "document_number": "string",
  "fiscal_year": {
    "id": 42,
    "name": "Beispiel",
    "start_date": "2026-10-15T09:30:00+02:00",
    "end_date": "2026-10-15T09:30:00+02:00",
    "status": "string",
    "opening_balance_entered": true,
    "closed_at": "2026-10-15T09:30:00+02:00",
    "closed_by": {
      "id": 42,
      "name": "Beispiel",
      "username": "lena.hartmann@example.org",
      "email": "lena.hartmann@example.org",
      "profile_picture_url": "https://vynst.de",
      "positioningeneral": "string",
      "archived": true,
      "require2fa": true,
      "search_string": "string"
    },
    "deleted": true,
    "created": "2026-10-15T09:30:00+02:00"
  }
}