Skip to content
Developer

Feedback Votes

Media4 EndpointsMedia / Feedback Votes

Returns a list of votes. Used for auditing suspicious voting patterns.

GET/api/media/feedback_vote

Query parameters

idinteger
deletedbooleanThis property is used to mark an entity as deleted / archived
entrystring
socialProfilestring
voterEmailConfirmedboolean
weightintegerWeight of this vote. Always 1 for now; the column exists so weighting can be added without a data migration.
mergedFromEntryIdstringId of the entry this vote originally belonged to before a duplicate merge. Plain int, no foreign key — the source entry may be hard-deleted later and that must not cascade into the merged vote.
createdstring
updatedstring
searchStringstringtext to search for in the list
orderFieldNamestringname of the order field
orderFieldSortstringsorting modeAllowed: DESCASC
pageintegerpage of the list
pageSizeintegernumber of entries for each page
withMaxPageNumberstringreturns the number of pages available as a header if this is set

Responses

200Returns a list of MediaFeedbackVote objectsarray<MediaFeedbackVote>

Show fields (10)
  • idinteger

    Primary key of the feedback vote. Internal ID.

  • entryMediaFeedbackEntry6

    Feedback entry that was voted on.

    Show fields (17)
    • author_namestring

      Display 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.

    • idinteger

      Primary key of the feedback entry. Internal ID.

    • boardMediaFeedbackBoard5

      Feedback board the entry belongs to.

    • headlinestring

      Headline of the feedback entry.

    • textstring

      Text of the feedback entry.

    • feedback_typestring

      Type of the feedback, for example idea or problem.

    • statusstring

      Status of the feedback, for example open, planned or done.

    • status_notestring

      Publicly 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_statusstring

      Moderation status, for example pending or approved.

    • social_profileMediaSocialProfile10

      Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.

    • guest_namestring

      Name of the guest who wrote the entry.

    • vote_countinteger

      Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.

    • comment_countinteger

      Number of comments on the entry.

    • duplicate_ofMediaFeedbackEntry6

      Merge 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • social_profileMediaSocialProfile10

    Profile that voted.

    Show fields (11)
    • idinteger

      Primary key of the social profile. Internal ID.

    • public_namestring

      Name shown publicly.

    • profile_picture_urlstring

      URL of the profile picture.

    • public_about_mestring

      Text about the person shown publicly.

    • global_profileboolean

      The profile is a global profile across installations.

    • name_display_typestring

      How the name is shown, for example full name or first name only.

    • show_profile_pictureboolean

      The profile picture is shown.

    • profile_picture_check_statusstring

      Pruefstatus 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • voter_emailstring

    Scope-only.

  • voter_email_confirmedboolean

    The e-mail address of the voter was confirmed.

  • weightinteger

    Weight of this vote. Always 1 for now; the column exists so weighting can be added without a data migration.

  • merged_from_entry_idinteger

    Id of the entry this vote originally belonged to before a duplicate merge. Plain int, no foreign key — the source entry may be hard-deleted later and that must not cascade into the merged vote.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

Request
curl --request GET \
  --url https://your-instance.iw-erp.de/api/media/feedback_vote \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
[
  {
    "id": 42,
    "voter_email": "lena.hartmann@example.org",
    "entry": {
      "author_name": "Beispiel",
      "id": 42,
      "text": "Text",
      "guest_name": "Beispiel",
      "headline": "string",
      "feedback_type": "string",
      "status": "string",
      "status_note": "string",
      "moderation_status": "string",
      "vote_count": 1
    },
    "social_profile": {
      "id": 42,
      "public_name": "Beispiel",
      "profile_picture_url": "https://vynst.de",
      "public_about_me": "string",
      "global_profile": true,
      "name_display_type": "string",
      "show_profile_picture": true,
      "profile_picture_check_status": "string",
      "created": "2026-10-15T09:30:00+02:00",
      "updated": "2026-10-15T09:30:00+02:00"
    },
    "voter_email_confirmed": true,
    "weight": 1,
    "merged_from_entry_id": 42,
    "created": "2026-10-15T09:30:00+02:00",
    "updated": "2026-10-15T09:30:00+02:00",
    "deleted": true
  }
]

Casts the caller's vote on an entry.

POST/api/media/feedback_vote/user

Idempotent: voting twice reports already_voted rather than failing, so a double tap in the UI does not surface as an error.

Query parameters

entryIdentifierrequiredstringIdentifier of the entry to vote for

Responses

200User votes for a feedback entryMediaFeedbackVote

