Skip to content

Admin Commands

Admin commands manage all control-plane entities. Every command in this section requires CARACAL_ADMIN_TOKEN. Zone-scoped commands (everything except zone list, zone get, zone create) also require a zone ID, resolved in order: --zone flag → CARACAL_ZONE_ID environment variable → zone_id in caracal.toml.

All commands accept --json to emit structured JSON and --help for command-specific help.


List all zones in the organization.

Terminal window
caracal zone list
caracal zone list --json

Table columns: id, name, slug, org_id, dcr_enabled, pkce_required


Fetch a single zone by ID.

Terminal window
caracal zone get zone_abc123

Create a new zone.

Terminal window
caracal zone create --name "Production"
caracal zone create --name "Staging" --slug staging --dcr --no-pkce
FlagTypeDefaultDescription
--name <n>stringrequiredDisplay name
--slug <s>stringAuto-derivedURL-safe slug
--org <id>stringOrganization ID
--dcrbooleanfalseEnable dynamic client registration
--no-pkcebooleanDisable PKCE (PKCE is required by default)
--login-flow <flow>stringstandardLogin flow type

Update an existing zone. Only supplied flags are sent.

Terminal window
caracal zone patch zone_abc123 --name "Production v2"
caracal zone patch zone_abc123 --dcr=true --pkce=false

Accepts the same flags as create, plus --dcr=true|false and --pkce=true|false as explicit boolean forms.


Delete a zone.

Terminal window
caracal zone delete zone_abc123

Output: deleted zone_abc123


All app commands are zone-scoped.

Terminal window
caracal app list --zone zone_abc123

Table columns: id, name, registration_method, credential_type, consent, created_at


Terminal window
caracal app get app_def456

Terminal window
caracal app create --name "Payment Agent" --credential-type token
caracal app create --name "Public Client" --method dcr --credential-type public
FlagTypeDefaultDescription
--name <n>stringrequiredApplication name
--method <m>managed|dcrmanagedRegistration method
--credential-type <t>token|password|public-key|url|publicCredential type
--client-secret <s>stringPre-set client secret
--traits <a,b>stringComma-separated trait list
--consentbooleanfalseRequire user consent

Terminal window
caracal app patch app_def456 --name "Payment Agent v2"
caracal app patch app_def456 --consent=true

Accepts the same flags as create. Only supplied flags are sent.


Terminal window
caracal app delete app_def456

Create an application via Dynamic Client Registration.

Terminal window
caracal app dcr --name "Temp Client" --expires-in 3600
FlagTypeDefaultDescription
--name <n>stringrequiredApplication name
--credential-type <t>stringCredential type
--client-secret <s>stringPre-set client secret
--traits <a,b>stringTrait list
--expires-in <s>integerToken TTL in seconds

All resource commands are zone-scoped.

Terminal window
caracal resource list

Table columns: id, identifier, name, upstream_url, scopes, credential_provider_id


Terminal window
caracal resource get resource_ghi789

Terminal window
caracal resource create \
--identifier "resource://payments-api" \
--scopes "transfer:read,transfer:write" \
--name "Payments API" \
--upstream-url "http://payments.internal"
FlagTypeDefaultDescription
--identifier <id>stringrequiredResource URI
--scopes <a,b>stringrequiredComma-separated scope list
--name <n>stringDisplay name
--upstream-url <url>stringBackend URL for gateway proxying
--prefixbooleanfalseMatch identifier as a prefix
--provider <id>stringCredential provider ID

Terminal window
caracal resource patch resource_ghi789 --scopes "transfer:read,transfer:write,transfer:admin"

Accepts the same flags as create. Only supplied flags are sent.


Terminal window
caracal resource delete resource_ghi789

All provider commands are zone-scoped.

Terminal window
caracal provider list

Table columns: id, identifier, name, kind, owner_type, client_id


Terminal window
caracal provider get prov_jkl012

Terminal window
# OAuth 2.0 provider
caracal provider create \
--identifier "provider://github" \
--kind oauth2 \
--name "GitHub" \
--client-id "gh_client_id" \
--config '{"authorization_endpoint":"https://github.com/login/oauth/authorize"}'
# Config from file
caracal provider create \
--identifier "provider://internal-oidc" \
--kind oidc \
--config @/path/to/oidc-config.json
FlagTypeDefaultDescription
--identifier <id>stringrequiredProvider identifier URI
--name <n>stringDisplay name
--kind <k>oauth2|oidc|apikey|workloadProvider kind
--owner-type <t>stringOwner type (e.g., user, agent)
--client-id <id>stringOAuth 2.0 client ID
--config <json>stringPublic config fields as JSON; use @/path/to/file to load from a file

