Skip to main content
POST
Propose a policy change (maker)

Authorizations

Authorization
string
header
required

Caller API key issued by scripts/generate-api-key.ts. Sent as Authorization: Bearer . Verified against a stored SHA-256 hash in constant time by packages/api/src/auth/StaticKeyAuthenticator.ts. Required on every route not listed as exempt in this document's top-level description. See /api-reference/authentication.

Path Parameters

name
string
required
Pattern: ^[A-Za-z0-9._-]+$
version
string
required
Pattern: ^[A-Za-z0-9._-]+$

Body

application/json

Request body for POST /policies/{name}/{version}/pending-changes.

proposedContent
object
required

The full proposed policy.json content, in its entirety. Its policyId must equal the {name} path parameter, and its policyVersion must match ^[A-Za-z0-9._-]+$. Validated against the same rules POST /policies/validate checks.

reason
string
required

Free-text justification. Required, non-empty.

Response

Pending Policy Change created.

A proposed change to a policy's content, held in a durable pending state until a second, distinct human explicitly approves or rejects it (Policy Governance, maker-checker). Only ever moves from PENDING_APPROVAL to APPROVED or REJECTED, exactly once.

pendingPolicyChangeId
string
required

Unique Pending Policy Change identifier.

policyName
string
required

The policy this proposal targets, same identifier as Policy.policyId.

policyVersion
string
required

The existing version this proposal is a change against ("the version being replaced"). Not necessarily equal to proposedContent's own declared version: an in-place patch and a version bump are both legitimate.

proposedContent
object
required

The full proposed policy.json content, in its entirety, not a diff or patch.

proposedBy
string
required

Identity of the proposer (maker). Always a human-authenticated (credentialHolderType USER) caller.

proposedAt
string<date-time>
required
status
enum<string>
required
Available options:
PENDING_APPROVAL,
APPROVED,
REJECTED
reason
string
required

Free-text justification from the proposer, required at creation.

resolvedBy
string

Identity of the resolver (checker). Absent while PENDING_APPROVAL. Never equal to proposedBy.

resolvedAt
string<date-time>

Absent while PENDING_APPROVAL.

rejectionReason
string

Present only when status is REJECTED.

coverageWarnings
string[]

Present only when non-empty: uncovered-fact warnings from PolicyValidator.findUncoveredFacts against proposedContent.

ruleConflicts
string[]

Present only when non-empty: advisory rule-conflict warnings from PolicyValidator.findRuleConflicts against proposedContent, never blocking.