Show fields (10)
  • idinteger

    Primary key of the feedback vote. Internal ID.

  • entryMediaFeedbackEntry6

    Feedback entry that was voted on.

    Show fields (17)
    • author_namestring

      Display 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.

    • idinteger

      Primary key of the feedback entry. Internal ID.

    • boardMediaFeedbackBoard5

      Feedback board the entry belongs to.

    • headlinestring

      Headline of the feedback entry.

    • textstring

      Text of the feedback entry.

    • feedback_typestring

      Type of the feedback, for example idea or problem.

    • statusstring

      Status of the feedback, for example open, planned or done.

    • status_notestring

      Publicly 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_statusstring

      Moderation status, for example pending or approved.

    • social_profileMediaSocialProfile10

      Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.

    • guest_namestring

      Name of the guest who wrote the entry.

    • vote_countinteger

      Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.

    • comment_countinteger

      Number of comments on the entry.

    • duplicate_ofMediaFeedbackEntry6

      Merge 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • social_profileMediaSocialProfile10

    Profile that voted.

    Show fields (11)
    • idinteger

      Primary key of the social profile. Internal ID.

    • public_namestring

      Name shown publicly.

    • profile_picture_urlstring

      URL of the profile picture.

    • public_about_mestring

      Text about the person shown publicly.

    • global_profileboolean

      The profile is a global profile across installations.

    • name_display_typestring

      How the name is shown, for example full name or first name only.

    • show_profile_pictureboolean

      The profile picture is shown.

    • profile_picture_check_statusstring

      Pruefstatus 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • voter_emailstring

    Scope-only.

  • voter_email_confirmedboolean

    The e-mail address of the voter was confirmed.

  • weightinteger

    Weight of this vote. Always 1 for now; the column exists so weighting can be added without a data migration.

  • merged_from_entry_idinteger

    Id of the entry this vote originally belonged to before a duplicate merge. Plain int, no foreign key — the source entry may be hard-deleted later and that must not cascade into the merged vote.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

Request
curl --request POST \
  --url 'https://your-instance.iw-erp.de/api/media/feedback_vote/user?entryIdentifier=42' \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "id": 42,
  "voter_email": "lena.hartmann@example.org",
  "entry": {
    "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"
  },
  "social_profile": {
    "id": 42,
    "public_name": "Beispiel",
    "profile_picture_url": "https://vynst.de",
    "public_about_me": "string",
    "global_profile": true,
    "name_display_type": "string",
    "show_profile_picture": true,
    "profile_picture_check_status": "string",
    "created": "2026-10-15T09:30:00+02:00",
    "updated": "2026-10-15T09:30:00+02:00"
  },
  "voter_email_confirmed": true,
  "weight": 1,
  "merged_from_entry_id": 42,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00",
  "deleted": true
}

Withdraws the caller's vote on an entry.

DELETE/api/media/feedback_vote/user/{entryIdentifier}

Path parameters

entryIdentifierrequiredstring

Responses

200User withdraws their voteMediaFeedbackVote

Show fields (10)
  • idinteger

    Primary key of the feedback vote. Internal ID.

  • entryMediaFeedbackEntry6

    Feedback entry that was voted on.

    Show fields (17)
    • author_namestring

      Display 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.

    • idinteger

      Primary key of the feedback entry. Internal ID.

    • boardMediaFeedbackBoard5

      Feedback board the entry belongs to.

    • headlinestring

      Headline of the feedback entry.

    • textstring

      Text of the feedback entry.

    • feedback_typestring

      Type of the feedback, for example idea or problem.

    • statusstring

      Status of the feedback, for example open, planned or done.

    • status_notestring

      Publicly 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_statusstring

      Moderation status, for example pending or approved.

    • social_profileMediaSocialProfile10

      Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.

    • guest_namestring

      Name of the guest who wrote the entry.

    • vote_countinteger

      Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.

    • comment_countinteger

      Number of comments on the entry.

    • duplicate_ofMediaFeedbackEntry6

      Merge 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • social_profileMediaSocialProfile10

    Profile that voted.

    Show fields (11)
    • idinteger

      Primary key of the social profile. Internal ID.

    • public_namestring

      Name shown publicly.

    • profile_picture_urlstring

      URL of the profile picture.

    • public_about_mestring

      Text about the person shown publicly.

    • global_profileboolean

      The profile is a global profile across installations.

    • name_display_typestring

      How the name is shown, for example full name or first name only.

    • show_profile_pictureboolean

      The profile picture is shown.

    • profile_picture_check_statusstring

      Pruefstatus 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • voter_emailstring

    Scope-only.

  • voter_email_confirmedboolean

    The e-mail address of the voter was confirmed.

  • weightinteger

    Weight of this vote. Always 1 for now; the column exists so weighting can be added without a data migration.

  • merged_from_entry_idinteger

    Id of the entry this vote originally belonged to before a duplicate merge. Plain int, no foreign key — the source entry may be hard-deleted later and that must not cascade into the merged vote.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

