Umsatzsteuer
Die Voranmeldung eines Zeitraums.
GET/api/invoice/vat_return
Query parameters
yearstring | Jahr, Vorgabe das laufende |
periodstring | Monat 1-12 oder Quartal 1-4 |
filing_periodstring | MONTHLY oder QUARTERLY, überschreibt die Einstellung |
Responses
200Die Voranmeldung mit den amtlichen Kennzahlen
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/vat_return \
--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/vat_return', 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/vat_return"
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/vat_return', [
'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/vat_return"),
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/vat_return")
.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/vat_return"
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/vat_return_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 VatReturnController.get();
if (result.success) {
print(result.data);
}Alle Zeiträume eines Jahres mit ihrer Zahllast.
GET/api/invoice/vat_return/overview
Query parameters
yearstring | Jahr, Vorgabe das laufende |
filing_periodstring | MONTHLY oder QUARTERLY |
Responses
200Jahresüberblick der Voranmeldungen
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/overview \
--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/vat_return/overview', 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/vat_return/overview"
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/vat_return/overview', [
'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/vat_return/overview"),
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/vat_return/overview")
.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/vat_return/overview"
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/vat_return_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 VatReturnController.getOverview();
if (result.success) {
print(result.data);
}Welcher Voranmeldungszeitraum nach § 18 Abs. 2 UStG gilt.
GET/api/invoice/vat_return/filing_period
Ein Vorschlag mit Begründung: die Befreiung unterhalb der unteren Grenze ist eine Kann-Vorschrift des Finanzamts, keine Automatik.
Query parameters
yearstring | Jahr, Vorgabe das laufende |
Responses
200Vorschlag für den Voranmeldungszeitraum
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/filing_period \
--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/vat_return/filing_period', 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/vat_return/filing_period"
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/vat_return/filing_period', [
'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/vat_return/filing_period"),
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/vat_return/filing_period")
.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/vat_return/filing_period"
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/vat_return_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 VatReturnController.getFilingPeriodSuggestion();
if (result.success) {
print(result.data);
}Schreibt eine Voranmeldung als abgegeben fest.
POST/api/invoice/vat_return/submit
Ab hier stehen ihre Zahlen fest. Wird ein Beleg spaeter storniert oder archiviert, aendert das die abgegebene Anmeldung nicht mehr rueckwirkend - die Abweichung wird stattdessen ausgewiesen, und die Berichtigung ist eine neue Fassung desselben Zeitraums.
Request body application/json
yearintegerperiodintegerfiling_periodstringcorrection_reasonstringPflicht ab der zweiten Fassung
Responses
200Die festgeschriebene Voranmeldung
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/submit \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"year": 2026,
"period": 1,
"filing_period": "QUARTERLY",
"correction_reason": "string"
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({year: 2026, period: 1, filing_period: 'QUARTERLY', correction_reason: 'string'})
};
fetch('https://your-instance.iw-erp.de/api/invoice/vat_return/submit', 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/vat_return/submit"
payload = {
"year": 2026,
"period": 1,
"filing_period": "QUARTERLY",
"correction_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/vat_return/submit', [
'body' => '{"year":2026,"period":1,"filing_period":"QUARTERLY","correction_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/vat_return/submit"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"year\":2026,\"period\":1,\"filing_period\":\"QUARTERLY\",\"correction_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, "{\"year\":2026,\"period\":1,\"filing_period\":\"QUARTERLY\",\"correction_reason\":\"string\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/vat_return/submit")
.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/vat_return/submit"
payload := strings.NewReader("{\"year\":2026,\"period\":1,\"filing_period\":\"QUARTERLY\",\"correction_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/vat_return_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 VatReturnController.submit(year: 42, period: 42);
if (result.success) {
print(result.data);
}Die umsatzsteuerlichen Sachverhalte und die Kennzahlen des Vordrucks.
GET/api/invoice/vat_return/categories
Der Steuersatz sagt nicht, in welche Zeile der Voranmeldung ein Umsatz gehoert: null Prozent stehen an einer innergemeinschaftlichen Lieferung, an einer Ausfuhr, an einer Leistung nach § 13b UStG und an einem steuerfreien Umsatz - vier verschiedene Zeilen. Der Sachverhalt haengt deshalb am Beleg, und diese Liste sagt, welche es gibt.
Responses
200Sachverhalte und Kennzahlen
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/categories \
--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/vat_return/categories', 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/vat_return/categories"
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/vat_return/categories', [
'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/vat_return/categories"),
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/vat_return/categories")
.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/vat_return/categories"
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/vat_return_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 VatReturnController.getCategories();
if (result.success) {
print(result.data);
}Alle Fassungen eines Zeitraums - der Verlauf einer Berichtigung.
GET/api/invoice/vat_return/filings
Query parameters
yearstring | |
periodstring | |
filing_periodstring | MONTHLY oder QUARTERLY |
Responses
200Die abgegebenen Fassungen, aelteste zuerst
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/filings \
--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/vat_return/filings', 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/vat_return/filings"
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/vat_return/filings', [
'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/vat_return/filings"),
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/vat_return/filings")
.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/vat_return/filings"
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/vat_return_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 VatReturnController.getFilings();
if (result.success) {
print(result.data);
}Hält Zahlung oder Erstattung einer abgegebenen Voranmeldung fest.
POST/api/invoice/vat_return/filings/{id}/payment
Für die EÜR nach der Bruttomethode (billing_euer_gross_method): die gezahlte Umsatzsteuer ist Betriebsausgabe, die Erstattung Betriebseinnahme, jeweils am Tag der Zahlung. Ohne payment_date wird die Zahlung wieder entfernt.
Path parameters
idrequiredstring |
Request body application/json
payment_datestring (date)amountnumberPositiv gezahlt, negativ erstattet; ohne Angabe die Kennzahl 83
Responses
200Die Voranmeldung mit Zahlung
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/vat_return/filings/42/payment \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"payment_date": "2026-01-08",
"amount": 49.9
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({payment_date: '2026-01-08', amount: 49.9})
};
fetch('https://your-instance.iw-erp.de/api/invoice/vat_return/filings/42/payment', 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/vat_return/filings/42/payment"
payload = {
"payment_date": "2026-01-08",
"amount": 49.9
}
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/vat_return/filings/42/payment', [
'body' => '{"payment_date":"2026-01-08","amount":49.9}',
'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/vat_return/filings/42/payment"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"payment_date\":\"2026-01-08\",\"amount\":49.9}")
{
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, "{\"payment_date\":\"2026-01-08\",\"amount\":49.9}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/vat_return/filings/42/payment")
.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/vat_return/filings/42/payment"
payload := strings.NewReader("{\"payment_date\":\"2026-01-08\",\"amount\":49.9}")
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/vat_return_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 VatReturnController.recordPayment(filingId: 42, paymentDate: DateTime.fromJson({
"payment_date": "2026-01-08",
"amount": 49.9
}));
if (result.success) {
print(result.data);
}