CustomerChatroomMessage
Search the messages of a chatroom Query: q (2 to 100 characters), limit (1-50, default 30). Visible messages whose text contains q, newest first. Requires chatroom_search_enabled (sonst 8618).
GET/api/cp/chat/chatroom/{identifier}/search
Path parameters
identifierrequiredstring |
Query parameters
chatroomstring | _LIST |
participantstring | _LIST, LOGGED_IN_LIST |
deletedboolean | This property is used to mark an entity as deleted / archived | _LIST |
createdstring | _LIST, LOGGED_IN_LIST |
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
200Messages of the chatroom containing the search termarray<ChatroomMessage>
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom/42/search \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom/42/search', 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/cp/chat/chatroom/42/search"
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/cp/chat/chatroom/42/search', [
'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/cp/chat/chatroom/42/search"),
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/cp/chat/chatroom/42/search")
.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/cp/chat/chatroom/42/search"
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/customer_chatroom_message_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 CustomerChatroomMessageController.search('42', '…');
if (result.success) {
print(result.data);
}[
{
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
]Result of the poll of a ChatroomMessage
GET/api/cp/chat/chatroom_message/{identifier}/poll
Counts per answer, the own votes and, unless the poll is anonymous, who voted for what. Requires chatroom_polls_enabled (sonst 8618).
Path parameters
identifierrequiredstring |
Responses
200Poll result
curl --request GET \
--url https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll', 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/cp/chat/chatroom_message/42/poll"
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/cp/chat/chatroom_message/42/poll', [
'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/cp/chat/chatroom_message/42/poll"),
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/cp/chat/chatroom_message/42/poll")
.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/cp/chat/chatroom_message/42/poll"
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/customer_chatroom_message_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 CustomerChatroomMessageController.getPoll('42');
if (result.success) {
print(result.data);
}Vote in the poll of a ChatroomMessage
PUT/api/cp/chat/chatroom_message/{identifier}/poll
Body: options (list of answer keys); replaces the own votes, an empty list takes the vote back. Only one key unless the poll allows several answers. 8620 once the poll is closed.
Path parameters
identifierrequiredstring |
Request body application/json
optionsarray<string>
Responses
200Poll result
curl --request PUT \
--url https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"options": [
"string"
]
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({options: ['string']})
};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll', 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/cp/chat/chatroom_message/42/poll"
payload = { "options": ["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/cp/chat/chatroom_message/42/poll', [
'body' => '{"options":["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/cp/chat/chatroom_message/42/poll"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"options\":[\"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, "{\"options\":[\"string\"]}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll")
.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/cp/chat/chatroom_message/42/poll"
payload := strings.NewReader("{\"options\":[\"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/customer_chatroom_message_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 CustomerChatroomMessageController.vote('42', ['42']);
if (result.success) {
print(result.data);
}Vote in the poll of a ChatroomMessage
PATCH/api/cp/chat/chatroom_message/{identifier}/poll
Body: options (list of answer keys); replaces the own votes, an empty list takes the vote back. Only one key unless the poll allows several answers. 8620 once the poll is closed.
Path parameters
identifierrequiredstring |
Request body application/json
optionsarray<string>
Responses
200Poll result
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"options": [
"string"
]
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({options: ['string']})
};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll', 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/cp/chat/chatroom_message/42/poll"
payload = { "options": ["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/cp/chat/chatroom_message/42/poll', [
'body' => '{"options":["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/cp/chat/chatroom_message/42/poll"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"options\":[\"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, "{\"options\":[\"string\"]}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll")
.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/cp/chat/chatroom_message/42/poll"
payload := strings.NewReader("{\"options\":[\"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/cp/chat/chatroom_message/42/poll'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"options": [
"string"
]
}),
);
print(response.body);Close the poll of a ChatroomMessage
PUT/api/cp/chat/chatroom_message/{identifier}/poll/close
The creator, room admins and the administration end a poll; afterwards nobody can vote.
Path parameters
identifierrequiredstring |
Responses
200Poll result
curl --request PUT \
--url https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll/close \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PUT', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll/close', 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/cp/chat/chatroom_message/42/poll/close"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.put(url, 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/cp/chat/chatroom_message/42/poll/close', [
'headers' => [
'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/cp/chat/chatroom_message/42/poll/close"),
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/cp/chat/chatroom_message/42/poll/close")
.put(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/cp/chat/chatroom_message/42/poll/close"
req, _ := http.NewRequest("PUT", 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/customer_chatroom_message_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 CustomerChatroomMessageController.closePoll('42');
if (result.success) {
print(result.data);
}Close the poll of a ChatroomMessage
PATCH/api/cp/chat/chatroom_message/{identifier}/poll/close
The creator, room admins and the administration end a poll; afterwards nobody can vote.
Path parameters
identifierrequiredstring |
Responses
200Poll result
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll/close \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PATCH', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll/close', 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/cp/chat/chatroom_message/42/poll/close"
headers = {"x-iw-jwt-token": "<TOKEN>"}
response = requests.patch(url, 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/cp/chat/chatroom_message/42/poll/close', [
'headers' => [
'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/cp/chat/chatroom_message/42/poll/close"),
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/cp/chat/chatroom_message/42/poll/close")
.patch(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/cp/chat/chatroom_message/42/poll/close"
req, _ := http.NewRequest("PATCH", 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.patch(
Uri.parse('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/42/poll/close'),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);Returns a list of all ChatroomMessages
GET/api/cp/chat/chatroom_message
Query parameters
chatroomstring | _LIST |
participantstring | _LIST, LOGGED_IN_LIST |
deletedboolean | This property is used to mark an entity as deleted / archived | _LIST |
createdstring | _LIST, LOGGED_IN_LIST |
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 all ChatroomMessagesarray<ChatroomMessage>
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom_message \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message', 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/cp/chat/chatroom_message"
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/cp/chat/chatroom_message', [
'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/cp/chat/chatroom_message"),
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/cp/chat/chatroom_message")
.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/cp/chat/chatroom_message"
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/customer_chatroom_message_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 CustomerChatroomMessageController.getAll(chatroomIdentifier: '…');
if (result.success) {
print(result.data);
}[
{
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
]Returns a single ChatroomMessage entry.
GET/api/cp/chat/chatroom_message/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Return single ChatroomMessageChatroomMessage
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/cp/chat/chatroom_message/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/customer_chatroom_message_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 CustomerChatroomMessageController.get('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"message_text": "Text",
"attachments": [
{
"id": 42,
"filename": "string",
"filesize": "string",
"mimetype": "string",
"created": "2026-10-15T09:30:00+02:00",
"googledownloadlink": "string",
"virus_checked": true
}
],
"reactions": [
{
"id": 42,
"emoji": "string",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
],
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}Updates an existing ChatroomMessage entry.
PUT/api/cp/chat/chatroom_message/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataChatroomMessageShow fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
Responses
200Update single ChatroomMessageChatroomMessage
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom_message/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
message_text: 'Text',
completed: true,
edited_at: '2026-10-15T09:30:00+02:00',
created: '2026-10-15T09:30:00+02:00',
updated: '2026-10-15T09:30:00+02:00'
}
})
};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload = { "data": {
"id": 42,
"message_text": "Text",
"completed": True,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "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/cp/chat/chatroom_message/42', [
'body' => '{"data":{"id":42,"message_text":"Text","completed":true,"edited_at":"2026-10-15T09:30:00+02:00","created":"2026-10-15T09:30:00+02:00","updated":"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/cp/chat/chatroom_message/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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, "{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"2026-10-15T09:30:00+02:00\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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/customer_chatroom_message_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/chatroom_message.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CustomerChatroomMessageController.put(ChatroomMessage.fromJson({
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}));
if (result.success) {
print(result.data);
}{
"id": 42,
"message_text": "Text",
"attachments": [
{
"id": 42,
"filename": "string",
"filesize": "string",
"mimetype": "string",
"created": "2026-10-15T09:30:00+02:00",
"googledownloadlink": "string",
"virus_checked": true
}
],
"reactions": [
{
"id": 42,
"emoji": "string",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
],
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}Updates an existing ChatroomMessage entry.
PATCH/api/cp/chat/chatroom_message/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataChatroomMessageShow fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
Responses
200Update single ChatroomMessageChatroomMessage
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom_message/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
message_text: 'Text',
completed: true,
edited_at: '2026-10-15T09:30:00+02:00',
created: '2026-10-15T09:30:00+02:00',
updated: '2026-10-15T09:30:00+02:00'
}
})
};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload = { "data": {
"id": 42,
"message_text": "Text",
"completed": True,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "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/cp/chat/chatroom_message/42', [
'body' => '{"data":{"id":42,"message_text":"Text","completed":true,"edited_at":"2026-10-15T09:30:00+02:00","created":"2026-10-15T09:30:00+02:00","updated":"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/cp/chat/chatroom_message/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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, "{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"2026-10-15T09:30:00+02:00\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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/cp/chat/chatroom_message/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
}),
);
print(response.body);{
"id": 42,
"message_text": "Text",
"attachments": [
{
"id": 42,
"filename": "string",
"filesize": "string",
"mimetype": "string",
"created": "2026-10-15T09:30:00+02:00",
"googledownloadlink": "string",
"virus_checked": true
}
],
"reactions": [
{
"id": 42,
"emoji": "string",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
],
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}Add a new ChatroomMessage
POST/api/cp/chat/chatroom_message/{chatroomIdentifier}
Path parameters
chatroomIdentifierrequiredstring |
Request body application/json
dataChatroomMessageShow fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
Responses
200Add a new ChatroomMessageChatroomMessage
Show fields (8)
idintegerPrimary key of the chat message. Internal ID.
message_textstringText of the chat message.
attachmentsarray<Attachment2>Attachments of the chat message.
Show fields (7)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdstring (date-time)Point in time the attachment was created.
googledownloadlinkstringDownload link of the file in Google Drive.
virus_checkedboolean1 once the virus scan has passed for this file. The scan runs in the background (AttachmentVirusScanCommand), so a freshly uploaded file starts at 0 and stays there until it was really checked. An infected file never reaches 1 - it is deleted instead. UIs use this to decide whether a file may be handed to a user, so it must stay false until proven otherwise.
reactionsarray<ChatroomMessageReaction4>Reactions to the chat message.
Show fields (4)
idintegerPrimary key of the reaction. Internal ID.
emojistringEmoji of the reaction.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
completedbooleanA flag to indicate if this message is completed
edited_atstring (date-time)Wann der Text zuletzt bearbeitet wurde (Einstellung chatroom_message_edit_enabled).
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/cp/chat/chatroom_message/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
id: 42,
message_text: 'Text',
completed: true,
edited_at: '2026-10-15T09:30:00+02:00',
created: '2026-10-15T09:30:00+02:00',
updated: '2026-10-15T09:30:00+02:00'
}
})
};
fetch('https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload = { "data": {
"id": 42,
"message_text": "Text",
"completed": True,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "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/cp/chat/chatroom_message/42', [
'body' => '{"data":{"id":42,"message_text":"Text","completed":true,"edited_at":"2026-10-15T09:30:00+02:00","created":"2026-10-15T09:30:00+02:00","updated":"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/cp/chat/chatroom_message/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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, "{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"2026-10-15T09:30:00+02:00\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/cp/chat/chatroom_message/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/cp/chat/chatroom_message/42"
payload := strings.NewReader("{\"data\":{\"id\":42,\"message_text\":\"Text\",\"completed\":true,\"edited_at\":\"2026-10-15T09:30:00+02:00\",\"created\":\"2026-10-15T09:30:00+02:00\",\"updated\":\"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/customer_chatroom_message_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/chatroom_message.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await CustomerChatroomMessageController.post(ChatroomMessage.fromJson({
"id": 42,
"message_text": "Text",
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}), chatroomIdentifier: '42');
if (result.success) {
print(result.data);
}{
"id": 42,
"message_text": "Text",
"attachments": [
{
"id": 42,
"filename": "string",
"filesize": "string",
"mimetype": "string",
"created": "2026-10-15T09:30:00+02:00",
"googledownloadlink": "string",
"virus_checked": true
}
],
"reactions": [
{
"id": 42,
"emoji": "string",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}
],
"completed": true,
"edited_at": "2026-10-15T09:30:00+02:00",
"created": "2026-10-15T09:30:00+02:00",
"updated": "2026-10-15T09:30:00+02:00"
}