---
title: "Acquire advisory mutual exclusion over a resource"
method: POST
path: "/coord/v1/claim"
tags: ["Canon"]
---

# Acquire advisory mutual exclusion over a resource

`POST /coord/v1/claim`

## Request

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

**Advisory** — nothing in the resource itself enforces this, so coordinating agents must check `acquired` and honour it. A successful acquire mints a new `fence` (monotonic); pass that fence on `governing_resource` writes to `/coord/v1/assert` and on `/coord/v1/release`.

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
  - `ttl_seconds` integer, required

## Response `200`

`acquired` says whether THIS call took the lock; `fence` is present only when it did

- object
  - `acquired` boolean, required
  - `holder` string, required
  - `expires_at` string, date-time
  - `fence` integer: Monotonic token, issued ONLY when `acquired` is true

## Other responses

- `400`: Missing `resource`, or non-positive `ttl_seconds`
- `401`: Missing or invalid credential (Kairos's verdict)
- `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)
