Feedback Entries
Returns a list of feedback entries (three-tier visibility).
GET/api/media/feedback_entry
Query parameters
headlinestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
boardstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
statusstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
feedbackTypestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
socialProfilestring | Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
voteCountinteger | Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
duplicateOfstring | Merge target. Set together with STATUS_DUPLICATE. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
createdstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
updatedstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived |
moderationStatusstring | |
visibilityTypestring | |
commentCountinteger | |
internalPrioritystring | Scope-only. |
guestEmailConfirmedboolean | |
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 MediaFeedbackEntry objectsarray<MediaFeedbackEntry>
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry', 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/media/feedback_entry"
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/media/feedback_entry', [
'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/media/feedback_entry"),
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/media/feedback_entry")
.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/media/feedback_entry"
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/media_feedback_entry_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 MediaFeedbackEntryController.getAll();
if (result.success) {
print(result.data);
}[
{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}
]Creates a feedback entry as an administrator.
POST/api/media/feedback_entry
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200Add a new MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry', 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/media/feedback_entry"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/media/feedback_entry', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/media/feedback_entry"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry")
.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/media/feedback_entry"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/media_feedback_entry_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/media_feedback_entry.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await MediaFeedbackEntryController.post(MediaFeedbackEntry.fromJson({
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}));
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Returns the entries of one board, sorted and paginated.
GET/api/media/feedback_entry/feed/board/{boardIdentifier}
Path parameters
boardIdentifierrequiredstring |
Query parameters
headlinestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
boardstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
statusstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
feedbackTypestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
socialProfilestring | Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
voteCountinteger | Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
duplicateOfstring | Merge target. Set together with STATUS_DUPLICATE. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
createdstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
updatedstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived |
moderationStatusstring | |
visibilityTypestring | |
commentCountinteger | |
internalPrioritystring | Scope-only. |
guestEmailConfirmedboolean | |
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 the entries of one boardarray<MediaFeedbackEntry3>
Show fields (18)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard5Feedback board the entry belongs to.
Show fields (18)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry3Merge target. Set together with STATUS_DUPLICATE.
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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media/feedback_entry/feed/board/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/media_feedback_entry_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 MediaFeedbackEntryController.getBoardFeed('42');
if (result.success) {
print(result.data);
}[
{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"moderation_status": "string"
}
]Returns the entries the current user submitted, including ones awaiting moderation.
GET/api/media/feedback_entry/feed/own
Query parameters
headlinestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
boardstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
statusstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
feedbackTypestring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
socialProfilestring | Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
voteCountinteger | Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
duplicateOfstring | Merge target. Set together with STATUS_DUPLICATE. | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
createdstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
updatedstring | Requires access right: PUBLIC, LOGGED_IN, SCOPE |
idinteger | |
deletedboolean | This property is used to mark an entity as deleted / archived |
moderationStatusstring | |
visibilityTypestring | |
commentCountinteger | |
internalPrioritystring | Scope-only. |
guestEmailConfirmedboolean | |
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 the caller's own entriesarray<MediaFeedbackEntry3>
Show fields (18)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard5Feedback board the entry belongs to.
Show fields (18)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry3Merge target. Set together with STATUS_DUPLICATE.
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/media/feedback_entry/feed/own \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'GET', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/feed/own', 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/media/feedback_entry/feed/own"
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/media/feedback_entry/feed/own', [
'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/media/feedback_entry/feed/own"),
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/media/feedback_entry/feed/own")
.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/media/feedback_entry/feed/own"
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/media_feedback_entry_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 MediaFeedbackEntryController.getOwnFeed();
if (result.success) {
print(result.data);
}[
{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"moderation_status": "string"
}
]Returns a single feedback entry.
GET/api/media/feedback_entry/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Returns a single MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media_feedback_entry_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 MediaFeedbackEntryController.get('42');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Updates a feedback entry as an administrator.
PUT/api/media/feedback_entry/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200Update a MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/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/media/feedback_entry/42"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "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/media/feedback_entry/42', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"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/media/feedback_entry/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry/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/media/feedback_entry/42"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"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 package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.put(
Uri.parse('https://your-instance.iw-erp.de/api/media/feedback_entry/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}),
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Updates a feedback entry as an administrator.
PATCH/api/media/feedback_entry/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200Update a MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/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/media/feedback_entry/42"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "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/media/feedback_entry/42', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"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/media/feedback_entry/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry/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/media/feedback_entry/42"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"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/media/feedback_entry/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}),
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Soft-deletes a feedback entry.
DELETE/api/media/feedback_entry/{identifier}
Path parameters
identifierrequiredstring |
Responses
200Delete a MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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 DELETE \
--url https://your-instance.iw-erp.de/api/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media/feedback_entry/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/media_feedback_entry_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 MediaFeedbackEntryController.delete('42');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Creates a feedback entry as a logged-in user.
POST/api/media/feedback_entry/user
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200User creates a feedback entryMediaFeedbackEntry4
Show fields (13)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
social_profileMediaSocialProfile18Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry4Merge target. Set together with STATUS_DUPLICATE.
curl --request POST \
--url https://your-instance.iw-erp.de/api/media/feedback_entry/user \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'POST',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/user', 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/media/feedback_entry/user"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "string"
} }
headers = {
"x-iw-jwt-token": "<TOKEN>",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://your-instance.iw-erp.de/api/media/feedback_entry/user', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"string"}}',
'headers' => [
'content-type' => 'application/json',
'x-iw-jwt-token' => '<TOKEN>',
],
]);
echo $response->getBody();using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/media/feedback_entry/user"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry/user")
.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/media/feedback_entry/user"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-iw-jwt-token", "<TOKEN>")
req.Header.Add("content-type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}Dart with the iw_erp_api package
import 'package:iw_erp_api/clients/media_feedback_entry_controller.dart';
import 'package:iw_erp_api/logic/iw_api_state.dart';
import 'package:iw_erp_api/model/media_feedback_entry.dart';
IwApiState().host = 'your-instance.iw-erp.de';
IwApiState().currentJwtApiToken = '<TOKEN>';
final result = await MediaFeedbackEntryController.postUser(MediaFeedbackEntry.fromJson({
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}));
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"attachments": [
{}
],
"vote_count": 1
}Changes the status of an entry and records it in the public history.
PUT/api/media/feedback_entry/{identifier}/status
Path parameters
identifierrequiredstring |
Query parameters
statusrequiredstring | New status |
statusNotestring | Publicly visible reason for the change |
Responses
200Change the status of a MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42/status?status=string' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PUT', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/42/status?status=string', 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/media/feedback_entry/42/status?status=string"
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/media/feedback_entry/42/status?status=string', [
'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/media/feedback_entry/42/status?status=string"),
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/media/feedback_entry/42/status?status=string")
.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/media/feedback_entry/42/status?status=string"
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/media_feedback_entry_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 MediaFeedbackEntryController.putStatus('42', 'string');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Changes the status of an entry and records it in the public history.
PATCH/api/media/feedback_entry/{identifier}/status
Path parameters
identifierrequiredstring |
Query parameters
statusrequiredstring | New status |
statusNotestring | Publicly visible reason for the change |
Responses
200Change the status of a MediaFeedbackEntryMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42/status?status=string' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PATCH', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/42/status?status=string', 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/media/feedback_entry/42/status?status=string"
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/media/feedback_entry/42/status?status=string', [
'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/media/feedback_entry/42/status?status=string"),
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/media/feedback_entry/42/status?status=string")
.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/media/feedback_entry/42/status?status=string"
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/media/feedback_entry/42/status').replace(queryParameters: {'status': 'string'}),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Turns an entry into a roadmap milestone and links the two.
PUT/api/media/feedback_entry/{identifier}/roadmap_item
Doing this by hand means creating a milestone, retyping the wish, finding the entry again and linking it — four steps in which the linking is the one that gets skipped, leaving a roadmap nobody can trace back to what people asked for.
The entry moves to planned in the same call, because a milestone that exists while the wish still reads "open" tells the board the opposite of what happened.
Path parameters
identifierrequiredstring |
Query parameters
titlestring | Milestone title, defaults to the entry headline |
targetDatestring | Planned date (Y-m-d) |
targetLabelstring | Free-text period, wins over targetDate in the UI |
roadmapItemIdentifierstring | Link to this existing milestone instead of creating one |
Responses
200Create a roadmap milestone from a feedback entryMediaFeedbackRoadmapItem
Show fields (22)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
entriesarray<MediaFeedbackEntry5>Feedback entries linked to the item.
Show fields (20)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard6Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry5Merge target. Set together with STATUS_DUPLICATE.
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
ucatsarray<UnifiedCategory34>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage14>Access rights list that controls the visibility.
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
ucatsarray<UnifiedCategory34>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory34>Child categories.
parentUnifiedCategory34Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage14>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser57User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42/roadmap_item \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PUT', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/42/roadmap_item', 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/media/feedback_entry/42/roadmap_item"
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/media/feedback_entry/42/roadmap_item', [
'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/media/feedback_entry/42/roadmap_item"),
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/media/feedback_entry/42/roadmap_item")
.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/media/feedback_entry/42/roadmap_item"
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/media_feedback_entry_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 MediaFeedbackEntryController.createRoadmapItem('42');
if (result.success) {
print(result.data);
}{
"id": 42,
"title": "Beispiel",
"description": "Text",
"image_url": "https://vynst.de",
"timeline_order": 1,
"display_target": "string",
"linked_entry_count": 1,
"linked_vote_count": 1,
"status": "string",
"start_date": "2026-10-15T09:30:00+02:00"
}Moderates several entries in one call.
PUT/api/media/feedback_entry/bulk_moderation
Working a queue means making the same obvious decision many times over; one request per entry turns that into a page reload per entry. Unknown ids are reported back rather than failing the whole call — a stale list in the client must not lose the decisions that were valid.
Query parameters
identifiersrequiredstring | Comma separated entry identifiers |
moderationStatusrequiredstring | Target moderation status |
moderationReasonstring | Reason shown to the author on rejection |
Responses
200Moderate multiple feedback entries at onceMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PUT', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string', 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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string"
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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string', [
'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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string"),
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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string")
.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/media/feedback_entry/bulk_moderation?identifiers=string&moderationStatus=string"
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/media_feedback_entry_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 MediaFeedbackEntryController.bulkModerate(['42'], 'string');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Merges this entry into another one as a duplicate.
PUT/api/media/feedback_entry/{identifier}/merge
Path parameters
identifierrequiredstring |
Query parameters
targetIdentifierrequiredstring | Identifier of the entry to merge into |
Responses
200Merge a MediaFeedbackEntry into another oneMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42/merge?targetIdentifier=42' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PUT', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/42/merge?targetIdentifier=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/media/feedback_entry/42/merge?targetIdentifier=42"
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/media/feedback_entry/42/merge?targetIdentifier=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.Put,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/media/feedback_entry/42/merge?targetIdentifier=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/media/feedback_entry/42/merge?targetIdentifier=42")
.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/media/feedback_entry/42/merge?targetIdentifier=42"
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/media_feedback_entry_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 MediaFeedbackEntryController.merge('42', '42');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Merges this entry into another one as a duplicate.
PATCH/api/media/feedback_entry/{identifier}/merge
Path parameters
identifierrequiredstring |
Query parameters
targetIdentifierrequiredstring | Identifier of the entry to merge into |
Responses
200Merge a MediaFeedbackEntry into another oneMediaFeedbackEntry
Show fields (29)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
boardMediaFeedbackBoard3Feedback board the entry belongs to.
Show fields (21)
is_publicbooleanTrue when the board itself may be served to callers without a session.
idintegerPrimary key of the feedback board. Internal ID.
namestringInternal name, shown in the admin UI only.
public_titlestringTitle of the board shown to the public.
public_descriptionstringDescription of the board shown to the public.
public_keystringStable key for the public URL and widget embedding. Server-assigned, never accepted from API input — omitted from the oaInput groups on purpose. Changing it would break every page that already embeds this board.
image_urlstringURL of the image of the board.
sort_orderintegerSort order of the board in lists.
allow_new_entriesbooleanMembers can create new entries.
allow_votingbooleanMembers can vote on entries.
allow_commentsbooleanMembers can comment on entries.
allow_guest_entriesbooleanGuests can create new entries.
allow_guest_votesbooleanGuests can vote on entries.
allow_guest_commentsbooleanGuests can comment on entries.
moderation_requiredbooleanBoard-level override of the global moderation setting. Null means "use the global setting" — that is why this is nullable and not a plain bool.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
moderated_atstring (date-time)Time the entry was moderated.
social_profileMediaSocialProfile10Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
Show fields (11)
idintegerPrimary key of the social profile. Internal ID.
public_namestringName shown publicly.
profile_picture_urlstringURL of the profile picture.
public_about_mestringText about the person shown publicly.
global_profilebooleanThe profile is a global profile across installations.
name_display_typestringHow the name is shown, for example full name or first name only.
show_profile_picturebooleanThe profile picture is shown.
profile_picture_check_statusstringPruefstatus des Profilbilds (KI-Pruefung, siehe MediaSocialProfilePictureHelper): null = nie geprueft (Pruefung aus), pending, approved, rejected. Nur ein freigegebenes Bild landet in profilePictureUrl, solange die Pruefung eingeschaltet ist.
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
guest_namestringName of the guest who wrote the entry.
guest_emailstringScope-only: never exposed to public or logged-in callers.
guest_email_confirmedbooleanThe e-mail address of the guest was confirmed.
consent_confirmedbooleanGDPR: guest confirmed the consent text before submitting. Same field as EventMoment::$consentConfirmed.
attachmentsarray<Attachment10>Files attached to the entry.
Show fields (25)
idintegerPrimary key of the attachment. Internal ID.
filenamestringOriginal file name.
filesizestringSize of the file in bytes.
mimetypestringMIME type of the file.
createdbyusernamestringName of the user who uploaded the file, as text.
createdstring (date-time)Point in time the attachment was created.
googleidstringID of the file in Google Drive.
scopestringScope that controls who can see the attachment.
ocr_document_typestringDocument type recognized by OCR.
ocr_from_namestringSender name recognized by OCR.
ocr_from_companystringSender company recognized by OCR.
ocr_from_addressstringSender address recognized by OCR.
ocr_from_emailstringSender e-mail address recognized by OCR.
ocr_from_phonestringSender phone number recognized by OCR.
ocr_to_namestringRecipient name recognized by OCR.
ocr_to_companystringRecipient company recognized by OCR.
ocr_to_addressstringRecipient address recognized by OCR.
ocr_to_emailstringRecipient e-mail address recognized by OCR.
ocr_to_phonestringRecipient phone number recognized by OCR.
ocr_summarystringSummary of the document created by OCR.
ocr_statusstringOCR processing status: null=not processed, pending, processing, done, error
ocr_errorstringReason of the last failed or incomplete OCR run, null when it went through
ocr_processed_atstring (date-time)Point in time OCR processing finished.
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.
virus_checked_atstring (date-time)When the virus scan passed. Null while the file is still waiting.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntryMerge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem3>Show fields (21)
timeline_orderintegerPosition of this item's status group on the timeline. Unknown statuses sort last instead of silently landing in the first group.
display_targetstringWhat the timeline should print as the date of this milestone: the free-text label if one was set, otherwise the target date.
linked_entry_countintegerNumber of linked, still-visible feedback entries.
linked_vote_countintegerSummed votes of all linked entries — the demand behind this milestone.
idintegerPrimary key of the roadmap item. Internal ID.
titlestringTitle of the roadmap item.
descriptionstringDescription of the roadmap item.
statusstringStatus of the item, for example planned, in progress or released.
start_datestring (date-time)Planned start date.
target_datestring (date-time)Planned release date.
target_labelstringFree-text period ("Q3 2026") for when a concrete date should not be promised. Shown instead of targetDate when set.
released_atstring (date-time)Time the item was released.
release_versionstringVersion the item was released in.
image_urlstringURL of the image of the item.
sort_orderintegerSort order of the item.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
internal_notestringScope-only.
internal_priorityintegerScope-only.
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
ucatsarray<UnifiedCategory32>Unified categories of the entity.
Show fields (32)
idintegerPrimary key of the unified category. Internal ID.
category_typestringType of the category, for example course or membership.
childrenarray<UnifiedCategory32>Child categories.
parentUnifiedCategory32Parent category.
view_orderintegerSort order of the category in lists.
is_publicbooleanThe category is shown publicly.
createdstring (date-time)Point in time the entity was created.
updatedstring (date-time)Point in time the entity was last updated.
namestringName of the entity.
addressstringAddress as text.
address_streetstringStreet of the address.
address_house_numberstringHouse number of the address.
address_street_levelstringStreet and house number of the address.
address_costringCare-of line of the address.
address_citystringCity of the address.
address_zipstringPostal code of the address.
address_admin_level1stringFirst administrative level of the address, e.g. the federal state.
address_countrystringCountry code of the address.
address_full_countrystringFull name of the country of the address.
address_geo_latstringLatitude of the address.
address_geo_lngstringLongitude of the address.
address_external_provider_idstringfield to store the external provider id of the address. e.g. Google Maps PlaceID like google:ChIJVcKw5r90sEcRhdjNq6NItqE
main_phonestringMain phone number.
main_faxstringMain fax number.
main_emailstringMain e-mail address.
websitestringWebsite address.
deletedbooleanThis property is used to mark an entity as deleted / archived
search_stringstringText that the entity can be searched by.
short_identifierstringShort identifier of the entity.
slug_identifierstringSlug used in URLs of the entity.
image_urlstringURL of the image of the entity.
is_ui_filterbooleanThis property is used to mark an entity as a filter for the frontend
visibility_typestringType of visibility of the entity.
arslistarray<AccessRightStorage13>Access rights list that controls the visibility.
Show fields (12)
idintegerPrimary key of the access right entry. Internal ID.
userUser56User who gets the access right. Only set for user-specific rights.
access_tagAccessTagAccess tag the right applies to. Only set for rights on a tag.
create_mainbooleanCreate permission for main records of the access tag.
edit_mainbooleanEdit permission for main records of the access tag.
read_mainbooleanRead permission for main records of the access tag.
create_childbooleanCreate permission for child records (for example items inside a main record).
edit_childbooleanEdit permission for child records (for example items inside a main record).
read_childbooleanRead permission for child records (for example items inside a main record).
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/media/feedback_entry/42/merge?targetIdentifier=42' \
--header 'x-iw-jwt-token: <TOKEN>'const options = {method: 'PATCH', headers: {'x-iw-jwt-token': '<TOKEN>'}};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/42/merge?targetIdentifier=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/media/feedback_entry/42/merge?targetIdentifier=42"
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/media/feedback_entry/42/merge?targetIdentifier=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.Patch,
RequestUri = new Uri("https://your-instance.iw-erp.de/api/media/feedback_entry/42/merge?targetIdentifier=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/media/feedback_entry/42/merge?targetIdentifier=42")
.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/media/feedback_entry/42/merge?targetIdentifier=42"
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/media/feedback_entry/42/merge').replace(queryParameters: {'targetIdentifier': '42'}),
headers: {'x-iw-jwt-token': '<TOKEN>'},
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"guest_email": "lena.hartmann@example.org",
"board": {
"id": 42,
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"is_public": true,
"public_key": "string",
"sort_order": 1,
"allow_new_entries": true,
"allow_voting": true
},
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string"
}Updates the caller's own feedback entry.
PUT/api/media/feedback_entry/user/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200User updates their own feedback entryMediaFeedbackEntry4
Show fields (13)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
social_profileMediaSocialProfile18Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry4Merge target. Set together with STATUS_DUPLICATE.
curl --request PUT \
--url https://your-instance.iw-erp.de/api/media/feedback_entry/user/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'PUT',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/user/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/media/feedback_entry/user/42"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "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/media/feedback_entry/user/42', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"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/media/feedback_entry/user/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry/user/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/media/feedback_entry/user/42"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"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 package:http (no controller in the iw_erp_api package)
import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.put(
Uri.parse('https://your-instance.iw-erp.de/api/media/feedback_entry/user/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}),
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"attachments": [
{}
],
"vote_count": 1
}Updates the caller's own feedback entry.
PATCH/api/media/feedback_entry/user/{identifier}
Path parameters
identifierrequiredstring |
Request body application/json
dataMediaFeedbackEntry2Show fields (17)
boardMediaFeedbackBoard2Feedback board the entry belongs to.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
moderation_statusstringModeration status, for example pending or approved.
moderation_reasonstringReason for the moderation decision.
social_profileMediaSocialProfile16Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
duplicate_ofMediaFeedbackEntry2Merge target. Set together with STATUS_DUPLICATE.
roadmap_itemsarray<MediaFeedbackRoadmapItem2>internal_notestringScope-only.
internal_priorityintegerScope-only.
deletedbooleanThis property is used to mark an entity as deleted / archived
ucatsarray<UnifiedCategory11>Unified categories of the entity.
Responses
200User updates their own feedback entryMediaFeedbackEntry4
Show fields (13)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
social_profileMediaSocialProfile18Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry4Merge target. Set together with STATUS_DUPLICATE.
curl --request PATCH \
--url https://your-instance.iw-erp.de/api/media/feedback_entry/user/42 \
--header 'content-type: application/json' \
--header 'x-iw-jwt-token: <TOKEN>' \
--data '
{
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}
'const options = {
method: 'PATCH',
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: JSON.stringify({
data: {
text: 'Text',
guest_name: 'Beispiel',
board: {
name: 'Beispiel',
public_title: 'Beispiel',
public_description: 'Text',
image_url: 'https://vynst.de',
sort_order: 1,
allow_new_entries: true
},
headline: 'string',
feedback_type: 'string',
status: 'string'
}
})
};
fetch('https://your-instance.iw-erp.de/api/media/feedback_entry/user/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/media/feedback_entry/user/42"
payload = { "data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": True
},
"headline": "string",
"feedback_type": "string",
"status": "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/media/feedback_entry/user/42', [
'body' => '{"data":{"text":"Text","guest_name":"Beispiel","board":{"name":"Beispiel","public_title":"Beispiel","public_description":"Text","image_url":"https://vynst.de","sort_order":1,"allow_new_entries":true},"headline":"string","feedback_type":"string","status":"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/media/feedback_entry/user/42"),
Headers =
{
{ "x-iw-jwt-token", "<TOKEN>" },
},
Content = new StringContent("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"string\"}}");
Request request = new Request.Builder()
.url("https://your-instance.iw-erp.de/api/media/feedback_entry/user/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/media/feedback_entry/user/42"
payload := strings.NewReader("{\"data\":{\"text\":\"Text\",\"guest_name\":\"Beispiel\",\"board\":{\"name\":\"Beispiel\",\"public_title\":\"Beispiel\",\"public_description\":\"Text\",\"image_url\":\"https://vynst.de\",\"sort_order\":1,\"allow_new_entries\":true},\"headline\":\"string\",\"feedback_type\":\"string\",\"status\":\"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/media/feedback_entry/user/42'),
headers: {'x-iw-jwt-token': '<TOKEN>', 'content-type': 'application/json'},
body: jsonEncode({
"data": {
"text": "Text",
"guest_name": "Beispiel",
"board": {
"name": "Beispiel",
"public_title": "Beispiel",
"public_description": "Text",
"image_url": "https://vynst.de",
"sort_order": 1,
"allow_new_entries": true
},
"headline": "string",
"feedback_type": "string",
"status": "string"
}
}),
);
print(response.body);{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"attachments": [
{}
],
"vote_count": 1
}Soft-deletes the caller's own feedback entry.
DELETE/api/media/feedback_entry/user/{identifier}
Path parameters
identifierrequiredstring |
Responses
200User deletes their own feedback entryMediaFeedbackEntry4
Show fields (13)
author_namestringDisplay name of the author, honouring the pseudonymity the person chose on their social profile. Falls back to the guest name, then to a neutral label — never to an email address.
idintegerPrimary key of the feedback entry. Internal ID.
headlinestringHeadline of the feedback entry.
textstringText of the feedback entry.
feedback_typestringType of the feedback, for example idea or problem.
statusstringStatus of the feedback, for example open, planned or done.
status_notestringPublicly visible reason for the current status. A declined wish without a reason is worse than no board at all, so this is exposed to every access tier.
social_profileMediaSocialProfile18Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.
guest_namestringName of the guest who wrote the entry.
attachmentsarray<Attachment12>Files attached to the entry.
vote_countintegerDenormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.
comment_countintegerNumber of comments on the entry.
duplicate_ofMediaFeedbackEntry4Merge target. Set together with STATUS_DUPLICATE.
curl --request DELETE \
--url https://your-instance.iw-erp.de/api/media/feedback_entry/user/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/media/feedback_entry/user/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/media/feedback_entry/user/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/media/feedback_entry/user/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/media/feedback_entry/user/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/media/feedback_entry/user/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/media/feedback_entry/user/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/media_feedback_entry_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 MediaFeedbackEntryController.deleteUser('42');
if (result.success) {
print(result.data);
}{
"author_name": "Beispiel",
"id": 42,
"text": "Text",
"guest_name": "Beispiel",
"headline": "string",
"feedback_type": "string",
"status": "string",
"status_note": "string",
"attachments": [
{}
],
"vote_count": 1
}