Terminal window
caracal provider patch prov_jkl012 --name "GitHub OAuth"

Terminal window
caracal provider delete prov_jkl012

All policy commands are zone-scoped. Policies are immutable after creation — add new Rego content as a new version.

Terminal window
caracal policy list

Table columns: id, name, description, owner_type, created_by, created_at


Returns the policy record and all its versions.

Terminal window
caracal policy get pol_mno345

Terminal window
caracal policy create --name "Scope Guard" --file policy.rego
caracal policy create --name "Allow All" --content 'package caracal.authz
import rego.v1
result := {"decision": "allow", "evaluation_status": "complete", "determining_policies": [], "diagnostics": []}'
FlagTypeDefaultDescription
--name <n>stringrequiredPolicy name
--file <path>stringrequired†Path to Rego file
--content <rego>stringrequired†Inline Rego source
--description <d>stringDescription
--owner-type <t>stringOwner type

†Either --file or --content is required.


Add a new Rego version to an existing policy.

Terminal window
caracal policy version pol_mno345 --file policy-v2.rego
caracal policy version pol_mno345 --file policy-v2.rego --schema-version 2026-03-16
FlagTypeDefaultDescription
--file <path>stringrequired†Path to Rego file
--content <rego>stringrequired†Inline Rego source
--schema-version <v>string2026-03-16Policy schema version

†Either --file or --content is required.


Archive a policy (soft delete).

Terminal window
caracal policy delete pol_mno345

Output: archived pol_mno345


Policy-set commands — caracal policy-set

Section titled “Policy-set commands — caracal policy-set”

A policy set bundles policy versions into a versioned, activatable set. The STS evaluates the active policy-set version on every token exchange.

Terminal window
caracal policy-set list

Table columns: id, name, active_version_id, description, created_at


Terminal window
caracal policy-set get pset_pqr678

Terminal window
caracal policy-set create --name "Production Guards" --description "All production enforcement policies"
FlagTypeDefaultDescription
--name <n>stringrequiredPolicy-set name
--description <d>stringDescription

Bundle policy versions into a new policy-set version.

Terminal window
caracal policy-set version pset_pqr678 \
--policy-versions polv_abc,polv_def,polv_ghi
FlagTypeDefaultDescription
--policy-versions <v1,v2>stringrequiredComma-separated policy version IDs

Promote a version to active. Token exchanges immediately begin evaluating it.

Terminal window
caracal policy-set activate pset_pqr678 --version psetv_jkl012
# Shadow mode: evaluate new version in parallel but use the active version's decision
caracal policy-set activate pset_pqr678 --version psetv_mno345 --shadow psetv_jkl012
FlagTypeDefaultDescription
--version <vid>stringrequiredPolicy-set version ID to activate
--shadow <vid>stringVersion to run in shadow (evaluation-only) mode

Archive a policy set.

Terminal window
caracal policy-set delete pset_pqr678

Output: archived pset_pqr678


All grant commands are zone-scoped. Grants authorize a specific application to access a resource on behalf of a user.

Terminal window
caracal grant list

Table columns: id, application_id, user_id, resource_id, scopes, status, created_at


Terminal window
caracal grant get grant_stu901

Terminal window
caracal grant create \
--app app_def456 \
--user user_vwx234 \
--resource resource_ghi789 \
--scopes "transfer:read,transfer:write"
FlagTypeDefaultDescription
--app <id>stringrequiredApplication ID
--user <id>stringrequiredUser (subject) ID
--resource <id>stringrequiredResource ID
--scopes <a,b>stringrequiredComma-separated scopes

Revoke a grant. All active sessions derived from the grant become ineligible for new token exchanges.

Terminal window
caracal grant revoke grant_stu901

Output: revoked grant_stu901


Sessions are read-only from the CLI. Revoke access by revoking the underlying grant.

Terminal window
caracal session list
caracal session list --status active --limit 50
caracal session list --subject user_vwx234
FlagTypeDefaultDescription
--status <s>active|revoked|expiredFilter by status
--subject <id>stringFilter by subject (user) ID
--limit <n>integerMaximum rows to return

Table columns: id, session_type, subject_id, status, expires_at, authenticated_at