Link an OAuth client to an end-user connection
/portal/v1/accounts/{accountSlug}/sso/connections/{id}/oauth-clients/{oauthClientId}Links an end_user SSO connection to one of the Account's OAuth clients, storing the per-client placement config from the body. Every referenced placement target (each node and the default_role_id) must belong to the OAuth client's Environment, otherwise 400; setting is_default clears any other default for the same client in the same transaction. Returns 400 if the connection is not end_user-scope, 404 if the connection or client is not in the Account, emits an sso.connection.oauth_client.linked audit row, and returns 201.
Authentication
AuthorizationJWT access token. Never send alongside X-API-Key: a request carrying both is refused.
sso.manageSecurityManage SSO connections, domains, and directory sync. Granted through an administrator role in the Admin Workspace; a valid token without it is refused with 403.
Path Parameters
idstring Required oauthClientIdstring Required Request body
application/json
is_defaultboolean Optional Send users of this client straight to the IdP (at most one default per client).
default_hierarchy_node_idstring Optional Node a JIT'd identity lands at when no claim rule matches.
claim_node_mappingClaimNodeRuleDto[] Optional default_role_idstring Optional Role assigned to a JIT'd identity at the resolved node.
Responses
application/json
data *OAuthClientLinkResponseDto
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.
account.capability_requiredForbiddenThe signed-in user's administrator roles do not grant the capability this endpoint requires.
Ask an account administrator to grant a role carrying the capability named in the Authentication section, then retry.
Returned object
curl -X POST "https://auth.canopy-io.com/portal/v1/accounts/{accountSlug}/sso/connections/value/oauth-clients/value" \ -H "Authorization: Bearer $CANOPY_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "is_default": false, "default_hierarchy_node_id": "string", "claim_node_mapping": [ { "claim": "string", "value": "string", "node_id": "string", "is_array_match": false } ], "default_role_id": "string" }'
{ "data": { "oauth_client_id": "string", "sso_connection_id": "string", "is_default": false, "default_hierarchy_node_id": "string", "claim_node_mapping": [ { "claim": "string", "value": "string", "node_id": "string", "is_array_match": false } ], "default_role_id": "string", "created_at": "2026-04-20T12:00:00.000Z" } }
Tell us how we can improve this guide.