sayintel
Endpoint

Get draft qa

GET/api/public/v1/campaigns/{campaign_id}/qaread

Machine-readable QA state for drafts. Pass speaker_id alone to inspect one speaker, or campaign_id for the whole campaign. Returns per-message qa_score, qa_evaluated_at, hard-fail codes, actionable fix hints ({code, action, hint}), needs_human / needs_redo, approvable flag, plus per-speaker buckets (ready_to_send | needs_rewrite | needs_human | awaiting_qa | skipped | sent) and a rollup of the most common fail codes. Use this to decide what to rewrite (request_rewrite) before pushing. Filter with only_failing=true. Paginated: pass next_cursor while has_more is true.

Request

curl "https://sayintel.com/api/public/v1/campaigns/<campaign_id>/qa" \
  -H "Authorization: Bearer $SAYINTEL_TOKEN"

Try it out

Try it outGET/api/public/v1/campaigns/{campaign_id}/qaread

Sent as a bearer token to this site only, and kept in this tab's session storage. It is never written to disk or sent anywhere else.

Paste an API key to run.

Path parameters

NameInTypeRequiredDescription
campaign_idpathstringyesRequired unless speaker_id is given.

Query parameters

NameInTypeRequiredDescription
speaker_idquerystringno
only_failingquerybooleannoOnly return unsent drafts that are not approvable (hard fail, low score, or unevaluated).
limitquerynumberno
cursorquerystringnoOpaque cursor from a previous call's next_cursor. Omit for the first page.

Response

{
  "ok": true,
  "tool": "get_draft_qa",
  "kind": "read",
  "data": { ... },
  "error": null
}

Notes

  • Scope required: read. How scopes work.
  • Paginated. Pass the returned next_cursor while has_more is true.
  • Same capability over MCP as the tool get_draft_qa. MCP setup.