content rating

Content rating,
in your words.

Point one endpoint at any image and get an answer in a vocabulary you define — sfw / nsfw out of the box, or levels described in plain language. No moderation model to host, no thresholds to tune.

POST /image/rate
sfwnsfw_sfw

01your vocabulary

Describe the levels.
That's the whole integration.

A rating mode is just words. The default answers sfw or nsfw. Custom mode takes two to seven levels, each described in a plain sentence — the classifier reads your descriptions and answers with one of your values.

No taxonomy to learn, no confidence scores to interpret. The response is typed to your vocabulary, not ours.

Zero configuration. One string.

  • sfwSafe for work — no explicit content
  • nsfwNudity, violence, or other explicit content
{ "mode": "nsfw_sfw" }

02the call

One call. Ten images. Typed answers.

Synchronous by default — send URLs, get levels back in the same response. The SDK narrows level to the values you defined, so the compiler knows your vocabulary too.

import { Mynth } from "@mynthio/sdk";

const mynth = new Mynth({ apiKey: "mak_…" });

const result = await mynth.image.rate({
  urls: ["https://cdn.acme.dev/uploads/01.png"],
  mode: "custom",
  levels: [
    { value: "safe", description: "No adult themes" },
    { value: "mature", description: "Adult themes, no nudity" },
    { value: "explicit", description: "Nudity or graphic content" },
  ],
});

result.getRatings();
// [{ status: "success", url: "…", level: "safe" }]
// level is typed: "safe" | "mature" | "explicit"
urls per request
1–10
urls per request
by default — the answer is in the response
sync
by default — the answer is in the response
webhook + polling when you opt out of sync
202
webhook + polling when you opt out of sync

03built in

Generating anyway?
It's one flag.

The exact same classifier runs inside image generation. Pass rating: true — or any mode from above — and every image arrives with its level in the same task. Logically it's generate-then-rate; the flag just removes the second call.

currently freeRating inside generation costs nothing — only the standalone endpoint is billed.

const task = await mynth.image.generate({
  prompt: "editorial portrait, golden hour",
  rating: true,
});

const [image] = task.getImages();
image.rating;
// { status: "success", level: "sfw" }

$0.0002

per image, standalone

5,000

ratings per dollar

$0

inside generation, currently free

Billed only for successful ratings — failed images cost nothing.

Classification, without the infrastructure.

One endpoint, your vocabulary, typed answers. Start with the default mode and a free credit — describe your own levels when you need them.