Skip to content
vocapable.Docs

Update an opportunity

PATCH
/v1/workspace/opportunities/{opportunity_id}
curl --request PATCH \
--url https://api.vocapable.com/v1/workspace/opportunities/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "expected_revision": 1, "title": "example", "stage": "new", "amount_minor": 1, "currency": "example", "need": "example", "next_step": "example", "next_step_due_at": "2026-04-15T12:00:00Z", "primary_contact_id": "example", "owner_user_id": "example", "lost_reason": "example", "deferred_until": "2026-04-15T12:00:00Z", "accepted_scope": "example", "reason": "example", "scope_accepted": true, "handoff": { "recipient_user_id": "example", "fallback_user_id": "example", "target_start": "2026-04-15T12:00:00Z", "first_milestone": "example", "respond_by": "2026-04-15T12:00:00Z", "prerequisites": [ "example" ] } }'

An explicit change under the lifecycle rules of the Pipeline slice (workspace_pipeline.lifecycle): won needs accepted scope and opens one delivery handoff, lost needs a reason, deferred a return date, an accepted sale is locked.

opportunity_id
required
Opportunity Id
string
Media typeapplication/json
WorkspaceOpportunityUpdate
object
expected_revision
required
Expected Revision
integer
>= 1
title
Any of:
string
>= 1 characters <= 200 characters
stage
Any of:
string
Allowed values: new qualified proposal won lost deferred
amount_minor
Any of:
integer
currency
Any of:
string
/^[A-Z]{3}$/
need
Any of:
string
<= 4000 characters
next_step
Any of:
string
<= 500 characters
next_step_due_at
Any of:
string format: date-time
primary_contact_id
Any of:
string
owner_user_id
Any of:
string
lost_reason
Any of:
string
<= 500 characters
deferred_until
Any of:
string format: date-time
accepted_scope
Any of:
string
<= 4000 characters
reason
Any of:
string
<= 500 characters
scope_accepted
Any of:
boolean
handoff
Any of:
WorkspaceHandoffPlan

Who delivers a sale and how it starts (J2). Sent with the change that records it.

object
recipient_user_id
required
Recipient User Id
string
fallback_user_id
Any of:
string
target_start
Any of:
string format: date-time
first_milestone
required
First Milestone
string
>= 1 characters <= 500 characters
respond_by
Any of:
string format: date-time
prerequisites
Prerequisites
Array<string>
<= 10 items

Successful Response

Media typeapplication/json
WorkspaceOpportunity
object
id
required
Id
string
organization_id
required
Organization Id
string
organization_name
required
Organization Name
string
primary_contact_id
required
Any of:
string
owner
required
Any of:
WorkspacePersonRef

A teammate named on a record: the id the server holds and the name to show.

object
user_id
required
User Id
string
name
required
Name
string
title
required
Title
string
stage
required
Stage
string
Allowed values: new qualified proposal won lost deferred
amount_minor
required
Amount Minor
integer
currency
required
Currency
string
need
required
Any of:
string
next_step
required
Any of:
string
next_step_due_at
required
Any of:
string format: date-time
lost_reason
required
Any of:
string
deferred_until
required
Any of:
string format: date-time
closed_at
required
Any of:
string format: date-time
source
required
Any of:
string
accepted_scope
required
Any of:
string
revision
required
Revision
integer
created_at
required
Created At
string format: date-time
updated_at
required
Updated At
string format: date-time
reopened_from_id
Any of:
string
amends_id
Any of:
string
scope_accepted_at
Any of:
string format: date-time
scope_accepted_by
Any of:
WorkspacePersonRef

A teammate named on a record: the id the server holds and the name to show.

object
user_id
required
User Id
string
name
required
Name
string
scope_acceptance_id
Any of:
string
Example
{
"stage": "new"
}

Validation Error

Media typeapplication/json
HTTPValidationError
object
detail
Detail
Array<object>
ValidationError
object
loc
required
Location
Array
msg
required
Message
string
type
required
Error Type
string
input
Input
ctx
Context
object
Examplegenerated
{
"detail": [
{
"loc": [
"example"
],
"msg": "example",
"type": "example",
"input": "example",
"ctx": {}
}
]
}