DISCRIMINATION ANALYSIS
Generally availableProtected-class signals your reviewers can defend - not a black-box bias score.
Protected-class hostility and exclusionary language across 200 labels and 16 languages - every signal reproducible, so your reviewers make the call with evidence, not a black-box score.
200 labels · 16 languages · p95 target <500ms · No generative model is used to produce classifications
Signals for human review - never an automated verdict
What this analyzer does and doesn't do
- Detect protected-class hostility and exclusionary language in text
- Return labeled, confidence-ranked signals for human review
- Cover 16 languages with per-language evaluation
- ✕Determine whether unlawful discrimination occurred
- ✕Make or recommend hiring, firing, or promotion decisions
- ✕Score a person as "biased" or "discriminatory"
- ✕Replace legal counsel or compliance review
Sentiqra returns structured signals. Your policy, reviewers, and models make the decision. See the full boundary statement →
WHAT YOU'LL DETECT
Specific exclusion patterns - not a "toxicity" umbrella.
Harassment & Hostile Environment
discriminatory_harassment
Detected - example withheld
Exclusion & Segregation
leadership_exclusion
“People like that don’t belong here” → very high
Stereotyping & Dehumanization
inferiority_claim
“Everyone knows they’re just less capable” → very high
Coded & Indirect Bias
coded_exclusion
Detected - example withheld
Employment Discrimination
hiring_discrimination
Detected - example withheld
88% – 98.7% Production Top-3 Hit Rate across 16 languages.
Benchmarks vary by language - the range above is the honest spread, not the best case. Top-3 Hit Rate means the expected label appears among the 3 highest-confidence signals returned; it measures ranking quality, not whether a thresholded accept/reject decision was right.
WHERE IT GETS USED
Three jobs this analyzer does well.
HR review of internal communications
An HR compliance team screens flagged internal channels for exclusionary and protected-class-hostility signals. Every flagged item carries the label and the config ID, so counsel reviews evidence that replays identically - not a one-shot model opinion.
Fit signals: internal comms review · counsel-grade evidence · multilingual workplaces
Platform moderation of protected-class harassment
A marketplace or community platform separates general toxicity from protected-class attacks, so the right queue gets the right cases - and a user's appeal can be re-run against the exact signals that triggered the action.
Fit signals: dedicated harassment queues · appeal workflows · policy-specific labels
Compliance investigation support
A legal team reconstructs what the system detected months earlier for an internal investigation. The stored config ID replays the identical analysis - the evidence describes what was flagged then, not what today's model would flag.
Fit signals: litigation-adjacent review · audit obligations · reproducibility requirements
Send flagged text. Get labeled signals + a receipt.
POST /v1/analyze
Authorization: Bearer sq_live_your_api_key_here
{
"text": "People from that background just aren't management material.",
"language": "en",
"analyzers": ["discrimination"]
}
{
"language": "en",
"signals": [
{ "analyzer": "discrimination", "code": "protected_class_bias", "label": "Protected Class Bias", "score": 0.9, "confidence": "very_high", "level": "category" },
{ "analyzer": "discrimination", "code": "ethnic_exclusion", "label": "Ethnic Exclusion", "score": 0.9, "confidence": "very_high", "level": "label", "parent": "protected_class_bias" }
],
"meta": { "analyzers": [{ "name": "discrimination", "status": "completed", "signal_count": 2, "billed": true }], "partial": false },
"usage": { "analyzer_runs": 1, "billed": true },
"verification": {
"configuration": "sqcfg_5DDA6HPF",
"fingerprint": "fp_8a72...19f",
"input_commitment": "ic_31bd...a42",
"signature": "sig_ed25519_4c1f...e2a"
}
}
READING THE OUTPUT
What a Discrimination Analysis result tells you - and what it doesn't.
Intended task
Flag documented exclusionary and discriminatory language patterns tied to protected classes - for human or policy review.
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"discrimination"; 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. - Sees only the submitted text - the writer's identity, role, and the document's legal context are not inputs.
Ordinary positive
“Applicants must be under 40 and born in this country - no exceptions.”
Safe inference: The text matches documented exclusion patterns on two protected classes. Route it to review with the labels attached.
Confusing negative · Quotation
“The handbook's old rule - "applicants must be born in this country" - was struck down in 2019.”
What happens: The exclusion pattern can still match the quoted clause. Signals flag the language for review - they do not read the surrounding context that makes this a compliance document describing a repealed rule.
Why it's tricky: Audits, legal analysis, and journalism all quote discriminatory language. Ambiguous phrasing ("we need someone young and energetic") may produce weak or no signals - absence is "not detected," never clearance. Both cases are why flagged text goes to review, not to automatic verdicts.
What you can safely infer
- Which documented protected-class patterns the text matched, and at what strength.
- That the result is reproducible - the receipt ties the labels to the configuration that produced them.
What you must not infer
- ✕That unlawful discrimination occurred - legality is a determination for your counsel and jurisdiction.
- ✕The author's intent, or that a specific person was harmed.
- ✕That clean text contains no exclusionary content - a missing signal is "not detected," never "compliant."
Boundary: Discrimination signals flag exclusionary language for review - they do not determine that unlawful discrimination occurred, and they say nothing about intent.
Discrimination Analysis is on every plan. Even Free.
Free
5,000 runs/mo
Build
$149/mo · 50,000 runs/mo
Growth
$349/mo · 150,000 runs/mo
Production
$799/mo · 500,000 runs/mo
Scale
$2,999/mo · 2,500,000 runs/mo
Enterprise
By agreement · SOC 2 Type II in progress
Deterministic by construction, provable by receipt.
A signed verification receipt - configuration ID (sqcfg_...), result fingerprint (fp2_...), input commitment (ic3_...), and Ed25519 signature (sig_ed25519_...) - ships with every successful analysis result. Pin it to the stored decision and a later replay under the same supported configuration and output profile yields the identical canonical result - the difference between "the model said so" and evidence.
Where it fits in your review pipeline
Often paired with: Trust & Safety for general harmful content, Emotion Analysis for hostile-tone context, Customer Service Intelligence for complaint routing.
Used in: Discrimination Review
Test it on your review queue.
5,000 analyzer runs/month · No card required
Analyzer FAQ
New to Sentiqra? It's a deterministic text-analysis API - you send text, you get labeled, confidence-scored signals plus a replayable receipt. Discrimination Analysis is the protected-class signal detection analyzer.
What does Discrimination Analysis detect?
Detect discriminatory language and exclusion patterns tied to protected classes and social identity.
Which languages does it cover?
16 supported languages, each with a published per-language benchmark. Coverage is per-analyzer, not platform-wide - check the language list on this page before assuming parity with other analyzers.
How do I call it?
POST /v1/analyze with "analyzers": ["discrimination"]. Same endpoint, auth, and response shape as every other analyzer - you can pair it with one more analyzer in the same request.
What does a call cost?
One analyzer run per call, billed against your plan's included runs (overage per plan). All GA analyzers are on every plan, including Free - see pricing.
How do I evaluate it on my data?
Label a few hundred of your own examples, run them through the free tier, and compare our signals to your labels. The evaluation playbook walks through building that test set - it's the same method we use internally.