Skip to content

Image moderation that reads the photo and the text in it

Send an image's URL and Infrared answers 202, scores the picture, checks any text in it, then sends the verdict to your webhook.

  • On every plan, Free included
  • One image costs 2 checks
POST/v1/moderations
Sample data
Request body

{ "type": "image", "input": "https://cdn.example.com/1.jpg" }

Sample photo of a phone with a taxi app open

202Accepted"status": "screening"

  • Violence
  • Self-harm
  • Sexual content
  • Illicit & regulated goods
ScreeningVerdict by webhook or GET

POSTmoderation.completedNot sent yet

Sample data

Four policies score the picture on every plan

Violence, self-harm, sexual content and illicit goods each return a score from 0 to 1, and the rest of the catalog needs a template.

  • On Starter and upA template can also score screenshots, low image quality, watermarks and photos that are really contact cards.

  • On Growth and upMade with AI is experimental, observes by default and costs one more check per image.

Acme Corp./Pre-built policies
Catalog defaults
PolicyThresholdWeight
  • ViolenceTextImageviolence0.701.00
  • Self-harmTextImageself_harm0.701.00
  • Sexual contentTextImagesexual0.701.00
  • Links & contact detailsTextImagelinks_contact0.500.95
  • Illicit & regulated goodsTextImageillicit0.701.00
  • Made with AIExperimentalTextImagemade_with_aiAdvancedExperimental0.900.60
  • Screenshot instead of photoImagescreenshot0.700.50
  • Low image qualityImageimage_quality0.700.50
  • Stock or third-party watermarkImagewatermark0.700.50

Catalog defaults

Text in a photo is transcribed, then checked

The call that scores the picture also transcribes its text, and swear words are checked in that text on every plan.

  • With a template, on Starter and upWordlists, lookalike characters, contact details and personal data are checked too.

  • Evidence only, by defaultA phone number read from a photo's text scores at most 0.30 and does not trigger unless the template sets Flag.

Text read from a photo
Sample data
Sample photo with a caption on it: Call me +44 7700 900155

Match, trimmed

"matches": [{
  "label": "phone",
  "value": "+44 7700 900155",
  "source": "ocr"
}]
Personal data0.30

phoneimage_textocrCapped at 0.30

Personal data in images

Evidence only
  • Evidence only
  • Flag
  • Ignore

Sample data

Send a link, not a file

Infrared downloads the image itself, so the URL has to be reachable from the public internet.

input
One http or https URL: a JPEG, PNG, WebP or GIF of up to 10 MB.
mode
Send "sync" to wait for the result and get it with a 200.
usage
One image costs 2 checks: one for the object, one for the image.
status
Ends partial when the image cannot be fetched or read. The request is still accepted and the checks are charged.
POST /v1/moderationsJSON
{"type": "image","input": "https://cdn.example.com/1.jpg","content_id": "item_18342"}
GET /v1/moderations/:idJSON, trimmed
{"id": "mod_1B7lY4kzM9n2Qx8sRt3wVu","template": { "slug": "basic" },"status": "completed","flagged": false,"recommendation": "allow","policies": {"violence": 0.02, "self_harm": 0,"sexual": 0.01, "illicit": 0,"toxicity": 0, "hate_speech": 0,"profanity": 0, "spam": 0},"details": {"violence": {"explanation":"A hand holding a phone."}},"usage": { "checks": 2 }}
Sample data

Reviewers see a blurred copy first

On Starter and up, one click in the live console shows the original for two minutes and writes the reveal to the audit log.

Acme Corp./Live console
Sample data

Media

Blurred by default. Revealing the original is recorded in the audit log.

  • Sample photo of a phone with a taxi app openBlurred copyphotos · 471 KBReveal original
  • Blurred copyphotos · 482 KBReveal original

Sample data

Audit logmedia.reveal_original
  • No entries match

Start moderating your users' content

Create an API key, send your first request and get a verdict back.