Quickstart
From zero to a working request in three steps.
1. Sign up and get your key
Sign up, go to the dashboard → API keys → New key. We show the full sk_live_… key once — copy it right away.
2. Send an image
curl -X POST https://modwall.dev/v1/moderate \ -H "Authorization: Bearer sk_live_..." \ -F "image=@zdjecie.jpg"
import requests
r = requests.post(
"https://modwall.dev/v1/moderate",
headers={"Authorization": "Bearer sk_live_..."},
files={"image": open("zdjecie.jpg", "rb")},
)
print(r.json())
import fs from "node:fs";
const fd = new FormData();
fd.append("image", new Blob([fs.readFileSync("zdjecie.jpg")]), "zdjecie.jpg");
const r = await fetch("https://modwall.dev/v1/moderate", {
method: "POST",
headers: { Authorization: "Bearer sk_live_..." },
body: fd,
});
console.log(await r.json());
3. Read the response
{
"scores": { "nsfw": 0.97, "safe": 0.03 },
"decision": "allow",
"recommended_action": "block",
"mode": "monitor",
"threshold": 0.8,
"model_version": "falconsai-int8-1"
}
scores are raw probabilities (always returned). recommended_action is the model's recommendation, and decision is the action for you based on your account mode.
A new account starts in monitor mode — modwall blocks nothing (decision is always allow), it only shows what it would flag. This is deliberate: you integrate with no risk to your platform and see in the dashboard how much modwall catches on your traffic, and how accurately. Once you trust the numbers, switch the mode to review (HITL queue) or enforce (auto-block) in the dashboard. Details: Policy and moderation.
Next
- Full API reference (parameters, errors, reports, queue).
- Widget — if you would rather paste code into your page instead of calling the API from your backend.
- Examples in Python / Node / PHP.