Skip to content

POST /v1/atom

One obligation atom’s own record, by id, as of a date.

POST /v1/atom

The duty an atom id names, as it stood on as_of: its modality, actor and action, the entity types it is written for, its executable constant where it has one, and the provenance span its quoted text was taken from — together with the unit the duty is written into, as that unit read on the same date.

This is a lookup on the id space consumers already hold. controls.yaml maps atom ids to a consuming organisation’s own controls, and a diff manifest reports changes under them, so an atom id is what arrives from a control mapping or a change notification. POST /v1/unit reaches the same duties, but only from an eId — and an atom id is not an eId in disguise: ids are permanent and are never reused, so deriving a provision from the shape of an id is a guess this corpus does not license. Without this route an id from controls.yaml had no way into the corpus over HTTP at all.

Refused with 404 when no atom of that id was in force on the date. An id that exists in the release but states no duty that day is the same answer: an atom names one duty on one day.

The same closure is the Model Context Protocol tool get_atom, answered by the same implementation over the same release.

Accepted: bearerAuth (http bearer), or no credentials.

Parameter
X-Request-IdA correlation id to answer under. A value the server cannot log safely — too long, or carrying anything outside its id alphabet — is discarded and a fresh id minted, because a log line is read by a human and must not be forgeable by a header. (in header)

A JSON object, at most 65536 bytes. Unknown properties are refused rather than ignored.

application/json, required — AtomRequest

{
"as_of": "2025-06-01",
"atom_id": "FIXREG-Art5.3-Ob1"
}

The duty, and the provision it is written into.

application/json — AtomResponse

Response header
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

invalid_request — the body is not JSON, is not an object, or states a field this route does not take — an unknown field is refused rather than ignored, because a caller who misspells as_of and is silently answered for today has been given a wrong answer with no way to tell; release_mismatch — the request names a release this instance does not serve; a response echoes the release it answered from, and an echo that lied would be worse than a refusal

application/json — Error

Response header
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

unauthorized — no bearer token was presented, or the one presented is not a credential this deployment accepts. A request with no token is answered only where the deployment configuration says anonymous access is allowed

application/json — Error

Response header
WWW-AuthenticateThe challenge, naming the one scheme this server accepts.
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

not_found — no unit, atom or route of that name

application/json — Error

Response header
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

payload_too_large — the body is larger than this server reads

application/json — Error

Response header
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

rate_limited — the caller is over its per-minute allowance; Retry-After says when the rolling window will admit it again. A refused request does not consume budget, so retrying cannot make the throttling worse

application/json — Error

Response header
Retry-AfterSeconds until the rolling window admits this caller again.
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

not_ready — no verified release is loaded yet, or the process has begun draining. The socket binds before the release is verified, so a listener that is not ready answers the probes and serves no regulation at all

application/json — Error

Response header
X-Request-IdThe correlation id this request was answered under. It is on every response, in the server’s log record for the request, and inside the error object of every refusal.

Rendered from openregs/openregs@f3a2d10:docs/reference/openapi.json