Authentication & management keys
Two gates enable access: the deployment switch and tenant opt-in. Every management key belongs to exactly one tenant; one tenant can have multiple keys for independent automation clients.
Request authentication
Authorization: Bearer <management-key>
The key establishes the tenant. Caller-supplied tenant headers cannot expand that scope. Gateway inference keys, log-export credentials and management keys are not interchangeable.
Enablement and lifecycle
- Enable
LLMGATEWAY_MANAGEMENT_API_ENABLEDon the central service. It defaults tofalse. - An authorized administrator enables management for the tenant.
- The administrator creates a named key with explicit scopes and, optionally, an expiry.
- Store the returned secret. Issue a replacement key before revoking a key used by an existing integration.
Disabling tenant management suspends its keys. Re-enabling restores keys that remain unexpired and unrevoked. This does not enable/disable gateway apps. Tenant admins may continue to inspect enablement and revoke keys while tenant management is suspended, provided the deployment gate is enabled.
Management keys do not expire by default. expires_at is a future RFC 3339 timestamp or null. On PATCH, omission preserves the current expiry and null clears it. Expired and revoked keys are terminal: issue a new key instead of resurrecting one.
Scopes
All scopes listed for an operation are required. No scope implies another.
App creation requires both config:write and credentials:write because it issues an initial gateway credential. Attaching an existing provider needs config:write; changing that shared provider needs providers:write.
Administration boundary
The following routes use the separate /llmgateway/management-admin/v1 prefix. They require a verified tenant administrator for that tenant or an authorized Quilr operator. A management key cannot grant itself more permissions or enable its tenant.
Administrator credentials must identify a verified tenant administrator or authorized Quilr operator. Use the administration identity provider configured for your deployment; tenant headers alone do not authorize administrative access.
/admin/tenants/{tenant_id}/settingsRead tenant management settings
Administrator-only bootstrap. Verify tenant membership and admin role or authorized Quilr operator identity.
Verified tenant admin / Quilr operatorPath, query & header parameters 1
tenant_id (path)stringrequiredVerified administrator tenant scope.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/settings' \
--header 'Authorization: Bearer <verified-admin-token>'
/admin/tenants/{tenant_id}/settingsEnable or suspend tenant management
Requires the deployment switch and verified administrator authority. Disable suspends keys without revoking them or changing gateway apps.
Verified tenant admin / Quilr operatorPath, query & header parameters 2
tenant_id (path)stringrequiredVerified administrator tenant scope.
If-Match (header)stringrequiredExact quoted ETag from a current resource read.
Full request body specification application/json
enabledbooleanrequiredEnable management for this tenant. Disabling suspends existing keys without revocation.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/settings' \
--header 'Authorization: Bearer <verified-admin-token>' \
--header 'If-Match: "resource-version"' \
--header 'Content-Type: application/json' \
--data '{
"enabled": true
}'
/admin/tenants/{tenant_id}/keysList management keys
List metadata only. Existing management secrets cannot be retrieved.
Verified tenant admin / Quilr operatorPath, query & header parameters 3
tenant_id (path)stringrequiredVerified administrator tenant scope.
limit (query)integeroptionalItems per page.
cursor (query)stringoptionalOpaque cursor returned by this same collection and filters.
No request body.
curl --request GET \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/keys?limit=50' \
--header 'Authorization: Bearer <verified-admin-token>'
/admin/tenants/{tenant_id}/keysIssue a management key
Issue a tenant-bound key through verified administration. Tenant opt-in must be enabled. Secret is available at issuance only; no expiry by default.
Verified tenant admin / Quilr operatorPath, query & header parameters 2
tenant_id (path)stringrequiredVerified administrator tenant scope.
Idempotency-Key (header)stringrequiredUnique operation key. Reuse only with the identical request; mismatch returns 409.
Full request body specification application/json
namestringrequiredHuman-readable automation name.
scopesarray<string>requiredExplicit scopes; there are no implicit scope grants.
Array item specification
stringValues: "read""config:write""providers:write""policy:write""policy:publish""credentials:write""credentials:read"
expires_atstring | nulloptionalOmit on create or send null for no expiry. On PATCH, omission preserves the current expiry and null removes it. Expired/revoked credentials cannot be resurrected.
Variant 1 string
stringFuture RFC 3339 timestamp with an explicit timezone.
Also accepts null.
Unknown fields are rejected in this object.
curl --request POST \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/keys' \
--header 'Authorization: Bearer <verified-admin-token>' \
--header 'Idempotency-Key: operation-001' \
--header 'Content-Type: application/json' \
--data '{
"name": "Deployment automation",
"scopes": [
"read",
"config:write",
"providers:write",
"credentials:write"
],
"expires_at": null
}'
/admin/tenants/{tenant_id}/keys/{key_id}Update a management key
Change name, explicit scopes or optional expiry. Expired/revoked keys cannot be reactivated; secret is not returned.
Verified tenant admin / Quilr operatorPath, query & header parameters 3
tenant_id (path)stringrequiredVerified administrator tenant scope.
key_id (path)stringrequiredIf-Match (header)stringrequiredExact quoted ETag from a current resource read.
Full request body specification application/json
namestringoptionalOptional new display name.
scopesarray<string>optionalExplicit scopes; there are no implicit scope grants.
Array item specification
stringValues: "read""config:write""providers:write""policy:write""policy:publish""credentials:write""credentials:read"
expires_atstring | nulloptionalOmit on create or send null for no expiry. On PATCH, omission preserves the current expiry and null removes it. Expired/revoked credentials cannot be resurrected.
Variant 1 string
stringFuture RFC 3339 timestamp with an explicit timezone.
Also accepts null.
Unknown fields are rejected in this object.
curl --request PATCH \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/keys/key_example' \
--header 'Authorization: Bearer <verified-admin-token>' \
--header 'If-Match: "resource-version"' \
--header 'Content-Type: application/json' \
--data '{
"scopes": [
"read"
],
"expires_at": null
}'
/admin/tenants/{tenant_id}/keys/{key_id}Revoke a management key
Idempotently revoke a key. This remains available to authorized administrators while tenant management is suspended.
Verified tenant admin / Quilr operatorPath, query & header parameters 3
tenant_id (path)stringrequiredVerified administrator tenant scope.
key_id (path)stringrequiredIf-Match (header)stringrequiredExact quoted ETag from a current resource read.
No request body.
curl --request DELETE \
'https://management.example.com/llmgateway/management-admin/v1/tenants/tenant_example/keys/key_example' \
--header 'Authorization: Bearer <verified-admin-token>' \
--header 'If-Match: "resource-version"'