# Discover organisations

Source: https://ethicsportal.eu/developers/api/operations/getidentity/

GET

/identity.json

```
const url = 'https://secure.ethicsportal.eu/identity.json?limit=50';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```
curl --request GET \
  --url 'https://secure.ethicsportal.eu/identity.json?limit=50' \
  --header 'Authorization: Bearer <token>'
```

* EthicsPortal application

Return the organisations that an access token can read, with the token’s scopes and expiry date. Use it to find organisation IDs. An assistant connection of a person who has no organisation yet returns an empty list.

## Authorizations

* **[personalToken](https://ethicsportal.eu/developers/api/#personaltoken)**
* **[organizationToken](https://ethicsportal.eu/developers/api/#organizationtoken)**

## Parameters

### Query Parameters

**limit**

integer

default: 50 \>= 1 <= 100

**cursor**

string

Follow the Link response header unchanged. Signed cursor expires after one hour.

### Header Parameters

**If-None-Match**

string

The ETag of a response you already hold. If nothing changed, the response is 304 Not Modified with no body. It still counts toward rate limits and, where reads are audited, the audit trail.

## Responses

### 200

Metadata only. Dates describe recorded workflow state, not proof of notification delivery.

application/json

object

**type**

required

Personal: acts as its user, with that user’s current role, in each of their organisations. organization: belongs to one organisation and ignores roles; its scopes alone apply.

string

Allowed values: personal organization

**name**

required

The name given to the token when it was created, as shown on the token list.

string

<= 100 characters

**last\_four**

required

The token’s last four characters, as shown on the token list.

string

\>= 4 characters <= 4 characters

**scopes**

required

Array<string>

<= 14 items unique items

Allowed values: reports:read channel:read channel:write webhooks:read webhooks:write audit\_log:read members:read members:write documents:read billing:read billing:write organizations:write organizations:create invitations:respond

**expires\_at**

required

string format: date-time

**last\_used\_at**

required

When the token was last used before this request, recorded to the minute; null if this is its first use.

string | null format: date-time

**organizations**

required

Array<object>

<= 100 items

object

**id**

required

string

**name**

required

string

**reports\_url**

required

string format: uri

**channel\_url**

required

string format: uri

**members\_url**

required

string format: uri

**webhooks\_url**

required

string format: uri

**audit\_trail\_url**

required

string format: uri

**documents\_url**

required

string format: uri

**billing\_url**

required

string format: uri

**next\_cursor**

required

Pass as the cursor parameter for the next page; null on the last page. The Link header carries the same next page.

string | null

#### Example 

```
{
  "type": "personal",
  "name": "Case dashboard",
  "last_four": "x7Qa",
  "scopes": [
    "reports:read",
    "channel:read"
  ],
  "expires_at": "2027-02-05T10:00:00Z",
  "last_used_at": "2026-11-09T16:42:00Z",
  "organizations": [
    {
      "id": "gHiJkl",
      "name": "Example organisation",
      "reports_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/whistleblower/reports.json",
      "channel_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/whistleblower/portal.json",
      "members_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/members.json",
      "webhooks_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/webhooks.json",
      "audit_trail_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/whistleblower/audit_logs.json",
      "documents_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/whistleblower/documents.json",
      "billing_url": "https://secure.ethicsportal.eu/organizations/gHiJkl/subscriptions.json"
    }
  ],
  "next_cursor": null
}
```

#### Headers

**ETag**

string

Weak validator of this response body. Send it back as If-None-Match.

### 304

Not modified since the ETag sent in If-None-Match. No body.

### 400

Invalid query or cursor

application/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"
  }
}
```

### 401

Missing, invalid, expired or revoked bearer token

application/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"
  }
}
```

#### Headers

**WWW-Authenticate**

string

Bearer realm=“EthicsPortal”

### 403

Required agreement not accepted or permission denied

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

### 404

Missing or inaccessible organisation or resource, or feature disabled

application/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"
  }
}
```

### 429

Rate limit exceeded

application/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"
  }
}
```

#### Headers

**Retry-After**

string

60 seconds
