List an organization's integrations
/api/v1/organizations/{id}/oauth-clientsLists the integrations an organization owns: machine OAuth clients it created for its own systems, pinned to it. A client the developer pinned to the organization from the Console or /api/v1/oauth-clients is not listed. Each row carries the roles it holds. Search with q; sort by name, last_active (when each last obtained a token) or created. Needs canopy:organization.manage at the organization, or the developer's key, and the Environment's organization_integrations_enabled on.
Authentication
Authorization Option A JWT access token. Never send alongside X-API-Key: a request carrying both is refused.
X-API-Key Option B API key for management-tier access. Never send alongside an Authorization header: a request carrying both is refused.
Path Parameters
idstring Required Query Parameters
pagenumber Optional Page number (1-based)
takenumber Optional Items per page (1-100, default 20)
qstring Optional Search integration names
sort_byenum Optional Sort column. Defaults to `created`, newest first. `last_active` orders by when each last obtained a token.
orderenum Optional Sort direction
Responses
application/json
items *OrganizationIntegrationResponseDto[]pagination *PageMetaDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Errors
When the request can't be completed, the response body includes a stable error code you can branch on, and a correlation_id (also sent as the X-Correlation-Id header). Quote the correlation id when you contact support: it identifies the exact request in Canopy's logs.
organization.integrations_disabledForbiddenThe Environment does not let organizations create integrations: <code>organization_integrations_enabled</code> is off, which it is by default. Every route under <code>/api/v1/organizations/{org_id}/oauth-clients</code> answers this until the developer turns it on.
Turn on <strong>Let organizations create integrations</strong> on <strong>Tenant → Authentication → Tokens</strong> and choose <strong>Roles integrations may hold</strong>, or send <code>organization_integrations_enabled: true</code> with <code>organization_integration_role_ids</code> to the Environment's auth settings.
Pagination
This endpoint returns a paginated collection. Use the query parameters below to page through results.
pagenumberPage number (1-indexed). Defaults to 1.
takenumberItems per page (1 to 100). Defaults to 20.
Each response includes an items array alongside a pagination object with item_count, page_count, has_previous_page, and has_next_page fields.
Returned object
curl -X GET "https://auth.canopy-io.com/api/v1/organizations/value/oauth-clients?page=0&take=0&q=value&sort_by=name&order=asc" \ -H "X-API-Key: $CANOPY_API_KEY"
{ "items": [ { "id": "string", "client_id": "string", "name": "string", "is_active": false, "organization_node_id": "string", "created_by_name": "string", "last_token_at": "2026-04-20T12:00:00.000Z", "previous_secret_expires_at": "2026-04-20T12:00:00.000Z", "secret_rotated_at": "2026-04-20T12:00:00.000Z", "version": 0, "created_at": "2026-04-20T12:00:00.000Z", "roles": [ { "id": "string", "identity_id": "string", "oauth_client_id": "string", "application_node_id": "string", "role_id": "string", "role_name": "string", "node_name": "string", "effective_from": "2026-04-20T12:00:00.000Z", "effective_to": "2026-04-20T12:00:00.000Z", "created_at": "2026-04-20T12:00:00.000Z", "updated_at": "2026-04-20T12:00:00.000Z", "version": 0 } ], "connection": { "token_endpoint": "string", "audience": "string", "token_lifetime_seconds": 0 } } ], "pagination": { "page": 0, "take": 0, "item_count": 0, "page_count": 0, "has_previous_page": false, "has_next_page": false } }
Tell us how we can improve this guide.