---
title: "Error fingerprint detail with all samples"
method: GET
path: "/projects/v1/{project_id}/errors/{fingerprint_id}"
tags: ["Projects"]
---

# Error fingerprint detail with all samples

`GET /projects/v1/{project_id}/errors/{fingerprint_id}`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/projects/v1/{project_id}/errors/{fingerprint_id}`
- Auth: one of:
  - API key in header `apikey`
  - HTTP bearer

The full grouped-identity row: display fields, both release attributions, quality tier, the pinned first sample, and the recent sample ring — each sample with a runnable logs drill-down command. Never returns request/response bodies, secret values, or raw un-normalized messages. Auth: the project's own apikey OR a same-project GitHub-OIDC CI session bearer (read-only, own-project-only — the scoped v1.36 error-read widening).

## Path parameters

- `project_id` string, required: Run402 project ID. Public IDs are not UUIDs.
- `fingerprint_id` string, required

## Response `200`

The fingerprint row

- ErrorFingerprint: One grouped error identity (project + function + deploy-stable fingerprint). Storms collapse onto one row; `count` and the newest-wins sample ring track recurrence.
  - `fingerprint_id` string: Stable identity id (`fp_…`). Deploy-stable: computed from normalized message + stable frame NAMES, never line/column numbers.
  - `function` string
  - `kind` 'uncaught' | 'boot_crash' | 'invoke_failed' | 'handled_5xx'
  - `fingerprint_quality` 'frame_names' | 'message_only' | 'coarse': Honest-degradation tier. `coarse` means the function predates the error side-channel — redeploying it upgrades future fidelity.
  - `error_name` string: Builtin JS error name, `CustomError`, a Lambda error type (e.g. `Runtime.UserCodeSyntaxError`), or `HTTP_<status>` for coarse rows.
  - `message_template` string: Normalized first-line message (trace ids/UUIDs/tokens replaced by placeholders; short quoted identifiers like PG relation names kept).
  - `stable_frames` string[]
  - `count` integer
  - `first_seen` string, date-time
  - `last_seen` string, date-time
  - `first_seen_release_id` unknown
  - `last_seen_release_id` unknown
  - `samples` object: The pinned first occurrence (kept for the row's lifetime — diagnostic gold after logs expire) plus a newest-wins ring of up to 10 recent occurrences.
    - `first` object
    - `recent` object[]
  - `next_actions` object[]: Runnable logs drill-down commands for sample request/attempt ids (function-diagnostics surface).

## Other responses

- `401`: Missing or invalid authentication. Run402-originated JSON bodies use the canonical ErrorEnvelope.
- `403`: Key does not belong to the addressed project (FORBIDDEN)
- `404`: Unknown fingerprint id under an authorized project

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
