---
title: "Release a held advisory claim"
method: POST
path: "/coord/v1/release"
tags: ["Canon"]
---

# Release a held advisory claim

`POST /coord/v1/release`

## Request

- Base URL: `https://api.infolang.ai`
- URL: `https://api.infolang.ai/coord/v1/release`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Sending `fence` is what lets the server tell a STALE caller apart from one that never held the resource: a fence that does not match the current holder's is a **403**, distinct from releasing something you never held (a plain 200 with `released: false`).

Requires the `coord:write` scope on the presented credential. Enforced by Kairos on this surface — the gateway forwards the credential without inspecting it. A credential with no scope record resolves to `LEGACY_DEFAULT`, which does NOT include `coord:write`: mint a key with it explicitly (`POST /v2/workspaces/{id}/keys`) or grant it through OAuth consent.

**Canon** — the coordination layer. Where memory answers *what do my agents know*, Canon answers *what do my agents agree is true*: an append-only assertion store with enforced authority ordering (`operator` > `observation` > `inference` — **authority outranks recency**), bitemporal reads (valid time vs transaction time), explicit contested state, and advisory claims with fencing tokens.

Proxied verbatim to Kairos; the gateway authenticates and parses NOTHING here, so the `Authorization` header goes upstream untouched and Kairos is the sole authority — the same terms as `/v1`. Either `il_*` credential is accepted; a Supabase session JWT is not.

**Canon is optional per deployment, and detectable.** Where it is not enabled, EVERY `/coord/v1` path answers `404` — including the four verbs below — and the gateway forwards that 404 unchanged rather than substituting an error of its own. **The memory API is completely unaffected either way**: enabling or disabling Canon changes nothing about `/v1`, `/v2` or `/mcp`. Probe `GET /coord/v1/healthz` (or read `capabilities.canon` from `GET /v2/me`) before relying on Canon.

## Request body

- object
  - `resource` string, required
  - `fence` integer: When given, must match the resource's current holder fence or the call answers 403 instead of releasing

## Response `200`

Released — or was never held by this caller (`released: false`)

- object
  - `released` boolean, required
  - `holder` string, nullable, required

## Other responses

- `400`: Missing `resource`
- `401`: Missing or invalid credential (Kairos's verdict)
- `403`: `fence` was given and does not match the resource's current holder fence
- `404`: Canon is not enabled for this deployment. Every `/coord/v1` path answers 404; the memory API is unaffected

---

[API](https://skmtc.dev/infolang/apis/infolang-api.md) · [All operations](https://skmtc.dev/infolang/apis/infolang-api/llms.txt) · [OpenAPI document](https://skmtc.dev/infolang/apis/infolang-api/revisions/d04bf6de72c8?raw)
