VolunteerShiftAssignment
List the helpers of shifts (filter `shift`, `person`, `status`)
GET/api/time/volunteer_shift_assignment
Query parameters
idinteger | |
shiftstring | |
personstring | |
statusstring | |
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 VolunteerShiftAssignment objectsarray<VolunteerShiftAssignment>
Show fields (8)
hour_entry_idintegeridintegerPrimary key of the volunteer shift assignment. Internal ID.
shiftVolunteerShift3Volunteer shift the assignment belongs to.
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.
eventBaseEvent25Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
personCRMPerson27Person assigned to the shift.
Show fields (11)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
cancelled_atstring (date-time)Time the assignment was cancelled.
createdstring (date-time)Time the assignment was created.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment \
--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_assignment', 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_assignment"
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_assignment', [
'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_assignment"),
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_assignment")
.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_assignment"
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_assignment_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 VolunteerShiftAssignmentController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"hour_entry_id": 42,
"shift": {
"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
},
"person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"number": 1,
"manual_number": 1,
"number_string": "string",
"gender": "string",
"nickname": "string",
"preferred_color_hex": "string"
},
"status": "string",
"note": "string",
"cancelled_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00"
}
]Add a helper to a shift. The administration may fill a shift beyond its limit.
POST/api/time/volunteer_shift_assignment
Request body application/json
dataVolunteerShiftAssignment2Show fields (4)
shiftVolunteerShift4Volunteer shift the assignment belongs to.
personCRMPerson34Person assigned to the shift.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
Responses
200Add a new VolunteerShiftAssignmentVolunteerShiftAssignment
Show fields (8)
hour_entry_idintegeridintegerPrimary key of the volunteer shift assignment. Internal ID.
shiftVolunteerShift3Volunteer shift the assignment belongs to.
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.
eventBaseEvent25Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
personCRMPerson27Person assigned to the shift.
Show fields (11)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
cancelled_atstring (date-time)Time the assignment was cancelled.
createdstring (date-time)Time the assignment was created.
curl --request POST \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"status": "string",
"note": "string"
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({data: {status: 'string', note: 'string'}})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment', 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_assignment"
payload = { "data": {
"status": "string",
"note": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment', [
'body' => '{"data":{"status":"string","note":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"status\":\"string\",\"note\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment")
.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_assignment"
payload := strings.NewReader("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/volunteer_shift_assignment_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/volunteer_shift_assignment.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await VolunteerShiftAssignmentController.post(VolunteerShiftAssignment.fromJson({
"status": "string",
"note": "string"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"hour_entry_id": 42,
"shift": {
"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
},
"person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"number": 1,
"manual_number": 1,
"number_string": "string",
"gender": "string",
"nickname": "string",
"preferred_color_hex": "string"
},
"status": "string",
"note": "string",
"cancelled_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00"
}Get a single helper assignment
GET/api/time/volunteer_shift_assignment/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single VolunteerShiftAssignmentVolunteerShiftAssignment
Show fields (8)
hour_entry_idintegeridintegerPrimary key of the volunteer shift assignment. Internal ID.
shiftVolunteerShift3Volunteer shift the assignment belongs to.
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.
eventBaseEvent25Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
personCRMPerson27Person assigned to the shift.
Show fields (11)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
cancelled_atstring (date-time)Time the assignment was cancelled.
createdstring (date-time)Time the assignment was created.
curl --request GET \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment_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 VolunteerShiftAssignmentController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"hour_entry_id": 42,
"shift": {
"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
},
"person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"number": 1,
"manual_number": 1,
"number_string": "string",
"gender": "string",
"nickname": "string",
"preferred_color_hex": "string"
},
"status": "string",
"note": "string",
"cancelled_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00"
}Change the status of a helper: `attended` credits the shift, `no_show` / `cancelled` remove that credit again
PUT/api/time/volunteer_shift_assignment/{id}
Path parameters
idrequiredstring |
Request body application/json
dataVolunteerShiftAssignment2Show fields (4)
shiftVolunteerShift4Volunteer shift the assignment belongs to.
personCRMPerson34Person assigned to the shift.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
Responses
200Update a VolunteerShiftAssignmentVolunteerShiftAssignment
Show fields (8)
hour_entry_idintegeridintegerPrimary key of the volunteer shift assignment. Internal ID.
shiftVolunteerShift3Volunteer shift the assignment belongs to.
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.
eventBaseEvent25Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
personCRMPerson27Person assigned to the shift.
Show fields (11)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
cancelled_atstring (date-time)Time the assignment was cancelled.
createdstring (date-time)Time the assignment was created.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"status": "string",
"note": "string"
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({data: {status: 'string', note: 'string'}})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/42"
payload = { "data": {
"status": "string",
"note": "string"
} }
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_assignment/42', [
'body' => '{"data":{"status":"string","note":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"status\":\"string\",\"note\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/42"
payload := strings.NewReader("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
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_assignment_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/volunteer_shift_assignment.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await VolunteerShiftAssignmentController.put(VolunteerShiftAssignment.fromJson({
"status": "string",
"note": "string"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"hour_entry_id": 42,
"shift": {
"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
},
"person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"number": 1,
"manual_number": 1,
"number_string": "string",
"gender": "string",
"nickname": "string",
"preferred_color_hex": "string"
},
"status": "string",
"note": "string",
"cancelled_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00"
}Change the status of a helper: `attended` credits the shift, `no_show` / `cancelled` remove that credit again
PATCH/api/time/volunteer_shift_assignment/{id}
Path parameters
idrequiredstring |
Request body application/json
dataVolunteerShiftAssignment2Show fields (4)
shiftVolunteerShift4Volunteer shift the assignment belongs to.
personCRMPerson34Person assigned to the shift.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
Responses
200Update a VolunteerShiftAssignmentVolunteerShiftAssignment
Show fields (8)
hour_entry_idintegeridintegerPrimary key of the volunteer shift assignment. Internal ID.
shiftVolunteerShift3Volunteer shift the assignment belongs to.
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.
eventBaseEvent25Event the volunteer shift belongs to.
deletedbooleanThe volunteer shift is deleted.
createdstring (date-time)Time the volunteer shift was created.
updatedstring (date-time)Time the volunteer shift was last changed.
personCRMPerson27Person assigned to the shift.
Show fields (11)
idintegerPrimary key of the person. Internal ID.
first_namestringFirst name of the person.
last_namestringLast name of the person.
numberintegerMember or customer number of the person.
manual_numberintegerNumber set manually instead of the automatic number.
number_stringstringMember or customer number as text, including prefix.
genderstringGender of the person.
titlestringAcademic or other title of the person.
nicknamestringNickname of the person.
preferred_color_hexstringPreferred color of the person as hex value.
avatar_tokenstringToken of the avatar image.
statusstringStatus of the assignment, for example assigned or cancelled.
notestringNote on the assignment.
cancelled_atstring (date-time)Time the assignment was cancelled.
createdstring (date-time)Time the assignment was created.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"status": "string",
"note": "string"
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({data: {status: 'string', note: 'string'}})
};
fetch('https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/42"
payload = { "data": {
"status": "string",
"note": "string"
} }
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_assignment/42', [
'body' => '{"data":{"status":"string","note":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"status\":\"string\",\"note\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/42"
payload := strings.NewReader("{\"data\":{\"status\":\"string\",\"note\":\"string\"}}")
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_assignment/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"status": "string",
"note": "string"
}
}),
);
print(response.body);{
"id": 42,
"hour_entry_id": 42,
"shift": {
"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
},
"person": {
"id": 42,
"first_name": "Lena",
"last_name": "Hartmann",
"title": "Beispiel",
"number": 1,
"manual_number": 1,
"number_string": "string",
"gender": "string",
"nickname": "string",
"preferred_color_hex": "string"
},
"status": "string",
"note": "string",
"cancelled_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00"
}Remove a helper from a shift together with an unsettled credit
DELETE/api/time/volunteer_shift_assignment/{id}
Path parameters
idrequiredstring |
Responses
default
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/time/volunteer_shift_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment/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_assignment_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 VolunteerShiftAssignmentController.delete('42');
if (result.success) {
print(result.data);
}