Documentation Index
Fetch the complete documentation index at: https://docs.mynth.io/llms.txt
Use this file to discover all available pages before exploring further.
Endpoint:
POST https://api.mynth.io/image/rate
Authentication: API key required. Public Access Tokens are not accepted.
The endpoint is synchronous — results are returned in the response body, not via a polling task.
Request body
{
"mode": "custom",
"urls": ["https://example.com/photo-1.webp", "https://example.com/photo-2.webp"],
"levels": [
{ "value": "safe", "description": "Safe for all audiences" },
{ "value": "sensitive", "description": "Contains mature or suggestive content" },
{ "value": "explicit", "description": "Explicit adult content" }
]
}
Fields
| Field | Type | Default | Notes |
|---|
mode | string | required | nsfw_sfw for the built-in scale, or custom. |
urls | array | required | Image URLs to rate. Minimum 1, maximum 10. |
levels | array | — | Required when mode is custom. Defines the rating scale. |
levels items
Each item in the levels array must have:
| Field | Type | Constraints | Notes |
|---|
value | string | 1–24 characters | The string returned in the result for images at this level. |
description | string | 1–150 characters | Natural-language description used by the rating model. |
Constraints for the levels array:
- Minimum
2 items
- Maximum
7 items
How the rating model uses levels
The description of each level is passed directly to a vision language model (LLM), which selects the best match for each image. Because LLM inference is non-deterministic, results for borderline images may occasionally vary between requests.
This endpoint is optimised for speed and accuracy at a high level of abstraction. Broad, clearly separated scales such as safe / suggestive / explicit or safe-for-children / safe-for-adults / nsfw perform reliably. Scales that depend on subtle visual distinctions — for example distinguishing between artistic and explicit nudity — are outside the intended scope and may produce inconsistent results. Test thoroughly before using such scales in production.
Response body
{
"taskId": "tsk_01KE7XWWEQ4MCGWKBQKJ1G47RP",
"results": [
{ "status": "success", "url": "https://example.com/photo-1.webp", "level": "sfw" },
{
"status": "failed",
"url": "https://example.com/photo-2.webp",
"error": { "code": "UNKNOWN_ERROR" }
}
]
}
| Field | Type | Notes |
|---|
taskId | string | ID of the task record created for this request. |
results | array | One entry per submitted URL, in the same order. Each entry is a success or failure item. |
Success item
{ "status": "success", "url": "https://example.com/photo-1.webp", "level": "sfw" }
| Field | Type | Notes |
|---|
status | string | Always success. |
url | string | The submitted image URL. |
level | string | The assigned rating value from the active scale. |
When using the default scale, level is one of sfw or nsfw.
When using custom levels, level is the value of the chosen level.
Failure item
{
"status": "failed",
"url": "https://example.com/photo-2.webp",
"error": { "code": "UNKNOWN_ERROR" }
}
A failure item means that one image could not be rated. Other images in the same request are unaffected.
Limits
| Constraint | Value |
|---|
| URLs per request | 1–10 |
| Custom levels | 2–7 |
Level value | 1–24 characters |
Level description | 1–150 characters |
Pricing
Each URL in the request costs $0.0002. The total cost is deducted from your account balance before processing begins. If your balance is insufficient, the request returns 422 INSUFFICIENT_BALANCE.
Error responses
| Status | Code | Cause |
|---|
400 | validation_error | Request body fails schema validation. |
401 | unauthorized | Missing or invalid API key. |
422 | INSUFFICIENT_BALANCE | Account balance is too low for this request. |
See Errors and Limits for the full error reference.