# each::labs | NSFW Checker | Content Safety each::labs NSFW Checker flags unsafe text, images, audio, and video with selectable safety modes for moderation workflows and AI content review. ## API Information - **Model Slug:** eachlabs-nsfw-checker - **Branded URL:** https://www.eachlabs.ai/eachlabs/eachlabs/eachlabs-nsfw-checker - **Provider:** each::labs - **Category:** Utilities - **Output Type:** object - **Status:** active - **Base Cost:** Per-item pricing: $0.0005 per prompt, $0.001 per image, $0.0003 per second of audio, $0.002 per second of video. - **Interactive Demo:** https://www.eachlabs.ai/ai-models/eachlabs-nsfw-checker ## Pricing - **Charge Type:** dynamic - **Pricing Details:** Per-item pricing: $0.0005 per prompt, $0.001 per image, $0.0003 per second of audio, $0.002 per second of video. ### Pricing Rules | Condition | Pricing | | --- | --- | | Rule 1 | Per-item pricing: $0.0005 per prompt, $0.001 per image, $0.0003 per second of audio, $0.002 per second of video. | ## Input Schema | Parameter | Type | Required | Default | Constraints | Description | |-----------|------|----------|---------|-------------|-------------| | prompts | array | No | - | - | Text prompts to check, up to 20 per call and 4000 characters each. Each prompt is judged on its own, in any language, including slang, misspellings, and euphemisms. Empty strings are ignored. Every input is optional and any combination can be sent together, but at least one prompt, image, or video is required. | | images | array | No | - | - | Image URLs to check, up to 10 per call, JPEG, PNG, or WebP, each under 10 MB. Each image is judged by what is visible, not by the prompt. Empty strings are ignored. | | video_url | string | No | - | - | One video file to check, MP4, up to 60 seconds and 40 MB. Judged by its visible frames; the soundtrack is not checked. Billed per second of video. | | mode | string | No | strict | strict, moderate, super_strict | Policy strictness. strict (default): family-friendly, App Store 4+ and Play Store Everyone. Blocks nudity, exposed nipples, underwear-only, sexual poses or acts, undress requests, fetish or sexual language, graphic violence, and hate symbols; allows cleavage, swimwear, shirtless men, kissing, and everyday photos. moderate: adult general audience, 17+. Blocks pornography, sexual acts, exposed genitals, non-consensual or minor sexual content, fetish acts, extreme gore, and extremist material; allows artistic nudity, lingerie, and suggestive content. super_strict: children, education, and brand-safe advertising. Blocks everything strict blocks plus adult swimwear in posed or leisure shots, cleavage or midriff emphasis, shirtless people, lingerie, passionate kissing, any violence or weapons, horror, alcohol, tobacco, drugs, profanity, and self-harm. Sexual or nude depictions of minors are blocked in every mode. Strictness ranking (strictest to least strict): super_strict → strict → moderate. | | fail_on_nsfw | boolean | No | false | - | When true, the run fails with a content moderation error if any item is flagged, instead of succeeding with flagged=1. Defaults to false. | ## Example Request ```bash curl -X POST https://api.eachlabs.ai/v1/prediction/ \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "eachlabs-nsfw-checker", "input": {} }' ``` ## Output Schema Response returned by `GET /v1/prediction/{id}` when the job completes: ```json { "status": "success", "predictionID": "string", "output": "object", "metrics": { "predict_time": "number (seconds)" } } ``` ## Polling ```bash curl https://api.eachlabs.ai/v1/prediction/{PREDICTION_ID} \ -H "Authorization: Bearer YOUR_API_KEY" ``` | Status | Meaning | |--------|---------| | `processing` | Still running — poll again | | `success` | Done — read `output` | | `error` | Failed — read `message` / `details` | ## Webhook (alternative to polling) Pass `"webhook_url": "https://your.host/path"` in the create request. Eachlabs POSTs this payload when the job ends: ```json { "exec_id": "prediction-uuid", "status": "succeeded", "output": "https://...", "error": "" } ``` `status` is `"succeeded"` or `"failed"`. `exec_id` equals the `predictionID` from create. Return 2xx within 30 seconds. ## Errors Error body: `{ "status": "error", "message": "...", "details": "..." }` | Code | Meaning | |------|---------| | `400` | Invalid input | | `401` | Missing / invalid `Authorization` bearer token | | `404` | Unknown model or prediction id | | `429` | Rate limit — 100 creates / min, 10 concurrent per key | | `5xx` | Retry with backoff | ## Overview **each::labs | NSFW Checker | Content Safety Overview** The **each::labs | NSFW Checker | Content Safety** model is a multimodal safety utility that scans text, images, audio, and video to flag potentially unsafe or Not Safe for Work (NSFW) content before it reaches your users. Designed for the each::labs unified media API, it plugs directly into moderation workflows, AI generation pipelines, and review queues across image, video, and audio models. Within the first call, teams can route user inputs and generated outputs through a single content-safety gate, with configurable safety modes that align to internal policy rather than a one-size-fits-all filter. As part of the **eachlabs utilities** family, this NSFW Checker emphasizes orchestration: it is built to sit alongside video editing, image tools, and avatar models, so you can keep moderation as a first-class step in every workflow, not a bolt-on after the fact. ## Usage Notes - API Base URL: `https://api.eachlabs.ai/v1` - Authentication: send `Authorization: Bearer YOUR_API_KEY`. Generate a key from the Eachlabs dashboard at https://www.eachlabs.ai/dashboard/api-keys. - File-typed parameters (`*_url`, `image_url`, `video_url`, `audio_url`, etc.) accept publicly-reachable HTTPS URLs only. Upload your asset first (GCS / S3 / your CDN) and pass the resulting URL. Data-URIs and localhost URLs are rejected. - For structured parameters (arrays / objects) send real JSON values, not stringified payloads. - Monetary values are reported in USD; per-token / per-megapixel rates may be billed in micro-cents internally. - Prefer `webhook_url` over polling for long-running predictions — see the Webhook Callback section.