Content moderation APIYour platform, your rules

Every post gets a verdict.

Moderate text, images and video with policies you control. Vettly returns allow, warn, flag or block, with a record of why and the tools to review, appeal and act on it.

  • 15,000 decisions a month free
  • No credit card required
  • Live in an afternoon
Case № 52F5-9F78Captured example

seller_4821

“PS5 brand new $100 today only!! I'm overseas so send payment by gift card first and I'll ship after”
VerdictBlocked0.98 · marketplace-listings
  • scam0.98
  • spam0.89
  • illegal0.22
  • harassment0.02
Scored in 155 msPolicy marketplace-listings v1
Or try
11
signals scored on every message
4
graduated actions: allow, warn, flag, block
3
media types: text, image and video
15,000
decisions a month, free

Your stack, our API

  • REST
  • TypeScript
  • Python
  • Swift
  • React Native
  • Go

Shipping a UGC app?App Store 1.2 Google Play

01What you can moderate

If your users can share it, you can vet it.

Messages, profile photos and video uploads all need moderation. Bring them into one platform, with explicit rules for what happens next.

  • Text moderation

    Catch harassment, hate speech, spam and scams before they reach your community. Set the thresholds that fit your audience.

    Scores become actions through your policy.
  • Image moderation

    Screen user-uploaded images for sexual content, violence and other safety risks. Check an image alongside its accompanying text.

    Text and images together in one request.
  • Video moderation

    Submit a video, let Vettly analyze sampled frames, and review the results. Keep your app moving while the video processes.

    Async processing with polling or a webhook.

Try text moderation in the live policy demo below. Image and video checks are available through the API and dashboard.

02The Bench

The rules are a file. Edit it and watch the verdict change.

Pick a case, send a message, then rewrite the policy. Every decision on this page is evaluated live by the Vettly API, not faked.

marketplace-listings.yamleditable · evaluated by the API

Change a threshold or an action and watch the verdict update.

Or try
See the raw API responses behind this verdict
// 1. POST /v1/check/fast
{
"decisionId": "52f59f78-d9ef-45a1-bd03-77b1c8755071",
"signals": {
"scam": 0.98,
"spam": 0.89,
"illegal": 0.22,
"harassment": 0.02,
"profanity": 0.02,
"minor_context": 0.02,
"hate_speech": 0.01,
"violence": 0.01,
"self_harm": 0.01,
"sexual": 0.01,
"sexual_solicitation": 0.01
}
}
// 2. POST /v1/check/dry-run (trimmed)
{
"action": "block",
"categories": [
{ "category": "scam", "score": 0.98, "threshold": 0.70, "triggered": true },
{ "category": "illegal", "score": 0.22, "threshold": 0.60, "triggered": false },
{ "category": "sexual", "score": 0.01, "threshold": 0.60, "triggered": false },
{ "category": "spam", "score": 0.89, "threshold": 0.80, "triggered": true }
]
}

03How it works

One call in. A record out.

Most teams wire this up in an afternoon. Start from a template policy, ship, then tighten the thresholds as you learn what your community actually posts.

  1. Send the content

    Send text or images with your policy. Submit video as a processing job, then poll for results or receive a completion webhook.

  2. Act on the action

    Get back allow, warn, flag or block and decide what your product does with it. You stay in control of the UX.

  3. Keep the record

    Every decision is stored with the policy version that made it, so you can search, replay and defend it later.

POST /v1/check
import { createClient } from "@vettly/sdk";

const vettly = createClient(process.env.VETTLY_API_KEY!);

// Before the post goes live
const decision = await vettly.check({
  content: message,
  policyId: "teen-safety",
});

if (decision.action === "block") {
  return reject(message);
}
import os, requests

res = requests.post(
  "https://api.vettly.dev/v1/check",
  headers={"Authorization": f"Bearer {os.environ['VETTLY_API_KEY']}"},
  json={"content": message, "policyId": "teen-safety"},
)

if res.json()["action"] == "block":
  reject(message)
curl https://api.vettly.dev/v1/check \
  -H "Authorization: Bearer $VETTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "hello there", "policyId": "teen-safety"}'
Decision record
decision
7e4f4c06-fd25-43af…
policy
teen-safety · v1
action
BLOCK
Blocked0.91 · teen-safety v1
  • sexual0.91 ≥ 0.50
  • + minor context0.96 ≥ 0.70
  • harassment0.53 ≥ 0.40
  • scam0.12 < 0.75

Scored in 176 ms · searchable · replayable · appealable

04The moderation workflow

From the first check to the final review.

