BillingDryRun
This method will get all BillingDryRun objects - without the simulated invoices
GET/api/invoice/billing_dry_run
Query parameters
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
200Returns a list of BillingDryRun objectsarray<BillingDryRun>
Show fields (22)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/billing_dry_run \
--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/billing_dry_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/billing_dry_run"
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/billing_dry_run', [
'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/billing_dry_run"),
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/billing_dry_run")
.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/billing_dry_run"
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/billing_dry_run_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 BillingDryRunController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1,
"skipped_invoice_count": 1
}
]Start a new simulated billing run ("dry run").
POST/api/invoice/billing_dry_run
The run is executed in the background. Nothing is persisted by the simulation itself - only the resulting BillingDryRun record with its items is stored. Poll the returned record until its status is done or failed.
Request body application/json
dataBillingDryRun2Show fields (3)
billing_payment_profileBillingPaymentProfile6Payment profile used for the dry run.
billing_datestring (date-time)Billing date used for the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200The scheduled dry runBillingDryRun3
Show fields (23)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
triggered_by_userUser14Login user who started the dry run.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request POST \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
billing_payment_profile: {deleted: true},
billing_date: '2026-10-15T09:30:00+02:00',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/billing_dry_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/billing_dry_run"
payload = { "data": {
"billing_payment_profile": { "deleted": True },
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": True
} }
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/billing_dry_run', [
'body' => '{"data":{"billing_payment_profile":{"deleted":true},"billing_date":"2026-10-15T09:30:00+02:00","deleted":true}}',
'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/billing_dry_run"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
{
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, "{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/billing_dry_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/billing_dry_run"
payload := strings.NewReader("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
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/billing_dry_run_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/billing_dry_run.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await BillingDryRunController.post(BillingDryRun.fromJson({
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"triggered_by_user": {
"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"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1
}This method will get a single BillingDryRun with the given id including all simulated invoices
GET/api/invoice/billing_dry_run/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Returns a single BillingDryRunBillingDryRun3
Show fields (23)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
triggered_by_userUser14Login user who started the dry run.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
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/billing_dry_run/42 \
--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/billing_dry_run/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/billing_dry_run/42"
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/billing_dry_run/42', [
'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/billing_dry_run/42"),
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/billing_dry_run/42")
.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/billing_dry_run/42"
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/billing_dry_run_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 BillingDryRunController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"triggered_by_user": {
"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"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1
}Archive a BillingDryRun so it disappears from the list without losing its result.
PUT/api/invoice/billing_dry_run/{identifier}
Deleting a run drops its simulated invoices and its log for good, which is the right thing once a result was reviewed. Archiving is the reversible way out of the list for a result one wants to keep - it can still be opened and exported, and the flag can be taken back. Everything else about a run is written by the simulation itself, so the deleted flag is the only field this accepts.
Path parameters
identifierrequiredstring |
Request body application/json
dataBillingDryRun4Show fields (3)
billing_payment_profileBillingPaymentProfile8Payment profile used for the dry run.
billing_datestring (date-time)Billing date used for the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200The updated BillingDryRunBillingDryRun3
Show fields (23)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
triggered_by_userUser14Login user who started the dry run.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
billing_payment_profile: {deleted: true},
billing_date: '2026-10-15T09:30:00+02:00',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/billing_dry_run/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/billing_dry_run/42"
payload = { "data": {
"billing_payment_profile": { "deleted": True },
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": True
} }
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/billing_dry_run/42', [
'body' => '{"data":{"billing_payment_profile":{"deleted":true},"billing_date":"2026-10-15T09:30:00+02:00","deleted":true}}',
'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/billing_dry_run/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
{
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, "{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/billing_dry_run/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/billing_dry_run/42"
payload := strings.NewReader("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
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/billing_dry_run_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/billing_dry_run.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await BillingDryRunController.put(BillingDryRun.fromJson({
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"triggered_by_user": {
"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"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1
}Archive a BillingDryRun so it disappears from the list without losing its result.
PATCH/api/invoice/billing_dry_run/{identifier}
Deleting a run drops its simulated invoices and its log for good, which is the right thing once a result was reviewed. Archiving is the reversible way out of the list for a result one wants to keep - it can still be opened and exported, and the flag can be taken back. Everything else about a run is written by the simulation itself, so the deleted flag is the only field this accepts.
Path parameters
identifierrequiredstring |
Request body application/json
dataBillingDryRun4Show fields (3)
billing_payment_profileBillingPaymentProfile8Payment profile used for the dry run.
billing_datestring (date-time)Billing date used for the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
Responses
200The updated BillingDryRunBillingDryRun3
Show fields (23)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
triggered_by_userUser14Login user who started the dry run.
Show fields (10)
idintegerPrimary key of the user. Internal ID of the login user.
namestringDisplay name of the user. Shown in the UI and in audit entries.
usernamestringLogin name of the user. Must be unique across all users.
emailstringE-mail address of the user. Used for login notifications, password resets and as a login alias.
positioningeneralstringFree text describing the position or role of the user.
crm_personCRMPerson10CRM person linked to this login user. Connects the login account with the person record.
profile_picture_urlstringURL of the profile picture of the user.
archivedbooleanMarks the user as archived. Archived users are kept for history and are not active.
require2fabooleanTwo-factor authentication is required for this user.
search_stringstringText that the entity can be searched by.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
billing_payment_profile: {deleted: true},
billing_date: '2026-10-15T09:30:00+02:00',
deleted: true
}
})
};
fetch('https://your-instance.iw-erp.de/api/invoice/billing_dry_run/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/billing_dry_run/42"
payload = { "data": {
"billing_payment_profile": { "deleted": True },
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": True
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42', [
'body' => '{"data":{"billing_payment_profile":{"deleted":true},"billing_date":"2026-10-15T09:30:00+02:00","deleted":true}}',
'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.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
{
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, "{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42")
.patch(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/billing_dry_run/42"
payload := strings.NewReader("{\"data\":{\"billing_payment_profile\":{\"deleted\":true},\"billing_date\":\"2026-10-15T09:30:00+02:00\",\"deleted\":true}}")
req, _ := http.NewRequest("PATCH", 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 package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.patch(
Uri.parse('https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"billing_payment_profile": {
"deleted": true
},
"billing_date": "2026-10-15T09:30:00+02:00",
"deleted": true
}
}),
);
print(response.body);{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"triggered_by_user": {
"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"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1
}Delete a BillingDryRun together with its simulated invoices.
DELETE/api/invoice/billing_dry_run/{identifier}
The record is removed for good instead of being flagged as deleted: a run holds up to BillingDryRunCollector::MAX_ITEMS simulated invoices with their positions and a log of a few hundred kilobytes, none of which describes anything that ever happened. Keeping that around after the result was reviewed only fills up the database.
A run that is still scheduled or executing is kept - the background process would fail on its own result.
Path parameters
identifierrequiredstring |
Responses
200The deleted BillingDryRunBillingDryRun
Show fields (22)
idintegerPrimary key of the billing dry run. Internal ID.
billing_payment_profileBillingPaymentProfile10Payment profile used for the dry run.
Show fields (15)
idintegerPrimary key of the payment profile. Internal ID.
payout_typestringType of payout, for example SEPA direct debit or transfer.
auto_modebooleanPayments are created automatically.
is_defaultbooleanDefault payment profile.
is_event_defaultbooleanDefault payment profile for events.
is_donation_defaultbooleanDefault payment profile for donations.
execution_daystringDay of the month the payments are executed.
next_execution_datestring (date-time)Date of the next execution.
booking_daystringDay of the month the payments are booked.
next_booking_datestring (date-time)Date of the next booking.
force_billing_due_date_to_next_booking_datebooleanForce the due date of the invoice to the next booking date.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
statusstringStatus of the dry run, for example running or finished.
billing_datestring (date-time)Billing date used for the dry run.
started_atstring (date-time)Time the dry run started.
finished_atstring (date-time)Time the dry run finished.
company_countintegerNumber of companies checked.
invoice_countintegerNumber of invoices that would be created.
saved_invoice_countintegerNumber of invoices that were saved.
skipped_invoice_countintegerNumber of invoices that were skipped.
position_countintegerNumber of positions on all invoices.
mail_countintegerNumber of invoices sent by e-mail.
postal_countintegerNumber of invoices sent by post.
sum_nettonumber (float)Sum of the net values.
sum_bruttonumber (float)Sum of the gross values.
sum_taxnumber (float)Sum of the tax values.
log_lengthintegerLength of the log of the dry run.
stored_item_countintegerNumber of items stored by the dry run.
error_messagestringError message of the dry run.
deletedbooleanThis property is used to mark an entity as deleted / archived
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'DELETE', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/invoice/billing_dry_run/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/billing_dry_run/42"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.delete(url, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42', [
'headers' => [
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Delete,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42"),
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/billing_dry_run/42")
.delete(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/billing_dry_run/42"
req, _ := http.NewRequest("DELETE", 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/billing_dry_run_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 BillingDryRunController.delete('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"billing_payment_profile": {
"id": 42,
"name": "Beispiel",
"payout_type": "string",
"auto_mode": true,
"is_default": true,
"is_event_default": true,
"is_donation_default": true,
"execution_day": "string",
"next_execution_date": "2026-10-15T09:30:00+02:00",
"booking_day": "string"
},
"status": "string",
"billing_date": "2026-10-15T09:30:00+02:00",
"started_at": "2026-10-15T09:30:00+02:00",
"finished_at": "2026-10-15T09:30:00+02:00",
"company_count": 1,
"invoice_count": 1,
"saved_invoice_count": 1,
"skipped_invoice_count": 1
}Downloads the console output of a simulated billing run as a plain text file.
GET/api/invoice/billing_dry_run/{identifier}/log
The log holds one line per simulated invoice and reaches several megabytes on a large installation. Sending it inside the JSON detail response made every reload of the result view slow, so it is offered as a file instead.
Path parameters
identifierrequiredstring |
Responses
200The log of the BillingDryRun as a text file
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42/log \
--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/billing_dry_run/42/log', 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/billing_dry_run/42/log"
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/billing_dry_run/42/log', [
'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/billing_dry_run/42/log"),
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/billing_dry_run/42/log")
.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/billing_dry_run/42/log"
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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final response = await http.get(
Uri.parse('https://your-instance.iw-erp.de/api/invoice/billing_dry_run/42/log'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);This method will get all simulated invoices of a single BillingDryRun
GET/api/invoice/billing_dry_run_item
Query parameters
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
200Returns a list of BillingDryRunItem objectsarray<BillingDryRunItem>
Show fields (21)
idintegerPrimary key of the dry run item. Internal ID.
company_idintegerID of the company to be billed.
company_numberstringNumber of the company to be billed.
company_namestringName of the company to be billed.
sourcestringSource of the item, for example event or membership.
accounting_type_namestringName of the accounting type.
invoice_messagestringMessage that would be printed on the invoice.
start_datestring (date-time)Start of the billed period.
end_datestring (date-time)End of the billed period.
due_datestring (date-time)Due date of the invoice.
netto_valuenumber (float)Net value of the invoice.
brutto_valuenumber (float)Gross value of the invoice.
tax_valuenumber (float)Tax value of the invoice.
position_countintegerNumber of positions on the invoice.
time_report_countintegerNumber of time reports included.
would_be_persistedbooleanThe invoice would be saved in a real run.
skip_reasonstringReason the invoice would be skipped.
send_mailbooleanThe invoice would be sent by e-mail.
send_postalbooleanThe invoice would be sent by post.
recipient_emailstringE-mail address the invoice would be sent to.
positionsarray<object>Positions of the invoice as JSON.
curl --request GET \
--url https://your-instance.iw-erp.de/api/invoice/billing_dry_run_item \
--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/billing_dry_run_item', 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/billing_dry_run_item"
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/billing_dry_run_item', [
'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/billing_dry_run_item"),
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/billing_dry_run_item")
.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/billing_dry_run_item"
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/billing_dry_run_item_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 BillingDryRunItemController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"company_name": "Beispiel",
"accounting_type_name": "Beispiel",
"send_mail": true,
"recipient_email": "lena.hartmann@example.org",
"company_id": 42,
"company_number": "string",
"source": "string",
"invoice_message": "string",
"start_date": "2026-10-15T09:30:00+02:00"
}
]