Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.arcmira.com/llms.txt

Use this file to discover all available pages before exploring further.

POST /v1/feedback lets Pro+ integrators correct Arcmira’s commercial classifications inline. Every submission carries a type, the query you ran, and optionally a list of corrections. Supported types apply corrections immediately and re-aggregate downstream rollups; the rest are logged for review.
POST /v1/feedback?type=...
Feedback is gated behind Pro+ and requires the recommendations:write scope. Lower tiers receive 403 recommendations_not_enabled; correctly tiered keys missing the scope receive 403 insufficient_scope. See Scopes.
Feedback submissions cost zero rows — corrections are free.

Anatomy of a submission

curl -X POST 'https://api.arcmira.com/v1/feedback?type=recommendations' \
  -H "Authorization: Bearer $ARCMIRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": {
      "channel_id": "UC-DRzaGnL_vtBUpCFH5M0tg",
      "mention_class": "ad_read",
      "limit": 100
    },
    "corrections": [
      { "id": "com_119682", "mention_class": "mention", "reason": "false_positive_ad_read" }
    ]
  }'
Three things travel together:
  1. type — what surface the feedback is about.
  2. query — the parameters of the call you made. Lets reviewers reproduce the exact result set.
  3. corrections — optional per-row fixes. Omit for free-form notes-only feedback.

Supported types

typeWhat it coversAuto-applies?
recommendationsA /v1/recommendations result row.Yes
channel_sponsorsA sponsor entity on a channel.Yes
mentionsA /v1/mentions row.Logged
entities_searchA /v1/entities/search hit.Logged
entitiesA /v1/entities/{id} payload.Logged
channelsA /v1/channels/{slug} payload.Logged
Logged corrections are persisted to api_feedback and api_feedback_corrections for review; nothing changes in the live index until a human looks at them.

Three ways to pass query

The request merges query from three sources (later sources override earlier):
  1. URL ?query= parameter. Either URL-encoded JSON (?query=%7B%22channel_id%22%3A%22UC-...%22%7D) or a nested query string (?query=channel_id=UC-...&mention_class=ad_read).
  2. Loose query-string params on the URL itself. Anything other than type and query is folded into query (e.g. ?channel_id=UC-...&mention_class=ad_read).
  3. JSON body query object. The most common form — strongly recommended for non-trivial payloads.
Empty query returns 400 invalid_feedback_request.

Auto-apply behavior

type=recommendations

Each correction targets one row by its com_* ID.
{
  "query": { "entity_id": "ent_124261", "mention_class": "ad_read" },
  "corrections": [
    { "id": "com_119682", "mention_class": "mention", "reason": "false_positive_ad_read", "notes": "Host was reading from a guest's bio, not a paid promo." }
  ]
}
Each correction must include id (a com_* ID or numeric recommendation ID) and mention_class (the new class). reason and notes are optional but help the audit trail. Result per correction:
  • applied — the row’s class was changed.
  • unchanged — the row already had the target class.
  • not_found — the com_* ID doesn’t exist.
  • invalid — the correction is malformed or the row can’t be corrected (e.g. it was already manually resolved).
After all corrections are processed, Arcmira re-aggregates brand_profiles for every affected entity.

type=channel_sponsors

Each correction targets one entity on the channel from query.channel_id. The id must be an ent_*. All matching recommendations rows for that entity on that channel are reclassified.
curl -X POST 'https://api.arcmira.com/v1/feedback?type=channel_sponsors' \
  -H "Authorization: Bearer $ARCMIRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "query": { "channel_id": "UC-DRzaGnL_vtBUpCFH5M0tg", "min_ad_reads": 3 },
    "corrections": [
      {
        "id": "ent_999",
        "mention_class": "mention",
        "reason": "false_positive_ad_read",
        "notes": "One-off guest intro mis-classified as a sponsor read."
      }
    ]
  }'
mention_class defaults to mention if omitted. query.channel_id is required for this type.

Other types

mentions, entities_search, entities, and channels corrections are stored with status: logged. Use them to flag wrong-entity attribution, missed appearances, search-ranking issues, or stale channel metadata — Arcmira reviewers triage and apply manually.

Reason codes

CodeUse for
false_positive_ad_readPipeline classified a row as ad_read but it isn’t paid.
false_positive_endorsementPipeline classified an organic endorsement that wasn’t there.
missed_ad_readA real paid read the pipeline didn’t surface (or classified as mention).
missed_endorsementA real endorsement the pipeline missed.
wrong_classificationAny other class-level error (e.g. ad_readendorsement).
wrong_entityThe row attributes the wrong entity (e.g. Apple Inc. vs. Apple fruit).
otherFree-form. Add detail in notes.
Notes are limited to 2 000 characters per correction and 4 000 characters on the top-level notes field.

Response shape

{
  "feedback_id": 84,
  "type": "recommendations",
  "query": { "channel_id": "UC-DRzaGnL_vtBUpCFH5M0tg", "mention_class": "ad_read" },
  "applied": 1,
  "unchanged": 0,
  "failed": 0,
  "logged": 0,
  "corrections": [
    {
      "item_id": "com_119682",
      "item_kind": "recommendation",
      "status": "applied",
      "previous_mention_class": "ad_read",
      "new_mention_class": "mention",
      "rows_affected": 1,
      "reason": "false_positive_ad_read",
      "recommendation": {
        "id": "com_119682",
        "mention_class": "mention"
      }
    }
  ]
}
feedback_id is the row in api_feedback you can quote in support tickets. applied + unchanged + failed + logged always equals corrections.length.

Limits

  • Up to 100 corrections per submission. Batch larger workflows across calls.
  • A submission with corrections: [] is valid — useful for free-form notes feedback against a query that returned poor results.
  • Reuse the Idempotency-Key header to make retries safe (cached for 24h, same as watchlists/trackers). See Idempotency.

Errors

CodeWhen
recommendations_not_enabledTier below Pro+.
insufficient_scopePro+ key missing recommendations:write.
invalid_feedback_requestMissing type, empty query, or malformed ?query= value.
invalid_bodyJSON body failed schema validation (e.g. too many corrections, bad reason).
See Errors for the full envelope.