---
title: "Dismiss Deal"
method: POST
path: "/api/prospecting/deals/{deal_id}/dismiss"
tags: ["prospecting"]
---

# Dismiss Deal

`POST /api/prospecting/deals/{deal_id}/dismiss`

Dismiss a deal — removes it from review.

The dialog's chip + note (in ``learning_feedback``) is the single source
of "why dismissed": we derive a denormalized ``stage_change_reason`` for
fast reads on the dismissed card and queue the structured payload as a
skill-learning signal so the agent learns from the rejection.

A dismissal also writes a GLOBAL ``prospecting_suppressions`` row, so the
rejection is a durable signal about that PERSON rather than about one goal.
Before this, dismissing only set ``review_state``; the goal-scoped exclusion
then let the same contact resurface under any other goal — including one the
user created by refining their own targeting. Global scope is deliberate
(founder, 2026-08-11): "a rejected candidate should be high signal on that
contact for all scans". The soft, supersedable half of that model is the
org-skill learning, not this row.

Deal state and global suppression are attempted by one transactional RPC.
If suppression cannot be recorded, the dismissal still commits and the RPC
writes a durable retry row. Deals without a linked contact are still
dismissed; the RPC skips suppression because there is no contact to store.

## Query parameters

- `user_id` string, nullable
- `org_id` string, nullable

## Request body

- DismissDealRequest
  - `learning_feedback` ProspectingLearningFeedback
    - `reason` string, nullable
    - `note` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/every/apis/every-api.md) · [All operations](https://skmtc.net/every/apis/every-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/every/every-api/revisions/5b1004c83faf/schema)
