Skip to documentation

Signal evidence

Read exact evidence and record what delivered work addressed. Request signal-evidence:read and signal-evidence:write separately.

3 endpoints

GET

List evidence records

GET /external/v1/signal-evidence

Filter evidence by type, category and source Signal account. Filters combine with AND before pagination and counting. Each record includes evidenceType and compact accounts linked to its source Signal. Active visibility excludes completed and not-relevant records; visibility=all includes both. Use the Ideas evidence endpoint to read an Idea’s direct evidence links. List responses are arrays with X-Total-Count, X-Limit, X-Offset and X-Has-More headers. Continue until X-Has-More is false; concurrent edits can shift offset pages.

Requirements

API scopes required:
signal-evidence:read

Request

Parameters

NameTypeDescription
limit integerPage size, 1–100. Default 20.
offset integerMatching rows to skip. Default 0.
signalId uuidFilter by source Signal.
evidenceType stringExact, case-sensitive stored type, such as need, friction or product_feedback; up to 48 characters.
category stringExact, case-sensitive category label, such as Product bug or Product request; up to 120 characters.
accountId uuidAccount linked to the source Signal. Resolve the UUID with GET /external/v1/accounts. Evidence without a source account does not match; unknown or other-workspace accounts return an empty list.
visibility enumactive (default) or all.
q stringSearch title, description, excerpt and category; up to 200 characters.

Responses

200
Success

The requested data is returned.

400
Invalid request

Invalid ID, unsupported field, empty patch, or invalid value.

403
Missing scope

The key does not grant the required resource scope.

404
Not found

The addressed record or assignment is outside this workspace or team.

Example Request

GET
/external/v1/signal-evidence
http
GET /external/v1/signal-evidence?evidenceType=product_feedback&category=Product%20bug&accountId=44444444-4444-4444-8444-444444444444&limit=20

Example Response

200 OK
json
[
  {
    "id": "33333333-3333-4333-8333-333333333333",
    "title": "Export duplicates rows",
    "description": "Retrying the export adds a second copy.",
    "extracts": null,
    "category": "Product bug",
    "evidenceType": "product_feedback",
    "signalId": "55555555-5555-4555-8555-555555555555",
    "accounts": [
      {
        "id": "44444444-4444-4444-8444-444444444444",
        "name": "Acme"
      }
    ],
    "resolvedAt": null,
    "resolution": null,
    "resolvedByUserId": null,
    "dismissedAt": null
  }
]
GET

Get an evidence record

GET /external/v1/signal-evidence/:id

Read one exact evidence record, including completed or not-relevant evidence. signalId identifies its source Signal.

Requirements

API scopes required:
signal-evidence:read

Request

Parameters

NameTypeDescription
id *uuidRecord UUID in the path.

Responses

200
Success

The requested data is returned.

400
Invalid request

Invalid ID, unsupported field, empty patch, or invalid value.

403
Missing scope

The key does not grant the required resource scope.

404
Not found

The addressed record or assignment is outside this workspace or team.

Example Response

200 OK
json
{
  "id": "33333333-3333-4333-8333-333333333333",
  "title": "Export duplicates rows",
  "description": "Retrying the export adds a second copy.",
  "extracts": null,
  "category": "Product bug",
  "signalId": null,
  "resolvedAt": null,
  "resolution": null,
  "resolvedByUserId": null,
  "dismissedAt": null
}
PATCH

Resolve or reopen evidence

PATCH /external/v1/signal-evidence/:id/resolution

Mark one selected evidence record acted on, or reopen it. Bugs become fixed, requests implemented, and other categories addressed. Completion is independent of relevance; not-relevant evidence cannot be completed. Repeated writes preserve the original completion timestamp. The decision survives source reprocessing. API-key writes have resolvedByUserId:null and are attributed to the key in the API audit; they never impersonate its creator. New reports and other linked records are unaffected.

Requirements

API scopes required:
signal-evidence:write

Request

Parameters

NameTypeDescription
id *uuidRecord UUID in the path.

Request body (application/json)

resolvedboolean
Required

true completes the record; false reopens it. Strings are rejected.

Responses

200
Success

The saved record is returned.

400
Invalid request

Invalid ID, unsupported field, empty patch, or invalid value.

403
Missing scope

The key does not grant the required resource scope.

404
Not found

The addressed record or assignment is outside this workspace or team.

409
Conflict

The observed status changed, the sprint is completed, or a source-managed field must be edited in Linear.

Example Request

PATCH
/external/v1/signal-evidence/:id/resolution
json
{
  "resolved": true
}

Example Response

200 OK
json
{
  "id": "33333333-3333-4333-8333-333333333333",
  "resolvedAt": "2026-09-10T10:00:00Z",
  "resolution": "fixed",
  "resolvedByUserId": null,
  "dismissedAt": null
}