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

Trust & Safety API

Classify harmful-content signals with structured, versioned results. The Trust & Safety API classifies text against 210 indicators in 21 harm groups across 16 supported languages.

Use the returned groups, indicators, confidence values, and version metadata in your own moderation and review workflows.

POST /v1/analyze · REST · JSON · Bearer authentication

Make your first request

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"
    ]
}'

Example response:

{
    "language": "en",
    "language_source": "declared",
    "signals": [
        {
            "analyzer": "trust-safety",
            "code": "insults_derogation",
            "label": "Insults & Derogation",
            "score": 0.86,
            "level": "category"
        },
        {
            "analyzer": "trust-safety",
            "code": "insult",
            "label": "Insult",
            "score": 0.99,
            "level": "label",
            "parent": "insults_derogation"
        },
        {
            "analyzer": "trust-safety",
            "code": "belittling",
            "label": "Belittling",
            "score": 0.99,
            "level": "label",
            "parent": "insults_derogation"
        }
    ],
    "meta": {
        "analyzers": [
            {
                "name": "trust-safety",
                "status": "completed",
                "applicability": "analyzable",
                "assessment": "signals_detected",
                "signal_count": 3,
                "billed": true
            }
        ]
    },
    "usage": {
        "analyzer_runs": 1
    },
    "verification": {
        "configuration": "sqcfg_ZZW77NM9",
        "fingerprint": "fp_8a72...19f",
        "input_commitment": "ic_31bd...a42",
        "signature": "sig_ed25519_4c1f...e2a",
        "key_id": "edk_af4f218e"
    }
}

Don't have an API key? Generate one from the API Keys page in your dashboard.

Endpoint

POST /v1/analyze

Analyzes submitted text and returns structured signals with scores and a verification receipt.

Request

{
    "text": "you are a worthless idiot",
    "language": "en",
    "analyzers": [
        "trust-safety"
    ]
}

Parameters

Parameter Type Required Default Description
textstringYes-Text to analyze
languagestringNo"en"Supported language code
analyzersstring[]Yes-1–2 analyzer slugs to run (never defaults to all)
Advanced parameters →

Related endpoints

GET /v1/meta/domains

Lists all analyzers with identifiers, status, and endpoints - no authentication required. Send a Bearer API key for taxonomy size and language counts.

GET /v1/meta/domains/trust-safety

Identifier, availability, and endpoint for this analyzer. Send a Bearer API key for taxonomy summary and supported languages.

GET /v1/account/usage

Current-period usage and quota for your API key. Requires authentication.

Response fields

signals

Array of detected signals, each with analyzer, code, label, score, level, and optional parent.

{
    "analyzer": "trust-safety",
    "code": "insult",
    "label": "Insult",
    "score": 0.99,
    "level": "label",
    "parent": "insults_derogation"
}

code

Stable machine identifier for the signal. For categories: insults_derogation. For labels: insult. Use code when storing or cross-referencing signals. The code is immutable across API versions.

Field Type Description
analyzerstringAnalyzer that produced this signal
codestringStable machine identifier
labelstringHuman-readable display name
scorefloatSignal-match strength (0.0–1.0)
levelstring"category" or "label"
parentstringParent category code (label-level only)

Important behavior

Determinism

For the same normalized input evaluated against the same pinned configuration and output profile, Sentiqra returns the same canonical signals. Version changes are explicit.

Confidence

A score expresses signal-match strength under a particular analyzer configuration. It is not a probability that the signal or a downstream action is correct. Validate action thresholds on representative labeled data.

Privacy

Submitted text is processed in memory and not retained. See data handling for exact retention behavior.

Limits

Character limit, RPS, and monthly quota depend on your plan. See pricing for current limits.

Signal scores

A score expresses signal-match strength under a particular analyzer configuration. It is not a probability that the signal or a downstream action is correct. Validate action thresholds on representative labeled data.

Paid API keys receive the continuous score (profile full.v1); anonymous, playground, demo, and free-tier responses return banded scores with a confidence band (profile reduced.v1). See Understanding signals for the profile and band table.

A high score means the submitted text is a stronger match for the documented label under the current analyzer configuration. It does not mean that an enforcement action is correct.

Scores are not comparable across labels or analyzers unless validated on your own labeled traffic. Define production thresholds using your own labeled data, policy requirements, and acceptable false-positive/false-negative trade-offs.

Supported languages

Trust & Safety currently supports 16 languages.

Code Language Status
en English Production
fr French Production
es Spanish Production
de German Production
it Italian Production
nl Dutch Production
no Norwegian Production
pl Polish Production
uk Ukrainian Production
ru Russian Production
sv Swedish Production
fi Finnish Production
lv Latvian Production
lt Lithuanian Production
pt Portuguese Production
tr Turkish Production

All languages this detector supports are enabled on every plan. Custom or restricted arrangements may scope language access - check the dashboard or GET /v1/account/entitlements for account-specific availability.

Detector does not support language → 400 unsupported_language
Detector supports language but the account is not entitled (restricted/custom arrangements only - GA plans include all supported languages) → 403 language_not_in_plan

View language coverage and benchmarks →
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"
    ]
}'

Set language to any supported code listed above; the request shape is identical.

Taxonomy

The Trust & Safety taxonomy contains 21 categories and 210 labels.

1

Profanity & Obscenity

profanity_obscenity

10 labels

The complete signal list is available to customers. Request access to view it.

2

Insults & Derogation

insults_derogation

10 labels

The complete signal list is available to customers. Request access to view it.

3

Harassment & Targeting

harassment_targeting

10 labels

The complete signal list is available to customers. Request access to view it.

4

