Endpoints
Method | Path | Description |
|---|---|---|
POST |
| Create a new opportunity |
GET |
| Get an opportunity by ID |
GET |
| List opportunities |
PATCH |
| Update an opportunity |
DELETE |
| Delete an opportunity |
POST |
| Search opportunities by name |
Create an Opportunity
Required Fields
Field | Type | Description |
|---|---|---|
| string | Opportunity name |
Optional Fields
Field | Type | Description |
|---|---|---|
| number | Deal amount in micros (multiply by 1,000,000) |
| string | Three-letter currency code (e.g., |
| string | Pipeline stage in UPPER_SNAKE_CASE |
| string | Expected close date (ISO 8601) |
| UUID | Associated company |
| UUID | Primary contact person |
| UUID | Opportunity owner (workspace member ID) |
Stage Values
Stage is a SELECT field — values must be UPPER_SNAKE_CASE:
Stage | Meaning |
|---|---|
| Initial discovery stage |
| Proposal sent |
| In negotiation |
| Deal won |
| Deal lost |
Note: Your workspace may have custom stage values. Use the Metadata API to discover valid options for your workspace.
Request Example
Amount in micros:
$50,000=50000000000(multiply by 1,000,000). See the Currency field type for a conversion table.
Get an Opportunity
Parameter | Type | Default | Description |
|---|---|---|---|
| UUID (path) | — | Opportunity ID |
| number | 0 |
|
List Opportunities
Parameter | Type | Default | Description |
|---|---|---|---|
| number | 60 | Records per page |
| UUID | — | Pagination cursor (last record's ID) |
| string | — | Sort field and direction |
| string | — | Filter conditions |
| number | 0 | Related objects depth |
Update an Opportunity
Send only the fields you want to change.
Delete an Opportunity
Search Opportunities
Opportunities are searched by name only using GraphQL. There is no email or domain search for opportunities.
By Name — GraphQL + REST (Two Steps)
Step 1: GraphQL search → get IDs
GraphQL caveats:
searchInputis a plainString!variable — do not pass it as an object
limitmust be hardcoded in the query string (not a$limitvariable)Returns IDs only — always follow up with REST
Step 2: Fetch full records
Filter Examples
Common Gotchas
Amount is in micros.
$50,000=50000000000micros. Multiply actual amount by 1,000,000 — it's easy to be off by a factor of 1,000.Stage values are UPPER_SNAKE_CASE. Use
CLOSED_WON, not"Closed Won"or"closed_won".Amount is a nested object. Use
{ "amount": { "amountMicros": 50000000000, "currencyCode": "USD" } }, not"amountMicros"at the top level.Close date must be ISO 8601. Use
"2024-06-15T00:00:00.000Z"format.Search is name-only. Unlike Person/Company, there is no field-specific REST filter search for opportunities — only GraphQL name search.
Amount filter uses a nested path. Use
amount.amountMicros[gt]:value, notamountMicros[gt]:value.id[in]requires bracket syntax.id[in]:[uuid1,uuid2]— brackets are required.URL-encode filter parameters. Use
curl -G --data-urlencode "filter=...".