Crisis Intelligence API
Turn crisis-related text into structured analysis signals. The Crisis Intelligence API classifies submitted text against 650 indicators across 7 analysis groups in 21 supported languages.
Use the results to enrich news-monitoring, humanitarian, OSINT, research, and analyst workflows.
POST /v1/analyze · REST · JSON · Bearer authentication
Scope
Sentiqra classifies the text you submit. It does not collect feeds, verify sources, geolocate events, or independently establish account coordination, narrative propagation, or media authenticity.
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": "More than 80,000 civilians fled after artillery attacks blocked humanitarian access.",
"language": "en",
"analyzers": [
"crisis-intelligence"
]
}'
Example response:
{
"language": "en",
"language_source": "declared",
"signals": [
{
"analyzer": "crisis-intelligence",
"code": "humanitarian_migration",
"label": "Humanitarian Migration",
"score": 0.94,
"level": "category"
},
{
"analyzer": "crisis-intelligence",
"code": "humanitarian_access",
"label": "Humanitarian Access",
"score": 0.93,
"level": "label",
"parent": "humanitarian_migration"
},
{
"analyzer": "crisis-intelligence",
"code": "displacement",
"label": "Displacement",
"score": 0.9,
"level": "label",
"parent": "humanitarian_migration"
}
],
"meta": {
"analyzers": [
{
"name": "crisis-intelligence",
"status": "completed",
"applicability": "analyzable",
"assessment": "signals_detected",
"signal_count": 3,
"billed": true
}
]
},
"usage": {
"analyzer_runs": 1
},
"verification": {
"configuration": "sqcfg_EMKKGD6F",
"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
Classifies crisis-related text and returns ranked analysis groups and indicators.
Request
{
"text": "More than 80,000 civilians fled after artillery attacks blocked humanitarian access.",
"language": "en",
"analyzers": [
"crisis-intelligence"
]
}
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| text | string | Yes | - | Text to analyze |
| language | string | No | "en" | Supported language code |
Advanced parameters →
Related endpoints
GET /v1/meta/domains/crisis-intelligence
Identifier, availability, and endpoint for this analyzer. Send a Bearer API key for taxonomy summary and supported languages.
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.
What the API analyzes
Good inputs
- • News articles and headlines
- • Field reports
- • Situation reports
- • OSINT text
- • Policy documents
- • Analyst notes
- • Public statements
- • Social-media text supplied by your system
Not independently determined
- • Whether a reported event is true
- • Source credibility
- • Geolocation of events
- • Account coordination or bot activity
- • Media authenticity or deepfake detection
- • Cross-platform propagation
Sentiqra identifies crisis-related language within those inputs. It does not independently determine whether a reported event is true.
Text signals vs contextual evidence
Some indicators can be inferred directly from text:
Directly inferable from text
- • Displacement
- • Conflict
- • Humanitarian need
- • Border restrictions
- • Political pressure
- • Propaganda techniques
- • Threat language
Requires additional evidence
- • Bot activity
- • Coordinated campaigns
- • Virality
- • Cross-platform propagation
- • Source authenticity
- • Staged events
- • Deepfakes
For context-dependent indicators, treat the classification as a textual signal to investigate rather than confirmation of the underlying phenomenon. Sentiqra classifies signals present in the text you provide. Context-dependent indicators may reflect language about coordination, provenance, or media authenticity; they do not independently verify those conditions.
Response structure
groups
High-level analysis categories (level: "category").
{
"analyzer": "crisis-intelligence",
"code": "humanitarian_migration",
"label": "Humanitarian Migration",
"score": 0.94,
"level": "category"
}
signals
More specific indicators within each group (level: "label").
{
"analyzer": "crisis-intelligence",
"code": "humanitarian_access",
"label": "Humanitarian Access",
"score": 0.93,
"level": "label",
"parent": "humanitarian_migration"
}
parent
Category slug this label-level signal belongs to. Dotted form is group.label - e.g. humanitarian_migration.humanitarian_access means humanitarian_access sits under humanitarian_migration.
| Field | Type | Description |
|---|---|---|
| code | string | Stable machine identifier |
| label | string | Human-readable display name |
| parent | string | Parent category code (label-level only) |
| score | float | Signal-match strength (0.0–1.0) |
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.
It does not establish:
- • Whether the reported event occurred
- • Whether the source is credible
- • Whether an operational response is appropriate
- • Whether an analyst conclusion is correct
Use confidence alongside source credibility, provenance, corroboration, and human analysis.
Use confidence as an analyst-routing signal. Validate thresholds by indicator and use case before operational deployment.
650 indicators across 7 analysis groups
The taxonomy covers areas including:
Deterministic classification
For the same normalized input evaluated against the same supported pinned configuration and output profile, Sentiqra returns the same canonical signals.
Version changes are explicit so historical and current analyzer behavior can be distinguished.
Supported languages
Crisis Intelligence currently supports 21 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 |
| da | Danish | Production |
| ja | Japanese | Production |
| ko | Korean | Production |
| zh | Chinese | Production |
| he | Hebrew | 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
Build it into an analyst workflow
Typical architecture:
Source text
↓
Sentiqra classification
↓
Source/provenance/context layer
↓
Analyst review
↓
Briefing, alert, or downstream action
Sentiqra supplies the structured classification signal. Your system and analysts determine what the signal means in context. Use Sentiqra signals as one input to your own early-warning analysis.
Errors and limits
The API returns standard HTTP status codes:
| Code | Description |
|---|---|
| 400 | Invalid input |
| 401 | Authentication failure |
| 403 | Access unavailable |
| 413 | Input too large |
| 429 | Rate or quota exceeded |
| 500 | Internal error |
| 503 | Temporary service unavailable |
For retryable responses, follow documented backoff and Retry-After behavior.
| 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
Sentiqra documents separately what crosses and remains within the service boundary:
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 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": "More than 80,000 civilians fled after artillery attacks blocked humanitarian access.",
"language": "en",
"analyzers": [
"crisis-intelligence"
]
}'
Reading Crisis Intelligence output
What you can safely infer from a result - and what you must not.
Intended task
Classify crisis-related text - field reports, news copy, public posts - into documented analysis groups covering displacement, humanitarian need, governance, and information dynamics.
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"crisis-intelligence"; 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. - Single texts, not streams - correlation across sources is your pipeline's job.
Ordinary positive
“Roughly 400 families crossed the border overnight after shelling cut the bridge; the reception camp has run out of tents.”
Safe inference: The text describes displacement and humanitarian need in the documented language of those categories. Route it to the monitoring desk for that region.
Confusing negative · Reported speech
“Officials claimed 400 families crossed the border overnight, but journalists at the crossing reported no movement and no new arrivals.”
What happens: Migration and displacement signals can still fire: the text describes the event in the documented vocabulary even though it disputes it. The analyzer reads language - it does not adjudicate whether the event happened.
Why it's tricky: Text describing an event is not verification that the event occurred. Denials, debunks, and contested claims can match the same categories as genuine reports - use signals to triage reading volume, then verify through your sources.
What you can safely infer
- Which documented analysis groups and indicators the text matched.
- That a high band means the text strongly matches the documented language of the category - useful for triage order.
What you must not infer
- ✕That the described event is verified, current, or correctly attributed.
- ✕Casualty or displacement figures as facts - they are claims made in the text.
- ✕That absent signals mean no crisis - coverage depends on the documented taxonomy and the language of the report.
Boundary: Signals describe text, not events. A displacement or conflict signal means the text uses the documented language of that event type - it is not independent verification that the event occurred, and it carries no validation of figures, dates, or attribution.