← Receivers

content:verdicts

content family

Write the brand guardian's verdict on EACH draft and ad creative of a post. Parses one line per item (`<id>: approve|revise - reason`) from the review step's text and saves meta.verdict + verdict_reason on every social_post_variants row and every creative-asset thing; an item the reviewer never mentioned is saved as 'no-verdict', never as approval. Marks content:review -> <platform>:<format> on approve, warns on revise and on no-verdict. Ids are recomputed from the workspace's own rows, never taken from the caller. Does not change any status — the human approve step is still the gate.

Effect
ask
Awaits an outcome — the call returns the response below.
Caller
manage_things
The class of authority the caller must already hold, decided from the attested context with no round trip.
Cost
free
What one call costs, so you can budget before acting.
Reversible
no
This cannot be undone. Dry-run it first where the contract allows.
Idempotent
yes
Safe to retry as-is.

Send it with your agent

One click hands your coding agent a prompt that registers the substrate, reads this contract, and makes the call. Launch opens the app; the others copy the prompt.

Claude Code
Codex
Cursor
Gemini CLI
Claude Desktop
ChatGPT
curl -X POST https://one.ie/api/ask/content:verdicts \
  -H "Authorization: Bearer $ONE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": { "postId": <string>, "text": <string> }}'

The key is never in a link. npx -y @oneie/cli login writes it to ~/.config/oneie/key on your machine.

Request

Validated before dispatch — an invalid payload is refused with the fix, never half-applied.

  • workspace string optional Group slug. Omit for the attested workspace; refused when not yours.
  • postId string required The master social_posts row whose variants and ad creatives were reviewed (content:derive answers it as `postId`).
  • text string required The reviewer's reply: one line per item id, `<id>: approve - reason` or `<id>: revise - reason`.

Response

What comes back from the call.

  • ok boolean
  • error string Named: forbidden · bad_request · post_not_found · no_db.
  • postId string
  • counts object items · approve · revise · noVerdict · failed (verdict could not be saved) · unknown (ids in the reply that are not items).
  • verdicts object[] One per item: id · kind (variant|ad) · platform · format · verdict (approve|revise|no-verdict) · reason · written.
  • unknownIds string[]
  • summary string One line for the board.

Traffic

Every call to content:verdicts, counted where it is dispatched — over HTTP or in-process alike. Aggregate only — no actor, no payload, no workspace.

Counting…

Wiring

Every place in the open source that names content:verdicts, and the file that answers it. Read from the tree at build time — a receiver is reached by NAME through one door, so there is no import edge to follow and a grep is the honest shape of the question. Structure, not volume — the count is in Traffic above.

Called from

API route 2
  • one.ie/web/src/lib/receiver-index.generated.ts:104
  • one.ie/web/src/lib/resolvers/content.ts:734
→

Answered by

content:verdicts one.ie/web/src/lib/resolvers/content.ts:756 Dispatched through POST /api/ask/content:verdicts, after the envelope validates the payload.
JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workspace": {
      "description": "Group slug. Omit for the attested workspace; refused when not yours.",
      "type": "string"
    },
    "postId": {
      "type": "string",
      "description": "The master social_posts row whose variants and ad creatives were reviewed (content:derive answers it as `postId`)."
    },
    "text": {
      "type": "string",
      "description": "The reviewer's reply: one line per item id, `<id>: approve - reason` or `<id>: revise - reason`."
    }
  },
  "required": [
    "postId",
    "text"
  ]
}
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ok": {
      "type": "boolean"
    },
    "error": {
      "description": "Named: forbidden · bad_request · post_not_found · no_db.",
      "type": "string"
    },
    "postId": {
      "type": "string"
    },
    "counts": {
      "description": "items · approve · revise · noVerdict · failed (verdict could not be saved) · unknown (ids in the reply that are not items).",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number"
      }
    },
    "verdicts": {
      "description": "One per item: id · kind (variant|ad) · platform · format · verdict (approve|revise|no-verdict) · reason · written.",
      "type": "array",
      "items": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "unknownIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "summary": {
      "description": "One line for the board.",
      "type": "string"
    }
  },
  "required": [
    "ok"
  ]
}