Skip to content

Send product feedback

POST
/me/feedback.json
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.

Idempotency-Key
string
>= 1 characters <= 255 characters /^[\x21-\x7e]+$/

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.

Media typeapplication/json
object
feedback
required
object
kind
string
default: other
Allowed values: bug feature other
message
required
string
>= 1 characters

Example

{
"feedback": {
"kind": "bug",
"message": "The yearly report export times out for large organisations."
}
}

Feedback filed for the EthicsPortal team.

Media typeapplication/json
object
kind
required
string
Allowed values: bug feature other
message
required
string
status
required
string
Allowed values: open in_review resolved
created_at
required
string format: date-time

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.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

Example

{
"error": {
"code": "invalid_request",
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}

Missing or unusable token.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

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.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

Example

{
"error": {
"code": "forbidden",
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}

Resource inaccessible, or API access suspended.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

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

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

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.

Media typeapplication/json
object
error
required
object
code
required
Allowed value: validation_failed
fields
required
Array<string>
>= 1 items unique items
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

Example

{
"error": {
"code": "validation_failed",
"fields": [
"message"
],
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}

Rate limit exceeded. Retry-After: 60.

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: invalid_token forbidden insufficient_scope not_found invalid_request agreement_required rate_limited idempotency_key_reused idempotency_key_in_progress not_retryable channel_inactive invitation_unavailable already_subscribed no_subscription
feedback_url
required

Where to tell EthicsPortal what went wrong: POST product feedback here with the same token.

string format: uri

Example

{
"error": {
"code": "rate_limited",
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}