Skip to main content
PATCH
Update a deal

Authorizations

Authorization
string
header
required

A workspace API token (sk_live_...) or an OAuth access token (oat_live_...). Create workspace tokens in Settings > API. Send either as Authorization: Bearer <token>.

Headers

Idempotency-Key
string

A unique value (a UUID works) that makes retrying this request safe. A repeat with the same key and body within 24 hours returns the original response instead of acting twice; the same key with a different body is a 409 idempotency_key_reused.

Maximum string length: 255

Path Parameters

deal_id
string
required

Unique identifier for a deal.

Pattern: ^deal_[0-9a-f]{32}$
Example:

"deal_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

Query Parameters

expand
string | null

Comma-separated relationships to inline in the response, e.g. organization. Unexpanded relations are still identified by their *_id field.

Example:

"organization"

Body

application/json

Body for PATCH /v1/deals/{deal_id}.

Only the fields you send change. Send null to clear one; omit it to leave it alone. To move a deal between stages prefer POST /v1/deals/{id}/stage, which resolves a stage within the deal's own pipeline and cannot land it in another one.

contact_id
string | null

Unique identifier for a contact.

Pattern: ^con_[0-9a-f]{32}$
Example:

"con_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

custom_fields
Custom Fields · object | null
expected_close_date
string<date-time> | null
external_id
string | null

Your own id for this record, e.g. its id in your system. Unique per workspace and resource; send null to clear it.

Required string length: 1 - 255
Example:

"crm-48213"

lost_justification
string | null

Free-text detail on the loss. Optional; only accepted when the deal is lost, already or by status: lost in this same request.

lost_reason_id
string | null

Unique identifier for a lost reason.

Pattern: ^lrsn_[0-9a-f]{32}$
Example:

"lrsn_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

organization_id
string | null

Unique identifier for an organization.

Pattern: ^org_[0-9a-f]{32}$
Example:

"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

owner_id
string | null

Unique identifier for an user.

Pattern: ^usr_[0-9a-f]{32}$
Example:

"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

probability
integer | null
Required range: 0 <= x <= 100
score
enum<string> | null

How warm a deal is.

Available options:
cold,
warm,
hot
stage_id
string | null

Unique identifier for a stage.

Pattern: ^stg_[0-9a-f]{32}$
Example:

"stg_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

status
enum<string> | null

Whether a deal is still open, won or lost.

Available options:
open,
won,
lost
tag_ids
string[] | null

The complete set of tags this deal should carry, from GET /v1/tags?resource=deal. Replaces the current set: send [] to remove every tag, omit the field to leave tags unchanged.

Unique identifier for a tag.

Pattern: ^tag_[0-9a-f]{32}$
title
string | null
value
visibility
enum<string> | null

Who in the workspace can see a record: only its owner, the owner's team, the team and its sub-teams, or everyone.

Available options:
private,
team,
team_and_subteams,
company

Response

Successful Response

A negotiation in a pipeline, with a contact and/or an organization.

created_at
string<date-time>
required
id
string
required

Unique identifier for a deal.

Pattern: ^deal_[0-9a-f]{32}$
Example:

"deal_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

pipeline_id
string
required

Unique identifier for a pipeline.

Pattern: ^pipe_[0-9a-f]{32}$
Example:

"pipe_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

stage_id
string
required

Unique identifier for a stage.

Pattern: ^stg_[0-9a-f]{32}$
Example:

"stg_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

title
string
required
updated_at
string<date-time>
required
visibility
enum<string>
required

Who in the workspace can see this record. A workspace token sees every record regardless; an OAuth token sees what the person who authorized it can see.

Available options:
private,
team,
team_and_subteams,
company
contact_id
string | null

Unique identifier for a contact.

Pattern: ^con_[0-9a-f]{32}$
Example:

"con_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

custom_fields
Custom Fields · object

Every custom field defined on deals in this workspace, keyed by field key and typed from its definition. Unset fields are null.

expected_close_date
string<date-time> | null
external_id
string | null

Your own id for this record, when you set one.

lost_justification
string | null

Free-text detail on the loss, when status is lost.

lost_reason
string | null

Name of the reason, when status is lost.

lost_reason_id
string | null

Unique identifier for a lost reason.

Pattern: ^lrsn_[0-9a-f]{32}$
Example:

"lrsn_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

object
string
default:deal
Allowed value: "deal"
organization
Organization · object | null

Populated only when organization is in expand.

organization_id
string | null

Unique identifier for an organization.

Pattern: ^org_[0-9a-f]{32}$
Example:

"org_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

owner
Owner · object | null

Whoever is responsible for this deal — a teammate or an AI agent. Always populated when the deal has an owner.

owner_id
string | null
deprecated

Unique identifier for an user.

Pattern: ^usr_[0-9a-f]{32}$
Example:

"usr_9f2ac41d8b7e4a51b0d3e6f7a1c2d3e4"

probability
integer | null

Close probability override, 0-100. null means the deal inherits its current stage's default — read the stage to see it.

score
enum<string> | null

How warm a deal is.

Available options:
cold,
warm,
hot
stage_changed_at
string<date-time> | null

When the deal last moved between stages.

status
enum<string>
default:open

Whether a deal is still open, won or lost.

Available options:
open,
won,
lost
tags
Tag · object[]
value
string | null

Monetary value. The workspace sets the currency.