Request
curl --request DELETE \
  --url https://your-instance.iw-erp.de/api/media/feedback_vote/user/42 \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "id": 42,
  "voter_email": "lena.hartmann@example.org",
  "entry": {
    "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"
  },
  "social_profile": {
    "id": 42,
    "public_name": "Beispiel",
    "profile_picture_url": "https://vynst.de",
    "public_about_me": "string",
    "global_profile": true,
    "name_display_type": "string",
    "show_profile_picture": true,
    "profile_picture_check_status": "string",
    "created": "2026-10-15T09:30:00+02:00",
    "updated": "2026-10-15T09:30:00+02:00"
  },
  "voter_email_confirmed": true,
  "weight": 1,
  "merged_from_entry_id": 42,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00",
  "deleted": true
}

Removes a single vote as an administrator, for cases of proven abuse.

DELETE/api/media/feedback_vote/{identifier}

Path parameters

identifierrequiredstring

Responses

200Delete a MediaFeedbackVoteMediaFeedbackVote

Show fields (10)
  • idinteger

    Primary key of the feedback vote. Internal ID.

  • entryMediaFeedbackEntry6

    Feedback entry that was voted on.

    Show fields (17)
    • author_namestring

      Display 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.

    • idinteger

      Primary key of the feedback entry. Internal ID.

    • boardMediaFeedbackBoard5

      Feedback board the entry belongs to.

    • headlinestring

      Headline of the feedback entry.

    • textstring

      Text of the feedback entry.

    • feedback_typestring

      Type of the feedback, for example idea or problem.

    • statusstring

      Status of the feedback, for example open, planned or done.

    • status_notestring

      Publicly 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_statusstring

      Moderation status, for example pending or approved.

    • social_profileMediaSocialProfile10

      Author when submitted by a logged-in person. Reuses the social profile so the pseudonymity settings a person already chose apply here too.

    • guest_namestring

      Name of the guest who wrote the entry.

    • vote_countinteger

      Denormalized so lists can sort by popularity without a join. Maintained by MediaFeedbackVoteHelper; MediaFeedbackRecountCommand repairs it.

    • comment_countinteger

      Number of comments on the entry.

    • duplicate_ofMediaFeedbackEntry6

      Merge 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • social_profileMediaSocialProfile10

    Profile that voted.

    Show fields (11)
    • idinteger

      Primary key of the social profile. Internal ID.

    • public_namestring

      Name shown publicly.

    • profile_picture_urlstring

      URL of the profile picture.

    • public_about_mestring

      Text about the person shown publicly.

    • global_profileboolean

      The profile is a global profile across installations.

    • name_display_typestring

      How the name is shown, for example full name or first name only.

    • show_profile_pictureboolean

      The profile picture is shown.

    • profile_picture_check_statusstring

      Pruefstatus 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.

    • deletedboolean

      This property is used to mark an entity as deleted / archived

  • voter_emailstring

    Scope-only.

  • voter_email_confirmedboolean

    The e-mail address of the voter was confirmed.

  • weightinteger

    Weight of this vote. Always 1 for now; the column exists so weighting can be added without a data migration.

  • merged_from_entry_idinteger

    Id of the entry this vote originally belonged to before a duplicate merge. Plain int, no foreign key — the source entry may be hard-deleted later and that must not cascade into the merged vote.

  • createdstring (date-time)

    Point in time the entity was created.

  • updatedstring (date-time)

    Point in time the entity was last updated.

  • deletedboolean

    This property is used to mark an entity as deleted / archived

Request
curl --request DELETE \
  --url https://your-instance.iw-erp.de/api/media/feedback_vote/42 \
  --header 'x-iw-jwt-token: <TOKEN>'
Response 200 application/json
{
  "id": 42,
  "voter_email": "lena.hartmann@example.org",
  "entry": {
    "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"
  },
  "social_profile": {
    "id": 42,
    "public_name": "Beispiel",
    "profile_picture_url": "https://vynst.de",
    "public_about_me": "string",
    "global_profile": true,
    "name_display_type": "string",
    "show_profile_picture": true,
    "profile_picture_check_status": "string",
    "created": "2026-10-15T09:30:00+02:00",
    "updated": "2026-10-15T09:30:00+02:00"
  },
  "voter_email_confirmed": true,
  "weight": 1,
  "merged_from_entry_id": 42,
  "created": "2026-10-15T09:30:00+02:00",
  "updated": "2026-10-15T09:30:00+02:00",
  "deleted": true
}