Image moderation

Screen images for unsafe content

Image moderation evaluates a single image against the always-on AI Adult General prohibited-content check, which also covers any custom categories you have configured. When you enable the informational NSFW label, the job returns that as well.

Input#

Submit a multipart/form-data request with:

Field Type Required Description
image string Yes Publicly reachable HTTP or HTTPS URL of the image to scan. The API fetches it directly.
webhook_url string No URL to receive the result on completion.
Shell
curl -X POST https://api.omnifence.ai/api/v1/moderate/image \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "image=https://example.com/photo.jpg"

The image field must be a public HTTP or HTTPS URL. URLs using another scheme, or resolving to a private or internal network address, are rejected with 400 INVALID_REQUEST.

Checks#

AI Adult General#

The image is analysed for the always-on AI Adult General policy, which covers prohibited adult content and content that depicts, or appears to depict, a minor in a sexual or exploitative context. Every enabled custom category is evaluated as part of the same check, so a custom match rejects the job like a built-in policy breach. This check cannot be disabled.

NSFW label#

When the NSFW check is enabled, the informational nsfw boolean is returned alongside the decision. It never causes a rejection on its own. Disable it from the Moderation page and the check is skipped.

Output#

JSON
{
  "is_prohibited": false,
  "nsfw": false,
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "type": "image",
  "status": "completed",
  "created_at": "2026-05-19T12:00:00.000Z",
  "completed_at": "2026-05-19T12:00:05.000Z"
}

On a rejection, a reason field explains what tripped. The nsfw field is only present when the NSFW check is enabled. There is no categories object on the response. See decision logic for how the prohibition decision is determined.

Image jobs do not return risk scores.