Detector24
API Documentation

Moderation API Reference

Complete documentation for integrating AI-powered content moderation into your application. 60+ models across image, video, audio, and text.

Authentication

Get your API keys

Quick Start

Make your first request

Rate Limits

Varies by plan tier

Models

60+ AI models

Authentication

All API requests require authentication using an API key. Include your API key in the Authorization header.

Authorization: Bearer private_xxxxxxxxxxxxx

Get your API keys from the Dashboard after signing up.

Quick Start

Make your first moderation request in seconds. The synchronous endpoint runs the model in-request and returns the result directly — great for trying things out. For production workloads we recommend the Async API.

curl -X POST https://api.bynn.com/v1/moderation/infer \
  -H "Authorization: Bearer private_xxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nudity-detection",
    "image_url": "https://example.com/image.jpg"
  }'

Response

{
  "inference_id": "inf_jWMNLabLwSRy5qEp8DLKdVZd",
  "model_id": "nudity_detection",
  "model_name": "Nudity & Adult Content",
  "moderation_type": "image",
  "status": "completed",
  "processing_mode": "sync",
  "result": {
    "is_safe": true,
    "confidence": 0.97
  },
  "response_time_ms": 143,
  "billable_quantity": 1,
  "cost": "$0.00750"
}

Async API

Recommended

We recommend the asynchronous endpoint for all production integrations. It accepts the exact same parameters as the synchronous endpoint, but queues the work and responds immediately with 202 Accepted — so it supports much higher submission rates and is the only sensible path for heavy media (video, audio, PDF OCR) and sustained volume. Poll the status endpoint to fetch the result.

1. Submit the inference

curl -X POST https://api.bynn.com/v1/moderation/infer_async \
  -H "Authorization: Bearer private_xxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "face-redaction",
    "image_url": "https://example.com/image.jpg"
  }'
HTTP/1.1 202 Accepted
{
  "inference_id": "inf_kbD92ZNAYS2sWAHC8ti6St3z",
  "model_id": "face_redaction",
  "status": "pending",
  "processing_mode": "async",
  "billable_quantity": 1,
  "cost": "$0.03000"
}

2. Poll for the result

curl https://api.bynn.com/v1/moderation/inference/inf_kbD92ZNAYS2sWAHC8ti6St3z \
  -H "Authorization: Bearer private_xxxxxxxxxxxxx"
{
  "inference_id": "inf_kbD92ZNAYS2sWAHC8ti6St3z",
  "status": "completed",
  "processing_mode": "async",
  "result": {
    "faces_detected": 2,
    "faces_redacted": 2,
    "png_image_url": "https://...s3.eu-west-1.amazonaws.com/...&X-Amz-Expires=3600..."
  },
  "response_time_ms": 2391,
  "cost": "$0.03000"
}

Good to know

  • Status moves through pendingprocessingcompleted or failed.
  • Billing happens at submit and is automatically refunded if processing fails.
  • Pass an idempotency_key to safely retry submissions without duplicate charges.
  • Image outputs (segmentation masks, face crops, redacted images) are returned as presigned *_url fields — links are valid for 1 hour per fetch and downloadable for up to 24 hours after completion.
  • Each account has a cap on queued jobs; when it is reached the API returns 429 queue_full with a Retry-After header.

Models Reference

Rate Limits

Rate limits vary by plan tier. The synchronous endpoint is limited tightly because it holds a connection for the whole inference; the async endpoint accepts far more submissions and is the recommended path for sustained volume.

PlanSync (req/s)Async submits (req/s)Max queued jobs
Trial1550
Standard plans120500 – 1,000
Enterprise5302,000
CustomContact usContact usContact us
  • Limits are enforced over 10-second windows, so short bursts above the per-second rate are fine as long as the average holds.
  • Heavy models (video, audio, PDF OCR) have separate, lower sync limits — use the async endpoint for these.
  • Every 429 response includes a Retry-After header with the seconds until the window resets.
  • Higher limits are available for individual accounts on request.

Error Handling

The API uses standard HTTP status codes and returns errors in a consistent JSON format.

400

Bad Request

Invalid parameters or missing required fields

401

Unauthorized

Invalid or missing API key

402

Insufficient Balance

Account balance is too low for this inference — top up to continue

422

Unprocessable Entity

Input could not be processed (unknown model, invalid media, file too large)

429

Rate Limit Exceeded

Rate limit or queued-job cap reached — honor the Retry-After header, or switch to /moderation/infer_async for high volume

500

Server Error

Internal server error, try again later — failed inferences are automatically refunded