Update one Opportunity
Updates standard Opportunity fields, customFields, and the Originator. ownerId is create-only and is rejected on PATCH because Organization API v1 does not expose the staff reassignment action. originatorId credits a different Team Member, logged as an Originator change with its own opportunity.updated event; the Opportunity's Quotes keep the Originator they have. Quote lifecycle changes can also synchronize the linked Opportunity stage. No-op PATCH returns changed=false and does not emit audit/domain events.
Updates standard Opportunity fields, customFields, and the Originator. ownerId is create-only and is rejected on PATCH because Organization API v1 does not expose the staff reassignment action. originatorId credits a different Team Member, logged as an Originator change with its own opportunity.updated event; the Opportunity's Quotes keep the Originator they have. Quote lifecycle changes can also synchronize the linked Opportunity stage. No-op PATCH returns changed=false and does not emit audit/domain events.
Update one Opportunity. Use an organization API key with opportunities:write. Check the response envelope and meta.requestId before triggering dependent workflow steps.
Required scopes
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| idrequired | path | string | Opportunity identifier returned by the Organization API. |
Request body
| Field | Type | Description |
|---|---|---|
| name | string | Optional unless marked required. |
| propertyId | string | null | Optional unless marked required. |
| value | string | number | null | Optional unless marked required. |
| stage | NEW | PROPOSAL | NEGOTIATION | CLOSED_WON | CLOSED_LOST | Optional unless marked required. |
| expectedCloseDate | string | null | Optional unless marked required. |
| notes | string | null | Optional unless marked required. |
| originatorId | string | Credits a different active or draft same-organization Team Member, and writes its own activity entry and updated event. An Originator cannot be cleared. Naming a deactivated Team Member is refused unless they are already the Originator. |
| customFields | object | Field Values keyed by savedIdentity from GET /api/v1/schema. |
{
"stage": "NEGOTIATION",
"value": "43500"
}Responses
Updated Opportunity envelope
#/components/schemas/OrgApiResourceEnvelope
Validation or ownership error
#/components/schemas/OrgApiError
Missing or invalid organization API key
#/components/schemas/OrgApiError
Organization billing access or an endpoint-specific business quota denied the request
#/components/schemas/OrgApiError
Missing required scope: opportunities:write
#/components/schemas/OrgApiError
Rate limit exceeded
#/components/schemas/OrgApiError
Errors
Static examples
curl -X PATCH "$SOLAROS_BASE_URL/api/v1/opportunities/$SOLAROS_OPPORTUNITY" \
-H "Authorization: Bearer $SOLAROS_API_KEY" \
-H "Content-Type: application/json" \
--data '{"stage":"NEGOTIATION","value":"43500"}'