← All action domains

Deals

12 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Assign a deal owner

deals.assignwrite

Set the org member who owns a deal, or pass owner_id=null to leave it unassigned. The user must already be a member of this organization.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to assign.
owner_idstring (uuid) (or null)requiredUser id of the new owner, or null to unassign.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.assign \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "owner_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_assign at https://app.chirply.io/api/mcp, same bearer token, same input.

Create a deal

deals.createwrite

Create a deal on a pipeline board. Only a title is required: without pipeline_id it lands on the org's default pipeline, and without stage_id it goes in that pipeline's first stage. The status is derived from the stage — creating straight into a won/lost stage closes the deal.

Parameters

FieldTypeRequiredDescription
titlestringrequiredWhat the opportunity is called.
pipeline_idstring (uuid)optionalPipeline to create it on. Defaults to the org's default pipeline.
stage_idstring (uuid)optionalStage to drop it in. Defaults to the pipeline's first stage.
value_centsintegeroptionalDeal value in integer cents — $1,200.50 is 120050. Default: 0
currencystringoptionalISO currency code, e.g. 'usd'.
contact_idstring (uuid)optionalContact this deal belongs to.
company_idstring (uuid)optionalCompany this deal belongs to.
owner_idstring (uuid)optionalOrg member who owns the deal.
expected_closestring (date)optionalExpected close date, YYYY-MM-DD.
custommap of string → objectoptionalCustom field values, keyed by the org's deal custom-field keys. Team member fields (type "user") take a team member's email address or user id and store the user id; only current members are accepted.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.create \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool deals_create at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete a deal

deals.deletewriteconfirm

Permanently delete a deal. DESTRUCTIVE: its activity timeline (notes, stage changes) is deleted with it, and any task pointing at it loses the link. The contact and company survive. Cannot be undone.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.delete \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_delete at https://app.chirply.io/api/mcp, same bearer token, same input.

Open a deal

deals.getread

Fetch one deal by id, with all of its fields including custom fields.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal's id.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_get at https://app.chirply.io/api/mcp, same bearer token, same input.

List deals

deals.listread

List and search deals, newest first. Filter by pipeline, stage, status, owner, contact, or company, by who holds a Team member field ("deals where I'm the Designer": member_field=designer, member=me), and search deal titles with `query`. Values come back as integer cents.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
pipeline_idstring (uuid)optionalOnly deals on this pipeline.
stage_idstring (uuid)optionalOnly deals in this stage.
status"open" | "won" | "lost" | "abandoned"optionalOnly deals with this status.
owner_idstring (uuid)optionalOnly deals owned by this user.
contact_idstring (uuid)optionalOnly deals linked to this contact.
company_idstring (uuid)optionalOnly deals linked to this company.
member_fieldstringoptionalKey of a Team member custom field on deals (type "user" in contacts.list_fields, e.g. "designer"). Requires `member`.
memberstringoptionalWho holds `member_field`: "me" (the signed-in person; not available to API keys), a team member's user id, or their email address.
querystringoptionalText to match in the deal title.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 25,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool deals_list at https://app.chirply.io/api/mcp, same bearer token, same input.

Mark a deal abandoned

deals.mark_abandonedwrite

Close a deal as abandoned (walked away, not a loss) and stamp its close time. No stage carries an 'abandoned' flag, so the deal keeps its current column but stops counting as open.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to abandon.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.mark_abandoned \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_mark_abandoned at https://app.chirply.io/api/mcp, same bearer token, same input.

Mark a deal lost

deals.mark_lostwrite

Close a deal as lost and stamp its close time. If the pipeline has a stage flagged as lost, the deal is moved into that column and a stage-change entry is logged.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to mark lost.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.mark_lost \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_mark_lost at https://app.chirply.io/api/mcp, same bearer token, same input.

Mark a deal won

deals.mark_wonwrite

Close a deal as won and stamp its close time. If the pipeline has a stage flagged as won, the deal is moved into that column and a stage-change entry is logged, exactly as dragging it there would.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to mark won.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.mark_won \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_mark_won at https://app.chirply.io/api/mcp, same bearer token, same input.

Move a deal to another stage

deals.movewrite

Drop a deal card into a stage of its own pipeline — the drag gesture on the board. Without `position` it lands at the bottom of the target column; with one it lands at that slot and the rest of the column shifts down. Moving to a new stage re-derives the deal's status from that stage's outcome (won/lost stages close the deal and stamp closed_at) and logs a stage-change entry on the deal's timeline. Passing the stage the deal is already in just reorders it inside that column — no status change, no timeline entry.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to move.
stage_idstring (uuid)requiredThe stage to move it into. Must be in the deal's pipeline. The deal's current stage means reorder within that column.
positionintegeroptionalWhere in the target column the card lands, counting from 0 at the top and ignoring the card itself. Omit to append to the bottom; a value past the end is clamped there.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.move \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "stage_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_move at https://app.chirply.io/api/mcp, same bearer token, same input.

Reopen a deal

deals.reopenwrite

Put a closed deal (won, lost, or abandoned) back to open and clear its close time. Pass stage_id to also move it back into a working column — otherwise it stays where it is, which may be a won/lost column.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to reopen.
stage_idstring (uuid)optionalOptional stage of the deal's pipeline to move it back into.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.reopen \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_reopen at https://app.chirply.io/api/mcp, same bearer token, same input.

Edit a deal

deals.updatewrite

Update any field on a deal — title, value, currency, expected close date, links, custom fields, stage, or status. Omitted fields are left alone. Moving it with stage_id re-derives the status from that stage; passing status explicitly wins and stamps or clears closed_at accordingly. Changing the stage also writes one stage-change entry on the deal's timeline and the account Activity Log, recording the previous and new stage and naming the caller honestly — an API key is recorded as the API, not as a person.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe deal to edit.
titlestringoptionalWhat the opportunity is called.
stage_idstring (uuid) (or null)optionalMove it to this stage of its pipeline.
status"open" | "won" | "lost" | "abandoned"optionalForce a status instead of deriving it from the stage.
value_centsintegeroptionalDeal value in integer cents — $1,200.50 is 120050.
currencystringoptionalISO currency code, e.g. 'usd'.
contact_idstring (uuid) (or null)optionalContact this deal belongs to, or null to unlink it.
company_idstring (uuid) (or null)optionalCompany this deal belongs to, or null to unlink it.
owner_idstring (uuid) (or null)optionalOrg member who owns the deal, or null to leave it unowned.
expected_closestring (date) (or null)optionalExpected close date, YYYY-MM-DD, or null to clear it.
custommap of string → objectoptionalReplaces the deal's custom field blob wholesale. Team member fields (type "user") take a team member's email address or user id and store the user id; only current members are accepted.

Example

curl -X POST https://app.chirply.io/api/v1/actions/deals.update \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool deals_update at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=deals — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.