Send product feedback
const url = 'https://secure.ethicsportal.eu/me/feedback.json';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"feedback":{"kind":"bug","message":"The yearly report export times out for large organisations."}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://secure.ethicsportal.eu/me/feedback.json \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "feedback": { "kind": "bug", "message": "The yearly report export times out for large organisations." } }'File a bug report, feature request or other feedback to EthicsPortal, as the in-app feedback form does. Any valid token may send it, without a scope; every error response links here as error.feedback_url. Feedback is attributed to the token’s user, or to the organisation token itself. Limited to 10 submissions per user or organisation per minute. Do not include report content or personal data about reporters.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Header Parameters
Section titled “Header Parameters”Recommended on every POST. Retrying with the same key and the same request within 24 hours returns the first response (with Idempotent-Replayed: true) instead of acting twice. Only successful responses and validation errors are stored; any other outcome releases the key. Reusing a key with a different request returns 409 idempotency_key_reused; a retry while the first request is still running returns 409 idempotency_key_in_progress. Keys are scoped to the token.
Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Example
{ "feedback": { "kind": "bug", "message": "The yearly report export times out for large organisations." }}Responses
Section titled “Responses”Feedback filed for the EthicsPortal team.
object
Example
{ "kind": "bug", "message": "The yearly report export times out for large organisations.", "status": "open", "created_at": "2026-11-09T10:05:00Z"}Invalid JSON body, attributes or types.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "invalid_request", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}Missing or unusable token.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "invalid_token", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}Required scope missing, a personal token whose user is not a current administrator, or agreement_required until browser acceptance.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "forbidden", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}Resource inaccessible, or API access suspended.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "not_found", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}This Idempotency-Key was already used with a different request, or its first request is still running
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "idempotency_key_reused", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}Model validation failed. Fields are attribute names only; values and personal data are never reflected.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "validation_failed", "fields": [ "message" ], "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}Rate limit exceeded. Retry-After: 60.
object
object
Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.
Example
{ "error": { "code": "rate_limited", "feedback_url": "https://secure.ethicsportal.eu/me/feedback.json" }}