Skip to content
Docs
Versions

Create a new immutable policy version

Create a new immutable policy version

client.zones.policies.versions.create(stringpolicyID, VersionCreateParams { zone_id, schema_version, cedar_json, 3 more } params, RequestOptionsoptions?): PolicyVersion { id, created_at, created_by, 10 more }
POST/zones/{zone_id}/policies/{policy_id}/versions

Create a new immutable policy version

ParametersExpand Collapse
policyID: string
params: VersionCreateParams { zone_id, schema_version, cedar_json, 3 more }
zone_id: string

Path param: The zone identifier

schema_version: string

Body param: Schema version to validate this policy against. Must not be archived.

cedar_json?: unknown

Body param: Cedar policy in JSON representation. Mutually exclusive with cedar_raw.

cedar_raw?: string | null

Body param: Cedar policy in human-readable Cedar syntax. Mutually exclusive with cedar_json.

xAPIVersion?: string

Header param: API version header (date-based, e.g. 2026-02-01)

xClientRequestID?: string

Header param: Unique request identifier specified by the originating caller and passed along by proxies.

formatuuid
ReturnsExpand Collapse
PolicyVersion { id, created_at, created_by, 10 more }
id: string
created_at: string
formatdate-time
created_by: string
owner_type: "platform" | "customer"

Who manages this policy version:

  • "platform" — managed by the Keycard platform (system policy versions).
  • "customer" — managed by the tenant (custom policy versions).
Accepts one of the following:
"platform"
"customer"
policy_id: string
schema_version: string

Schema version this policy was validated against when created.

sha: string

Hex-encoded content hash

version: number
zone_id: string
archived_at?: string | null
formatdate-time
archived_by?: string | null
cedar_json?: unknown

Cedar policy in JSON representation. Populated by default and when format=json is passed; null when format=cedar narrows the response to the text representation only.

cedar_raw?: string | null

Cedar policy in human-readable syntax. Populated by default and when format=cedar is passed; null when format=json narrows the response to the JSON representation only.

Create a new immutable policy version

import KeycardAPI from '@keycardai/api';

const client = new KeycardAPI();

const policyVersion = await client.zones.policies.versions.create('policy_id', {
  zone_id: 'zone_id',
  schema_version: 'schema_version',
});

console.log(policyVersion.id);
{
  "id": "id",
  "created_at": "2019-12-27T18:11:19.117Z",
  "created_by": "created_by",
  "owner_type": "platform",
  "policy_id": "policy_id",
  "schema_version": "schema_version",
  "sha": "sha",
  "version": 0,
  "zone_id": "zone_id",
  "archived_at": "2019-12-27T18:11:19.117Z",
  "archived_by": "archived_by",
  "cedar_json": {},
  "cedar_raw": "cedar_raw"
}
Returns Examples
{
  "id": "id",
  "created_at": "2019-12-27T18:11:19.117Z",
  "created_by": "created_by",
  "owner_type": "platform",
  "policy_id": "policy_id",
  "schema_version": "schema_version",
  "sha": "sha",
  "version": 0,
  "zone_id": "zone_id",
  "archived_at": "2019-12-27T18:11:19.117Z",
  "archived_by": "archived_by",
  "cedar_json": {},
  "cedar_raw": "cedar_raw"
}