Deals
Deals from first touch to closed — value, stage, probability, and weighted forecast.
A deal 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.
Every deal's id is its stable UUID — the same identifier the rest of Pact uses for that deal, so it can be handed to any other Pact surface. A deal always belongs to an account: on create, pass either account_id (the account's UUID from /v1/api/accounts) or company_name; responses carry both account_id and company_name. Optional fields on create: stage (a stage name in your default pipeline), amount, currency, close_date.
# List deals (cursor-paginated, sparse fields)
curl https://www.pact.place/v1/api/deals?fields=id,name,stage,amount \
-H "Authorization: Bearer $PACT_TOKEN"
# 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", "company_name": "Acme Corp", "stage": "Discovery", "amount": 100000}'
Responses are cursor-paginated: each page returns data, has_more, and a next_cursor to pass back as ?cursor=.