Update opportunity
Move an opportunity to another stage or set its status, loss reason and close date.
PATCH https://cotlet.dev/api/v1/copper-crm/opportunities/{opportunity_id}
Changes only the fields you pass. Set status to Won, Lost, Abandoned or Open. For Lost, pass loss_reason from list_pipelines, as the Loss Reasons box in Copper asks for one, and set close_date to today to keep reports accurate. Other users see the change, and Workflow Automation rules may fire on it. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| opportunity_id string required | string | Id from list_opportunities. |
| stage string | string | Stage name within the opportunity's pipeline. |
| status enum | enum | Open, Won, Lost or Abandoned. |
| loss_reason string | string | Loss reason name from list_pipelines. Used with status Lost. |
| close_date date | date | Close date, YYYY-MM-DD. |
| monetary_value number | number | Value of the opportunity. |
Request
curl -X PATCH https://cotlet.dev/api/v1/copper-crm/opportunities/31842907 \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"Lost","loss_reason":"Price","close_date":"2026-10-20"}' result = client.call("copper-crm", "update_opportunity", {"opportunity_id":"31842907","status":"Lost","loss_reason":"Price","close_date":"2026-10-20"}) const result = await cotlet.call('copper-crm', 'update_opportunity', {"opportunity_id":"31842907","status":"Lost","loss_reason":"Price","close_date":"2026-10-20"}); cotlet call copper-crm update_opportunity --data '{"opportunity_id":"31842907","status":"Lost","loss_reason":"Price","close_date":"2026-10-20"}' Example response
{
"opportunity_id": "31842907",
"name": "Northwind renewal",
"pipeline": "Sales",
"stage": "Negotiation",
"status": "Lost",
"loss_reason": "Price",
"close_date": "2026-10-20",
"monetary_value": 18000
}