Flow: Content Moderation
Manage your videos, ask questions, and build applications with the Platform API. Explore the operations below for request details, responses, and examples.
No matching documentation. Try a different search.
Flow: Content Moderation
Upload content for moderation
POST /projects/:projectId/moderate (multipart file or URL)
Content scan runs automatically
Checks the content against your moderation policy and reports potential violations.
Agent pipeline runs (if configured)
Configure automatic analysis to produce a detailed report after moderation.
Poll for results
GET /projects/:projectId/videos/:videoId/moderation — returns structured decision (allow/flag/ban)
Receive webhook (optional)
Configure webhooks to get content.flagged, content.banned, or content.approved events via HTTP POST
import requests, time
API_KEY = "svk_..."
BASE = "https://platform.endlessai.com/api/v1"
PROJECT_ID = "your-project-id"
# Step 1: Upload for moderation
with open("video.mp4", "rb") as f:
resp = requests.post(
f"{BASE}/projects/{PROJECT_ID}/moderate",
headers={"X-Api-Key": API_KEY},
files={"file": ("video.mp4", f, "video/mp4")},
)
content_id = resp.json()["contentId"]
# Step 2: Poll for moderation result
while True:
result = requests.get(
f"{BASE}/projects/{PROJECT_ID}/videos/{content_id}/moderation",
headers={"X-Api-Key": API_KEY},
).json()
if result["status"] == "completed":
break
time.sleep(3)
print(f"Decision: {result['decision']}")
print(f"Confidence: {result['confidence']}%")
for flag in result.get("flags", []):
print(f" - {flag['category']}: {flag['severity']} ({flag['confidence']})")
# Step 3: Check agent report (if pipeline is enabled)
report = requests.get(
f"{BASE}/projects/{PROJECT_ID}/videos/{content_id}/report",
headers={"X-Api-Key": API_KEY},
)
if report.status_code == 200:
agent = report.json()["data"]
print(f"Agent: {agent['decision']} ({agent['confidence']}%)")# Upload for moderation
CONTENT_ID=$(curl -s -X POST "$BASE/projects/PROJECT_ID/moderate" \
-H "X-Api-Key: YOUR_KEY" -F "file=@video.mp4" | jq -r '.contentId')
# Poll result
curl -s "$BASE/projects/PROJECT_ID/videos/$CONTENT_ID/moderation" \
-H "X-Api-Key: YOUR_KEY" | jq '{decision, confidence, flags}'
# Get stats
curl -s "$BASE/projects/PROJECT_ID/moderation/stats" \
-H "X-Api-Key: YOUR_KEY" | jq '.data'import { openAsBlob } from "node:fs";
const API_KEY = "svk_...";
const BASE = "https://platform.endlessai.com/api/v1";
const PROJECT_ID = "your-project-id";
// Upload for moderation
const form = new FormData();
form.append("file", await openAsBlob("video.mp4", { type: "video/mp4" }));
const uploadRes = await fetch(`${BASE}/projects/${PROJECT_ID}/moderate`, {
method: "POST", headers: { "X-Api-Key": API_KEY }, body: form
});
const { contentId } = await uploadRes.json();
// Poll for result
let result;
do {
await new Promise(r => setTimeout(r, 3000));
const res = await fetch(
`${BASE}/projects/${PROJECT_ID}/videos/${contentId}/moderation`,
{ headers: { "X-Api-Key": API_KEY } }
);
result = await res.json();
} while (result.status !== "completed");
console.log(result.decision, result.confidence);