Skip to main content
Every result-bearing surface in the Arcmira API accepts structured feedback. Community Review is how customers and their agents improve the media-intelligence graph: send what you saw, what you expected, and optionally what you think the fix is, typed to the surface it came from.

The shared model

These invariants hold across every surface:
  • Nothing auto-applies. Submissions create pending review items; Arcmira reviewers accept as submitted, accept with changes, resolve differently, or reject. Transcript corrections are additionally optimistic for you: your own pending edits ride back on your transcript reads immediately.
  • Free. Feedback and corrections cost 0 rows, always.
  • Access follows the surface. You can review what your key can read: commercial types need Pro+ and recommendations:read; everything else needs read.
  • Reproducible. Every submission carries either the query that produced the result (Search family) or a positional anchor (video_id + revision + content hash, transcripts). Reviewers replay what you saw.
  • Targeted. Corrections point at stable public IDs from the response: ent_*, men_*, com_*, segment anchors. Notes-only is fine; untyped is not.
  • Withdrawable. Pending submissions are deletable by their author.
  • Retry-safe. Idempotency-Key is supported everywhere; replays return Idempotency-Replayed: true.
  • Reputation accrues to the submitting account and key over time. High-quality submitters may move through faster review paths; scope alone never grants automatic acceptance.
The index is AI-extracted and continuously reviewed. Every accepted submission improves the reviewed dataset that future extraction systems learn from.

Search surfaces

Pick the type matching the surface you called (all submissions are logged for review): The envelope: type, the reproducing query (required), optional request context, and up to 100 corrections:

Issue types (entity-family corrections)

Reason codes (commercial corrections)

Commercial corrections (recommendations, channel_sponsors) target rows by com_* (or sponsor ent_*) and carry the new mention_class plus a reason: Worked commercial example (a creator disputing a false paid read):

Passing query

The request merges query from three sources: a URL ?query= parameter (URL-encoded JSON), the JSON body’s query object (overrides ?query= on key conflicts), and loose query-string params (anything besides type and query, filling only keys the other two did not set). Prefer the body form. An empty query returns 400 invalid_feedback_request.

Monitor alerts

Alert feedback targets a fired alert, not the monitor’s configuration (fix configuration with PATCH /v1/monitors/{id}). One matched appearance can produce multiple delivery rows (email + Slack + webhook), so content disputes key off the occurrence, and only delivery problems key off the delivery row. Alert rows carry mention_id (men_*) so you can pivot to the mention surface without joins.
Issue set: false_positive_alert (should not have fired), wrong_entity, wrong_media, wrong_timestamp, duplicate_alert, missed_alert, delivery_issue (the one delivery-row case: wrong channel, not received; suggested_change: { "channel": ... }), other. missed_alert is an expectation: there is no row to target, so the correction carries evidence instead: suggested_change: { "source_url": "https://youtube.com/watch?v=...", "approximate_timestamp_seconds": 532, "entity_id": "ent_123881" }. Referenced alert rows must belong to your account; unknown or foreign IDs return 404 alert_not_found.

Transcripts

Transcript content review runs through the corrections route, not /v1/feedback, because it needs revision and anchor semantics rather than a query replay. Six kinds on POST /v1/videos/{video_id}/corrections: Full payloads, the djb2 anchor hash, the seq queue contract (409 re-anchor / 412 expectedSeq), and withdrawal routes live in Transcripts for coding agents.

Response shape

Quote feedback_id in support threads. Public submissions always return per-item status: "logged"; the applied / unchanged / failed counters exist for reviewer tooling and stay 0 on the public path.

Readback

Check where a submission stands with GET /v1/feedback/{feedback_id} (scope read; only the submitting user’s keys can read it, and unknown or foreign IDs return 404 feedback_not_found):
Status vocabulary, per submission and per correction: pending_review, needs_information, accepted, accepted_with_changes (accepted, but the reviewer changed or re-routed the final resolution), rejected, withdrawn, applied (the accepted change is live; accepted ≠ applied), reverted.

Agent guidance

  • Always include the surface-matching type and the reproducing query.
  • Include endpoint, method, and request_id when you have them.
  • Target rows by their public IDs from the response you actually received.
  • Use suggested_change only when you have a concrete fix; otherwise issue_type + notes.
  • Never assume application; nothing changes live data until review.
  • Batch up to 100 corrections per submission, grouped by the query that produced them.
  • Notes limits: 2,000 characters per correction, 4,000 on the top-level notes.
  • Send Idempotency-Key on every submission.

Errors

A correction whose target ID doesn’t resolve (a stale com_* or men_*) is not an error: the submission still returns 200 and the row is logged for review. Re-pull the surface if you want to confirm the ID before submitting. See Errors for the envelope.