Bullying & Social Exclusion

bullying_exclusion

10 labels

The complete signal list is available to customers. Request access to view it.

5

Hate & Identity Attack

hate_identity_attack

10 labels

The complete signal list is available to customers. Request access to view it.

6

Identity-Based Discrimination

identity_discrimination

10 labels

The complete signal list is available to customers. Request access to view it.

7

Dehumanization & Exclusionary Harm

dehumanization_exclusionary_harm

10 labels

The complete signal list is available to customers. Request access to view it.

8

Threats & Intimidation

threats_intimidation

10 labels

The complete signal list is available to customers. Request access to view it.

9

Incitement & Glorification of Violence

incitement_violence

10 labels

The complete signal list is available to customers. Request access to view it.

10

Sexual Harassment & Sexualized Abuse

sexual_harassment_abuse

10 labels

The complete signal list is available to customers. Request access to view it.

11

Coercive & Controlling Abuse

coercive_controlling_abuse

10 labels

The complete signal list is available to customers. Request access to view it.

12

Self-Harm & Suicide Encouragement

self_harm_encouragement

10 labels

The complete signal list is available to customers. Request access to view it.

13

Self-Harm & Suicidal Ideation

self_harm_ideation

10 labels

The complete signal list is available to customers. Request access to view it.

14

Privacy Abuse & Doxxing

privacy_doxxing

10 labels

The complete signal list is available to customers. Request access to view it.

15

Scams, Fraud & Impersonation

scams_fraud_impersonation

10 labels

The complete signal list is available to customers. Request access to view it.

16

Spam & Manipulative Platform Abuse

spam_platform_abuse

10 labels

The complete signal list is available to customers. Request access to view it.

17

Child Safety & Predatory Language

child_safety_predatory_language

10 labels

The complete signal list is available to customers. Request access to view it.

18

Violent Extremism & Recruitment

violent_extremism

10 labels

The complete signal list is available to customers. Request access to view it.

19

Dangerous Behavior & Harm Encouragement

dangerous_behavior_encouragement

10 labels

The complete signal list is available to customers. Request access to view it.

20

Toxic Conflict & Hostile Conversation

toxic_conflict

10 labels

The complete signal list is available to customers. Request access to view it.

21

Evasion & Coded Abuse

evasion_coded_abuse

10 labels

The complete signal list is available to customers. Request access to view it.

Errors

The API uses standard HTTP status codes and structured JSON error responses.

Code Description
400Invalid request
401Authentication error
403Access unavailable for this API key
413Input exceeds the documented size limit
429Rate or quota limit exceeded
500Internal error
503Temporary service unavailable

For 429 and eligible 5xx responses, use exponential backoff. All errors return JSON with "error": true and a message field.

Rate limits and quotas

Rate limits and monthly analyzer run quotas depend on your plan. Every response includes documented rate-limit headers:

Header Description
X-RateLimit-LimitMax requests per second
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-ResetUnix timestamp when window resets
View current pricing and limits →

Data handling

Submitted content is processed according to Sentiqra's documented data-handling architecture:

Raw request content

Submitted text is processed in memory and not retained. No model training on your data.

Signal metadata

Individual signal results are not stored. Only aggregate counters are derived from them before the response is sent, apart from the bounded idempotency replay copy and webhook delivery payloads described in the retention schedule.

Operational metadata

Request status, key identifiers, latency, and billing information are logged for operational purposes.

Code examples

All examples analyze the text "you are a worthless idiot" with the Trust & Safety analyzer. Examples use environment variables for API keys - do not hard-code keys in source.

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"
    ]
}'

Use an SDK

Official client libraries are available for Python · JavaScript · Go · PHP.

View SDK preview →

For other languages, use the REST API directly.

Reading Trust & Safety output

What you can safely infer from a result - and what you must not.

Intended task

Tell your moderation pipeline which documented harm categories a piece of text matches - the policy routing decision stays with you.

Input requirements

  • text - the only field analyzed; up to 4,096 Unicode code points. Over the limit is rejected with input_too_long, never truncated.
  • language - must be a language this analyzer supports. Unsupported codes are rejected with 400 unsupported_language, never analyzed as a different language.
  • analyzers - include "trust-safety"; up to 2 analyzers per request, one billed run each.
  • No context beyond text - no user IDs, history, profiles, or attachments are read or inferred.
  • Works on the submitted text alone - the analyzer never sees the author's account, history, or reputation.

Ordinary positive

“You are an idiot and everyone on this server hates you. Keep talking and I will post your home address.”

insults_derogation very high
privacy_doxxing high

Safe inference: The text matched two documented harm categories. You can route it to your harassment/doxxing policy lane and cite the exact labels in a statement of reasons.

Confusing negative · Quotation

“The commenter told her "I will post your home address" - our report on doxxing in gaming forums.”

What happens: A privacy/doxxing signal can still fire. The analyzer scores the submitted text as written - quoted abuse language inside reporting or commentary can match the same documented pattern.

Why it's tricky: A signal means "this text contains language matching the documented pattern," not "the author intended harm." Whether quotation context matters is a policy decision - keep human review in the loop for reported-speech surfaces.

What you can safely infer

  • Which documented indicators the text matched, and at what signal-match strength.
  • That the same input on the same pinned configuration replays identically - the receipt records which configuration produced the result.
  • That a category-level signal with label-level children gives you both the policy area and the specific behavior.

What you must not infer

  • ✕That the author intended harm - intent is not in the text.
  • ✕That quoted or reported abuse means the author endorses it.
  • ✕That an empty signals list clears the content - "not detected" is never "safe."
  • ✕Anything about the author's account or history - the analyzer never sees it.