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

EMOTION ANALYSIS

Generally available

20 emotions in 16 languages - not just positive/negative.

Anger, joy, fear, sadness, pride - ranked emotion signals your routing and analytics can act on. Flat taxonomy, reproducible results, no interpretation layer to audit.

20 emotions · 16 languages · p95 target <500ms · Every result reproducible

customer message
emotions
angervery high
contemptvery high
lonelinessvery high
LanguageEN
Configurationsqcfg_3WTVYJV6
Fingerprintfp_09c3…5e

Re-run with the same pinned version → identical result

What this analyzer does and doesn't do

  • Return ranked emotion labels from text across 16 languages
  • Distinguish 20 distinct emotions - not a positive/negative axis
  • Produce reproducible signals for routing and analytics
  • ✕Diagnose mental-health or clinical conditions
  • ✕Infer how a person actually feels - it classifies the text
  • ✕Assess wellness, fitness for work, or insurance risk
  • ✕Replace human judgment in sensitive interactions

Sentiqra returns structured signals. Your policy, reviewers, and models make the decision. See the full boundary statement →

WHAT YOU'LL DETECT

One flat taxonomy. Twenty emotions. Zero hierarchy to learn.

This is the simplest analyzer on the platform: send text, get up to three ranked emotions with scores. That simplicity is the feature.

joy sadness anger fear surprise disgust love pride shame hope

Representative emotions shown. The complete 20-emotion list is available to customers - request access.

87.3% – 95.2% 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.

p95 latency target <500ms 63 generated eval cases per language Every benchmark tied to a config ID
See per-language benchmarks and methodology

WHERE IT GETS USED

Three jobs this analyzer does well.

Support ticket triage

A CX team combines anger + contempt into an escalation rule. Tickets carrying both signals route ahead of the queue - and when a customer disputes how they were handled, the exact emotion signals behind the routing decision replay identically.

Fit signals: queue prioritization · escalation rules · high ticket volume

Employee pulse and feedback analysis

A people-analytics team tracks morale, hope, and burnout-adjacent markers across anonymized survey text - trends by cohort over time, with a pinned config ID so this quarter's results compare cleanly against last quarter's.

Fit signals: anonymized surveys · longitudinal tracking · people analytics

Voice of Customer dashboards

A product org charts emotion trends across feedback channels - gratitude after a launch, confusion after a pricing change - as reproducible time series, not vibes. Because the config is pinned, a chart shift means customer language actually shifted.

Fit signals: VoC programs · trend dashboards · release feedback

Send a message. Get ranked emotions + a receipt.

request
POST /v1/analyze
Authorization: Bearer sq_live_your_api_key_here

{
  "text": "I'm furious - three days waiting and nobody even replied. This is unacceptable.",
  "language": "en",
  "analyzers": ["emotions"]
}
response
{
  "language": "en",
  "signals": [
    { "analyzer": "emotions", "code": "negative_emotion", "label": "Negative Emotion", "score": 0.9, "confidence": "very_high", "level": "category" },
    { "analyzer": "emotions", "code": "frustration", "label": "Frustration", "score": 0.9, "confidence": "very_high", "level": "label", "parent": "negative_emotion" },
    { "analyzer": "emotions", "code": "disappointment", "label": "Disappointment", "score": 0.9, "confidence": "very_high", "level": "label", "parent": "negative_emotion" }
  ],
  "meta": { "analyzers": [{ "name": "emotions", "status": "completed", "signal_count": 3, "billed": true }], "partial": false },
  "usage": { "analyzer_runs": 1, "billed": true },
  "verification": {
    "configuration": "sqcfg_3WTVYJV6",
    "fingerprint": "fp_8a72...19f",
    "input_commitment": "ic_31bd...a42",
    "signature": "sig_ed25519_4c1f...e2a"
  }
}

READING THE OUTPUT

What a Emotion Analysis result tells you - and what it doesn't.

Intended task

Rank which of the 20 documented emotions a piece of text expresses - the emotional register of the writing.

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 "emotions"; 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.
  • Short text works, but single words and fragments carry little signal - very thin input can return an empty result.

Ordinary positive

“I was dreading this release all week, but seeing it finally live - I am honestly so proud of the team.”

pride very high
relief high
excitement medium

Safe inference: The text expresses pride and relief with an excitement undertone - a ranked mix, not a single verdict.

Confusing negative · Reported speech

“The customer sounded angry. You must be furious about the delay.”

What happens: Anger signals can fire - the text describes and attributes emotion rather than expressing it. Signals reflect the emotional language in the text, which may belong to a described third party rather than the author.

Why it's tricky: Secondhand emotion, quoted feelings, and hypothetical phrasing ("you must be furious") share vocabulary with felt emotion. Read emotion signals as the register of the text, not a measurement of any person's actual state.

What you can safely infer

  • The emotional register of the text as written, ranked across the documented emotion set.
  • That mixed emotions are a normal result - consume the ranked list, not just the top label.

What you must not infer

  • ✕The author's actual mental or emotional state - text is evidence of language, not feeling.
  • ✕That a described emotion belongs to the author rather than someone they describe.
  • ✕That a flat or empty result means the author feels nothing - thin text is thin evidence.

Boundary: Emotion signals describe the emotional language in a text. They are not a mental-health assessment and say nothing about any person's actual state.

Emotion 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.

Verify a receipt

Where it fits in your stack

CUSTOMER TEXT / SURVEY / TICKET ↓ EMOTION ANALYSIS ↓
Angervery high
Contemptvery high
Sadnesshigh
↓ YOUR POLICY ↓ Route · Escalate · Chart · Compare

Often paired with: Customer Service Intelligence for intent + urgency routing, Trust & Safety for hostile-language escalation, Crisis Intelligence for population-sentiment tracking.

Used in: Emotion & Escalation

Paste a real customer message.

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. Emotion Analysis is the 20-emotion detection in text analyzer.

What does Emotion Analysis detect?

Detect 20 distinct emotions in multilingual text with confidence-ranked top matches.

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": ["emotions"]. 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.