# List all global integrators Get every global integrator registered across the platform

`GET /api/configuration/admin/integrators`

- **Success:** `200 OK`
- **Products:** not restricted by product
- **Features:** Gladstone Admin Areas (`ADMIN`)

HTML version: [List all global integrators Get every global integrator registered across the platform](https://support.gladstonesoftware.cloud/reference/configuration/list-all-global-integrators-get-every-global-integrator-registered-across-the-pl)

## Overview

Returns the whole catalogue of global integrators — the partner records Gladstone Support curates
and every tenant can opt into. This is the administrative view of that catalogue: it is the same
list a tenant sees, without any tenant-specific detail.

The call takes no parameters and no filters. Every global integrator is returned, **active and
inactive alike**, sorted by `name` ascending. Soft-deleted integrators are still in the list and are
identified only by `isActive` being `false`. Private, tenant-owned integrators never appear here.

**No API key material is returned by this endpoint — not the key, and not even its prefix.** A
key exists only against a tenant's activation of an integrator, which this catalogue view knows
nothing about. The plaintext key is shown exactly once, in the response to [Activate a global
integrator](activate-a-global-integrator-for-the-current-tenant-issue-a-fresh-api-key-agains.md),
and nothing can recover it afterwards. If you need to know whether the current tenant has activated
an integrator and which key prefix it holds, use [List global integrators with tenant activation
status](list-global-integrators-with-tenant-activation-status-get-every-global-integrato.md)
instead.

The call requires an `ADMIN` feature claim on your token. Without it the request is rejected with
`403` before anything is read, so this endpoint is for Gladstone Support rather than for tenants or
their integrations.

An empty catalogue is `200` with `[]`. There is no `404`, no paging and no ordering parameter.

The scope, capability and rate-limit values on each entry are the template applied to every API key
issued under that integrator — see [Create a global
integrator](create-a-global-integrator-registers-a-new-global-integrator-visible-to-all-tena.md)
for how they are set and what they do at token-issue time.

## Endpoint

`GET {base_url}/api/configuration/admin/integrators`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Sample request

```bash title="cURL"
curl -X GET '{base_url}/api/configuration/admin/integrators' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `[].id` | integer (int32) | The integrator's identifier, allocated by the system when it was created. This is the value a tenant passes to [Activate a global integrator](activate-a-global-integrator-for-the-current-tenant-issue-a-fresh-api-key-agains.md), and the value you use to update or soft-delete it. Because names are not unique, it is the only reliable way to tell two catalogue entries apart. |
| `[].name` | string | The integrator's display name, as shown to tenants browsing the catalogue. Up to 255 characters and never blank. **Not unique** — two integrators can share a name, which is a common symptom of a create request having been retried after a timeout. The list is sorted by this field ascending. |
| `[].description` | string | Free-text explanation of what the integration does, with no length limit. `null` when none was given. |
| `[].origin` | string | The single web origin the integration is allowed to call from, up to 255 characters — for example `https://app.example.com`. It is enforced when a token is requested: a token request carrying an `Origin` header must match this value, compared case-insensitively and ignoring a trailing slash, or it is rejected with `401`. A token request with no `Origin` header skips the check. Exactly one origin; wildcards and lists are not supported. |
| `[].logoUrl` | string | Absolute URL of the integrator's logo for catalogue display, up to 500 characters. `null` when none was set. Returned as given — the platform never fetches or validates it. |
| `[].isGlobal` | boolean | Always `true` on every entry, because this endpoint returns only global integrators. It is what makes a record visible to every tenant. A `false` here would mean a tenant-private integrator, and those are excluded from this list entirely. |
| `[].isBillable` | boolean | Whether usage under this integrator is chargeable. Carried as a `billable` claim on every token minted from a key issued under it. |
| `[].environmentId` | integer (int32) | Always `null` on these entries: a global catalogue entry belongs to no single tenant. The consequence matters — tokens minted from a global integrator's key carry no tenant claims, so they cannot be used for member login or member-token refresh. Only a private integrator, which does carry an `environmentId`, can do that. |
| `[].allowedScopes` | string | The features the integrator may reach, held as a **JSON array encoded into a string** — for example `"[\"FOHGENERIC\"]"`. At token-issue time it is parsed and each entry becomes both a features claim and a products claim; gateway routes require both. A value that is `null`, empty, or not valid JSON produces tokens with no scope claims, which every route rejects with `403`, and the parse failure is silent — there is no error at creation and none at token issue. Auditing this field across the catalogue is the main reason to call this endpoint. |
| `[].canRead` | boolean | Whether the integrator may perform read operations. Emitted as a `can_read` claim on every token issued under it. |
| `[].canWrite` | boolean | Whether the integrator may perform write operations. Emitted as a `can_write` claim. |
| `[].canDelete` | boolean | Whether the integrator may perform delete operations. Emitted as a `can_delete` claim. |
| `[].rateLimitPerMinute` | integer (int32) | The per-minute request budget recorded against the integrator. Never negative — writes reject that. Note that an integrator created without an explicit value holds `0`, not `60`. |
| `[].rateLimitPerHour` | integer (int32) | The per-hour request budget recorded against the integrator, with the same never-negative rule; an integrator created without an explicit value holds `0`, not `1000`. |
| `[].isActive` | boolean | Whether the catalogue entry is live. `true` from creation; `false` after a soft delete, which leaves the integrator in this list. This is the only field distinguishing a withdrawn integrator from a current one, so filter on it yourself if you are rendering a catalogue. It says nothing about whether any tenant has activated the integrator. |
| `[].createdOn` | string (date-time) | UTC timestamp the catalogue entry was created, set automatically. `null` only in the rare case it was not set. |
| `[].modifiedOn` | string (date-time) | UTC timestamp of the last change to the entry. `null` on an integrator that has never been updated, so treat `null` as "unchanged since creation" rather than as missing data. |

## Sample response

```json title="200 OK"
[
  {
    "id": 12345,
    "name": "string",
    "description": "string",
    "origin": "string",
    "logoUrl": "string",
    "isGlobal": true,
    "isBillable": true,
    "environmentId": 12345,
    "allowedScopes": "string",
    "canRead": true,
    "canWrite": true,
    "canDelete": true,
    "rateLimitPerMinute": 1,
    "rateLimitPerHour": 1,
    "isActive": true,
    "createdOn": "2026-08-14T19:00:00Z",
    "modifiedOn": "2026-08-14T19:00:00Z"
  }
]
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `403` | Forbidden | Your token does not carry the `ADMIN` feature claim. The check runs before anything is read, and the response has no body and no message. This is the failure you will actually hit if you try this endpoint with an ordinary tenant or partner token. |
| `500` | Internal server error | An unexpected server-side failure while reading the catalogue. The body is empty; the detail is not returned to you. Retry; nothing about the request can avoid it. |
| `503` | Service unavailable | Not returned by this endpoint itself. |
