General meeting
All general meetings, newest start first.
GET/api/crm/general_meeting
Query parameters
idstring | |
namestring | |
statestring | |
meetingTypestring | |
startstring | |
endstring | |
invitedAtstring | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
createdstring | |
updatedstring | |
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 GeneralMeeting objectsarray<GeneralMeeting>
Show fields (18)
idintegerPrimary key of the general meeting. Internal ID.
namestringName of the general meeting.
agendastringAgenda (Tagesordnung) as plain text, one item per line.
meeting_typestringType of the meeting, for example ordinary or extraordinary.
statestringState of the meeting, for example planned, running or closed.
startstring (date-time)Start of the meeting.
endstring (date-time)End of the meeting.
locationstringLocation of the meeting.
online_urlstringLink of the video conference for online and hybrid meetings.
invited_atstring (date-time)Time the invitations were sent.
invitation_latebooleanTrue when the invitation went out after the notice period and the office confirmed it.
started_atstring (date-time)Time the meeting started.
closed_atstring (date-time)Time the meeting was closed.
minutesstringMinutes of the meeting.
minutes_finalized_atstring (date-time)Time the minutes were finalized.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting', 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/crm/general_meeting"
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/crm/general_meeting', [
'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/crm/general_meeting"),
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/crm/general_meeting")
.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/crm/general_meeting"
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/crm_general_meeting_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 CrmGeneralMeetingController.getAll();
if (result.success) {
print(result.data);
}[
{
"id": 42,
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"state": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"location": "string",
"invited_at": "2026-10-15T09:30:00+02:00"
}
]Creates a new crm general meeting entry.
POST/api/crm/general_meeting
Request body application/json
namestringagendastringmeeting_typestringPRESENCE, ONLINE, HYBRID
startstring (date-time)endstring (date-time)locationstringonline_urlstring
Responses
200The new GeneralMeetingGeneralMeeting
Show fields (18)
idintegerPrimary key of the general meeting. Internal ID.
namestringName of the general meeting.
agendastringAgenda (Tagesordnung) as plain text, one item per line.
meeting_typestringType of the meeting, for example ordinary or extraordinary.
statestringState of the meeting, for example planned, running or closed.
startstring (date-time)Start of the meeting.
endstring (date-time)End of the meeting.
locationstringLocation of the meeting.
online_urlstringLink of the video conference for online and hybrid meetings.
invited_atstring (date-time)Time the invitations were sent.
invitation_latebooleanTrue when the invitation went out after the notice period and the office confirmed it.
started_atstring (date-time)Time the meeting started.
closed_atstring (date-time)Time the meeting was closed.
minutesstringMinutes of the meeting.
minutes_finalized_atstring (date-time)Time the minutes were finalized.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/general_meeting \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
name: 'Beispiel',
online_url: 'https://vynst.de',
agenda: 'string',
meeting_type: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00'
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting', 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/crm/general_meeting"
payload = {
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
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/crm/general_meeting', [
'body' => '{"name":"Beispiel","online_url":"https://vynst.de","agenda":"string","meeting_type":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00"}',
'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/crm/general_meeting"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
{
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, "{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting")
.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/crm/general_meeting"
payload := strings.NewReader("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
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/crm_general_meeting_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/general_meeting.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CrmGeneralMeetingController.post(GeneralMeeting.fromJson({
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"state": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"location": "string",
"invited_at": "2026-10-15T09:30:00+02:00"
}Returns a single crm general meeting entry.
GET/api/crm/general_meeting/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single GeneralMeeting with statisticsGeneralMeeting
Show fields (18)
idintegerPrimary key of the general meeting. Internal ID.
namestringName of the general meeting.
agendastringAgenda (Tagesordnung) as plain text, one item per line.
meeting_typestringType of the meeting, for example ordinary or extraordinary.
statestringState of the meeting, for example planned, running or closed.
startstring (date-time)Start of the meeting.
endstring (date-time)End of the meeting.
locationstringLocation of the meeting.
online_urlstringLink of the video conference for online and hybrid meetings.
invited_atstring (date-time)Time the invitations were sent.
invitation_latebooleanTrue when the invitation went out after the notice period and the office confirmed it.
started_atstring (date-time)Time the meeting started.
closed_atstring (date-time)Time the meeting was closed.
minutesstringMinutes of the meeting.
minutes_finalized_atstring (date-time)Time the minutes were finalized.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm_general_meeting_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 CrmGeneralMeetingController.get(42);
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"state": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"location": "string",
"invited_at": "2026-10-15T09:30:00+02:00"
}Meeting data while open; the minutes until they are finalized.
PUT/api/crm/general_meeting/{id}
Path parameters
idrequiredstring |
Request body application/json
namestringagendastringmeeting_typestringstartstring (date-time)endstring (date-time)locationstringonline_urlstringminutesstring
Responses
200The changed GeneralMeetingGeneralMeeting
Show fields (18)
idintegerPrimary key of the general meeting. Internal ID.
namestringName of the general meeting.
agendastringAgenda (Tagesordnung) as plain text, one item per line.
meeting_typestringType of the meeting, for example ordinary or extraordinary.
statestringState of the meeting, for example planned, running or closed.
startstring (date-time)Start of the meeting.
endstring (date-time)End of the meeting.
locationstringLocation of the meeting.
online_urlstringLink of the video conference for online and hybrid meetings.
invited_atstring (date-time)Time the invitations were sent.
invitation_latebooleanTrue when the invitation went out after the notice period and the office confirmed it.
started_atstring (date-time)Time the meeting started.
closed_atstring (date-time)Time the meeting was closed.
minutesstringMinutes of the meeting.
minutes_finalized_atstring (date-time)Time the minutes were finalized.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PUT \
--url https://your-instance.iw-erp.de/api/crm/general_meeting/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
name: 'Beispiel',
online_url: 'https://vynst.de',
agenda: 'string',
meeting_type: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00'
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/42"
payload = {
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
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/crm/general_meeting/42', [
'body' => '{"name":"Beispiel","online_url":"https://vynst.de","agenda":"string","meeting_type":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00"}',
'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/crm/general_meeting/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
{
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, "{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/42"
payload := strings.NewReader("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
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/crm_general_meeting_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/general_meeting.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CrmGeneralMeetingController.put(GeneralMeeting.fromJson({
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"state": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"location": "string",
"invited_at": "2026-10-15T09:30:00+02:00"
}Meeting data while open; the minutes until they are finalized.
PATCH/api/crm/general_meeting/{id}
Path parameters
idrequiredstring |
Request body application/json
namestringagendastringmeeting_typestringstartstring (date-time)endstring (date-time)locationstringonline_urlstringminutesstring
Responses
200The changed GeneralMeetingGeneralMeeting
Show fields (18)
idintegerPrimary key of the general meeting. Internal ID.
namestringName of the general meeting.
agendastringAgenda (Tagesordnung) as plain text, one item per line.
meeting_typestringType of the meeting, for example ordinary or extraordinary.
statestringState of the meeting, for example planned, running or closed.
startstring (date-time)Start of the meeting.
endstring (date-time)End of the meeting.
locationstringLocation of the meeting.
online_urlstringLink of the video conference for online and hybrid meetings.
invited_atstring (date-time)Time the invitations were sent.
invitation_latebooleanTrue when the invitation went out after the notice period and the office confirmed it.
started_atstring (date-time)Time the meeting started.
closed_atstring (date-time)Time the meeting was closed.
minutesstringMinutes of the meeting.
minutes_finalized_atstring (date-time)Time the minutes were finalized.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/crm/general_meeting/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
name: 'Beispiel',
online_url: 'https://vynst.de',
agenda: 'string',
meeting_type: 'string',
start: '2026-10-15T09:30:00+02:00',
end: '2026-10-15T09:30:00+02:00'
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/42"
payload = {
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}
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/crm/general_meeting/42', [
'body' => '{"name":"Beispiel","online_url":"https://vynst.de","agenda":"string","meeting_type":"string","start":"2026-10-15T09:30:00+02:00","end":"2026-10-15T09:30:00+02:00"}',
'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/crm/general_meeting/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
{
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, "{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/42"
payload := strings.NewReader("{\"name\":\"Beispiel\",\"online_url\":\"https://vynst.de\",\"agenda\":\"string\",\"meeting_type\":\"string\",\"start\":\"2026-10-15T09:30:00+02:00\",\"end\":\"2026-10-15T09:30:00+02:00\"}")
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/crm/general_meeting/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00"
}),
);
print(response.body);{
"id": 42,
"name": "Beispiel",
"online_url": "https://vynst.de",
"agenda": "string",
"meeting_type": "string",
"state": "string",
"start": "2026-10-15T09:30:00+02:00",
"end": "2026-10-15T09:30:00+02:00",
"location": "string",
"invited_at": "2026-10-15T09:30:00+02:00"
}Marks the meeting as deleted. A running meeting has to be closed or cancelled first.
DELETE/api/crm/general_meeting/{id}
Path parameters
idrequiredstring |
Responses
200The deleted GeneralMeeting
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm/general_meeting/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/crm_general_meeting_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 CrmGeneralMeetingController.delete(42);
if (result.success) {
print(result.data);
}invite (body force=true confirms an invitation after the notice period), start, close, cancel, generate_participants (members on the meeting day), generate_minutes, finalize_minutes.
POST/api/crm/general_meeting/{id}/{action}
Path parameters
idrequiredstring | |
actionrequiredstring |
Request body application/json
forceboolean
Responses
200meeting (GeneralMeeting) and result (counts of the action)
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/general_meeting/42/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '{"force":true}'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({force: true})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting/42/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/crm/general_meeting/42/42"
payload = { "force": True }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/crm/general_meeting/42/42', [
'body' => '{"force":true}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/general_meeting/42/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"force\":true}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"force\":true}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting/42/42")
.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/crm/general_meeting/42/42"
payload := strings.NewReader("{\"force\":true}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/crm_general_meeting_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 CrmGeneralMeetingController.action(42, '42');
if (result.success) {
print(result.data);
}Participants of a meeting (meeting=<id>), by name.
GET/api/crm/general_meeting_participant
Query parameters
idstring | |
meetingstring | |
personstring | |
votingRightstring | |
votingRightReasonstring | NO_VOTE_* when the person has no voting right, null otherwise. |
votingRightManualstring | The office set the voting right by hand; a recalculation keeps it. |
responsestring | |
attendancestring | |
invitedAtstring | |
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 GeneralMeetingParticipant objectsarray<GeneralMeetingParticipant>
Show fields (12)
meeting_idintegeridintegerPrimary key of the meeting participant. Internal ID.
voting_rightbooleanThe participant has a voting right.
voting_right_reasonstringNO_VOTE_* when the person has no voting right, null otherwise.
voting_right_manualbooleanThe office set the voting right by hand; a recalculation keeps it.
invited_atstring (date-time)Time the participant was invited.
responsestringResponse to the invitation, for example accepted or declined.
responded_atstring (date-time)Time the response was given.
attendancestringAttendance of the participant, for example present or excused.
checked_in_atstring (date-time)Time the participant checked in.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_participant \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_participant', 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/crm/general_meeting_participant"
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/crm/general_meeting_participant', [
'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/crm/general_meeting_participant"),
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/crm/general_meeting_participant")
.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/crm/general_meeting_participant"
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/crm_general_meeting_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 CrmGeneralMeetingController.getParticipants(42);
if (result.success) {
print(result.data);
}[
{
"id": 42,
"meeting_id": 42,
"voting_right": true,
"voting_right_reason": "string",
"voting_right_manual": true,
"invited_at": "2026-10-15T09:30:00+02:00",
"response": "string",
"responded_at": "2026-10-15T09:30:00+02:00",
"attendance": "string",
"checked_in_at": "2026-10-15T09:30:00+02:00"
}
]Adds one person; without voting_right it is calculated from the settings.
POST/api/crm/general_meeting_participant
Request body application/json
meetingintegerpersonintegervoting_rightboolean
Responses
200The participantGeneralMeetingParticipant
Show fields (12)
meeting_idintegeridintegerPrimary key of the meeting participant. Internal ID.
voting_rightbooleanThe participant has a voting right.
voting_right_reasonstringNO_VOTE_* when the person has no voting right, null otherwise.
voting_right_manualbooleanThe office set the voting right by hand; a recalculation keeps it.
invited_atstring (date-time)Time the participant was invited.
responsestringResponse to the invitation, for example accepted or declined.
responded_atstring (date-time)Time the response was given.
attendancestringAttendance of the participant, for example present or excused.
checked_in_atstring (date-time)Time the participant checked in.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_participant \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"meeting": 1,
"person": 1,
"voting_right": true
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({meeting: 1, person: 1, voting_right: true})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_participant', 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/crm/general_meeting_participant"
payload = {
"meeting": 1,
"person": 1,
"voting_right": True
}
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/crm/general_meeting_participant', [
'body' => '{"meeting":1,"person":1,"voting_right":true}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/crm/general_meeting_participant"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"meeting\":1,\"person\":1,\"voting_right\":true}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"meeting\":1,\"person\":1,\"voting_right\":true}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_participant")
.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/crm/general_meeting_participant"
payload := strings.NewReader("{\"meeting\":1,\"person\":1,\"voting_right\":true}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/crm_general_meeting_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 CrmGeneralMeetingController.addParticipant(42, 42);
if (result.success) {
print(result.data);
}{
"id": 42,
"meeting_id": 42,
"voting_right": true,
"voting_right_reason": "string",
"voting_right_manual": true,
"invited_at": "2026-10-15T09:30:00+02:00",
"response": "string",
"responded_at": "2026-10-15T09:30:00+02:00",
"attendance": "string",
"checked_in_at": "2026-10-15T09:30:00+02:00"
}voting_right (true/false by hand, null = calculated again), attendance (ABSENT, ONSITE, ONLINE), response.
PUT/api/crm/general_meeting_participant/{id}
Path parameters
idrequiredstring |
Request body application/json
voting_rightbooleanattendancestringresponsestring
Responses
200The participantGeneralMeetingParticipant
Show fields (12)
meeting_idintegeridintegerPrimary key of the meeting participant. Internal ID.
voting_rightbooleanThe participant has a voting right.
voting_right_reasonstringNO_VOTE_* when the person has no voting right, null otherwise.
voting_right_manualbooleanThe office set the voting right by hand; a recalculation keeps it.
invited_atstring (date-time)Time the participant was invited.
responsestringResponse to the invitation, for example accepted or declined.
responded_atstring (date-time)Time the response was given.
attendancestringAttendance of the participant, for example present or excused.
checked_in_atstring (date-time)Time the participant checked in.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_participant/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"voting_right": true,
"attendance": "string",
"response": "string"
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({voting_right: true, attendance: 'string', response: 'string'})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_participant/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/crm/general_meeting_participant/42"
payload = {
"voting_right": True,
"attendance": "string",
"response": "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/crm/general_meeting_participant/42', [
'body' => '{"voting_right":true,"attendance":"string","response":"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/crm/general_meeting_participant/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"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, "{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"string\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_participant/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/crm/general_meeting_participant/42"
payload := strings.NewReader("{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"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/crm_general_meeting_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 CrmGeneralMeetingController.updateParticipant(42);
if (result.success) {
print(result.data);
}{
"id": 42,
"meeting_id": 42,
"voting_right": true,
"voting_right_reason": "string",
"voting_right_manual": true,
"invited_at": "2026-10-15T09:30:00+02:00",
"response": "string",
"responded_at": "2026-10-15T09:30:00+02:00",
"attendance": "string",
"checked_in_at": "2026-10-15T09:30:00+02:00"
}voting_right (true/false by hand, null = calculated again), attendance (ABSENT, ONSITE, ONLINE), response.
PATCH/api/crm/general_meeting_participant/{id}
Path parameters
idrequiredstring |
Request body application/json
voting_rightbooleanattendancestringresponsestring
Responses
200The participantGeneralMeetingParticipant
Show fields (12)
meeting_idintegeridintegerPrimary key of the meeting participant. Internal ID.
voting_rightbooleanThe participant has a voting right.
voting_right_reasonstringNO_VOTE_* when the person has no voting right, null otherwise.
voting_right_manualbooleanThe office set the voting right by hand; a recalculation keeps it.
invited_atstring (date-time)Time the participant was invited.
responsestringResponse to the invitation, for example accepted or declined.
responded_atstring (date-time)Time the response was given.
attendancestringAttendance of the participant, for example present or excused.
checked_in_atstring (date-time)Time the participant checked in.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_participant/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"voting_right": true,
"attendance": "string",
"response": "string"
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({voting_right: true, attendance: 'string', response: 'string'})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_participant/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/crm/general_meeting_participant/42"
payload = {
"voting_right": True,
"attendance": "string",
"response": "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/crm/general_meeting_participant/42', [
'body' => '{"voting_right":true,"attendance":"string","response":"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/crm/general_meeting_participant/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"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, "{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"string\"}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_participant/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/crm/general_meeting_participant/42"
payload := strings.NewReader("{\"voting_right\":true,\"attendance\":\"string\",\"response\":\"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/crm/general_meeting_participant/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"voting_right": true,
"attendance": "string",
"response": "string"
}),
);
print(response.body);{
"id": 42,
"meeting_id": 42,
"voting_right": true,
"voting_right_reason": "string",
"voting_right_manual": true,
"invited_at": "2026-10-15T09:30:00+02:00",
"response": "string",
"responded_at": "2026-10-15T09:30:00+02:00",
"attendance": "string",
"checked_in_at": "2026-10-15T09:30:00+02:00"
}Removes a participant.
DELETE/api/crm/general_meeting_participant/{id}
Path parameters
idrequiredstring |
Responses
200removed
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm/general_meeting_participant/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/crm_general_meeting_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 CrmGeneralMeetingController.removeParticipant(42);
if (result.success) {
print(result.data);
}Motions of a meeting (meeting=<id>), by position.
GET/api/crm/general_meeting_motion
Query parameters
idstring | |
meetingstring | |
statestring | |
votingModestring | |
majoritystring | |
resultstring | |
positionstring | |
deletedboolean | This property is used to mark an entity as deleted / archived | Default value: false |
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 GeneralMeetingMotion objectsarray<GeneralMeetingMotion>
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion', 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/crm/general_meeting_motion"
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/crm/general_meeting_motion', [
'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/crm/general_meeting_motion"),
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/crm/general_meeting_motion")
.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/crm/general_meeting_motion"
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/crm_general_meeting_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 CrmGeneralMeetingController.getMotions(42);
if (result.success) {
print(result.data);
}[
{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}
]Creates a motion.
POST/api/crm/general_meeting_motion
Request body application/json
meetingintegertitlestringdescriptionstringvoting_modestringOPEN, SECRET
majoritystringSIMPLE, TWO_THIRDS, THREE_QUARTERS, ABSOLUTE
positioninteger
Responses
200The new motionGeneralMeetingMotion
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"title": "Beispiel",
"description": "Text",
"meeting": 1,
"voting_mode": "string",
"majority": "string",
"position": 1
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
title: 'Beispiel',
description: 'Text',
meeting: 1,
voting_mode: 'string',
majority: 'string',
position: 1
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion', 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/crm/general_meeting_motion"
payload = {
"title": "Beispiel",
"description": "Text",
"meeting": 1,
"voting_mode": "string",
"majority": "string",
"position": 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/crm/general_meeting_motion', [
'body' => '{"title":"Beispiel","description":"Text","meeting":1,"voting_mode":"string","majority":"string","position":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/crm/general_meeting_motion"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"title\":\"Beispiel\",\"description\":\"Text\",\"meeting\":1,\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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, "{\"title\":\"Beispiel\",\"description\":\"Text\",\"meeting\":1,\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_motion")
.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/crm/general_meeting_motion"
payload := strings.NewReader("{\"title\":\"Beispiel\",\"description\":\"Text\",\"meeting\":1,\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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/crm_general_meeting_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/general_meeting_motion.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CrmGeneralMeetingController.postMotion(42, GeneralMeetingMotion.fromJson({
"title": "Beispiel",
"description": "Text",
"meeting": 1,
"voting_mode": "string",
"majority": "string",
"position": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}Returns a motion.
GET/api/crm/general_meeting_motion/{id}
Path parameters
idrequiredstring |
Responses
200Returns a single GeneralMeetingMotionGeneralMeetingMotion
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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 package:http (no controller in the iw_erp_api package)
import 'package:http/http.dart' as http;
final response = await http.get(
Uri.parse('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}Updates a motion.
PUT/api/crm/general_meeting_motion/{id}
Path parameters
idrequiredstring |
Request body application/json
titlestringdescriptionstringvoting_modestringmajoritystringpositioninteger
Responses
200The changed motionGeneralMeetingMotion
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PUT \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 1
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
title: 'Beispiel',
description: 'Text',
voting_mode: 'string',
majority: 'string',
position: 1
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/42"
payload = {
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 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/crm/general_meeting_motion/42', [
'body' => '{"title":"Beispiel","description":"Text","voting_mode":"string","majority":"string","position":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/crm/general_meeting_motion/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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, "{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/42"
payload := strings.NewReader("{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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/crm_general_meeting_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/general_meeting_motion.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CrmGeneralMeetingController.putMotion(GeneralMeetingMotion.fromJson({
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 1
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}Updates a motion.
PATCH/api/crm/general_meeting_motion/{id}
Path parameters
idrequiredstring |
Request body application/json
titlestringdescriptionstringvoting_modestringmajoritystringpositioninteger
Responses
200The changed motionGeneralMeetingMotion
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 1
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
title: 'Beispiel',
description: 'Text',
voting_mode: 'string',
majority: 'string',
position: 1
})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/42"
payload = {
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 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/crm/general_meeting_motion/42', [
'body' => '{"title":"Beispiel","description":"Text","voting_mode":"string","majority":"string","position":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/crm/general_meeting_motion/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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, "{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/42"
payload := strings.NewReader("{\"title\":\"Beispiel\",\"description\":\"Text\",\"voting_mode\":\"string\",\"majority\":\"string\",\"position\":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/crm/general_meeting_motion/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"title": "Beispiel",
"description": "Text",
"voting_mode": "string",
"majority": "string",
"position": 1
}),
);
print(response.body);{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}Deletes a motion.
DELETE/api/crm/general_meeting_motion/{id}
Path parameters
idrequiredstring |
Responses
200The deleted motion
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm/general_meeting_motion/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/crm_general_meeting_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 CrmGeneralMeetingController.deleteMotion(42);
if (result.success) {
print(result.data);
}The votes by name of an open (not secret) motion; a secret motion answers an empty list.
GET/api/crm/general_meeting_motion/{id}/votes
Path parameters
idrequiredstring |
Responses
200List of {choice, person_minimal}
curl --request GET \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/votes \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/votes', 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/crm/general_meeting_motion/42/votes"
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/crm/general_meeting_motion/42/votes', [
'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/crm/general_meeting_motion/42/votes"),
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/crm/general_meeting_motion/42/votes")
.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/crm/general_meeting_motion/42/votes"
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/crm_general_meeting_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 CrmGeneralMeetingController.getVotes(42);
if (result.success) {
print(result.data);
}open (start the vote; the meeting has to run), close (body manual_yes, manual_no, manual_abstain: votes counted on site, added to the app votes).
POST/api/crm/general_meeting_motion/{id}/{action}
Path parameters
idrequiredstring | |
actionrequiredstring |
Request body application/json
manual_yesintegermanual_nointegermanual_abstaininteger
Responses
200The motion after the actionGeneralMeetingMotion
Show fields (22)
meeting_idintegerballot_countintegerBallots cast through the app so far; set by the controller, never the choices of an open vote.
idintegerPrimary key of the motion. Internal ID.
positionintegerPosition of the motion in the agenda.
titlestringTitle of the motion.
descriptionstringText of the motion.
voting_modestringVoting mode, for example open or secret.
majoritystringMajority needed to accept the motion, for example simple or two-thirds.
statestringState of the motion, for example open, voting or closed.
opened_atstring (date-time)Time the voting was opened.
closed_atstring (date-time)Time the voting was closed.
manual_yesintegerVotes counted on site (show of hands), added to the app votes when closing.
manual_nointegerNumber of manual no votes.
manual_abstainintegerNumber of manual abstentions.
yes_countintegerFinal counts (app + manual), set when closing.
no_countintegerNumber of no votes.
abstain_countintegerNumber of abstentions.
present_voting_countintegerEntitled voters present when closing; the base of an ABSOLUTE majority.
resultstringResult of the vote, for example accepted or rejected.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
deletedbooleanThis property is used to mark an entity as deleted / archived
curl --request POST \
--url https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"manual_yes": 1,
"manual_no": 1,
"manual_abstain": 1
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({manual_yes: 1, manual_no: 1, manual_abstain: 1})
};
fetch('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/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/crm/general_meeting_motion/42/42"
payload = {
"manual_yes": 1,
"manual_no": 1,
"manual_abstain": 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/crm/general_meeting_motion/42/42', [
'body' => '{"manual_yes":1,"manual_no":1,"manual_abstain":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/crm/general_meeting_motion/42/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"manual_yes\":1,\"manual_no\":1,\"manual_abstain\":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, "{\"manual_yes\":1,\"manual_no\":1,\"manual_abstain\":1}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/42")
.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/crm/general_meeting_motion/42/42"
payload := strings.NewReader("{\"manual_yes\":1,\"manual_no\":1,\"manual_abstain\":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 package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.post(
Uri.parse('https://your-instance.iw-erp.de/api/crm/general_meeting_motion/42/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"manual_yes": 1,
"manual_no": 1,
"manual_abstain": 1
}),
);
print(response.body);{
"id": 42,
"title": "Beispiel",
"description": "Text",
"meeting_id": 42,
"ballot_count": 1,
"position": 1,
"voting_mode": "string",
"majority": "string",
"state": "string",
"opened_at": "2026-10-15T09:30:00+02:00"
}