signals

Transition a report to a new state. The model validates allowed transitions, except that a verdict the report already holds (dismissing a suppressed report, resolving a resolved one) is a 200 that records the dismissal feedback without touching the status.

The request body is validated by SignalReportStateRequestSerializer — only the fields it declares (state, dismissal_reason, dismissal_note, corrected_repository, snooze_for) are read, and only snooze_for is ever forwarded to transition_to. Any other key is ignored, so internal transition_to kwargs (reset_weight, error, ...) can't be injected.

Body: { "state": "suppressed" | "potential" | "resolved", # Optional dismissal feedback (honored when state == "suppressed", "potential", or "resolved"): "dismissal_reason": "<canonical reason code, see SIGNAL_REPORT_DISMISSAL_REASON_CHOICES>", "dismissal_note": "free-form text", # Optional, only allowed with dismissal_reason == "wrong_repo": "corrected_repository": "owner/repo the report should have targeted", # Optional, only honored for state == "potential": "snooze_for": <number of additional signals before re-promotion>, }

post/api/projects/{project_id}/signals/reports/{id}/state/

Request

  • Base URL: https://us.posthog.com
  • URL: https://us.posthog.com/api/projects/{project_id}/signals/reports/{id}/state/
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Path parameters

idstring uuid required

A UUID string identifying this signal report.

project_idstring required

Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/.

Request body

state'suppressed' | 'potential' | 'resolved' required
  • suppressed - suppressed
  • potential - potential
  • resolved - resolved
dismissal_reason'already_fixed' | 'report_unclear' | 'analysis_wrong' | 'wrong_repo' | 'wontfix_intentional' | 'wontfix_irrelevant' | 'fixed_outside_posthog' | 'pr_merged' | 'other'
  • already_fixed - Already fixed
  • report_unclear - Report is unclear to me
  • analysis_wrong - Agent's analysis is wrong
  • wrong_repo - Agent picked the wrong repository
  • wontfix_intentional - Won't fix - intentional behavior
  • wontfix_irrelevant - Won't fix - issue is real but insignificant
  • fixed_outside_posthog - Fixed outside PostHog
  • pr_merged - PR was merged
  • other - Something else…
dismissal_notestring

Optional free-form note explaining the dismissal. Capped at 4000 characters.

corrected_repositorystring

Optional, only allowed with dismissal_reason='wrong_repo'. The repository this report should have targeted, in 'owner/repo' format (case-insensitive). It is recorded with the dismissal and fed into future repository selection for this project. When the repository is connected to the project, it also becomes the report's corrected repo selection, so restoring the report re-researches against it.

snooze_forinteger

Optional, only honored when state is 'potential'. Number of additional signals the report must accumulate before it is re-promoted into the pipeline — effectively snoozing it until then. Omit to let the report re-enter the pipeline on the next matching signal.

Response

idstring uuid required
titlestring nullable required
summarystring nullable required
summary_leadstring required

The opening of summary as plain text on one line: the text before its first section heading, with chart links removed and other links reduced to their text. At most 450 characters.

status'potential' | 'candidate' | 'in_progress' | 'pending_input' | 'ready' | 'monitoring' | 'resolved' | 'failed' | 'deleted' | 'suppressed' required
  • potential - Potential
  • candidate - Candidate
  • in_progress - In Progress
  • pending_input - Pending Input
  • ready - Ready
  • monitoring - Monitoring
  • resolved - Resolved
  • failed - Failed
  • deleted - Deleted
  • suppressed - Suppressed
total_weightnumber double required
signal_countinteger required
signals_at_runinteger required
collapsed_note_countinteger required

How many scout notes this report received beyond the few its work log keeps as entries. 0 when nothing was dropped. These say the finding still holds, so the count is shown in place of the entries.

created_atstring date-time required
updated_atstring date-time required
artefact_countinteger required
suggested_promptsstring[] required

Follow-up prompts the report's author suggests sending about it (questions to ask, or next-step actions to request), in the order they were written. The inbox offers them above the Ask AI box; clicking one fills the box with it.

prioritystring nullable required

P0–P4 from the latest priority judgment artefact (when present).

actionabilitystring nullable required

Actionability choice from the latest actionability judgment artefact (when present).

already_addressedboolean nullable required

Whether the issue is already being handled — fixed in recent changes, or with a fix in flight (an open PR, a recently active branch, an assigned / in-progress issue or agent task) — from the actionability judgment artefact.

dismissal_reasonstring nullable required

Reason code from the latest dismissal artefact, set when the report was suppressed (when present).

dismissal_notestring nullable required

Free-form note captured alongside the dismissal reason (when present).

suppression_explanationstring nullable required

The judge's explanation when suppression_source is safety_judge or not_actionable. Null otherwise, or when the judge gave none.

repo_slugstring nullable required

organization/repository the report's work targets, from the latest repo-selection artefact (when present). Lets list cards show repository context without a per-card fetch.

is_suggested_reviewerboolean required
source_productsstring[] required

Distinct source products contributing signals to this report (from ClickHouse).

scout_namestring nullable required

skill_name slug of the scout that authored this report, when scout-authored (from ClickHouse); null otherwise.

implementation_pr_urlstring nullable required

Pull request attached to this report's claim, if available.

implementation_pr_mergedboolean required

Whether that implementation PR is merged, per the GitHub webhook. False when there is no PR or it hasn't merged. Report status doesn't imply this: a resolved report may have been resolved directly, without a merged PR.

tracker_issue_urlstring nullable required

Link to the issue self-driving opened in the team's tracker for this report's pull request. Null when the team tracks no issues, or the issue could not be opened.

tracker_issue_referencestring nullable required

How that tracker issue reads in its provider, for example '#12' or 'ENG-123'. Null when there is no tracker issue.

tracker_issue_errorstring nullable required

Why the tracker issue could not be opened, for a team that wants one. Null when the issue exists or the team tracks no issues.

work_state'unclaimed' | 'working' | 'in_review' | 'done' required
channel_idstring uuid nullable required

The space (task channel) this report is assigned to, or null when unassigned. The general view lists every report regardless of this value.

Changes

No recorded changes to this operation across all 1 revision of this API.