Clone tenant settings into a new tenant.
curl --request POST \ --url https://auth.example.com/api/admin/tenants/example/clone \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "id": "acme-copy", "name": "Acme Copy", "description": "Cloned tenant for staging.", "copy": { "settings": true, "clients": true, "client_credentials": false, "roles": true, "admin_access": false, "webhooks": false } }'Provision a new isolated tenant through the normal tenant creation path, then copy the selected tenant settings, roles, Admin access assignments, clients, and webhooks. Tenant signing private keys are never copied; the destination receives a newly generated key. The source tenant must be active. Stored secret settings and credential hashes are copied only when explicitly requested. End-user accounts and their role assignments are never copied. This operation is platform-admin scoped and does not use X-Tenant-Id to identify the destination. The endpoint returns 202 and the durable Control Plane provisioning operation performs clone preparation before Lookup activation. The destination remains non-routable and in provisioning state until all selected resources, clone-preparation audit evidence, and a fresh signing-key rotation succeed. A success audit event is written after activation. The required Idempotency-Key is retained for 15 minutes. Synchronous work is limited to an estimated 40 database queries and 10 KV records, with a 256 KiB limit per selected KV value; callers can reduce selected categories when a limit is exceeded. Machine callers additionally require admin:tenants:lifecycle:standard; a global tenant scope alone is not sufficient. The response warns callers that copied KV-backed configuration is eventually consistent across regions and should be allowed to propagate before production traffic is directed to the destination.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Header Parameters
Section titled “Header Parameters ”Required replay-protection key retained for 15 minutes.
Request Body required
Section titled “Request Body required ”object
object
Copy tenant-scoped settings and policy. Destination-bound tenant identity values, including the tenant ID, name, base domain, allowed domains, allowed identifiers, allowed origins, runtime storage/audit/residency profiles, redirect-trust origins, and signing-key selections, are reset or preserved from destination defaults. References to users, groups, and clients that are not selected for copying are removed. Unclassified settings are omitted.
Copy explicitly classified confidential settings, including credential, external IdP, federation, plugin, backup, and directory connector relay configuration. Requires settings and should only be used within the same trust boundary.
Copy OAuth/OIDC clients, Web Origin registry entries, client-scoped settings, Client Contracts, and OIDC client trust policies. Consent overrides and Flow assignments are reported as skipped because their referenced tenant resources are not part of this option.
Copy client secret hashes and credential tokens. Requires clients.
Copy custom application roles and automatic role-assignment rules. End-user role assignments are excluded because end-user accounts are not copied.
Copy custom Admin roles and active tenant-scoped Admin-user role assignments. Assignments whose scope does not exactly match the source tenant are excluded.
Copy encrypted webhook signing secrets and headers. Requires webhooks.
Legacy alias for copy.clients.
Legacy alias for copy.roles.
Legacy alias for copy.webhooks.
Example
{ "id": "acme-copy", "name": "Acme Copy", "description": "Cloned tenant for staging.", "copy": { "settings": true, "clients": true, "client_credentials": false, "roles": true, "admin_access": false, "webhooks": false }}Responses
Section titled “ Responses ”Tenant clone response.
object
Physical placement scope. Both modes expand automatically.
Unix timestamp in seconds.
Unix timestamp in seconds.
Present when tenant creation is accepted for asynchronous Control provisioning.
object
object
object
object
object
object
object
object
Example
{ "id": "acme", "tenant_code": "acme", "name": "Acme Corp", "description": "Production tenant for Acme Corp.", "isolation_policy": "tenant_exclusive", "lifecycle_state": "active", "is_default": false, "created_at": 1770000000, "updated_at": 1770000000, "signing_keys": { "copied": false, "generated": true }}Accepted asynchronous Control Plane tenant clone operation.
object
Physical placement scope. Both modes expand automatically.
Unix timestamp in seconds.
Unix timestamp in seconds.
Present when tenant creation is accepted for asynchronous Control provisioning.
object
object
object
object
object
object
object
object
object
object
object
Example
{ "id": "acme", "tenant_code": "acme", "name": "Acme Corp", "description": "Production tenant for Acme Corp.", "isolation_policy": "tenant_exclusive", "lifecycle_state": "active", "is_default": false, "created_at": 1770000000, "updated_at": 1770000000, "provisioning": { "mode": "control-plane", "operation_kind": "create", "isolation_policy": "shared_pool", "status": "queued", "capacity_operations": [ { "data_role": "tenant_core/default", "status": "queued", "steps": [ { "step_key": "request_accepted", "status": "queued" } ] } ], "steps": [ { "step_key": "request_accepted", "status": "queued" } ] }}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}A request using the same Idempotency-Key is still in progress.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Headers
Section titled “Headers ”Suggested retry delay in seconds.
Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}Error response.
object
Example generated
{ "error": "example", "message": "example", "error_description": "example"}