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
/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 |
|---|---|---|---|---|
| text | string | Yes | - | Text to analyze |
| language | string | No | "en" | Supported language code |
| analyzers | string[] | 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 |
|---|---|---|
| analyzer | string | Analyzer that produced this signal |
| code | string | Stable machine identifier |
| label | string | Human-readable display name |
| score | float | Signal-match strength (0.0–1.0) |
| level | string | "category" or "label" |
| parent | string | Parent 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
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
Profanity & Obscenity
profanity_obscenity
The complete signal list is available to customers. Request access to view it.
2
Insults & Derogation
insults_derogation
10 labels
Insults & Derogation
insults_derogation
The complete signal list is available to customers. Request access to view it.
3
Harassment & Targeting
harassment_targeting
10 labels
Harassment & Targeting
harassment_targeting
The complete signal list is available to customers. Request access to view it.
4
Bullying & Social Exclusion
bullying_exclusion
10 labels
Bullying & Social Exclusion
bullying_exclusion
The complete signal list is available to customers. Request access to view it.
5
Hate & Identity Attack
hate_identity_attack
10 labels
Hate & Identity Attack
hate_identity_attack
The complete signal list is available to customers. Request access to view it.
6
Identity-Based Discrimination
identity_discrimination
10 labels
Identity-Based Discrimination
identity_discrimination
The complete signal list is available to customers. Request access to view it.
7
Dehumanization & Exclusionary Harm
dehumanization_exclusionary_harm
10 labels
Dehumanization & Exclusionary Harm
dehumanization_exclusionary_harm
The complete signal list is available to customers. Request access to view it.
8
Threats & Intimidation
threats_intimidation
10 labels
Threats & Intimidation
threats_intimidation
The complete signal list is available to customers. Request access to view it.
9
Incitement & Glorification of Violence
incitement_violence
10 labels
Incitement & Glorification of Violence
incitement_violence
The complete signal list is available to customers. Request access to view it.
10
Sexual Harassment & Sexualized Abuse
sexual_harassment_abuse
10 labels
Sexual Harassment & Sexualized Abuse
sexual_harassment_abuse
The complete signal list is available to customers. Request access to view it.
11
Coercive & Controlling Abuse
coercive_controlling_abuse
10 labels
Coercive & Controlling Abuse
coercive_controlling_abuse
The complete signal list is available to customers. Request access to view it.
12
Self-Harm & Suicide Encouragement
self_harm_encouragement
10 labels
Self-Harm & Suicide Encouragement
self_harm_encouragement
The complete signal list is available to customers. Request access to view it.
13
Self-Harm & Suicidal Ideation
self_harm_ideation
10 labels
Self-Harm & Suicidal Ideation
self_harm_ideation
The complete signal list is available to customers. Request access to view it.
14
Privacy Abuse & Doxxing
privacy_doxxing
10 labels
Privacy Abuse & Doxxing
privacy_doxxing
The complete signal list is available to customers. Request access to view it.
15
Scams, Fraud & Impersonation
scams_fraud_impersonation
10 labels
Scams, Fraud & Impersonation
scams_fraud_impersonation
The complete signal list is available to customers. Request access to view it.
16
Spam & Manipulative Platform Abuse
spam_platform_abuse
10 labels
Spam & Manipulative Platform Abuse
spam_platform_abuse
The complete signal list is available to customers. Request access to view it.
17
Child Safety & Predatory Language
child_safety_predatory_language
10 labels
Child Safety & Predatory Language
child_safety_predatory_language
The complete signal list is available to customers. Request access to view it.
18
Violent Extremism & Recruitment
violent_extremism
10 labels
Violent Extremism & Recruitment
violent_extremism
The complete signal list is available to customers. Request access to view it.
19
Dangerous Behavior & Harm Encouragement
dangerous_behavior_encouragement
10 labels
Dangerous Behavior & Harm Encouragement
dangerous_behavior_encouragement
The complete signal list is available to customers. Request access to view it.
20
Toxic Conflict & Hostile Conversation
toxic_conflict
10 labels
Toxic Conflict & Hostile Conversation
toxic_conflict
The complete signal list is available to customers. Request access to view it.
21
Evasion & Coded Abuse
evasion_coded_abuse
10 labels
Evasion & Coded Abuse
evasion_coded_abuse
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 |
|---|---|
| 400 | Invalid request |
| 401 | Authentication error |
| 403 | Access unavailable for this API key |
| 413 | Input exceeds the documented size limit |
| 429 | Rate or quota limit exceeded |
| 500 | Internal error |
| 503 | Temporary 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-Limit | Max requests per second |
| X-RateLimit-Remaining | Remaining requests in current window |
| X-RateLimit-Reset | Unix timestamp when window resets |
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 withinput_too_long, never truncated.language- must be a language this analyzer supports. Unsupported codes are rejected with400 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.”
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.