Publish or replace the protection manifest
Accepts YAML (text/yaml, application/yaml) or JSON. Body is the full UnifiedProtectionCard; server-side composition merges it across the platform → org → team → agent cascade and writes the canonical composed card. Requires Idempotency-Key. Honors an optional If-Match for optimistic concurrency (stale → 412). Body cap 128 KiB. See ADR-008 and ADR-023.
Authorizations
Supabase JWT token in Authorization: Bearer header
Headers
Client-supplied idempotency token. Replays within 24 hours return the stored result. See ADR-023.
1 - 128Optional optimistic-concurrency token. Pass the ETag from a recent GET ("sha256:<hex64>" shape) to make the write conditional: a stale ETag returns 412 Precondition Failed, a malformed one 400. Omit it to publish unconditionally.
^"sha256:[0-9a-f]{64}"$Path Parameters
Agent identifier (e.g. smolt-abc123)
Body
Unified protection card (ADR-037). Safe House thresholds + trusted-source policy for a single agent. Shape matches src/composition/types.ts::UnifiedProtectionCard (canonical) and what the runtime validator at src/composition/validate.ts accepts. The customer-facing docs at /concepts/protection-card and /specifications/protection-card-schema document this same shape.
Strictest-wins composition: enforce > nudge > observe > off.
off, observe, nudge, enforce Score bands. Must satisfy warn <= quarantine <= block; each value in [0, 1].
Which request surfaces Safe House inspects. Composed across scopes by OR-per-field (any scope requiring inspection wins).
Sources for which detectors short-circuit (each match logged in the trace). Composed as platform->agent intersection (compliance ceiling) with org+agent union inside that ceiling — an agent cannot widen trust beyond what the platform allows.
Free-form extension slot for non-canonical fields. Ignored by the composer; preserved on read for tooling that needs an audit-tail metadata bag.
System-managed block describing which scope sources merged into the canonical card. Only returned when ?include_composition=true.
Response
Composed canonical card after the write.
Unified protection card (ADR-037). Safe House thresholds + trusted-source policy for a single agent. Shape matches src/composition/types.ts::UnifiedProtectionCard (canonical) and what the runtime validator at src/composition/validate.ts accepts. The customer-facing docs at /concepts/protection-card and /specifications/protection-card-schema document this same shape.
Strictest-wins composition: enforce > nudge > observe > off.
off, observe, nudge, enforce Score bands. Must satisfy warn <= quarantine <= block; each value in [0, 1].
Which request surfaces Safe House inspects. Composed across scopes by OR-per-field (any scope requiring inspection wins).
Sources for which detectors short-circuit (each match logged in the trace). Composed as platform->agent intersection (compliance ceiling) with org+agent union inside that ceiling — an agent cannot widen trust beyond what the platform allows.
Free-form extension slot for non-canonical fields. Ignored by the composer; preserved on read for tooling that needs an audit-tail metadata bag.
System-managed block describing which scope sources merged into the canonical card. Only returned when ?include_composition=true.