Write the rules, review decisions, handle appeals and keep your systems in sync. The workflows around moderation are built in.

  • Policy as code

    Thresholds, conditions and confidence bands in plain YAML. Versioned, dry-runnable, with custom blocklists for the words only you care about.

    POST /v1/policies
  • Batch and fast checks

    Process text in batches or use the fast-check endpoint for time-sensitive flows such as chat and comments.

    POST /v1/check/fast
  • The decision record

    Every decision is stored with the policy version that made it. Search it, tag it, add reviewer notes, replay it as a cURL.

    GET /v1/decisions/search
  • Appeals

    Users contest a decision, a reviewer rules on it, and the outcome stays linked to the original verdict.

    PATCH /v1/appeals/:id
  • Webhooks

    Push decisions into your own systems as they happen, with a delivery log and test events so you can trust the wiring.

    POST /v1/webhooks/:id/test
  • Compliance reports

    Scheduled daily, weekly or monthly summaries as PDF, CSV or JSON, delivered to whoever needs to see them.

    POST /v1/reports

05Who it's for

Anywhere your users can post.

The engine is the same. What changes is the rulebook, and the rulebook is yours to write.

  • Social & community

    Comments, chat, profiles, photos and video shared between members.

    Example ruleharassment ≥ 0.60 → flag≥ 0.40 → warn
  • Marketplaces

    Listings, reviews and buyer-seller messages, before they go live.

    Example rulescam ≥ 0.70 → blockspam ≥ 0.80 → flag
  • AI & chatbots

    Model output is user-generated content too. Check it on the way out.

    Example rulehate speech ≥ 0.80 → blockself harm ≥ 0.60 → block
  • Kids & education

    Age-sensitive spaces where minors talk to each other, and to strangers.

    Example rulesexual ≥ 0.50 → blockwhen minor context ≥ 0.70

06Built with Vettly

Real products. Same developer platform.

Guardian and Discord are products we built on Vettly. They run on the same decisions, policy controls and review workflows you get through the API.

Family safety

Vettly Guardian

A parent-and-teen safety app. When a message crosses a line, the teen sees a calm explanation and the parent sees a focused alert with context, not a firehose of their kid's chats.

  • Focused signals, not surveillance
  • Review context for parents
  • Traceable decisions
See what we builtwith Vettly Guardian

Community moderation

Vettly Discord

A bot that turns Vettly decisions into channel actions and moderator logs, and hands the judgment calls to a human.

See what we builtwith Vettly Discord

Want the primitives behind both? Build with Vettly

07Rate card

Simple, predictable pricing.

Start free. Upgrade when you need more volume, longer decision history, or advanced policy workflows. Every plan includes searchable decision IDs, policy versioning and the full audit trail.

Free

Enough for a 5,000-user app

$0forever

  • 15,000 decisions / month
  • Text, images & video
  • Starter policy templates
  • Decision IDs & audit trail
  • 24-hour decision history
Get a free API key

Starter

Ship your MVP securely

$19/ month

  • 100,000 decisions / month
  • Everything in Free
  • 1-year decision history
  • Custom policy rules
  • Decision webhooks
Upgrade to Starter

Overage on paid plans, billed monthly: text $0.0001 / unitimage $0.001 / unitvideo $0.01 / unit

08Questions

Asked and answered.

The things developers ask before they wire up a moderation API. The rest is in the docs.

Can Vettly moderate images and video as well as text?

Yes. Check text and images together through the multimodal API, or submit a video for asynchronous processing. Video moderation analyzes sampled frames and returns results you can review, with status polling and an optional completion webhook. Your policies define how the scores become moderation actions.

What is a UGC moderation API?

A UGC moderation API screens user-generated text, images, and video against your policy, then returns an action such as allow, warn, flag, or block. Vettly also keeps the supporting record: appeals, webhooks, and an audit history of every decision, so moderation can run as part of your product.

How does Vettly reduce moderation engineering work?

Vettly combines content scoring, a programmable policy engine, appeals, webhooks, and immutable audit trails in one API, so teams do not need to build each piece from scratch. It covers day-to-day trust and safety operations and supports common platform requirements from app stores, regulators, and enterprise buyers.

What languages and frameworks does Vettly support?

Vettly is a REST API that works with any HTTP client in any language. We provide a TypeScript SDK and integration guides for popular frameworks including React Native, Swift, Python, and Go. The API response format is the same regardless of client platform.

How fast can I integrate Vettly?

Most teams integrate Vettly in under a day. Start with a default policy template, add the check call before content is published, and then tune thresholds as your product grows.

What content categories does Vettly detect?

Vettly scores hate speech, harassment, sexual content, violence, self-harm, scams, spam, and more. Each signal returns a confidence score from 0 to 1, and your policy defines the threshold for each action (allow, warn, flag, or block).

Can I customize moderation policies and keep audit history?

Yes. Policies are versioned and configurable with explicit thresholds, conditions and actions, and every decision is logged with its policy version. You can start from templates and customize rules as your moderation standards evolve.

08Get started

Build something worth protecting.

Start with 15,000 free decisions a month. Make the rules your own.

npm install @vettly/sdk
  • Free tier, no credit card
  • Starter policy templates
  • Every decision on the record