Manage downstream customers
Provision customer identities, map external organization evidence, and bind customer-specific Policies within a parent tenant.
Before you begin
Use customer tenancy only for downstream organizations served by a parent tenant. Choose an opaque Constal customer id and identify the Auth Provider’s stable external organization id. Prepare a deployed Policy owned by the authenticated parent tenant. Customer tenants do not own deployments, Credentials, billing administrators, or platform operators.
Steps
- List customers with
GET /v1/customersor inspect one throughGET /v1/customers/:customerId. - Create or update idempotently with
PUT /v1/customers/:customerId. Include a stableeventIdand the documented customer metadata. The platform checkscustomer:createorcustomer:updateagainst current existence. - Enable or disable through
POST /v1/customers/:customerId/enableor/disable, again with a stableeventId. - Map one Auth Provider namespace/external identity key through
PUT /v1/customers/:customerId/identity-mappings/:mappingId. Delete that exact mapping withDELETEand an event body when it should no longer authenticate as this customer. - Bind an ordinary deployed parent-tenant Policy through
PUT /v1/customers/:customerId/policy-bindings/:bindingId. Delete the exact binding to remove it. Cross-tenant or undeployed Policy CRNs are rejected. - Configure the Channel manifest’s customer identity mode as
requiredoroptional. The Auth Provider returns{ customer: { externalId } }; central auth resolves that evidence to the opaque customer CRN and Policy set. Withoptional, an external id that is not mapped to a Customer is received unaffiliated, and the Channel's Policy for unaffiliated Principals decides it. An id whose Customer is disabled, or whose Customer has no Policies bound in the namespace, is refused, as is any unresolved id withrequired.
Return origins
Return origins are the https origins a browser may be returned to after a Credential interaction started with a returnUrl (see the Credential HTTP API). They are a tenant setting. The callback checks them again when it returns the browser, so an origin removed while an interaction was open is not returned to: the browser lands on the Console Credential page instead.
GET /v1/return-originsrequiresreturn-origin:readand answers{ "data": ["https://app.example.com"] }.PUT /v1/return-originsrequiresreturn-origin:updateand replaces the whole list with{ "eventId": "...", "origins": ["https://app.example.com"] }. Each entry is an exact origin with no path, query, or credentials. It answers{ "origins": [...] }.
Tenant owners and admins hold both scopes.
Verify
Invoke the same customer-aware Channel using two external customer identities and the same public session id. Confirm each accepted Run has the expected customer CRN, Policy snapshot, scoped Resource/Credential assignments, and isolated session history. Disable one customer and verify new admission fails without affecting the other.
Next steps
Read Channel Auth Providers, Scoped bindings, and Policies before serving shared Agents to downstream customers.