Booking substitution
Event / Buchungsvertretung
Das Protokoll: wer was wann und über welchen Kanal getan hat.
GET/api/event/booking_substitution_log
Query-Parameter
idstring | |
actionstring | |
channelstring | |
substitutionstring | |
bookingstring | |
eventstring | |
actorPersonstring | |
fromPersonstring | |
toPersonstring | |
slotstring | |
createdstring | |
searchStringstring | Text, nach dem in der Liste gesucht wird |
orderFieldNamestring | Name des Bestellfelds |
orderFieldSortstring | SortiermodusErlaubt: DESCASC |
pageinteger | Seite der Liste |
pageSizeinteger | Anzahl der Einträge je Seite |
withMaxPageNumberstring | gibt die Anzahl verfügbarer Seiten als Header zurück, wenn dies gesetzt ist |
Antworten
200Liefert eine Liste der EventBookingSubstitutionLog-Objekte, neueste zuerst.array<EventBookingSubstitutionLog>
Felder anzeigen (12)
substitution_idintegerbooking_idintegeridintegerPrimärschlüssel des Protokolleintrags. Interne ID.
booking_labelstringBezeichnung der Buchung zum Zeitpunkt des Eintrags.
slotintegerPlatz der Vertretung, zum Beispiel die Position in der Liste.
actionstringProtokollierte Aktion, zum Beispiel beansprucht oder besetzt.
actor_namestringName der handelnden Person oder des Benutzers zum Zeitpunkt der Aktion bzw. des Systembenutzers.
channelstringKanal der Aktion, zum Beispiel App oder E-Mail.
from_statestringStatus vor der Änderung.
to_statestringStatus nach der Änderung.
messagestringMit dem Eintrag verfasste Nachricht.
createdstring (date-time)Zeitpunkt, zu dem der Eintrag protokolliert wurde.
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution_log \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution_log', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution_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://eure-instanz.iw-erp.de/api/event/booking_substitution_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://eure-instanz.iw-erp.de/api/event/booking_substitution_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://eure-instanz.iw-erp.de/api/event/booking_substitution_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://eure-instanz.iw-erp.de/api/event/booking_substitution_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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.getLog();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"actor_name": "Beispiel",
"substitution_id": 42,
"booking_id": 42,
"booking_label": "string",
"slot": 1,
"action": "string",
"channel": "string",
"from_state": "string",
"to_state": "string"
}
]Alle Vertretungen; Standardreihenfolge nach Terminbeginn.
GET/api/event/booking_substitution
Query-Parameter
idstring | |
statestring | |
reasonstring | |
slotstring | 1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter. |
bookingstring | |
eventstring | |
originalPersonstring | |
candidatePersonstring | Wer den Termin angefragt oder übernommen hat bzw. wem ihn das Büro zugewiesen hat. | Erforderliches Zugriffsrecht: SCOPE |
bookingStartstring | Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde. |
filledViastring | |
qualificationSourcestring | |
sourceTicketstring | |
sourceNonWorkTimeRequeststring | |
createdstring | |
updatedstring | |
searchStringstring | Text, nach dem in der Liste gesucht wird |
orderFieldNamestring | Name des Bestellfelds |
orderFieldSortstring | SortiermodusErlaubt: DESCASC |
pageinteger | Seite der Liste |
pageSizeinteger | Anzahl der Einträge je Seite |
withMaxPageNumberstring | gibt die Anzahl verfügbarer Seiten als Header zurück, wenn dies gesetzt ist |
Antworten
200Liefert eine Liste der EventBookingSubstitution-Objekte.array<EventBookingSubstitution>
Felder anzeigen (24)
booking_idintegersource_ticket_idintegersource_non_work_time_request_idintegeridintegerPrimärschlüssel der Vertretung. Interne ID.
lock_versionintegerVersion, die parallele Änderungen an der Vertretung verhindert.
booking_startstring (date-time)Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde.
booking_endstring (date-time)Ende der Buchung, die eine Vertretung benötigt.
booking_labelstringName und Beginn des Termins bei der Anlage, für die Historie.
slotinteger1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter.
reasonstringGrund der Vertretung, zum Beispiel Krankheit.
statestringStatus der Vertretung, zum Beispiel offen, übernommen oder besetzt.
qualification_match_modestringWie die Qualifikationen von Vertretungen abgeglichen werden.
qualification_sourcestringQuelle der Qualifikationen, die zur Suche nach Vertretungen verwendet werden.
filled_viastringWie die Vertretung besetzt wurde, zum Beispiel durch einen Trainer oder durch das Personal.
claimed_atstring (date-time)Zeitpunkt, zu dem die Vertretung angefragt wurde.
filled_atstring (date-time)Zeitpunkt, zu dem die Vertretung besetzt wurde.
decided_atstring (date-time)Zeitpunkt, zu dem über die Vertretung entschieden wurde.
decided_by_usernamestringAnmeldename der Person, die über die Vertretung entschieden hat.
decision_notestringAnmerkung zur Entscheidung.
closed_atstring (date-time)Zeitpunkt, zu dem die Vertretung geschlossen wurde.
notified_atstring (date-time)Zeitpunkt, zu dem die möglichen Ersatzpersonen zuletzt benachrichtigt wurden.
notified_countintegerAnzahl der benachrichtigten möglichen Vertretungen.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution"
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://eure-instanz.iw-erp.de/api/event/booking_substitution', [
'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://eure-instanz.iw-erp.de/api/event/booking_substitution"),
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://eure-instanz.iw-erp.de/api/event/booking_substitution")
.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://eure-instanz.iw-erp.de/api/event/booking_substitution"
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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"decided_by_username": "lena.hartmann@example.org",
"booking_id": 42,
"source_ticket_id": 42,
"source_non_work_time_request_id": 42,
"lock_version": 1,
"booking_start": "2026-10-15T09:30:00+02:00",
"booking_end": "2026-10-15T09:30:00+02:00",
"booking_label": "string",
"slot": 1
}
]Sucht eine Vertretung für einen Platz eines Termins. Eine noch im Platz stehende Person wird herausgenommen und wird zum ursprünglichen Trainer.
POST/api/event/booking_substitution
Request-Body application/json
bookingintegerslotintegernotestring
Antworten
200Die eröffnete VertretungEventBookingSubstitution
Felder anzeigen (24)
booking_idintegersource_ticket_idintegersource_non_work_time_request_idintegeridintegerPrimärschlüssel der Vertretung. Interne ID.
lock_versionintegerVersion, die parallele Änderungen an der Vertretung verhindert.
booking_startstring (date-time)Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde.
booking_endstring (date-time)Ende der Buchung, die eine Vertretung benötigt.
booking_labelstringName und Beginn des Termins bei der Anlage, für die Historie.
slotinteger1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter.
reasonstringGrund der Vertretung, zum Beispiel Krankheit.
statestringStatus der Vertretung, zum Beispiel offen, übernommen oder besetzt.
qualification_match_modestringWie die Qualifikationen von Vertretungen abgeglichen werden.
qualification_sourcestringQuelle der Qualifikationen, die zur Suche nach Vertretungen verwendet werden.
filled_viastringWie die Vertretung besetzt wurde, zum Beispiel durch einen Trainer oder durch das Personal.
claimed_atstring (date-time)Zeitpunkt, zu dem die Vertretung angefragt wurde.
filled_atstring (date-time)Zeitpunkt, zu dem die Vertretung besetzt wurde.
decided_atstring (date-time)Zeitpunkt, zu dem über die Vertretung entschieden wurde.
decided_by_usernamestringAnmeldename der Person, die über die Vertretung entschieden hat.
decision_notestringAnmerkung zur Entscheidung.
closed_atstring (date-time)Zeitpunkt, zu dem die Vertretung geschlossen wurde.
notified_atstring (date-time)Zeitpunkt, zu dem die möglichen Ersatzpersonen zuletzt benachrichtigt wurden.
notified_countintegerAnzahl der benachrichtigten möglichen Vertretungen.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request POST \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"booking": 1,
"slot": 1,
"note": "string"
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({booking: 1, slot: 1, note: 'string'})
};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution"
payload = {
"booking": 1,
"slot": 1,
"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://eure-instanz.iw-erp.de/api/event/booking_substitution', [
'body' => '{"booking":1,"slot":1,"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://eure-instanz.iw-erp.de/api/event/booking_substitution"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"booking\":1,\"slot\":1,\"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, "{\"booking\":1,\"slot\":1,\"note\":\"string\"}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/booking_substitution")
.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://eure-instanz.iw-erp.de/api/event/booking_substitution"
payload := strings.NewReader("{\"booking\":1,\"slot\":1,\"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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.open(bookingId: 42);
if (result.success) {
print(result.data);
}{
"id": 42,
"decided_by_username": "lena.hartmann@example.org",
"booking_id": 42,
"source_ticket_id": 42,
"source_non_work_time_request_id": 42,
"lock_version": 1,
"booking_start": "2026-10-15T09:30:00+02:00",
"booking_end": "2026-10-15T09:30:00+02:00",
"booking_label": "string",
"slot": 1
}Liefert einen einzelnen Eintrag zur Buchungsvertretung bei Veranstaltungen.
GET/api/event/booking_substitution/{id}
Pfad-Parameter
idPflichtstring |
Antworten
200Liefert ein einzelnes EventBookingSubstitution-Objekt.EventBookingSubstitution
Felder anzeigen (24)
booking_idintegersource_ticket_idintegersource_non_work_time_request_idintegeridintegerPrimärschlüssel der Vertretung. Interne ID.
lock_versionintegerVersion, die parallele Änderungen an der Vertretung verhindert.
booking_startstring (date-time)Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde.
booking_endstring (date-time)Ende der Buchung, die eine Vertretung benötigt.
booking_labelstringName und Beginn des Termins bei der Anlage, für die Historie.
slotinteger1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter.
reasonstringGrund der Vertretung, zum Beispiel Krankheit.
statestringStatus der Vertretung, zum Beispiel offen, übernommen oder besetzt.
qualification_match_modestringWie die Qualifikationen von Vertretungen abgeglichen werden.
qualification_sourcestringQuelle der Qualifikationen, die zur Suche nach Vertretungen verwendet werden.
filled_viastringWie die Vertretung besetzt wurde, zum Beispiel durch einen Trainer oder durch das Personal.
claimed_atstring (date-time)Zeitpunkt, zu dem die Vertretung angefragt wurde.
filled_atstring (date-time)Zeitpunkt, zu dem die Vertretung besetzt wurde.
decided_atstring (date-time)Zeitpunkt, zu dem über die Vertretung entschieden wurde.
decided_by_usernamestringAnmeldename der Person, die über die Vertretung entschieden hat.
decision_notestringAnmerkung zur Entscheidung.
closed_atstring (date-time)Zeitpunkt, zu dem die Vertretung geschlossen wurde.
notified_atstring (date-time)Zeitpunkt, zu dem die möglichen Ersatzpersonen zuletzt benachrichtigt wurden.
notified_countintegerAnzahl der benachrichtigten möglichen Vertretungen.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution/42 \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution/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://eure-instanz.iw-erp.de/api/event/booking_substitution/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://eure-instanz.iw-erp.de/api/event/booking_substitution/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://eure-instanz.iw-erp.de/api/event/booking_substitution/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://eure-instanz.iw-erp.de/api/event/booking_substitution/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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"decided_by_username": "lena.hartmann@example.org",
"booking_id": 42,
"source_ticket_id": 42,
"source_non_work_time_request_id": 42,
"lock_version": 1,
"booking_start": "2026-10-15T09:30:00+02:00",
"booking_end": "2026-10-15T09:30:00+02:00",
"booking_label": "string",
"slot": 1
}Jedes Poolmitglied mit den Gründen, die es blockieren würden; geeignete Personen zuerst. Das Büro kann Personen ebenfalls mit Gründen zuweisen, mit einer Notiz.
GET/api/event/booking_substitution/{id}/candidates
Pfad-Parameter
idPflichtstring |
Query-Parameter
onlyEligibleboolean |
Antworten
200Liste von {person, eligible, reasons}
curl --request GET \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates"
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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates', [
'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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates"),
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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates")
.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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/candidates"
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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.getCandidates(42);
if (result.success) {
print(result.data);
}Eignung einer Person (z. B. bevor jemand außerhalb des Pools zugewiesen wird).
GET/api/event/booking_substitution/{id}/test_person
Pfad-Parameter
idPflichtstring |
Query-Parameter
personPflichtinteger |
Antworten
200eligible und Begründungscodes
curl --request GET \
--url 'https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1"
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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1', [
'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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1"),
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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1")
.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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/test_person?person=1"
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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.testPerson(42, 42);
if (result.success) {
print(result.data);
}approve, decline (note), assign (person, note), cancel (note), reopen (note), notify (Push erneut an die passenden Trainer senden).
PUT/api/event/booking_substitution/{id}/{action}
Pfad-Parameter
idPflichtstring | |
actionPflichtstring |
Query-Parameter
lock_versioninteger |
Request-Body application/json
personintegernotestring
Antworten
200Die Vertretung nach der AktionEventBookingSubstitution
Felder anzeigen (24)
booking_idintegersource_ticket_idintegersource_non_work_time_request_idintegeridintegerPrimärschlüssel der Vertretung. Interne ID.
lock_versionintegerVersion, die parallele Änderungen an der Vertretung verhindert.
booking_startstring (date-time)Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde.
booking_endstring (date-time)Ende der Buchung, die eine Vertretung benötigt.
booking_labelstringName und Beginn des Termins bei der Anlage, für die Historie.
slotinteger1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter.
reasonstringGrund der Vertretung, zum Beispiel Krankheit.
statestringStatus der Vertretung, zum Beispiel offen, übernommen oder besetzt.
qualification_match_modestringWie die Qualifikationen von Vertretungen abgeglichen werden.
qualification_sourcestringQuelle der Qualifikationen, die zur Suche nach Vertretungen verwendet werden.
filled_viastringWie die Vertretung besetzt wurde, zum Beispiel durch einen Trainer oder durch das Personal.
claimed_atstring (date-time)Zeitpunkt, zu dem die Vertretung angefragt wurde.
filled_atstring (date-time)Zeitpunkt, zu dem die Vertretung besetzt wurde.
decided_atstring (date-time)Zeitpunkt, zu dem über die Vertretung entschieden wurde.
decided_by_usernamestringAnmeldename der Person, die über die Vertretung entschieden hat.
decision_notestringAnmerkung zur Entscheidung.
closed_atstring (date-time)Zeitpunkt, zu dem die Vertretung geschlossen wurde.
notified_atstring (date-time)Zeitpunkt, zu dem die möglichen Ersatzpersonen zuletzt benachrichtigt wurden.
notified_countintegerAnzahl der benachrichtigten möglichen Vertretungen.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request PUT \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"person": 1,
"note": "string"
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({person: 1, note: 'string'})
};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"
payload = {
"person": 1,
"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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42', [
'body' => '{"person":1,"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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"person\":1,\"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, "{\"person\":1,\"note\":\"string\"}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"
payload := strings.NewReader("{\"person\":1,\"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 mit dem Package iw_erp_api
import 'package:iw_erp_api/clients/event_booking_substitution_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/event_booking_substitution.dart';
IwApiState().host = 'eure-instanz.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await EventBookingSubstitutionController.action(EventBookingSubstitution.fromJson({
"person": 1,
"note": "string"
}), '42');
if (result.success) {
print(result.data);
}{
"id": 42,
"decided_by_username": "lena.hartmann@example.org",
"booking_id": 42,
"source_ticket_id": 42,
"source_non_work_time_request_id": 42,
"lock_version": 1,
"booking_start": "2026-10-15T09:30:00+02:00",
"booking_end": "2026-10-15T09:30:00+02:00",
"booking_label": "string",
"slot": 1
}approve, decline (note), assign (person, note), cancel (note), reopen (note), notify (Push erneut an die passenden Trainer senden).
PATCH/api/event/booking_substitution/{id}/{action}
Pfad-Parameter
idPflichtstring | |
actionPflichtstring |
Query-Parameter
lock_versioninteger |
Request-Body application/json
personintegernotestring
Antworten
200Die Vertretung nach der AktionEventBookingSubstitution
Felder anzeigen (24)
booking_idintegersource_ticket_idintegersource_non_work_time_request_idintegeridintegerPrimärschlüssel der Vertretung. Interne ID.
lock_versionintegerVersion, die parallele Änderungen an der Vertretung verhindert.
booking_startstring (date-time)Kopie des Terminbeginns: Listensortierung und Filter ohne Join, und der Verlauf bleibt lesbar, nachdem der Termin entfernt wurde.
booking_endstring (date-time)Ende der Buchung, die eine Vertretung benötigt.
booking_labelstringName und Beginn des Termins bei der Anlage, für die Historie.
slotinteger1 = Haupttrainer (performingPerson), 2 = zweiter ... 5 = fünfter.
reasonstringGrund der Vertretung, zum Beispiel Krankheit.
statestringStatus der Vertretung, zum Beispiel offen, übernommen oder besetzt.
qualification_match_modestringWie die Qualifikationen von Vertretungen abgeglichen werden.
qualification_sourcestringQuelle der Qualifikationen, die zur Suche nach Vertretungen verwendet werden.
filled_viastringWie die Vertretung besetzt wurde, zum Beispiel durch einen Trainer oder durch das Personal.
claimed_atstring (date-time)Zeitpunkt, zu dem die Vertretung angefragt wurde.
filled_atstring (date-time)Zeitpunkt, zu dem die Vertretung besetzt wurde.
decided_atstring (date-time)Zeitpunkt, zu dem über die Vertretung entschieden wurde.
decided_by_usernamestringAnmeldename der Person, die über die Vertretung entschieden hat.
decision_notestringAnmerkung zur Entscheidung.
closed_atstring (date-time)Zeitpunkt, zu dem die Vertretung geschlossen wurde.
notified_atstring (date-time)Zeitpunkt, zu dem die möglichen Ersatzpersonen zuletzt benachrichtigt wurden.
notified_countintegerAnzahl der benachrichtigten möglichen Vertretungen.
createdstring (date-time)Zeitpunkt, zu dem der Datensatz angelegt wurde.
updatedstring (date-time)Zeitpunkt, zu dem der Datensatz zuletzt aktualisiert wurde.
curl --request PATCH \
--url https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"person": 1,
"note": "string"
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({person: 1, note: 'string'})
};
fetch('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"
payload = {
"person": 1,
"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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42', [
'body' => '{"person":1,"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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"person\":1,\"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, "{\"person\":1,\"note\":\"string\"}");
Request request = new Request.Builder()
.url("https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/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://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42"
payload := strings.NewReader("{\"person\":1,\"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 mit package:http (kein Controller im Package iw_erp_api)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.patch(
Uri.parse('https://eure-instanz.iw-erp.de/api/event/booking_substitution/42/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"person": 1,
"note": "string"
}),
);
print(response.body);{
"id": 42,
"decided_by_username": "lena.hartmann@example.org",
"booking_id": 42,
"source_ticket_id": 42,
"source_non_work_time_request_id": 42,
"lock_version": 1,
"booking_start": "2026-10-15T09:30:00+02:00",
"booking_end": "2026-10-15T09:30:00+02:00",
"booking_label": "string",
"slot": 1
}