DEVELOPERS
One API. Twelve analyzers. A signal contract that doesn't change under you.
Send text to POST /v1/analyze. Pick which analyzers to run. Get structured signals with a receipt you can replay later. Free plan includes 5,000 analyzer runs per month.
curl -X POST https://sentiqra.tech/v1/analyze \
-H "Authorization: Bearer $SENTIQRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "you are a worthless idiot",
"language": "en",
"analyzers": ["trust-safety"]
}'
Returns: a flat signals[] array plus a verification receipt. Same shape for all 12 analyzers.
See a full response →
The map
Reference
- API Reference
Endpoints, schemas, headers, errors
- Signals
Codes, categories, labels, what scores mean
- Verification
Reproducibility spec
Build
- Quickstart
First request in 5 minutes
- Production Guide
Retries, idempotency, failure modes
- Testing Sandbox
Local failure simulation + grading harness
- SDKs
Python, JavaScript, Go, PHP
Integrate
- Integrations
SIEM, secrets, observability, Kafka, agents
- MCP Server
Deterministic tools for LLM agents
- Reference architectures
Full working system designs
Evaluate
- Playground
Try any analyzer without an API key
- Evaluate
30-minute structured evaluation
- Evidence Center
Benchmarks and methodology
Not every message needs every analyzer.
Run a primary stage, then conditionally invoke secondary analyzers - lower cost, lower latency, clearer ownership.
Conditional routing
primary = client.analyze(
text=message,
analyzers=["trust-safety", "fraud-scam"],
)
codes = {s.code for s in primary.signals}
if codes & {"imp_credential_harvest", "imp_account_takeover"}:
security = client.analyze(
text=message,
analyzers=["cybersecurity"],
)
if "imp_romance_scam" in codes:
dating = client.analyze(
text=message,
analyzers=["dating-safety"],
)
Run economics
100,000 messages/day
│
▼
Trust & Safety + Fraud
200,000 runs (primary, always)
│
├── 3,000 suspicious
│
▼
Cybersecurity
3,000 runs (conditional)
TOTAL
203,000 analyzer runs
not 400,000–800,000
with unconditional pipelines
The same gate that saves runs also decides which cases the specialist never sees — the 3,000 routed messages are a subset of the relevant ones, not all of them. Measure end-to-end recall (gate recall × specialist recall conditional on passing) against an always-on baseline before locking routing thresholds.
Help: Developer support · Support Center · Status