---
title: "Get Deal Detail"
method: GET
path: "/api/prospecting/deals/{deal_id}"
tags: ["prospecting"]
---

# Get Deal Detail

`GET /api/prospecting/deals/{deal_id}`

Detail for ONE deal. Two callers, two projections:

  1. DEFAULT (heavy fields only) — DealDetailDialog on card open. The dialog
     already has the light fields from the board list row and
     `useDealDetailMerge` merges the detail fields on top (the live list
     row wins on every overlap), so we don't re-send the light fields — the
     common path stays lean. No annotate chain re-run.
  2. `?full=true` (whole deal) — the deep-link fallback (PipelineKanbanView)
     for an off-board deal: a `?deal=<id>` link to a dismissed / non-visible
     deal NOT in the board's fetched set. There is no list row to merge onto,
     so the dialog renders this response directly and needs the full deal.

Org/RLS-scoped exactly like the sibling routes; no review_state filter (a
dismissed deal is returned). Registered AFTER the static /deals and
/deals/pending GETs so `{deal_id}` never captures them.

## Path parameters

- `deal_id` string, required

## Query parameters

- `user_id` string, nullable
- `org_id` 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/versions/f8600f7a4ae3/schema)
