Bind an end-user connection to an Environment
/portal/v1/accounts/{accountSlug}/sso/connections/{id}/environments/{environmentId}Binds an end_user SSO connection to an Environment in the Account for publishable-key (Direct-API) sign-in, storing the per-Environment placement config from the body. Every referenced placement node must belong to that Environment and the default_role_id must be an active, non-system role of it (400 on mismatch), and setting is_default clears any other default for the same Environment in the same transaction. Returns 400 if the connection is not end_user-scope, 404 if the connection or Environment is not in the Account, emits an sso.connection.environment.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 environmentIdstring Required Request body
application/json
is_defaultboolean Optional Default connection for this Environment's SSO routing (at most one default per Environment).
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 *EnvironmentSsoLinkResponseDto
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/environments/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": { "environment_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.