Depression screen
Status:
stableCategory:psychosocialAdded:2026-04-20Last reviewed:2026-04-21
Summary
The Patient Health Questionnaire-9 (PHQ-9) is Trinity's
depression-symptom screening instrument. Nine items, each scored
0 (not at all) to 3 (nearly every day), summing to 0–27 and
mapping to five severity bands from minimal to severe.
⚠ Safety-critical note: item 9 and self-harm
PHQ-9 item 9 asks about thoughts of self-harm or being better off dead. Trinity scores this item in the total just like the other eight, and reports the total score and band. Trinity does not surface a separate alert, recommendation, or crisis-escalation flag when a non-zero response is reported on item 9.
If your integration administers this instrument to real users, you
are responsible for your own safety-escalation pathway. A common
pattern: inspect the item-9 value in your client before submitting
to /score, and branch on a non-zero value to display crisis
resources (for example in the United States, 988 Suicide and Crisis
Lifeline) regardless of the final score or band. Do not rely on
Trinity's band to trigger such a pathway — minimal and
mild bands can coexist with a non-zero item-9 response.
Resource identity
| Field | Value |
|---|---|
| Category | psychosocial |
| Resource | depression_screen |
| Instrument ID | depression_screen |
| Rubric version | 1.0.0 |
| Path prefix | /api/psychosocial/depression_screen |
Operations
| Operation | Method | Path | Contract |
|---|---|---|---|
| Questions | GET | /api/psychosocial/depression_screen/questions | patterns-questions.md |
| Score | POST | /api/psychosocial/depression_screen/score | patterns-score.md |
Items
Nine items, each on a 0–3 scale.
| ID | Prompt (paraphrased) |
|---|---|
item_1 | Little interest or pleasure in doing things. |
item_2 | Feeling down, depressed, or hopeless. |
item_3 | Trouble falling or staying asleep, or sleeping too much. |
item_4 | Feeling tired or having little energy. |
item_5 | Poor appetite or overeating. |
item_6 | Feeling bad about yourself, or that you are a failure. |
item_7 | Trouble concentrating on things. |
item_8 | Moving or speaking slowly — or the opposite — noticeably. |
item_9 | Thoughts that you would be better off dead or of hurting yourself. |
Answer choices per item:
| Value | Label |
|---|---|
0 | Not at all |
1 | Several days |
2 | More than half the days |
3 | Nearly every day |
Scoring
| Field | Value |
|---|---|
| Method | simple_sum over all nine items. |
| Score range | 0 – 27. |
Bands
| Band | Range (inclusive) | Clinical meaning |
|---|---|---|
minimal | 0 – 4 | Minimal or no depression symptoms. |
mild | 5 – 9 | Mild depression symptoms. |
moderate | 10 – 14 | Moderate depression symptoms. |
moderately_severe | 15 – 19 | Moderately severe depression symptoms. |
severe | 20 – 27 | Severe depression symptoms. |
Cutoffs match the widely-published PHQ-9 thresholds.
Required items
Every item (item_1 through item_9) is required, including
item_9. A strict /score call that omits any item returns 400 ValidationError naming the missing ids.
Worked example
Every item answered with 2. See quickstart.md for
per-language scaffolding and patterns-score.md
for the shared /score contract.
Send:
POST /api/psychosocial/depression_screen/score HTTP/1.1
Host: engine.tripod-health.com
apikey: $ENGINE_API_KEY
Content-Type: application/json
X-Request-ID: docs-depression_screen-score-basic
{
"responses": {
"item_1": 2, "item_2": 2, "item_3": 2, "item_4": 2, "item_5": 2,
"item_6": 2, "item_7": 2, "item_8": 2, "item_9": 2
}
}
Receive (200 OK):
{
"instrument": "depression_screen",
"category": "psychosocial",
"finding": {
"algorithm_id": "depression_screen",
"algorithm_version": "1.0.0",
"score": 18,
"band": "moderately_severe",
"raw": {
"rubric_version": "1.0.0",
"responded_items": 9
},
"context": null,
"imputed": false,
"sd": null,
"prior_source": null
},
"confidence": {
"overall": 1,
"tier": "high",
"breakdown": {
"input_completeness": 1,
"imputation_variance": null,
"model_certainty": null
}
},
"recommendations": null,
"depth": "basic",
"catalog_version": "0.13.0",
"request_id": "docs-depression_screen-score-basic",
"timestamp": "2026-04-21T23:14:57.589123+00:00"
}
Computation: sum = 2 × 9 = 18 → band moderately_severe (15–19).
A more mixed response like {2,2,1,2,1,2,1,1,0} sums to 12 → band
moderate (10–14).
Note on item 9. Item 9 contributes to the total score like any
other item, so finding.score and finding.band alone do not tell you
whether item 9 was flagged by the respondent. Two different request
paths expose this detail:
- At
?depth=full, Trinity's rule pack emits an urgent-priority recommendation inrecommendations.items[]wheneveritem_9 >= 1, independent of the total band. Callers usingdepth=fulltherefore receive the signal automatically. See patterns-score.md. - At
?depth=basicor?depth=contextual, the recommendations block isnulland this signal is not surfaced. Callers on the lighter depths must inspectresponses["item_9"]client-side before relying onfinding.bandalone.
Pick the depth that matches your workflow's safety posture.
Calling in your language
curl
curl -sS -X POST "https://engine.tripod-health.com/api/psychosocial/depression_screen/score" \
-H "apikey: $ENGINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"responses":{"item_1":2,"item_2":2,"item_3":2,"item_4":2,"item_5":2,"item_6":2,"item_7":2,"item_8":2,"item_9":2}}'
Python (requests)
# Uses the call() helper from quickstart.md.
responses = {f"item_{i}": 2 for i in range(1, 10)}
result = call("POST", "/api/psychosocial/depression_screen/score",
{"responses": responses})
print(result["finding"]["score"], result["finding"]["band"])
Node.js (native fetch)
// Uses the call() helper from quickstart.md.
const responses = Object.fromEntries(
Array.from({ length: 9 }, (_, i) => [`item_${i + 1}`, 2]),
);
const result = await call("POST",
"/api/psychosocial/depression_screen/score", { responses });
console.log(result.finding.score, result.finding.band);
TypeScript
// Uses the typed call<T>() helper from quickstart.md.
const responses = Object.fromEntries(
Array.from({ length: 9 }, (_, i) => [`item_${i + 1}`, 2]),
);
const result = await call<ScoreResponse>(
"POST",
"/api/psychosocial/depression_screen/score",
{ responses },
);
Go
// Uses the call() helper from quickstart.md.
responses := make(map[string]int, 9)
for i := 1; i <= 9; i++ {
responses[fmt.Sprintf("item_%d", i)] = 2
}
result, err := call("POST", "/api/psychosocial/depression_screen/score",
map[string]any{"responses": responses}, 3)
if err != nil {
panic(err)
}
finding := result["finding"].(map[string]any)
fmt.Printf("PHQ-9: %v (%v)\n", finding["score"], finding["band"])
Java
// Uses the call() helper from quickstart.md.
StringBuilder body = new StringBuilder("{\"responses\":{");
for (int i = 1; i <= 9; i++) {
if (i > 1) body.append(",");
body.append("\"item_").append(i).append("\":2");
}
body.append("}}");
String result = call("POST",
"/api/psychosocial/depression_screen/score", body.toString(), 3);
System.out.println(result);
C# (.NET HttpClient)
// Uses the Call() helper from quickstart.md.
var responses = Enumerable.Range(1, 9)
.ToDictionary(i => $"item_{i}", _ => 2);
var result = await Call(HttpMethod.Post,
"/api/psychosocial/depression_screen/score",
new { responses });
var finding = result.GetProperty("finding");
Console.WriteLine($"PHQ-9: {finding.GetProperty("score").GetDouble()} ({finding.GetProperty("band").GetString()})");
PowerShell
# Uses the Invoke-Engine helper from quickstart.md.
$responses = @{}
1..9 | ForEach-Object { $responses["item_$_"] = 2 }
$result = Invoke-Engine -Method Post -Path "/api/psychosocial/depression_screen/score" -Body @{ responses = $responses }
"PHQ-9: $($result.finding.score) ($($result.finding.band))"
Clinical interpretation
- What it screens. Depression symptom frequency over the past two weeks. Used to identify likely depression for further clinical assessment.
- Not a diagnosis. A PHQ-9 score is a screen, not a DSM-5
depression diagnosis. A
moderateor higher band warrants a clinical conversation; Trinity does not prescribe it. - Thresholds. Commonly,
≥ 10(bandmoderateor worse) is treated as the threshold for considering a depression diagnosis in a clinical workflow.
Intended use
- Domain-specific follow-up after an elevated psychosocial
signal (for example a
highband onorebro). - Baseline and recurrence tracking. Repeat administration produces a time-series of depression symptom burden.
- Feeding the CDRI composite as the canonical depression signal in the psychosocial domain.
Mistaken use
- Do not use
bandalone to dismiss an item-9 response. Aminimaltotal with a non-zero item-9 still warrants attention in a clinical workflow. - Do not administer this to populations outside its validation. PHQ-9 is validated in adult general populations; interpretation shifts for adolescents, perinatal, or other specialized contexts.
- Do not confuse with GAD-7.
anxiety_screenis the anxiety companion; the two are often co-administered and report distinct constructs. - Do not reuse a single PHQ-9 response as a long-running severity signal. Symptoms fluctuate; the PHQ-9 asks about the last two weeks. Repeat before inferring change.
Debugging
- Capture
request_id. Present in every response body. 400 ValidationErrorwithmissing_items. Send all nine items; every one is required. Confirmitem_9specifically — a UI may have deliberately omitted it for safety, but Trinity does not accept partial submissions.- Score appears correct but band wrong. Compare your score
against the band table above; the bands are inclusive-on-both-
ends, so
5ismild, notminimal.
Related
- patterns-questions.md, patterns-score.md — shared contracts.
- instruments-anxiety_screen.md — GAD-7; the common co-administered anxiety screen.
- instruments-orebro.md — an elevated Örebro band frequently precedes targeted administration of PHQ-9.
- composite-cdri-compute.md — where PHQ-9 feeds the psychosocial domain signal.
Change history
| Date | Change |
|---|---|
| 2026-04-20 | Initial publication. |