Update an opportunity
curl --request PATCH \
--url https://api.vegaminds.com/v1/opportunities/{opportunity_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stage_id": "29e8adf9-97c9-4374-8256-abfac490e46e",
"status": "won",
"close_date": "2026-12-01"
}
'import requests
url = "https://api.vegaminds.com/v1/opportunities/{opportunity_id}"
payload = {
"stage_id": "29e8adf9-97c9-4374-8256-abfac490e46e",
"status": "won",
"close_date": "2026-12-01"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
stage_id: '29e8adf9-97c9-4374-8256-abfac490e46e',
status: 'won',
close_date: '2026-12-01'
})
};
fetch('https://api.vegaminds.com/v1/opportunities/{opportunity_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": {
"code": "invalid_request",
"message": "The request body is invalid.",
"fields": {
"email_addresses[0].address": "Must be an email address."
}
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "invalid_token",
"message": "The access token is invalid, expired or revoked."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "insufficient_scope",
"message": "This request needs the contacts:write scope, which the user did not grant. Connect the user again, asking for it."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "not_found",
"message": "Contact not found."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Wait the number of seconds in the Retry-After header, then try again."
}
}{
"error": {
"code": "internal_error",
"message": "Something went wrong on our side. Try again later, and contact Vega support with the request id if it keeps happening."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}Opportunities
Update an opportunity
Change its fields, move it with stage_id, change pipeline, or set status to won, lost or open. Moving creates no tasks and needs no from_stage_id: last write wins. A pipeline change takes its first stage unless stage_id is given. A removed stage can remain during unrelated edits but cannot be moved back into. Closing from open defaults close_date to today in the user’s timezone; won to lost or back keeps the date; reopening clears it. No client link, sharing or pipeline definition edits. An unexpected failure can occur after a save.
PATCH
/
opportunities
/
{opportunity_id}
Update an opportunity
curl --request PATCH \
--url https://api.vegaminds.com/v1/opportunities/{opportunity_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"stage_id": "29e8adf9-97c9-4374-8256-abfac490e46e",
"status": "won",
"close_date": "2026-12-01"
}
'import requests
url = "https://api.vegaminds.com/v1/opportunities/{opportunity_id}"
payload = {
"stage_id": "29e8adf9-97c9-4374-8256-abfac490e46e",
"status": "won",
"close_date": "2026-12-01"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
stage_id: '29e8adf9-97c9-4374-8256-abfac490e46e',
status: 'won',
close_date: '2026-12-01'
})
};
fetch('https://api.vegaminds.com/v1/opportunities/{opportunity_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"error": {
"code": "invalid_request",
"message": "The request body is invalid.",
"fields": {
"email_addresses[0].address": "Must be an email address."
}
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "invalid_token",
"message": "The access token is invalid, expired or revoked."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "insufficient_scope",
"message": "This request needs the contacts:write scope, which the user did not grant. Connect the user again, asking for it."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "not_found",
"message": "Contact not found."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}{
"error": {
"code": "rate_limited",
"message": "Too many requests. Wait the number of seconds in the Retry-After header, then try again."
}
}{
"error": {
"code": "internal_error",
"message": "Something went wrong on our side. Try again later, and contact Vega support with the request id if it keeps happening."
},
"request_id": "3f6c1e9a-2b7d-4c58-9e41-8a0d5b7f2c16"
}Authorizations
Scopes
Body
application/json
Omitted fields stay unchanged. Moves and status changes are ordinary updates, last write wins.

