VolunteerShift
List helper shifts
GET/api/time/volunteer_shift
Query parameters
idinteger | |
deletedboolean | Default value: false |
namestring | |
startstring | |
endstring | |
eventstring | |
createdstring | |
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 VolunteerShift objectsarray<VolunteerShift>
Show fields (16)
effective_credited_minutesintegerMinutes an attended helper is credited with.
signed_up_countintegerHelpers that are signed up or attended - cancelled sign-ups free their slot again.
open_slotsintegerFree slots, null when the shift has no limit.
idintegerPrimary key of the volunteer shift. Internal ID.
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent10Event the volunteer shift belongs to.
Show fields (45)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanidintegerPrimary key of the event. Internal ID.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
event_people_limitintegermaximum number of people that can attend the event
event_people_min_limitintegerminimum number of people that must attend the event
hide_event_people_limitbooleana setting to hide the event people limit in the frontend ui
has_wait_listbooleanThe event has a waiting list once it is full.
wait_list_confirmation_requiredbooleanParticipants from the waiting list must confirm their place.
trial_enabledbooleanTrial sessions (Schnuppern) are offered for this event. Off by default: the event has to opt in, the rule comes from trialPolicy, the event's category or the default rule.
can_sign_up_for_main_eventbooleanParticipants may sign up for the main event.
only_sign_up_for_main_eventbooleanParticipants may only sign up for the main event, not for sub-events.
start_timestring (date-time)Start of the event.
end_timestring (date-time)End of the event.
require_addressbooleanParticipants must enter an address when signing up.
require_contactbooleanParticipants must enter contact details when signing up.
require_billingbooleanParticipants must enter billing details when signing up.
allow_direct_billingbooleanrequire_direct_billingbooleanallow_budget_sign_upbooleanrequire_agebooleanParticipants must enter their age when signing up.
require_grade_levelbooleanParticipants must enter their school grade level when signing up.
require_free_note_field_idsstringIDs of the free note fields that participants must fill in.
generate_new_bookingsbooleanBookings are generated automatically for the event schedule.
generate_new_bookings_v2booleanBookings are generated with the second version of the schedule generator.
generate_ignore_sys_calendarbooleanGenerated bookings ignore the holidays of the system calendar.
generate_hour_startstring (date-time)Start time of the day for generated bookings.
generate_hour_endstring (date-time)End time of the day for generated bookings.
generate_day_of_weekintegerWeekday for generated bookings.
bitmask_days_of_weekintegerThis is a bitmask value of the days of the week the event occurs on
bitmask_hours_startintegerThis is a bitmask value of the hours an event starts on
summarized_date_timesstringThis is a string with the days and hours an event starts on
customer_detail_ctastringCall-to-action text shown in the customer app on the event detail page.
customer_badgestringBadge text shown on the event in the customer app.
bib_number_modestringVergabeart der Startnummern: OFF, MANUAL, AUTOMATIC oder BATCH. Greift nur, wenn der Event-Typ Startnummern hat (enableBibNumbers).
timing_gun_startstring (date-time)Startschuss; ohne Wert gilt startTime.
timing_public_livebooleanLive timing results are public.
timing_gps_trackingbooleanGPS tracking of participants is enabled for timing.
timing_self_check_inbooleanParticipants can check in themselves for timing.
ticket_sales_enabledbooleanTicketverkauf statt Anmeldung: Teilnehmer kaufen Tickets (Ticketarten = Event-Preise mit Kontingent und Verkaufszeitraum), jedes Ticket bekommt einen Code für den Check-in. Greift nur mit der Einstellung event_ticket_sales_enabled.
ticket_max_per_orderintegerHöchstzahl Tickets je Bestellung; ohne Wert gilt event_ticket_max_per_order_default.
ticket_personalizedbooleanPersonalisierte Tickets: jedes Ticket braucht den Namen des Teilnehmers. Sonst laufen alle Tickets einer Bestellung auf den Namen des Käufers.
ticket_seatingbooleanPlatzwahl beim Ticketverkauf: jedes Ticket bekommt einen freien Platz aus dem Saalplan des Raums (BaseBookable::ticketSeatingPlan); die Ticketart kann auf eine Zone (ticketSeatZone) beschränkt sein. Greift nur mit der Einstellung event_ticket_seating_enabled.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift', 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/time/volunteer_shift"
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/time/volunteer_shift', [
'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/time/volunteer_shift"),
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/time/volunteer_shift")
.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/time/volunteer_shift"
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/volunteer_shift_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 VolunteerShiftController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"description": "Text",
"effective_credited_minutes": 1,
"signed_up_count": 1,
"open_slots": 1,
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}
]Add a helper shift
POST/api/time/volunteer_shift
Request body application/json
dataVolunteerShift2Show fields (10)
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent12Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
Responses
200Add a new VolunteerShiftVolunteerShift
Show fields (16)
effective_credited_minutesintegerMinutes an attended helper is credited with.
signed_up_countintegerHelpers that are signed up or attended - cancelled sign-ups free their slot again.
open_slotsintegerFree slots, null when the shift has no limit.
idintegerPrimary key of the volunteer shift. Internal ID.
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent10Event the volunteer shift belongs to.
Show fields (45)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanidintegerPrimary key of the event. Internal ID.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
event_people_limitintegermaximum number of people that can attend the event
event_people_min_limitintegerminimum number of people that must attend the event
hide_event_people_limitbooleana setting to hide the event people limit in the frontend ui
has_wait_listbooleanThe event has a waiting list once it is full.
wait_list_confirmation_requiredbooleanParticipants from the waiting list must confirm their place.
trial_enabledbooleanTrial sessions (Schnuppern) are offered for this event. Off by default: the event has to opt in, the rule comes from trialPolicy, the event's category or the default rule.
can_sign_up_for_main_eventbooleanParticipants may sign up for the main event.
only_sign_up_for_main_eventbooleanParticipants may only sign up for the main event, not for sub-events.
start_timestring (date-time)Start of the event.
end_timestring (date-time)End of the event.
require_addressbooleanParticipants must enter an address when signing up.
require_contactbooleanParticipants must enter contact details when signing up.
require_billingbooleanParticipants must enter billing details when signing up.
allow_direct_billingbooleanrequire_direct_billingbooleanallow_budget_sign_upbooleanrequire_agebooleanParticipants must enter their age when signing up.
require_grade_levelbooleanParticipants must enter their school grade level when signing up.
require_free_note_field_idsstringIDs of the free note fields that participants must fill in.
generate_new_bookingsbooleanBookings are generated automatically for the event schedule.
generate_new_bookings_v2booleanBookings are generated with the second version of the schedule generator.
generate_ignore_sys_calendarbooleanGenerated bookings ignore the holidays of the system calendar.
generate_hour_startstring (date-time)Start time of the day for generated bookings.
generate_hour_endstring (date-time)End time of the day for generated bookings.
generate_day_of_weekintegerWeekday for generated bookings.
bitmask_days_of_weekintegerThis is a bitmask value of the days of the week the event occurs on
bitmask_hours_startintegerThis is a bitmask value of the hours an event starts on
summarized_date_timesstringThis is a string with the days and hours an event starts on
customer_detail_ctastringCall-to-action text shown in the customer app on the event detail page.
customer_badgestringBadge text shown on the event in the customer app.
bib_number_modestringVergabeart der Startnummern: OFF, MANUAL, AUTOMATIC oder BATCH. Greift nur, wenn der Event-Typ Startnummern hat (enableBibNumbers).
timing_gun_startstring (date-time)Startschuss; ohne Wert gilt startTime.
timing_public_livebooleanLive timing results are public.
timing_gps_trackingbooleanGPS tracking of participants is enabled for timing.
timing_self_check_inbooleanParticipants can check in themselves for timing.
ticket_sales_enabledbooleanTicketverkauf statt Anmeldung: Teilnehmer kaufen Tickets (Ticketarten = Event-Preise mit Kontingent und Verkaufszeitraum), jedes Ticket bekommt einen Code für den Check-in. Greift nur mit der Einstellung event_ticket_sales_enabled.
ticket_max_per_orderintegerHöchstzahl Tickets je Bestellung; ohne Wert gilt event_ticket_max_per_order_default.
ticket_personalizedbooleanPersonalisierte Tickets: jedes Ticket braucht den Namen des Teilnehmers. Sonst laufen alle Tickets einer Bestellung auf den Namen des Käufers.
ticket_seatingbooleanPlatzwahl beim Ticketverkauf: jedes Ticket bekommt einen freien Platz aus dem Saalplan des Raums (BaseBookable::ticketSeatingPlan); die Ticketart kann auf eine Zone (ticketSeatZone) beschränkt sein. Greift nur mit der Einstellung event_ticket_seating_enabled.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
curl --request POST \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
description: 'Text',
location: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
required_helpers: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift', 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/time/volunteer_shift"
payload = { "data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 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/time/volunteer_shift', [
'body' => '{"data":{"name":"Beispiel","description":"Text","location":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","required_helpers":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/time/volunteer_shift"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":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, "{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift")
.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/time/volunteer_shift"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":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/volunteer_shift_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/volunteer_shift.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await VolunteerShiftController.post(VolunteerShift.fromJson({
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"effective_credited_minutes": 1,
"signed_up_count": 1,
"open_slots": 1,
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}Get a single helper shift
GET/api/time/volunteer_shift/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single VolunteerShiftVolunteerShift
Show fields (16)
effective_credited_minutesintegerMinutes an attended helper is credited with.
signed_up_countintegerHelpers that are signed up or attended - cancelled sign-ups free their slot again.
open_slotsintegerFree slots, null when the shift has no limit.
idintegerPrimary key of the volunteer shift. Internal ID.
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent10Event the volunteer shift belongs to.
Show fields (45)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanidintegerPrimary key of the event. Internal ID.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
event_people_limitintegermaximum number of people that can attend the event
event_people_min_limitintegerminimum number of people that must attend the event
hide_event_people_limitbooleana setting to hide the event people limit in the frontend ui
has_wait_listbooleanThe event has a waiting list once it is full.
wait_list_confirmation_requiredbooleanParticipants from the waiting list must confirm their place.
trial_enabledbooleanTrial sessions (Schnuppern) are offered for this event. Off by default: the event has to opt in, the rule comes from trialPolicy, the event's category or the default rule.
can_sign_up_for_main_eventbooleanParticipants may sign up for the main event.
only_sign_up_for_main_eventbooleanParticipants may only sign up for the main event, not for sub-events.
start_timestring (date-time)Start of the event.
end_timestring (date-time)End of the event.
require_addressbooleanParticipants must enter an address when signing up.
require_contactbooleanParticipants must enter contact details when signing up.
require_billingbooleanParticipants must enter billing details when signing up.
allow_direct_billingbooleanrequire_direct_billingbooleanallow_budget_sign_upbooleanrequire_agebooleanParticipants must enter their age when signing up.
require_grade_levelbooleanParticipants must enter their school grade level when signing up.
require_free_note_field_idsstringIDs of the free note fields that participants must fill in.
generate_new_bookingsbooleanBookings are generated automatically for the event schedule.
generate_new_bookings_v2booleanBookings are generated with the second version of the schedule generator.
generate_ignore_sys_calendarbooleanGenerated bookings ignore the holidays of the system calendar.
generate_hour_startstring (date-time)Start time of the day for generated bookings.
generate_hour_endstring (date-time)End time of the day for generated bookings.
generate_day_of_weekintegerWeekday for generated bookings.
bitmask_days_of_weekintegerThis is a bitmask value of the days of the week the event occurs on
bitmask_hours_startintegerThis is a bitmask value of the hours an event starts on
summarized_date_timesstringThis is a string with the days and hours an event starts on
customer_detail_ctastringCall-to-action text shown in the customer app on the event detail page.
customer_badgestringBadge text shown on the event in the customer app.
bib_number_modestringVergabeart der Startnummern: OFF, MANUAL, AUTOMATIC oder BATCH. Greift nur, wenn der Event-Typ Startnummern hat (enableBibNumbers).
timing_gun_startstring (date-time)Startschuss; ohne Wert gilt startTime.
timing_public_livebooleanLive timing results are public.
timing_gps_trackingbooleanGPS tracking of participants is enabled for timing.
timing_self_check_inbooleanParticipants can check in themselves for timing.
ticket_sales_enabledbooleanTicketverkauf statt Anmeldung: Teilnehmer kaufen Tickets (Ticketarten = Event-Preise mit Kontingent und Verkaufszeitraum), jedes Ticket bekommt einen Code für den Check-in. Greift nur mit der Einstellung event_ticket_sales_enabled.
ticket_max_per_orderintegerHöchstzahl Tickets je Bestellung; ohne Wert gilt event_ticket_max_per_order_default.
ticket_personalizedbooleanPersonalisierte Tickets: jedes Ticket braucht den Namen des Teilnehmers. Sonst laufen alle Tickets einer Bestellung auf den Namen des Käufers.
ticket_seatingbooleanPlatzwahl beim Ticketverkauf: jedes Ticket bekommt einen freien Platz aus dem Saalplan des Raums (BaseBookable::ticketSeatingPlan); die Ticketart kann auf eine Zone (ticketSeatZone) beschränkt sein. Greift nur mit der Einstellung event_ticket_seating_enabled.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/volunteer_shift_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 VolunteerShiftController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"effective_credited_minutes": 1,
"signed_up_count": 1,
"open_slots": 1,
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}Update a helper shift
PUT/api/time/volunteer_shift/{id}
Path parameters
idrequiredstring |
Request body application/json
dataVolunteerShift2Show fields (10)
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent12Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
Responses
200Update a VolunteerShiftVolunteerShift
Show fields (16)
effective_credited_minutesintegerMinutes an attended helper is credited with.
signed_up_countintegerHelpers that are signed up or attended - cancelled sign-ups free their slot again.
open_slotsintegerFree slots, null when the shift has no limit.
idintegerPrimary key of the volunteer shift. Internal ID.
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent10Event the volunteer shift belongs to.
Show fields (45)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanidintegerPrimary key of the event. Internal ID.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
event_people_limitintegermaximum number of people that can attend the event
event_people_min_limitintegerminimum number of people that must attend the event
hide_event_people_limitbooleana setting to hide the event people limit in the frontend ui
has_wait_listbooleanThe event has a waiting list once it is full.
wait_list_confirmation_requiredbooleanParticipants from the waiting list must confirm their place.
trial_enabledbooleanTrial sessions (Schnuppern) are offered for this event. Off by default: the event has to opt in, the rule comes from trialPolicy, the event's category or the default rule.
can_sign_up_for_main_eventbooleanParticipants may sign up for the main event.
only_sign_up_for_main_eventbooleanParticipants may only sign up for the main event, not for sub-events.
start_timestring (date-time)Start of the event.
end_timestring (date-time)End of the event.
require_addressbooleanParticipants must enter an address when signing up.
require_contactbooleanParticipants must enter contact details when signing up.
require_billingbooleanParticipants must enter billing details when signing up.
allow_direct_billingbooleanrequire_direct_billingbooleanallow_budget_sign_upbooleanrequire_agebooleanParticipants must enter their age when signing up.
require_grade_levelbooleanParticipants must enter their school grade level when signing up.
require_free_note_field_idsstringIDs of the free note fields that participants must fill in.
generate_new_bookingsbooleanBookings are generated automatically for the event schedule.
generate_new_bookings_v2booleanBookings are generated with the second version of the schedule generator.
generate_ignore_sys_calendarbooleanGenerated bookings ignore the holidays of the system calendar.
generate_hour_startstring (date-time)Start time of the day for generated bookings.
generate_hour_endstring (date-time)End time of the day for generated bookings.
generate_day_of_weekintegerWeekday for generated bookings.
bitmask_days_of_weekintegerThis is a bitmask value of the days of the week the event occurs on
bitmask_hours_startintegerThis is a bitmask value of the hours an event starts on
summarized_date_timesstringThis is a string with the days and hours an event starts on
customer_detail_ctastringCall-to-action text shown in the customer app on the event detail page.
customer_badgestringBadge text shown on the event in the customer app.
bib_number_modestringVergabeart der Startnummern: OFF, MANUAL, AUTOMATIC oder BATCH. Greift nur, wenn der Event-Typ Startnummern hat (enableBibNumbers).
timing_gun_startstring (date-time)Startschuss; ohne Wert gilt startTime.
timing_public_livebooleanLive timing results are public.
timing_gps_trackingbooleanGPS tracking of participants is enabled for timing.
timing_self_check_inbooleanParticipants can check in themselves for timing.
ticket_sales_enabledbooleanTicketverkauf statt Anmeldung: Teilnehmer kaufen Tickets (Ticketarten = Event-Preise mit Kontingent und Verkaufszeitraum), jedes Ticket bekommt einen Code für den Check-in. Greift nur mit der Einstellung event_ticket_sales_enabled.
ticket_max_per_orderintegerHöchstzahl Tickets je Bestellung; ohne Wert gilt event_ticket_max_per_order_default.
ticket_personalizedbooleanPersonalisierte Tickets: jedes Ticket braucht den Namen des Teilnehmers. Sonst laufen alle Tickets einer Bestellung auf den Namen des Käufers.
ticket_seatingbooleanPlatzwahl beim Ticketverkauf: jedes Ticket bekommt einen freien Platz aus dem Saalplan des Raums (BaseBookable::ticketSeatingPlan); die Ticketart kann auf eine Zone (ticketSeatZone) beschränkt sein. Greift nur mit der Einstellung event_ticket_seating_enabled.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
description: 'Text',
location: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
required_helpers: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/42"
payload = { "data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 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/time/volunteer_shift/42', [
'body' => '{"data":{"name":"Beispiel","description":"Text","location":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","required_helpers":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/time/volunteer_shift/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":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, "{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":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/volunteer_shift_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/volunteer_shift.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await VolunteerShiftController.put(VolunteerShift.fromJson({
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"description": "Text",
"effective_credited_minutes": 1,
"signed_up_count": 1,
"open_slots": 1,
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}Update a helper shift
PATCH/api/time/volunteer_shift/{id}
Path parameters
idrequiredstring |
Request body application/json
dataVolunteerShift2Show fields (10)
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent12Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
Responses
200Update a VolunteerShiftVolunteerShift
Show fields (16)
effective_credited_minutesintegerMinutes an attended helper is credited with.
signed_up_countintegerHelpers that are signed up or attended - cancelled sign-ups free their slot again.
open_slotsintegerFree slots, null when the shift has no limit.
idintegerPrimary key of the volunteer shift. Internal ID.
namestringName of the volunteer shift.
descriptionstringDescription of the volunteer shift.
locationstringPlace where the volunteer shift takes place.
startstring (date-time)Start of the volunteer shift.
endstring (date-time)End of the volunteer shift.
required_helpersintegerHelpers needed. 0 = no limit.
credited_minutesintegerMinutes credited per attended helper. null = the length of the shift.
signup_untilstring (date-time)Sign-up closes at this point in time. null = until the shift starts.
eventBaseEvent10Event the volunteer shift belongs to.
Show fields (45)
ticketSeatingPlanIdintegerId of the seating plan, also for the public and the customer serialization.
bib_numbers_enabledbooleantiming_enabledbooleanidintegerPrimary key of the event. Internal ID.
public_subtitlestringSubtitle shown in the public event listing.
event_typestringType of the event, for example course, trip or tournament.
event_people_limitintegermaximum number of people that can attend the event
event_people_min_limitintegerminimum number of people that must attend the event
hide_event_people_limitbooleana setting to hide the event people limit in the frontend ui
has_wait_listbooleanThe event has a waiting list once it is full.
wait_list_confirmation_requiredbooleanParticipants from the waiting list must confirm their place.
trial_enabledbooleanTrial sessions (Schnuppern) are offered for this event. Off by default: the event has to opt in, the rule comes from trialPolicy, the event's category or the default rule.
can_sign_up_for_main_eventbooleanParticipants may sign up for the main event.
only_sign_up_for_main_eventbooleanParticipants may only sign up for the main event, not for sub-events.
start_timestring (date-time)Start of the event.
end_timestring (date-time)End of the event.
require_addressbooleanParticipants must enter an address when signing up.
require_contactbooleanParticipants must enter contact details when signing up.
require_billingbooleanParticipants must enter billing details when signing up.
allow_direct_billingbooleanrequire_direct_billingbooleanallow_budget_sign_upbooleanrequire_agebooleanParticipants must enter their age when signing up.
require_grade_levelbooleanParticipants must enter their school grade level when signing up.
require_free_note_field_idsstringIDs of the free note fields that participants must fill in.
generate_new_bookingsbooleanBookings are generated automatically for the event schedule.
generate_new_bookings_v2booleanBookings are generated with the second version of the schedule generator.
generate_ignore_sys_calendarbooleanGenerated bookings ignore the holidays of the system calendar.
generate_hour_startstring (date-time)Start time of the day for generated bookings.
generate_hour_endstring (date-time)End time of the day for generated bookings.
generate_day_of_weekintegerWeekday for generated bookings.
bitmask_days_of_weekintegerThis is a bitmask value of the days of the week the event occurs on
bitmask_hours_startintegerThis is a bitmask value of the hours an event starts on
summarized_date_timesstringThis is a string with the days and hours an event starts on
customer_detail_ctastringCall-to-action text shown in the customer app on the event detail page.
customer_badgestringBadge text shown on the event in the customer app.
bib_number_modestringVergabeart der Startnummern: OFF, MANUAL, AUTOMATIC oder BATCH. Greift nur, wenn der Event-Typ Startnummern hat (enableBibNumbers).
timing_gun_startstring (date-time)Startschuss; ohne Wert gilt startTime.
timing_public_livebooleanLive timing results are public.
timing_gps_trackingbooleanGPS tracking of participants is enabled for timing.
timing_self_check_inbooleanParticipants can check in themselves for timing.
ticket_sales_enabledbooleanTicketverkauf statt Anmeldung: Teilnehmer kaufen Tickets (Ticketarten = Event-Preise mit Kontingent und Verkaufszeitraum), jedes Ticket bekommt einen Code für den Check-in. Greift nur mit der Einstellung event_ticket_sales_enabled.
ticket_max_per_orderintegerHöchstzahl Tickets je Bestellung; ohne Wert gilt event_ticket_max_per_order_default.
ticket_personalizedbooleanPersonalisierte Tickets: jedes Ticket braucht den Namen des Teilnehmers. Sonst laufen alle Tickets einer Bestellung auf den Namen des Käufers.
ticket_seatingbooleanPlatzwahl beim Ticketverkauf: jedes Ticket bekommt einen freien Platz aus dem Saalplan des Raums (BaseBookable::ticketSeatingPlan); die Ticketart kann auf eine Zone (ticketSeatZone) beschränkt sein. Greift nur mit der Einstellung event_ticket_seating_enabled.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
name: 'Beispiel',
description: 'Text',
location: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00',
required_helpers: 1
}
})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/42"
payload = { "data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
} }
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/time/volunteer_shift/42', [
'body' => '{"data":{"name":"Beispiel","description":"Text","location":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00","required_helpers":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.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/volunteer_shift/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":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, "{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":1}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/42"
payload := strings.NewReader("{\"data\":{\"name\":\"Beispiel\",\"description\":\"Text\",\"location\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\",\"required_helpers\":1}}")
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/time/volunteer_shift/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"name": "Beispiel",
"description": "Text",
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"description": "Text",
"effective_credited_minutes": 1,
"signed_up_count": 1,
"open_slots": 1,
"location": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"required_helpers": 1
}Archive a helper shift. Credits of attended helpers stay.
DELETE/api/time/volunteer_shift/{id}
Path parameters
idrequiredstring |
Responses
default
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/time/volunteer_shift/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/volunteer_shift_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 VolunteerShiftController.delete('42');
if (result.success) {
print(result.data);
}