seller_4821
“PS5 brand new $100 today only!! I'm overseas so send payment by gift card first and I'll ship after”
- scam0.98
- spam0.89
- illegal0.22
- harassment0.02
Content moderation APIYour platform, your rules
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.
seller_4821
“PS5 brand new $100 today only!! I'm overseas so send payment by gift card first and I'll ship after”
Your stack, our API
Shipping a UGC app?App Store 1.2 Google Play
01What you can moderate
Messages, profile photos and video uploads all need moderation. Bring them into one platform, with explicit rules for what happens next.
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.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.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
Pick a case, send a message, then rewrite the policy. Every decision on this page is evaluated live by the Vettly API, not faked.
Change a threshold or an action and watch the verdict update.
// 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
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.
Send text or images with your policy. Submit video as a processing job, then poll for results or receive a completion webhook.
Get back allow, warn, flag or block and decide what your product does with it. You stay in control of the UX.
Every decision is stored with the policy version that made it, so you can search, replay and defend it later.
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"}'
Scored in 176 ms · searchable · replayable · appealable
04The moderation workflow
Write the rules, review decisions, handle appeals and keep your systems in sync. The workflows around moderation are built in.
Thresholds, conditions and confidence bands in plain YAML. Versioned, dry-runnable, with custom blocklists for the words only you care about.
POST /v1/policiesProcess text in batches or use the fast-check endpoint for time-sensitive flows such as chat and comments.
POST /v1/check/fastEvery 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/searchUsers contest a decision, a reviewer rules on it, and the outcome stays linked to the original verdict.
PATCH /v1/appeals/:idPush 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/testScheduled daily, weekly or monthly summaries as PDF, CSV or JSON, delivered to whoever needs to see them.
POST /v1/reports05Who it's for
The engine is the same. What changes is the rulebook, and the rulebook is yours to write.
Comments, chat, profiles, photos and video shared between members.
harassment ≥ 0.60 → flag≥ 0.40 → warnListings, reviews and buyer-seller messages, before they go live.
scam ≥ 0.70 → blockspam ≥ 0.80 → flagModel output is user-generated content too. Check it on the way out.
hate speech ≥ 0.80 → blockself harm ≥ 0.60 → blockAge-sensitive spaces where minors talk to each other, and to strangers.
sexual ≥ 0.50 → blockwhen minor context ≥ 0.7006Built with Vettly
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
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.
Community moderation
A bot that turns Vettly decisions into channel actions and moderator logs, and hands the judgment calls to a human.
Want the primitives behind both? Build with Vettly
07Rate card
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.
Enough for a 5,000-user app
$0forever
Ship your MVP securely
$19/ month
Ship publicly with protection
$49/ month
Overage on paid plans, billed monthly: text $0.0001 / unitimage $0.001 / unitvideo $0.01 / unit
08Questions
The things developers ask before they wire up a moderation API. The rest is in the docs.
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.
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.
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.
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.
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.
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).
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
Start with 15,000 free decisions a month. Make the rules your own.
npm install @vettly/sdk