Configure a whistleblowing channel
const url = 'https://secure.ethicsportal.eu/organizations/example/whistleblower/portal/configuration.json';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"portal":{"legal_name":"Example company","country_code":"FR","registration_number":"EXAMPLE-123","address":"1 Example Street","employee_range":"1-49","industry":"professional_scientific_services","website":null,"phone_number":null,"compliance_officer_id":"mAbCde","brand_color":"#123456","retention_months":60,"social_dialogue_consulted":false,"voice_recording_enabled":false,"email_intake_enabled":false}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://secure.ethicsportal.eu/organizations/example/whistleblower/portal/configuration.json \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "portal": { "legal_name": "Example company", "country_code": "FR", "registration_number": "EXAMPLE-123", "address": "1 Example Street", "employee_range": "1-49", "industry": "professional_scientific_services", "website": null, "phone_number": null, "compliance_officer_id": "mAbCde", "brand_color": "#123456", "retention_months": 60, "social_dialogue_consulted": false, "voice_recording_enabled": false, "email_intake_enabled": false } }'Change the channel’s company details and settings. Requires channel:write. A personal token also needs its user to be a current administrator; an organisation token needs only the scope. Send application/json with a nonempty portal object; only supplied fields change. Unknown fields, query parameters and incorrect JSON types are rejected. Verified company details remain locked. Retention minimums, active administrator appointments and readiness rules are the same as the web application. active, verified, slug, billing and organisation flags cannot be set.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Obfuscated organisation ID.
Request Bodyrequired
Section titled “Request Bodyrequired”object
object
A supported ISO 3166-1 alpha-2 country code. Country-specific retention minimums apply.
An active administrator membership in this organisation, identified by its obfuscated ID. Creation returns your membership_id. Null removes the appointment and can make the channel inactive. Raw database IDs are rejected.
Must also meet the selected country’s minimum. Defaults to 60 months. A country change and its retention adjustment are validated together.
Example
{ "portal": { "legal_name": "Example company", "country_code": "FR", "registration_number": "EXAMPLE-123", "address": "1 Example Street", "employee_range": "1-49", "industry": "professional_scientific_services", "website": null, "phone_number": null, "compliance_officer_id": "mAbCde", "brand_color": "#123456", "retention_months": 60, "social_dialogue_consulted": false, "voice_recording_enabled": false, "email_intake_enabled": false }}Responses
Section titled “Responses”Validated settings saved. active is derived, never a promise of activation.
object
A supported ISO 3166-1 alpha-2 country code. Country-specific retention minimums apply.
An active administrator membership in this organisation, identified by its obfuscated ID. Creation returns your membership_id. Null removes the appointment and can make the channel inactive. Raw database IDs are rejected.
Must also meet the selected country’s minimum. Defaults to 60 months. A country change and its retention adjustment are validated together.
Example
{ "legal_name": "Example company", "country_code": "FR", "registration_number": "EXAMPLE-123", "address": "1 Example Street", "employee_range": "1-49", "industry": "professional_scientific_services", "website": null, "phone_number": null, "compliance_officer_id": "mAbCde", "brand_color": "#123456", "retention_months": 60, "social_dialogue_consulted": false, "voice_recording_enabled": false, "email_intake_enabled": false, "id": "AB12CD34", "active": false, "verified": false, "reporting_form_url": "https://secure.ethicsportal.eu/p/AB12CD34", "missing_fields": []}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" }}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": [ "retention_months" ], "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" }}