We are currently building something exciting and will be launching soon. Registration is temporarily closed. Launching soon — registration temporarily closed.

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

Build

Integrate

Evaluate

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.