Filter before posting
POST /v1/moderate checks text, image URLs and uploads against a per-project policy and returns allow, flag or block.
Send posts, comments and images to one API before you publish them. TrustShip scores them against your policy, collects reports, blocks and appeals, and helps you meet App Store Guideline 1.2.
{ "text": "I'm going to destroy you in the next match", "user_id": "user_42", "content_id": "post_1001" }
{
"moderation_id": "mod_3f9c1e7a52b04d8e9a61c2f0",
"decision": "flag",
"reason": "policy",
"matched_categories": ["violence"],
"scores": { "violence": 0.72, "harassment": 0.08, … },
"unevaluated_categories": ["spam"],
"provider": "openai",
"csam_scan": null,
"user_id": "user_42",
"content_id": "post_1001",
…
}
Never publish block. flag also lands in your review queue: publish or hold it, per your policy.
I'm going to destroy you in the next match
Approve, remove or ban from the dashboard. Every moderation result is kept in the audit log.
POST /v1/moderate
POST /v1/reports
POST /v1/blocks
Published: support@chatterbox.app
Chatterbox Community Guidelines Chatterbox is a place to share and connect safely. We have zero tolerance for objectionable content and abusive users. … What is not allowed - Sexual content: sexually explicit or pornographic content, including nudity. - Harassment & bullying: bullying, harassment, threats or intimidation of other people. - Spam & scams: spam, scams, fraud, and misleading or repetitive promotional content. …
Also generated: “How to report and block” help text and App Review notes, ready to paste.
let trustship = TrustShip(apiKey: token, baseURL: backendURL) // Before publishing a post let result = try await trustship.moderate( text: draft, userId: me.id, contentId: post.id) if result.isBlocked { return } // Reasons, details and “Also block this user” included ReportSheet(client: trustship, contentId: post.id, reporterUserId: me.id, reportedUserId: post.authorId)
import os from trustship import TrustShip trustship = TrustShip(os.environ["TRUSTSHIP_API_KEY"], base_url="https://trustship.example.com") result = trustship.moderate(comment.text, user_id=user.id, content_id=comment.id) if result["decision"] == "allow": publish(comment) trustship.ban("user_42", reason="Repeated harassment")
Guideline 1.2
Apps with user-generated content must filter objectionable material, let people report it and block abusive users, respond to reports promptly, and publish contact information. TrustShip gives you the tools for each; reviewing reports on time is up to you.
POST /v1/moderate checks text, image URLs and uploads against a per-project policy and returns allow, flag or block.
Users report content from your app. Reports, appeals and flagged posts wait in one queue where you approve, remove or ban.
Let users block each other with /v1/blocks, and ban abusive users from the whole project.
Set a support email or URL once. GET /v1/contact serves it to your app.
Every image is checked against known child sexual abuse material with Arachnid Shield before the moderation model sees it. Matches are blocked and recorded, never stored. Reporting them stays your legal duty.
A checklist ticks each requirement as your app calls the API or you configure it, and generates Community Guidelines, how-to-report text and App Review notes.
How it works
Sign up with Google, GitHub or your email. The Free plan needs no card.
Continue with GoogleCreate a project for your app in the dashboard and copy its API key. Its moderation policy starts with Apple-safe defaults.
Authorization: Bearer YOUR_API_KEYCall the API from your backend or the Swift SDK, then wire up reports and blocks.
POST /v1/moderatePricing
Both plans come with the full moderation and Guideline 1.2 toolkit. Pro removes the limits.
For building and launching your first app.
€0/ month
No card needed
For apps with real traffic, or several apps.
€20/ month
or €199 a year, 2 months free
Pay by card through Stripe: Pro renews automatically every month or year until you cancel it from the dashboard.
Or pay with crypto (BTC, ETH, SOL or USDC), on-chain: create an invoice in the dashboard, send the exact amount it shows, paste the transaction hash, and Pro activates once it confirms.
A moderation check is one POST /v1/moderate call: one text, image URL or uploaded image. Reports, blocks, appeals and bans don’t count.
A Free project that goes past 1,000 checks keeps being moderated up to 2,000 checks that month, then gets a 24 hour grace period where every response says how long is left — so your app never suddenly goes unmoderated. Past that, checks pause with a 402 that says when the quota resets, until the next month or an upgrade. Fair use on Pro means traffic from your own apps, not reselling the API.
Start free with €0: one project and 1,000 checks a month. Upgrade when your app grows. Images are never stored, only their hash.