Documentation/Moderation workflows
Getting started

Moderation workflows

Use the same selected checks and saved thresholds in the playground and your API integration.

API v1Developer guide

Choose the checks your service needs

Use /demo or Workspace → Submit images to test real jobs. Choose manual checks or a saved workflow. The playground uses POST /api/v1/jobs for URLs or POST /api/v1/jobs/upload for files and uses your normal quotas; there is no separate demo detection algorithm.

GET /api/v1/capabilities lists configured availability for six check IDs: five defaults plus optional, experimental ai_generated. Configured availability is not a live health guarantee. Unselected and unsupported checks are not evaluated.

Upload static JPEG, PNG or WebP files, or use approved public HTTPS URLs. Up to 8 images, 10 MiB per file, 16 megapixels per image and 20 MiB total per upload. Blur/redaction and image transforms are not supported.

Save reusable rules

Workspace → Workflows lets you name a ruleset, choose checks and set review and block thresholds for adult content and other checks. Every threshold is between 0 and 1 and each review threshold must be below its block threshold. Sensitive-document and AI-generated signals remain review-only; AI detection is experimental and does not prove origin.

Workflows belong to the customer who creates them. Each update increments a version. Disable a workflow to prevent new submissions; up to 100 workflows can be stored per customer.

POST /api/v1/workflows · JSON body
{
  "name": "Product images",
  "checks": [
    "adult_nsfw",
    "weapon"
  ],
  "thresholds": {
    "nsfw_review": 0.55,
    "nsfw_block": 0.82,
    "vision_review": 0.25,
    "vision_block": 0.5
  }
}

Submit by workflow ID

Use workflow_id instead of checks; sending both is rejected. The job stores the resolved checks, thresholds, name and version at admission. Later workflow edits cannot change queued jobs or existing results.

Retry the same body and Idempotency-Key after uncertain network failures. An exact retry returns the original job even if the workflow has since changed or been disabled.

POST /api/v1/jobs · JSON body
{
  "reference": "product-123",
  "workflow_id": "replace-with-your-workflow-uuid",
  "images": [
    {
      "url": "https://media.example.com/photo.jpg"
    }
  ]
}

A completed result has block, review or no_signal decisions. No_signal does not mean universally safe. Failed jobs need review.