Moderate against your policy, not a fixed list
Describe what your platform allows in plain language, add a few examples of each category, and get a probability for every post and every category. Clear a backlog in bulk, or moderate live.
$0.09 per million input tokens · the scores are free
Calibrated answers for content moderation, at any scale
Your categories
Scams on a marketplace, off-topic posts in a community, medical claims in reviews: the policy is yours, written as questions and examples.
Thresholds per category
Remove what is clearly over the line, queue the borderline for review, and set each threshold on your own labelled history.
Cheap enough for every post
Score every post, comment and review, not a sample: only the input is billed, and a short post costs a small fraction of a cent.
One post, a flag and a category
A yes/no policy question and the category among seven. The bars show p; the tick shows the floor, the same question with no post.
User post: Guaranteed 300% returns in 7 days!! DM me your wallet seed phrase and I'll set up the trading bot for you for free. Only 5 spots left.
Does this post break the platform's content policy (harassment, hate, sexual content, violent threats, self-harm, spam or scams)?
yes
0.82
no
0.18
Policy category (safe, harassment, hate, sexual, violence, self-harm, or scam):
safe
0.01
harassment
0.01
hate
0.00
sexual
0.00
violence
0.00
self-harm
0.00
scam
0.98
import os
import requests
resp = requests.post(
"https://api.spinf.com/v1/score",
headers={"Authorization": f"Bearer {os.environ['SPINF_API_KEY']}"},
json={
"model": "spinf-12b",
"messages": [
{
"role": "user",
"content": "User post:\nGuaranteed 300% returns in 7 days!! DM me your wallet seed phrase and I'll set up the trading bot for you for free. Only 5 spots left."
}
],
"scoring": {
"queries": [
{
"id": "flag",
"template": "\n\nDoes this post break the platform's content policy (harassment, hate, sexual content, violent threats, self-harm, spam or scams)?\nAnswer:{?}",
"options": [
" yes",
" no"
]
},
{
"id": "category",
"template": "\n\nPolicy category (safe, harassment, hate, sexual, violence, self-harm, or scam):{?}",
"options": [
" safe",
" harassment",
" hate",
" sexual",
" violence",
" self-harm",
" scam"
]
}
]
}
},
)
for query in resp.json()["results"][0]["queries"]:
for combo in query["combinations"]:
print(query["id"], combo["values"], [(o["text"], o["p"], o["floor_p"]) for o in combo["options"]])A live zero-shot call to spinf-12b. Categories and examples are yours: add a few labelled posts to the content to teach your policy.
Your policy, taught by a few labelled posts in the prompt
Measured on 130 synthetic posts across six policy categories and safe content, including edgy-but-safe and polite-but-harmful posts, labelled by two reviewers, zero-shot and with 4 or 8 labelled example posts placed in the prompt.
correct · breaks policy?
correct category (7)
AUC · breaks policy?
Real content is harder: on 300 real public online comments with noisy, borderline toxicity labels, the same policy question reached AUC 0.77 with 8 examples. Teach your policy with examples from your own platform, and measure on a labelled sample before relying on thresholds.
Calibrate in bulk, then decide live
The on-demand API is built for throughput: use it to measure spinf on your own history and set your thresholds. Real-time decisions then run on an endpoint reserved for you.
1
Write the policy as questions
One yes/no question for "breaks the policy?", one closed question for the category, and a few labelled posts per category in the content.
2
Clear the backlog, set thresholds
Score your existing posts on the on-demand API, compare with past decisions, and choose per category what is removed, queued or allowed.
3
Moderate new posts
Score new posts in batches every few minutes on demand, or as they are published on a reserved endpoint.
10M posts for about $225
Only input is billed, at $0.09 per million tokens: the content once per call, each question's own tokens, and one empty floor per question. The scores are free.
Assumes 100-token posts, 2 questions, batched calls. The first 50M tokens are free.
Content moderation: questions, answered
More in the docs, or .
Same engine, other questions
The first 50M tokens are on us
Score a sample of your history today, and talk to us when you are ready to go live.