Skip to content

Update a webhook

PATCH
/organizations/{organization_id}/webhooks/{webhook_id}.json
curl --request PATCH \
--url https://secure.ethicsportal.eu/organizations/example/webhooks/example.json \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "webhook": { "enabled": false } }'

Change the name, URL, enabled state or events; only supplied fields change. Changing the URL, events or enabled state cancels pending deliveries from the previous configuration. A personal token also needs its user to be a current administrator of the organisation.

organization_id
required
string

Obfuscated organisation ID returned by identity.

webhook_id
required
string
Media typeapplication/json
object
webhook
required
object
>= 1 properties
name
string
>= 1 characters <= 100 characters
url

Public HTTPS URL on port 443. Redirects are not followed.

string
enabled
boolean
events
Array<string>
>= 1 items unique items
Allowed values: report.created report.acknowledged report.feedback_given report.closed report.reopened report.assignment_changed report.due_soon report.overdue

Example

{
"webhook": {
"enabled": false
}
}

The updated webhook.

Media typeapplication/json
object
id
required
string
name
required
string
<= 100 characters
url
required

The destination EthicsPortal sends events to, as in Stripe’s API. Other *_url fields are links within this API.

string format: uri
enabled
required
boolean
events
required
Array<string>
>= 1 items unique items
Allowed values: report.created report.acknowledged report.feedback_given report.closed report.reopened report.assignment_changed report.due_soon report.overdue
failing_since
required

Set when a delivery failed permanently or exhausted its retries; cleared by a later success or a configuration change.

string | null format: date-time
created_at
required
string format: date-time
updated_at
required
string format: date-time
deliveries_url
required
string format: uri

Example

{
"id": "pQrStu",
"name": "Case dashboard",
"url": "https://receiver.example/ethicsportal",
"enabled": false,
"events": [
"report.created",
"report.overdue"
],
"failing_since": null,
"created_at": "2026-11-09T10:00:00Z",
"updated_at": "2026-11-09T10:00:00Z",
"deliveries_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/webhooks/pQrStu/deliveries.json"
}

Invalid query, body or cursor

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, unknown, expired or revoked 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"
}
}

The token lacks the required scope (WWW-Authenticate names it), the user’s role does not allow the action, or an agreement must be accepted in the web application

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": "insufficient_scope",
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}

Organisation or resource missing or 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"
}
}

Validation failed; fields are named, values are not echoed

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": [
"events"
],
"feedback_url": "https://secure.ethicsportal.eu/me/feedback.json"
}
}

Rate limited; retry after the Retry-After interval

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"
}
}