Anlagegüter
Die Anlagegueter.
GET/api/invoice/fixed_asset
Query parameters
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
namestring | |
inventoryNumberstring | Inventarnummer - frei vergeben, aber für die Inventur unverzichtbar. |
acquisitionDatestring | Tag der Anschaffung oder Herstellung. Bestimmt den Beginn der Abschreibung und den Zeitanteil im ersten Jahr: abgeschrieben wird ab dem Anschaffungsmonat, angefangene Monate zählen voll (§ 7 Abs. 1 Satz 4 EStG). |
acquisitionCostnumber | Anschaffungs- oder Herstellungskosten. Netto, soweit die Vorsteuer abziehbar ist. Ist sie das nicht - im ideellen Bereich eines Vereins etwa -, gehört sie zu den Anschaffungskosten und erhöht damit die Bemessungsgrundlage. |
usefulLifeMonthsstring | Betriebsgewöhnliche Nutzungsdauer in Monaten. In Monaten statt in Jahren, weil die Abschreibung monatsgenau läuft und es Nutzungsdauern unter einem Jahr gibt. |
depreciationMethodstring | |
ledgerAccountstring | Aktivkonto, auf dem das Gut steht - SKR04 0630 etwa. |
depreciationAccountstring | Aufwandskonto der Abschreibung - SKR04 6220 etwa. |
costCenterstring | Die steuerliche Sphäre, der das Gut dient. |
expenseCategorystring | Die EÜR-Kategorie der Abschreibung. Dieselbe Brücke wie am Sachkonto: wer die EÜR führt, bekommt seine Zeile in der Anlage EÜR, ohne dass es einen Kontenrahmen bräuchte. |
incomingInvoicestring | Der Beleg, aus dem das Gut entstanden ist. |
disposalDatestring | Tag des Abgangs - Verkauf, Verschrottung, Entnahme. |
disposalTaxRatestring | Umsatzsteuersatz auf den Verkaufserlös, in Prozent. Der Verkauf eines Anlageguts ist ein steuerpflichtiger Umsatz wie jeder andere - vorher wurde der Erlös netto ohne Steuer gebucht, und die Umsatzsteuer fehlte in Bilanz und Voranmeldung. Bewusst ohne Vorgabewert: ob Steuer anfällt, hängt am Vorgang. Eine Verschrottung, eine Entnahme und der Verkauf aus dem ideellen Bereich eines Vereins sind steuerfrei; der gewerbliche Verkauf ist es nicht. Ein geratener Satz wäre in der Hälfte der Fälle falsch. |
isMovableboolean | Bewegliches Wirtschaftsgut? Die degressive AfA des § 7 Abs. 2 EStG gilt nur fuer bewegliche Wirtschaftsgueter des Anlagevermoegens - ein Gebaeude oder eine Software degressiv abzuschreiben ist unzulaessig, und ohne dieses Merkmal konnte es niemand verhindern. Vorgabe true: Betriebs- und Geschaeftsausstattung ist in diesem System der Regelfall. |
createdstring | |
updatedstring | |
searchStringstring | text to search for in the list |
orderFieldNamestring | name of the order field |
orderFieldSortstring | sorting modeAllowed: DESCASC |
pageinteger | page of the list |
pageSizeinteger | number of entries for each page |
withMaxPageNumberstring | returns the number of pages available as a header if this is set |
Responses
200Anlagegueterarray<FixedAsset>
Show fields (20)
idintegerPrimary key of the fixed asset. Internal ID.
inventory_numberstringInventarnummer - frei vergeben, aber für die Inventur unverzichtbar.
acquisition_datestring (date-time)Tag der Anschaffung oder Herstellung. Bestimmt den Beginn der Abschreibung und den Zeitanteil im ersten Jahr: abgeschrieben wird ab dem Anschaffungsmonat, angefangene Monate zählen voll (§ 7 Abs. 1 Satz 4 EStG).
acquisition_costnumber (float)Anschaffungs- oder Herstellungskosten. Netto, soweit die Vorsteuer abziehbar ist. Ist sie das nicht - im ideellen Bereich eines Vereins etwa -, gehört sie zu den Anschaffungskosten und erhöht damit die Bemessungsgrundlage.
useful_life_monthsintegerBetriebsgewöhnliche Nutzungsdauer in Monaten. In Monaten statt in Jahren, weil die Abschreibung monatsgenau läuft und es Nutzungsdauern unter einem Jahr gibt.
depreciation_methodstringMethod of depreciation, for example linear.
ledger_accountLedgerAccountAktivkonto, auf dem das Gut steht - SKR04 0630 etwa.
Show fields (15)
display_namestringidintegerPrimary key of the ledger account. Internal ID.
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.
chart_of_accountsstringChart of accounts the account belongs to, for example SKR03.
account_typestringType of the account, for example asset or revenue.
default_taxTaxSteuersatz, 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_accountLedgerAccountGegenkonto 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_categoryExpenseCategory10Brü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_requiredbooleanOb 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_systembooleanVom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.
is_activebooleanKonten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
depreciation_accountLedgerAccountAufwandskonto der Abschreibung - SKR04 6220 etwa.
Show fields (15)
display_namestringidintegerPrimary key of the ledger account. Internal ID.
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.
chart_of_accountsstringChart of accounts the account belongs to, for example SKR03.
account_typestringType of the account, for example asset or revenue.
default_taxTaxSteuersatz, 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_accountLedgerAccountGegenkonto 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_categoryExpenseCategory10Brü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_requiredbooleanOb 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_systembooleanVom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.
is_activebooleanKonten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName 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_centerCostCenterDie steuerliche Sphäre, der das Gut dient.
Show fields (10)
display_namestringidintegerPrimary key of the cost center. Internal ID.
numberstringNumber of the cost center.
spherestringSteuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.
is_systembooleanThe cost center is created by the system and cannot be deleted.
is_activebooleanThe cost center is active.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
expense_categoryExpenseCategory10Die EÜR-Kategorie der Abschreibung. Dieselbe Brücke wie am Sachkonto: wer die EÜR führt, bekommt seine Zeile in der Anlage EÜR, ohne dass es einen Kontenrahmen bräuchte.
Show fields (19)
idintegerPrimary key of the expense category. Internal ID.
codestringKurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")
eur_line_numberintegerZeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)
eur_line_namestringBezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")
category_typestringTyp der Kategorie (expense, income, neutral, asset, private)
default_taxTaxStandard-Steuersatz für diese Kategorie
cost_centerCostCenterKostenstelle 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_deductiblebooleanIst Vorsteuerabzug möglich?
is_immediate_deductionbooleanIst die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)
depreciation_yearsintegerAbschreibungsdauer in Jahren (für Anlagevermögen)
sort_orderintegerSortierreihenfolge
is_activebooleanIst die Kategorie aktiv/sichtbar?
colorstringFarbe für UI-Darstellung (Hex-Code)
iconstringIcon-Name für UI-Darstellung
is_systembooleanIst dies eine System-Kategorie? (nicht löschbar)
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
incoming_invoiceIncomingInvoice3Der Beleg, aus dem das Gut entstanden ist.
Show fields (43)
idintegerPrimary key of the invoice document. Internal ID.
tokenstringToken that identifies the document for public access.
numberintegerRunning document number.
manual_number_prefixstringPrefix of a manually entered document number.
manual_numberintegerManually entered document number.
number_stringstringDocument number as displayed to users.
generation_datestring (date-time)Date the document was generated.
number_datestring (date-time)Date used for the document number.
messagestringMessage printed on the document.
currencystringCurrency of the document.
namestringName of the document.
due_datestring (date-time)Due date of the document.
netto_valuenumber (float)Net total of the document.
brutto_valuenumber (float)Gross total of the document.
tax_valuenumber (float)Total tax amount of the document.
taxTaxrequiredTax rate applied to the document.
linked_number_titlestringTitle of the linked document number.
linked_numberstringNumber of the linked document.
statusstringStatus of the document.
previous_statusstringStatus before the last change.
status_updatedstring (date-time)Point in time the status was last changed.
archivedbooleanWhether the document is archived.
last_pdf_exportstring (date-time)Point in time the PDF was last exported.
last_status_exportstringStatus at the last export.
search_stringstringText that the entity can be searched by.
external_invoice_numberstringExterne Rechnungsnummer des Lieferanten
received_datestring (date-time)Eingangsdatum (wann wurde die Rechnung empfangen)
payment_datestring (date-time)Zahlungsdatum
service_date_startstring (date-time)Leistungszeitraum Start
service_date_endstring (date-time)Leistungszeitraum Ende
vat_categorystringDer umsatzsteuerliche Sachverhalt. Auf der Eingangsseite entscheidet er darüber, ob die Vorsteuer unter Kennzahl 66 steht (Rechnung eines anderen Unternehmers), unter 61 (innergemeinschaftlicher Erwerb), unter 62 (Einfuhrumsatzsteuer) oder unter 67 (§ 13b UStG). Beim Erwerb und bei § 13b kommt eine zweite Zeile hinzu: die Steuer schulden wir selbst, obwohl sie uns niemand berechnet hat, und sie steht deshalb zugleich als Umsatzsteuer im Vordruck. Wer nur eine der beiden bucht, zahlt zu viel oder zu wenig. Ohne Angabe der Regelfall.
vat_self_assessed_ratenumber (float)Der Steuersatz, mit dem die selbst geschuldete Steuer zu rechnen ist. Beim innergemeinschaftlichen Erwerb und bei § 13b UStG berechnet der Lieferant keine Steuer - die Rechnung ist netto, und die Steuer schulden wir. Womit sie zu rechnen ist, steht deshalb auf keinem Beleg: es ist der Satz, der im Inland auf diese Leistung anzuwenden wäre. Ohne Angabe rechnet die Voranmeldung mit dem Regelsatz und sagt in den Hinweisen, bei wie vielen Belegen sie das getan hat. Stillschweigend zu raten wäre in einer Steueranmeldung das Falsche.
import_vat_amountstringDie Einfuhrumsatzsteuer aus dem Zollbescheid. Sie steht NICHT auf der Rechnung des Lieferanten - die ist bei einer Einfuhr ohne deutsche Steuer. Entrichtet wird sie an den Zoll, und nur der entrichtete Betrag ist als Vorsteuer abziehbar (§ 15 Abs. 1 Satz 1 Nr. 2 UStG, Kennzahl 62 der Voranmeldung). Den Steuerbetrag der Lieferantenrechnung dafür zu nehmen war schlicht der falsche Beleg.
paid_valuenumber (float)Bereits bezahlter Betrag (für Teilzahlungen)
sellerIncomingInvoiceSellerVerkäufer/Lieferant Informationen (Snapshot)
expense_categoryExpenseCategory10Hauptkategorie für EÜR
document_pathstringPfad zur gespeicherten Rechnungsdatei (PDF/Bild)
document_filenamestringOriginal Dateiname
document_mime_typestringMIME Type des Dokuments
notesstringNotizen/Bemerkungen
is_deductiblebooleanIst die Rechnung für den Vorsteuerabzug relevant?
is_approvedbooleanWurde die Rechnung geprüft/freigegeben?
approved_atstring (date-time)Time the incoming invoice was approved.
disposal_datestring (date-time)Tag des Abgangs - Verkauf, Verschrottung, Entnahme.
disposal_proceedsnumber (float)Verkaufserlös beim Abgang, netto.
disposal_tax_ratenumber (float)Umsatzsteuersatz auf den Verkaufserlös, in Prozent. Der Verkauf eines Anlageguts ist ein steuerpflichtiger Umsatz wie jeder andere - vorher wurde der Erlös netto ohne Steuer gebucht, und die Umsatzsteuer fehlte in Bilanz und Voranmeldung. Bewusst ohne Vorgabewert: ob Steuer anfällt, hängt am Vorgang. Eine Verschrottung, eine Entnahme und der Verkauf aus dem ideellen Bereich eines Vereins sind steuerfrei; der gewerbliche Verkauf ist es nicht. Ein geratener Satz wäre in der Hälfte der Fälle falsch.
is_movablebooleanBewegliches Wirtschaftsgut? Die degressive AfA des § 7 Abs. 2 EStG gilt nur fuer bewegliche Wirtschaftsgueter des Anlagevermoegens - ein Gebaeude oder eine Software degressiv abzuschreiben ist unzulaessig, und ohne dieses Merkmal konnte es niemand verhindern. Vorgabe true: Betriebs- und Geschaeftsausstattung ist in diesem System der Regelfall.
disposal_reasonstringReason the asset was disposed of.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.getList();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"inventory_number": "string",
"acquisition_date": "2026-10-15T09:30:00+02:00",
"acquisition_cost": 1.5,
"useful_life_months": 1,
"depreciation_method": "string",
"ledger_account": {
"display_name": "Beispiel",
"id": 42,
"name": "Beispiel",
"number": "string",
"chart_of_accounts": "string",
"account_type": "string",
"cost_center_required": true,
"is_system": true,
"is_active": true,
"deleted": true
},
"depreciation_account": {
"display_name": "Beispiel",
"id": 42,
"name": "Beispiel",
"number": "string",
"chart_of_accounts": "string",
"account_type": "string",
"cost_center_required": true,
"is_system": true,
"is_active": true,
"deleted": true
},
"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"
}
}
]Legt ein Anlagegut ohne Beleg an.
POST/api/invoice/fixed_asset
Bisher entstand ein Anlagegut nur aus einer Eingangsrechnung. Das deckt den Regelfall ab und laesst zwei Faelle offen, die es haeufig gibt: den Altbestand beim Umstieg auf diese Anwendung, und die Einlage aus dem Privatvermoegen. Beide haben keine Eingangsrechnung im System und waren damit nicht erfassbar - in der Bilanz fehlten sie dann vollstaendig.
Gebucht wird dabei nichts: beim Altbestand ist der Zugang laengst in der Eroeffnungsbilanz enthalten, und ihn ein zweites Mal zu buchen zeigte das Anlagevermoegen doppelt. Der Abschreibungsplan entsteht trotzdem sofort - er ist der Grund, warum das Gut erfasst wird.
Request body application/json
namestringacquisition_datestring (date)acquisition_costnumberuseful_life_monthsintegerdepreciation_methodstringinventory_numberstringexpense_categoryintegercost_centerintegerledger_accountintegerdepreciation_accountinteger
Responses
201Das angelegte Anlagegut samt Abschreibungsplan
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"name": "Notebook",
"acquisition_date": "2026-03-01",
"acquisition_cost": 1200,
"useful_life_months": 36,
"depreciation_method": "linear",
"inventory_number": "AV-2026-004"
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
name: 'Notebook',
acquisition_date: '2026-03-01',
acquisition_cost: 1200,
useful_life_months: 36,
depreciation_method: 'linear',
inventory_number: 'AV-2026-004'
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset"
payload = {
"name": "Notebook",
"acquisition_date": "2026-03-01",
"acquisition_cost": 1200,
"useful_life_months": 36,
"depreciation_method": "linear",
"inventory_number": "AV-2026-004"
}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset', [
'body' => '{"name":"Notebook","acquisition_date":"2026-03-01","acquisition_cost":1200,"useful_life_months":36,"depreciation_method":"linear","inventory_number":"AV-2026-004"}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"name\":\"Notebook\",\"acquisition_date\":\"2026-03-01\",\"acquisition_cost\":1200,\"useful_life_months\":36,\"depreciation_method\":\"linear\",\"inventory_number\":\"AV-2026-004\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"Notebook\",\"acquisition_date\":\"2026-03-01\",\"acquisition_cost\":1200,\"useful_life_months\":36,\"depreciation_method\":\"linear\",\"inventory_number\":\"AV-2026-004\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset"
payload := strings.NewReader("{\"name\":\"Notebook\",\"acquisition_date\":\"2026-03-01\",\"acquisition_cost\":1200,\"useful_life_months\":36,\"depreciation_method\":\"linear\",\"inventory_number\":\"AV-2026-004\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.create(name: '…', acquisitionDate: DateTime.fromJson({
"name": "Notebook",
"acquisition_date": "2026-03-01",
"acquisition_cost": 1200,
"useful_life_months": 36,
"depreciation_method": "linear",
"inventory_number": "AV-2026-004"
}), acquisitionCost: 42);
if (result.success) {
print(result.data);
}Nutzungsdauern und Wertgrenzen als Vorschlag für die Oberfläche.
GET/api/invoice/fixed_asset/suggestions
Responses
200Nutzungsdauern aus den AfA-Tabellen und die Wertgrenzen des § 6 EStG
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/suggestions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.getSuggestions();
if (result.success) {
print(result.data);
}Der Anlagenspiegel eines Jahres.
GET/api/invoice/fixed_asset/schedule
Query parameters
yearstring | Jahr, Vorgabe das laufende |
Responses
200Anlagenspiegel mit Zu- und Abgängen, Abschreibung und Restbuchwert
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.get(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule")
.get()
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/schedule"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.getSchedule();
if (result.success) {
print(result.data);
}Legt ein Anlagegut aus einer Eingangsrechnung an.
POST/api/invoice/fixed_asset/from_invoice
Der Weg, den die Verbuchen-Liste anbietet: statt die Rechnung als Aufwand zu buchen, wird sie aktiviert.
Request body application/json
incoming_invoice_idintegernamestringacquisition_costnumberuseful_life_monthsintegerdepreciation_methodstringcost_centerintegerOhne Angabe die Kostenstelle der Rechnungskategorie
Responses
200Das angelegte Anlagegut samt Abschreibungsplan
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"name": "Beispiel",
"incoming_invoice_id": 42,
"acquisition_cost": 1.5,
"useful_life_months": 1,
"depreciation_method": "string",
"cost_center": 1
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
name: 'Beispiel',
incoming_invoice_id: 42,
acquisition_cost: 1.5,
useful_life_months: 1,
depreciation_method: 'string',
cost_center: 1
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice"
payload = {
"name": "Beispiel",
"incoming_invoice_id": 42,
"acquisition_cost": 1.5,
"useful_life_months": 1,
"depreciation_method": "string",
"cost_center": 1
}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice', [
'body' => '{"name":"Beispiel","incoming_invoice_id":42,"acquisition_cost":1.5,"useful_life_months":1,"depreciation_method":"string","cost_center":1}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"name\":\"Beispiel\",\"incoming_invoice_id\":42,\"acquisition_cost\":1.5,\"useful_life_months\":1,\"depreciation_method\":\"string\",\"cost_center\":1}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"name\":\"Beispiel\",\"incoming_invoice_id\":42,\"acquisition_cost\":1.5,\"useful_life_months\":1,\"depreciation_method\":\"string\",\"cost_center\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/from_invoice"
payload := strings.NewReader("{\"name\":\"Beispiel\",\"incoming_invoice_id\":42,\"acquisition_cost\":1.5,\"useful_life_months\":1,\"depreciation_method\":\"string\",\"cost_center\":1}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.createFromInvoice(42);
if (result.success) {
print(result.data);
}Bucht die geplanten Abschreibungen eines Jahres.
POST/api/invoice/fixed_asset/depreciation_run
Request body application/json
yearinteger
Responses
200Wie viele Abschreibungen gebucht wurden, und was misslang
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '{"year":2026}'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({year: 2026})
};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run"
payload = { "year": 2026 }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run', [
'body' => '{"year":2026}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"year\":2026}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"year\":2026}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/depreciation_run"
payload := strings.NewReader("{\"year\":2026}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.runDepreciation(42);
if (result.success) {
print(result.data);
}Berechnet den Abschreibungsplan neu.
POST/api/invoice/fixed_asset/{identifier}/rebuild_schedule
Nach einer Korrektur der Nutzungsdauer oder der Anschaffungskosten. Gebuchte Jahre stehen dem im Weg - die müssten erst storniert werden.
Path parameters
identifierrequiredstring |
Responses
200Das Anlagegut mit neu berechnetem Plan
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule")
.post(null)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/rebuild_schedule"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.rebuildSchedule('42');
if (result.success) {
print(result.data);
}Bucht den Zugang.
POST/api/invoice/fixed_asset/{identifier}/post_acquisition
Path parameters
identifierrequiredstring |
Responses
200Der erzeugte Buchungssatz, oder null bei ausgeschalteter Automatik
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'POST', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.post(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition")
.post(null)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/post_acquisition"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.postAcquisition('42');
if (result.success) {
print(result.data);
}Aendert ein Anlagegut.
PUT/api/invoice/fixed_asset/{identifier}
Anschaffungskosten, Nutzungsdauer, Methode und Datum bestimmen den Abschreibungsplan; wird eines davon geaendert, wird er neu gerechnet. Bereits gebuchte Jahre stehen dem im Weg und muessten zuerst storniert werden.
Path parameters
identifierrequiredstring |
Request body application/json
idintegerPrimary key of the fixed asset. Internal ID.
inventory_numberstringInventarnummer - frei vergeben, aber für die Inventur unverzichtbar.
acquisition_datestring (date-time)Tag der Anschaffung oder Herstellung. Bestimmt den Beginn der Abschreibung und den Zeitanteil im ersten Jahr: abgeschrieben wird ab dem Anschaffungsmonat, angefangene Monate zählen voll (§ 7 Abs. 1 Satz 4 EStG).
acquisition_costnumber (float)Anschaffungs- oder Herstellungskosten. Netto, soweit die Vorsteuer abziehbar ist. Ist sie das nicht - im ideellen Bereich eines Vereins etwa -, gehört sie zu den Anschaffungskosten und erhöht damit die Bemessungsgrundlage.
useful_life_monthsintegerBetriebsgewöhnliche Nutzungsdauer in Monaten. In Monaten statt in Jahren, weil die Abschreibung monatsgenau läuft und es Nutzungsdauern unter einem Jahr gibt.
depreciation_methodstringMethod of depreciation, for example linear.
ledger_accountLedgerAccountAktivkonto, auf dem das Gut steht - SKR04 0630 etwa.
Show fields (15)
display_namestringidintegerPrimary key of the ledger account. Internal ID.
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.
chart_of_accountsstringChart of accounts the account belongs to, for example SKR03.
account_typestringType of the account, for example asset or revenue.
default_taxTaxSteuersatz, 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_accountLedgerAccountGegenkonto 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_categoryExpenseCategory10Brü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_requiredbooleanOb 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_systembooleanVom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.
is_activebooleanKonten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
depreciation_accountLedgerAccountAufwandskonto der Abschreibung - SKR04 6220 etwa.
Show fields (15)
display_namestringidintegerPrimary key of the ledger account. Internal ID.
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.
chart_of_accountsstringChart of accounts the account belongs to, for example SKR03.
account_typestringType of the account, for example asset or revenue.
default_taxTaxSteuersatz, 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_accountLedgerAccountGegenkonto 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_categoryExpenseCategory10Brü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_requiredbooleanOb 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_systembooleanVom Kontenrahmen-Initialisierer angelegt. Nummer und Art sind dann durch den Rahmen vorgegeben und sollten nicht geändert werden.
is_activebooleanKonten lassen sich stilllegen, statt sie zu löschen - bebuchte Konten dürfen nicht verschwinden.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName 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_centerCostCenterDie steuerliche Sphäre, der das Gut dient.
Show fields (10)
display_namestringidintegerPrimary key of the cost center. Internal ID.
numberstringNumber of the cost center.
spherestringSteuerliche Sphäre, null bei rein betriebswirtschaftlicher Gliederung.
is_systembooleanThe cost center is created by the system and cannot be deleted.
is_activebooleanThe cost center is active.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
expense_categoryExpenseCategory10Die EÜR-Kategorie der Abschreibung. Dieselbe Brücke wie am Sachkonto: wer die EÜR führt, bekommt seine Zeile in der Anlage EÜR, ohne dass es einen Kontenrahmen bräuchte.
Show fields (19)
idintegerPrimary key of the expense category. Internal ID.
codestringKurzbezeichnung/Code (z.B. "WAREN", "PERSONAL", "MIETE")
eur_line_numberintegerZeile in der Anlage EÜR (z.B. 23 für Wareneinkauf)
eur_line_namestringBezeichnung der EÜR-Zeile (z.B. "Waren, Rohstoffe und Hilfsstoffe")
category_typestringTyp der Kategorie (expense, income, neutral, asset, private)
default_taxTaxStandard-Steuersatz für diese Kategorie
cost_centerCostCenterKostenstelle 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_deductiblebooleanIst Vorsteuerabzug möglich?
is_immediate_deductionbooleanIst die Kategorie sofort abzugsfähig? (vs. Abschreibung über mehrere Jahre)
depreciation_yearsintegerAbschreibungsdauer in Jahren (für Anlagevermögen)
sort_orderintegerSortierreihenfolge
is_activebooleanIst die Kategorie aktiv/sichtbar?
colorstringFarbe für UI-Darstellung (Hex-Code)
iconstringIcon-Name für UI-Darstellung
is_systembooleanIst dies eine System-Kategorie? (nicht löschbar)
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName of the entity.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
incoming_invoiceIncomingInvoice3Der Beleg, aus dem das Gut entstanden ist.
Show fields (43)
idintegerPrimary key of the invoice document. Internal ID.
tokenstringToken that identifies the document for public access.
numberintegerRunning document number.
manual_number_prefixstringPrefix of a manually entered document number.
manual_numberintegerManually entered document number.
number_stringstringDocument number as displayed to users.
generation_datestring (date-time)Date the document was generated.
number_datestring (date-time)Date used for the document number.
messagestringMessage printed on the document.
currencystringCurrency of the document.
namestringName of the document.
due_datestring (date-time)Due date of the document.
netto_valuenumber (float)Net total of the document.
brutto_valuenumber (float)Gross total of the document.
tax_valuenumber (float)Total tax amount of the document.
taxTaxrequiredTax rate applied to the document.
linked_number_titlestringTitle of the linked document number.
linked_numberstringNumber of the linked document.
statusstringStatus of the document.
previous_statusstringStatus before the last change.
status_updatedstring (date-time)Point in time the status was last changed.
archivedbooleanWhether the document is archived.
last_pdf_exportstring (date-time)Point in time the PDF was last exported.
last_status_exportstringStatus at the last export.
search_stringstringText that the entity can be searched by.
external_invoice_numberstringExterne Rechnungsnummer des Lieferanten
received_datestring (date-time)Eingangsdatum (wann wurde die Rechnung empfangen)
payment_datestring (date-time)Zahlungsdatum
service_date_startstring (date-time)Leistungszeitraum Start
service_date_endstring (date-time)Leistungszeitraum Ende
vat_categorystringDer umsatzsteuerliche Sachverhalt. Auf der Eingangsseite entscheidet er darüber, ob die Vorsteuer unter Kennzahl 66 steht (Rechnung eines anderen Unternehmers), unter 61 (innergemeinschaftlicher Erwerb), unter 62 (Einfuhrumsatzsteuer) oder unter 67 (§ 13b UStG). Beim Erwerb und bei § 13b kommt eine zweite Zeile hinzu: die Steuer schulden wir selbst, obwohl sie uns niemand berechnet hat, und sie steht deshalb zugleich als Umsatzsteuer im Vordruck. Wer nur eine der beiden bucht, zahlt zu viel oder zu wenig. Ohne Angabe der Regelfall.
vat_self_assessed_ratenumber (float)Der Steuersatz, mit dem die selbst geschuldete Steuer zu rechnen ist. Beim innergemeinschaftlichen Erwerb und bei § 13b UStG berechnet der Lieferant keine Steuer - die Rechnung ist netto, und die Steuer schulden wir. Womit sie zu rechnen ist, steht deshalb auf keinem Beleg: es ist der Satz, der im Inland auf diese Leistung anzuwenden wäre. Ohne Angabe rechnet die Voranmeldung mit dem Regelsatz und sagt in den Hinweisen, bei wie vielen Belegen sie das getan hat. Stillschweigend zu raten wäre in einer Steueranmeldung das Falsche.
import_vat_amountstringDie Einfuhrumsatzsteuer aus dem Zollbescheid. Sie steht NICHT auf der Rechnung des Lieferanten - die ist bei einer Einfuhr ohne deutsche Steuer. Entrichtet wird sie an den Zoll, und nur der entrichtete Betrag ist als Vorsteuer abziehbar (§ 15 Abs. 1 Satz 1 Nr. 2 UStG, Kennzahl 62 der Voranmeldung). Den Steuerbetrag der Lieferantenrechnung dafür zu nehmen war schlicht der falsche Beleg.
paid_valuenumber (float)Bereits bezahlter Betrag (für Teilzahlungen)
sellerIncomingInvoiceSellerVerkäufer/Lieferant Informationen (Snapshot)
expense_categoryExpenseCategory10Hauptkategorie für EÜR
document_pathstringPfad zur gespeicherten Rechnungsdatei (PDF/Bild)
document_filenamestringOriginal Dateiname
document_mime_typestringMIME Type des Dokuments
notesstringNotizen/Bemerkungen
is_deductiblebooleanIst die Rechnung für den Vorsteuerabzug relevant?
is_approvedbooleanWurde die Rechnung geprüft/freigegeben?
approved_atstring (date-time)Time the incoming invoice was approved.
disposal_datestring (date-time)Tag des Abgangs - Verkauf, Verschrottung, Entnahme.
disposal_proceedsnumber (float)Verkaufserlös beim Abgang, netto.
disposal_tax_ratenumber (float)Umsatzsteuersatz auf den Verkaufserlös, in Prozent. Der Verkauf eines Anlageguts ist ein steuerpflichtiger Umsatz wie jeder andere - vorher wurde der Erlös netto ohne Steuer gebucht, und die Umsatzsteuer fehlte in Bilanz und Voranmeldung. Bewusst ohne Vorgabewert: ob Steuer anfällt, hängt am Vorgang. Eine Verschrottung, eine Entnahme und der Verkauf aus dem ideellen Bereich eines Vereins sind steuerfrei; der gewerbliche Verkauf ist es nicht. Ein geratener Satz wäre in der Hälfte der Fälle falsch.
is_movablebooleanBewegliches Wirtschaftsgut? Die degressive AfA des § 7 Abs. 2 EStG gilt nur fuer bewegliche Wirtschaftsgueter des Anlagevermoegens - ein Gebaeude oder eine Software degressiv abzuschreiben ist unzulaessig, und ohne dieses Merkmal konnte es niemand verhindern. Vorgabe true: Betriebs- und Geschaeftsausstattung ist in diesem System der Regelfall.
disposal_reasonstringReason the asset was disposed of.
deletedbooleanThis property is used to mark an entity as deleted / archived
namestringName 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
200Das geaenderte Anlagegut
409Der Plan waere neu zu rechnen, ist aber schon gebucht
curl --request PUT \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"id": 42,
"name": "Beispiel",
"inventory_number": "string",
"acquisition_date": "2026-10-15T09:30:00+02:00",
"acquisition_cost": 1.5,
"useful_life_months": 1
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
id: 42,
name: 'Beispiel',
inventory_number: 'string',
acquisition_date: '2026-10-15T09:30:00+02:00',
acquisition_cost: 1.5,
useful_life_months: 1
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42"
payload = {
"id": 42,
"name": "Beispiel",
"inventory_number": "string",
"acquisition_date": "2026-10-15T09:30:00+02:00",
"acquisition_cost": 1.5,
"useful_life_months": 1
}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/42', [
'body' => '{"id":42,"name":"Beispiel","inventory_number":"string","acquisition_date":"2026-10-15T09:30:00+02:00","acquisition_cost":1.5,"useful_life_months":1}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"id\":42,\"name\":\"Beispiel\",\"inventory_number\":\"string\",\"acquisition_date\":\"2026-10-15T09:30:00+02:00\",\"acquisition_cost\":1.5,\"useful_life_months\":1}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"id\":42,\"name\":\"Beispiel\",\"inventory_number\":\"string\",\"acquisition_date\":\"2026-10-15T09:30:00+02:00\",\"acquisition_cost\":1.5,\"useful_life_months\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42")
.put(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42"
payload := strings.NewReader("{\"id\":42,\"name\":\"Beispiel\",\"inventory_number\":\"string\",\"acquisition_date\":\"2026-10-15T09:30:00+02:00\",\"acquisition_cost\":1.5,\"useful_life_months\":1}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.update('42');
if (result.success) {
print(result.data);
}Trägt den Abgang ein und bucht ihn.
POST/api/invoice/fixed_asset/{identifier}/disposal
Path parameters
identifierrequiredstring |
Request body application/json
disposal_datestringdisposal_proceedsnumberVerkaufserloes netto
disposal_tax_ratenumberUmsatzsteuersatz auf den Erloes in Prozent; leer bei steuerfreiem Abgang
disposal_reasonstring
Responses
200Das Anlagegut mit Abgang und der Buchungssatz
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"disposal_date": "2028-06-30",
"disposal_proceeds": 1.5,
"disposal_tax_rate": 19,
"disposal_reason": "string"
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
disposal_date: '2028-06-30',
disposal_proceeds: 1.5,
disposal_tax_rate: 19,
disposal_reason: 'string'
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal"
payload = {
"disposal_date": "2028-06-30",
"disposal_proceeds": 1.5,
"disposal_tax_rate": 19,
"disposal_reason": "string"
}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal', [
'body' => '{"disposal_date":"2028-06-30","disposal_proceeds":1.5,"disposal_tax_rate":19,"disposal_reason":"string"}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"disposal_date\":\"2028-06-30\",\"disposal_proceeds\":1.5,\"disposal_tax_rate\":19,\"disposal_reason\":\"string\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"disposal_date\":\"2028-06-30\",\"disposal_proceeds\":1.5,\"disposal_tax_rate\":19,\"disposal_reason\":\"string\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal")
.post(body)
.addHeader("x-iw-jwt-token", "<TOKEN>")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.iw-erp.de/api/invoice/fixed_asset/42/disposal"
payload := strings.NewReader("{\"disposal_date\":\"2028-06-30\",\"disposal_proceeds\":1.5,\"disposal_tax_rate\":19,\"disposal_reason\":\"string\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/fixed_asset_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await FixedAssetController.postDisposal('42', disposalDate: DateTime.fromJson({
"disposal_date": "2028-06-30",
"disposal_proceeds": 1.5,
"disposal_tax_rate": 19,
"disposal_reason": "string"
}));
if (result.success) {
print(result.data);
}