BrenzuriStart free
Approval and the AI label
Concepts

Approval and the AI label

No key, token, agent or staff account approves. The label cannot be set; it is read from the approval record.

On this page

Only a person approves#

Approval is the point where a company’s name goes on the text, so it stays with a signed-in person whose role is Owner or Editor. There is no scope for it, no agent tool for it, and no staff action for it. POST /articles/{id}/approve is not one of the 36 routes a key may call; a key that tries it receives 403 key_not_allowed.

The consequences are the same on every surface:

  • A REST key, whatever its scopes, cannot approve. The export scope renders and delivers; it never approves.
  • An MCP agent has eight tools and none of them approves or asks for approval. An agent’s article stops at needsReview and waits.
  • An export is not an approval. Exporting an unapproved article either succeeds with the label saying “no”, or is refused by a workspace rule.

The label is derived#

Every export and delivery carries one line saying whether a person reviewed that version. The label object on the article is computed from the approval record of the exact current version. It has no setter: no request body, header or scope changes it.

JSON
{
  "reviewedByHuman": true,
  "approvedVersion": 3,
  "approvedAt": "2026-10-06T12:31:40Z",
  "approvedBy": "Maya Chen"
}
label of an approved article; an unapproved one is { "reviewedByHuman": false }
WhereWhat it reads
GET /articles/{id}label.reviewedByHuman, with approvedVersion, approvedAt and approvedBy when true.
Markdown exportThe last line: Generated with sources · reviewed by a human: yes · Approved by <name>, version v<n> or … reviewed by a human: no.
PDF and DOCXThe evidence report carries the approval sentence and the record of versions.
Delivered HTMLThe sources note at the end of the body repeats the line, with the approver’s name and date when approved.

Each language version is approved on its own#

A language version is an article of its own, so the approval, the label and the version history are its own too. Approving the article it was written with does not approve it, and approving it does not approve that article. languageVersions on any of them shows which are approved. A version’s label says reviewed by a human only when a person approved that version of that article. See Write in several languages.

A new version removes the approval#

Approval belongs to one version. Any change after it, a hand edit, a new source, a regenerated paragraph or a new illustration, is a new version. The status returns from approved to needsReview and label.reviewedByHuman becomes false until a person approves the new version. A key or an agent that edits an approved article therefore un-approves it.

If a newer version lands while a person is approving, the approval is refused with 409 newer_version; they read the new version and approve again. If the post-write check left statements the sources do not carry, the person acknowledges each with a note, or approval is refused with 409 unsupported_statements_open.

Workspace export rules#

A workspace can require approval before anything leaves, and can block export while any claim is flagged. Both are enforced before an export or a delivery is made.

RuleRefusal
Approval required before export409 approval_required
Block export while a claim is flagged409 export_blocked_flagged