Deals
Opportunities from first touch to closed — value, stage, probability, and weighted forecast.
A deal (an opportunity) is a revenue opportunity tied to an account. Deals move through your pipeline stages, carry a value and a close date, and roll up into your forecast. You work them visually on the pipeline board; this page covers the deal record itself.
Deal fields
| Field | Notes |
|---|---|
| Name | What the deal is for |
| Value | Deal amount |
| Stage | Current pipeline stage |
| Probability | Likelihood of closing, set per stage |
| Close date | Expected close |
| Owner | The rep on the deal |
| Account | The company the deal belongs to |
| Forecast category | How the deal rolls into the forecast |
Stages and lifecycle
Every stage has a type — open, won, or lost — and a name you choose (for example, Prospect → Qualified → Proposal → Negotiation → Closed). A deal lives in exactly one stage at a time. Moving it to a won or lost stage closes it.
Each stage also carries a probability. Pact multiplies a deal's value by its stage probability to produce a weighted forecast, shown in the column header alongside the raw total. So a $100k deal in a stage set to 50% contributes $50k to the weighted pipeline.
Velocity
Each stage header shows an eight-week sparkline of how many deals entered it, so you can see where flow is speeding up or stalling. On a deal, "days in stage" is derived from when it last moved — useful for spotting deals that have gone quiet.
Probability is a stage property
You set probability on the stage, not on each deal. Tune your stage probabilities once and every deal's weighted value follows automatically.
Working a deal
From the pipeline board, open a deal's action palette (long-press on mobile, right-click or Cmd/Ctrl + . on desktop) to edit it, move stage, reassign the owner, change the close date, update the amount, mark won or lost, add a note, log activity, or enroll its contacts in a sequence. Stage moves are previewed first — see Pipeline for the impact panel.
Deals over the API
Deals are exposed on the public REST API at /v1/api/deals. Authenticate with an OAuth bearer token that holds the read:deals or write:deals scope.
# List deals (cursor-paginated, sparse fields)
curl https://www.pact.place/v1/api/deals?fields=id,name,stage,amount \
-H "Authorization: Bearer $PACT_TOKEN" \
-H "Accept-Version: 2026-05-22"
# Create a deal
curl -X POST https://www.pact.place/v1/api/deals \
-H "Authorization: Bearer $PACT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Acme — platform expansion", "stage": "Prospecting", "amount": 100000}'
Responses are cursor-paginated: each page returns data, has_more, and a next_cursor to pass back as ?cursor=.