Skip to content

Re-moderate

POST/v1/moderations/{id}/remoderateKey scope moderate

Creates a new moderation from the stored input of an existing one and runs it on the template's current published version. Use it after publishing a new version of a template. For a form only the text and image fields are sent again: the values of number, boolean, enum, url and json fields are not carried over.

Needs a key with the moderate scope. Authentication

curl -X POST https://api.useinfrared.com/v1/moderations/mod_20KilKON2Z1Lf75c7AXP6m/remoderate \
  -H "Authorization: Bearer $INFRARED_KEY"
200 OKResponse
{
  "object": "moderation",
  "id": "mod_3kE7q3kTtcL70rNiy2hk1H",
  "template": {
    "slug": "review",
    "version": 1
  },
  "type": "text",
  "status": "completed",
  "flagged": true,
  "recommendation": "reject",
  "severity": "critical",
  "policies": {
    "personal_data": 0,
    "lookalike_characters": 0,
    "profanity": 0,
    "hate_speech": 0,
    "toxicity": 0.96,
    "violence": 0,
    "self_harm": 0,
    "sexual": 0,
    "spam": 0,
    "links_contact": 0,
    "illicit": 0,
    "gibberish": 0,
    "off_topic": 0,
    "made_with_ai": 0,
    "instructions": 1
  },
  "triggered": ["toxicity", "instructions"],
  "rule": null,
  "reasons": [
    "trigger:toxicity:flag",
    "trigger:instructions:flag",
    "triage:reject"
  ],
  "details": {
    "toxicity": {
      "labels": ["insult"],
      "matches": [
        {
          "label": "insult",
          "value": "Worst seller ever. You are a complete idiot."
        }
      ]
    },
    "instructions": {
      "labels": ["confidence:100"],
      "matches": [
        {
          "label": "evidence",
          "value": "Worst seller ever. You are a complete idiot.",
          "field": "input"
        }
      ],
      "explanation": "The review attacks a person rather than the product or service.",
      "field": "input"
    }
  },
  "author": null,
  "language": "en",
  "usage": {
    "checks": 1,
    "cached": false
  },
  "latency_ms": 2290,
  "dry_run": false,
  "content_id": null,
  "context_id": null,
  "metadata": {
    "remoderated_from": "mod_20KilKON2Z1Lf75c7AXP6m"
  },
  "created_at": "2026-10-08T09:28:48.798Z",
  "completed_at": "2026-10-08T09:28:51.257Z"
}

Path parameters

idstringRequired

Id of the moderation to run again: mod_ plus 22 base62 characters. It must be a top-level moderation whose input is stored.

Returns

Status 200 with the new moderation, or 202 when it was queued because the input has images. The new moderation has its own id, consumes checks like any other and keeps the original's content_id, author_id, context_id and dry_run; metadata.remoderated_from holds the id of the original.

Errors

402
quota_exceeded

The organisation's remaining monthly checks and extra checks together are fewer than the checks the new moderation needs.

403
plan_limit

The organisation's plan no longer includes templates and the original did not run on the basic check.

404
not_found

The key's project has no moderation with this id.

404
template_not_found

The template of the original has been archived.

409
is_child

The id belongs to one field of a form. Re-moderate the parent moderation.

409
input_not_stored

The input was never stored, or the retention period has passed and it was removed.

Every endpoint can also answer the errors any request can meet: a missing key, a rate limit, a malformed body. Errors

Something missing or unclear on this page? Write to support@useinfrared.com.