Skip to content

API Overview

All API requests are made to:

https://api.getsieve.dev

Authenticate by including your API key in the request header. Sieve uses prefixed API keys:

  • mod_live_ — Production keys. Calls are billed and routed through the full moderation pipeline.
  • mod_test_ — Test keys. Returns deterministic responses, makes no AI calls, and incurs no charges.
Terminal window
Authorization: Bearer mod_live_abc123...

See Authentication for full details.

Rate limits are enforced per API key and vary by plan:

PlanRate LimitMonthly Calls
Free10 req/sec10,000
Indie ($29/mo)50 req/sec100,000
Pro ($99/mo)200 req/sec1,000,000

When you exceed the rate limit, the API returns a 429 Too Many Requests response with a Retry-After header.

Any request made with a mod_test_ key enters test mode:

  • Returns deterministic responses based on known phrases and patterns
  • Makes no downstream AI calls (OpenAI, Claude)
  • Incurs no billing — test calls are not counted toward your quota
  • Useful for integration testing, CI/CD pipelines, and local development

All successful responses return JSON with a consistent structure:

{
"request_id": "req_abc123",
"action": "allow",
"flagged": false,
"categories": {
"toxicity": {
"score": 0.02,
"threshold": 0.7,
"flagged": false
},
"harassment": {
"score": 0.01,
"threshold": 0.7,
"flagged": false
}
},
"pipeline_tier": 0,
"latency_ms": 3
}
FieldTypeDescription
request_idstringUnique identifier for the request, useful for support and debugging.
actionstringRecommended action: allow, flag, or block.
flaggedbooleantrue if any category exceeded its threshold.
categoriesobjectPer-category scores, thresholds, and flags.
pipeline_tierintegerWhich pipeline tier handled the request (0 = local, 1 = OpenAI, 2 = Claude).
latency_msintegerTotal processing time in milliseconds.

The API uses standard HTTP status codes. Error responses include a JSON body:

{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry after 1 second.",
"retry_after": 1
}
}
StatusMeaning
400Bad request — invalid or missing parameters.
401Unauthorized — missing or invalid API key.
429Rate limit exceeded.
500Internal server error.