Developers
Set your API contextPick a region and space ID once. Every sample fills in your base URL.
Where do I find these?

In Coevera: open your space's API application and choose Show Access. It shows the space ID and the base URL, whose host starts with your region.

From the API: if you know the space ID, the discovery endpoint GET /api/discovery/spaces/{space_id} returns its region and base URLs, without credentials.

Only the region and space ID are kept, in this browser. Never paste a key or password here.

More in the quickstart

REST APILeads and opportunitiesOpportunities

Opportunities

Deals in a sales pipeline, with a value, a closing date and a step. Winning is a move to the last step; losing is archiving.

An opportunity sits on a step of a pipeline (step_id). A REST update of step_id, owner_id or is_archived records the same history and webhook events as the GraphQL move, change-owner and archive actions, but skips their extras, such as completing activities or the lost form's required fields.

What the API requires

A create needs account_relations, with one relation marked is_primary: true, although the spec does not mark it as required. Without it the API answers HTTP 422 (docs sandbox, 2026-10-15).

What the API requires

value is a currency object. Send currency_id and base_value: with base_value set, value_foreign is computed. Without currency_id the API answers HTTP 422, Missing parameter currency_id in field value (docs sandbox, 2026-10-15).

What the API requires

status is 1 Open, 2 Lost or 3 Won, and read-only: an opportunity on its pipeline's last step is won, and one archived on another step is lost.

MethodPathOperation
GET/entities/OpportunitiesList opportunities
POST/entities/OpportunitiesCreate an opportunity
GET/entities/Opportunities/{id}Get an opportunity
PATCH/entities/Opportunities/{id}Update an opportunity
DEL/entities/Opportunities/{id}Delete an opportunity
POST/entities/Opportunities/batch-modifyCreate or update opportunities in a batch
POST/entities/Opportunities/batch-deleteDelete opportunities in a batch
POST/entities/Opportunities/batch-restoreRestore deleted opportunities

GET List opportunities

Returns the opportunities the API application can read, one page at a time.

Query parameters

NameTypeDescription
include-deletedbooleanInclude soft-deleted records. Lists only; get-by-id refuses it.
firstintegerPage size. Default 30, maximum 100; a larger value is refused with HTTP 400, code 117.
lastintegerReturn the last N records of the result; together with first, the last N of the first M. Maximum 100.
beforestringCursor from page_info.start_cursor, to page backwards. URL-encode it.
afterstringCursor from page_info.end_cursor of the previous page. URL-encode it: cursors are base64, and a raw + becomes a space.
expandstringRelated records to return inline instead of their URIs, comma-separated; dots reach nested relations, as in account_relations.account.
order-bystringFields to sort by, comma-separated. A leading - sorts descending, as in -modified; dotted paths sort by related fields.
filterobjectfilter[field]=value. Separate several values with a raw comma (OR), as in filter[name]=north,south. Encode a comma that belongs to a value as %2C. URLSearchParams and Python requests encode every comma, so build the filter part of the query string yourself. Dotted paths filter on related records, as in filter[owner.email]. Encode a + in a value as %2B: query values are form-decoded, so a raw + becomes a space.
filter-opobjectfilter-op[field]=operator, one per field: eq (the default), ieq, not-eq, not-ieq, contains, icontains, starts, istarts, ends, iends, gt, gte, lt, lte, between, null, not-null, empty and not-empty. null, not-null, empty and not-empty take no filter value; gt, gte, lt and lte take exactly one.
load-onlystringFields to return, comma-separated (raw or encoded commas both work here); dots select nested fields, as in owner.id. All fields are returned without it. Lists only: get-by-id refuses it with HTTP 400, code 118.

Responses

200 Page of Opportunity records.: success, total, page_info, data 400 Bad request 401 Not authenticated 429 Rate limited 500 Server error

GET /entities/Opportunities
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities?first=10&filter%5Bname%5D=north&filter-op%5Bname%5D=icontains' \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET"
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities?first=10&filter%5Bname%5D=north&filter-op%5Bname%5D=icontains', {
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`)
  }
})
import os

import requests

response = requests.get(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities",
    params={
      "first": "10",
      "filter[name]": "north",
      "filter-op[name]": "icontains"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"])
)

POST Create an opportunity

Creates one opportunity and answers 201 with the record. name, owner_id, step_id, closing_date, value (with currency_id) and account_relations are required.

Query parameters

NameTypeDescription
validation-levelintegerBit mask that relaxes validation on this write. 0 (the default) validates everything. Bits: 2 skip unchanged fields, 4 skip admin-defined validations, 8 allow read-only fields, 16 skip relation checks, 32 skip value checks, 64 skip invalid recalculations, 128 skip step-checklist gates, 256 add conditional field requirements, 512 skip uniqueness checks. Add bits together (20 = 4 + 16); member names and comma lists such as 4,16 work too. A value with an internal-only bit is refused with HTTP 400, code 117.

Request body

The new record's fields. Relations are set by id. Schema createOpportunityInput; the fields are in Opportunity fields. Required: closing_date, name, owner_id, step_id, value, account_relations.

Responses

201 The created Opportunity record.: success, data 400 Bad request 401 Not authenticated 422 Validation failed 429 Rate limited 500 Server error

POST /entities/Opportunities
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities' \
  --request POST \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Northwind Analytics - CRM rollout",
  "owner_id": "37000000-0000-4000-a000-000000000001",
  "step_id": "d4000000-0000-4000-a000-000000000001",
  "closing_date": "2026-12-15",
  "value": {
    "base_value": 24000,
    "currency_id": "be000000-0000-4000-a000-000000000001"
  },
  "account_relations": [
    {
      "account_id": "1d000000-0000-4000-a000-000000000001",
      "is_primary": true
    }
  ]
}'
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities', {
  method: 'POST',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Northwind Analytics - CRM rollout',
    owner_id: '37000000-0000-4000-a000-000000000001',
    step_id: 'd4000000-0000-4000-a000-000000000001',
    closing_date: '2026-12-15',
    value: {
      base_value: 24000,
      currency_id: 'be000000-0000-4000-a000-000000000001'
    },
    account_relations: [
      {
        account_id: '1d000000-0000-4000-a000-000000000001',
        is_primary: true
      }
    ]
  })
})
import os

import requests

response = requests.post(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities",
    headers={
      "Content-Type": "application/json"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"]),
    json={
      "name": "Northwind Analytics - CRM rollout",
      "owner_id": "37000000-0000-4000-a000-000000000001",
      "step_id": "d4000000-0000-4000-a000-000000000001",
      "closing_date": "2026-12-15",
      "value": {
        "base_value": 24000,
        "currency_id": "be000000-0000-4000-a000-000000000001"
      },
      "account_relations": [
        {
          "account_id": "1d000000-0000-4000-a000-000000000001",
          "is_primary": True
        }
      ]
    }
)

GET Get an opportunity

Returns one opportunity by id.

Path parameters

NameTypeDescription
idstring (uuid)Id of the Opportunity record to retrieve. Required

Query parameters

NameTypeDescription
expandstringRelated records to return inline instead of their URIs, comma-separated; dots reach nested relations. The only parameter this call accepts.

Responses

200 The Opportunity record.: success, data 400 Bad request 401 Not authenticated 404 Not found 429 Rate limited 500 Server error

GET /entities/Opportunities/{id}
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001?expand=owner' \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET"
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001?expand=owner', {
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`)
  }
})
import os

import requests

response = requests.get(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001",
    params={
      "expand": "owner"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"])
)

PATCH Update an opportunity

Changes the fields you send and leaves the rest as they are. Changing step_id, owner_id or is_archived here skips the extras of the GraphQL move, change-owner and archive actions.

Path parameters

NameTypeDescription
idstring (uuid)Id of the Opportunity record to update. Required

Query parameters

NameTypeDescription
validation-levelintegerBit mask that relaxes validation on this write. 0 (the default) validates everything. Bits: 2 skip unchanged fields, 4 skip admin-defined validations, 8 allow read-only fields, 16 skip relation checks, 32 skip value checks, 64 skip invalid recalculations, 128 skip step-checklist gates, 256 add conditional field requirements, 512 skip uniqueness checks. Add bits together (20 = 4 + 16); member names and comma lists such as 4,16 work too. A value with an internal-only bit is refused with HTTP 400, code 117.

Request body

The fields to change. Schema updateOpportunityInput; the fields are in Opportunity fields.

Responses

200 The changed Opportunity record.: success, data 400 Bad request 401 Not authenticated 404 Not found 422 Validation failed 429 Rate limited 500 Server error

PATCH /entities/Opportunities/{id}
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001' \
  --request PATCH \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Northwind opportunity (renamed)"
}'
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001', {
  method: 'PATCH',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: 'Northwind opportunity (renamed)'
  })
})
import os

import requests

response = requests.patch(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001",
    headers={
      "Content-Type": "application/json"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"]),
    json={
      "name": "Northwind opportunity (renamed)"
    }
)

DEL Delete an opportunity

Soft-deletes one opportunity and answers with its id.

Path parameters

NameTypeDescription
idstring (uuid)Id of the Opportunity record to delete. Required

Responses

200 Deletion confirmation.: success, data 400 Bad request 401 Not authenticated 404 Not found 429 Rate limited 500 Server error

DEL /entities/Opportunities/{id}
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001' \
  --request DELETE \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET"
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001', {
  method: 'DELETE',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`)
  }
})
import os

import requests

response = requests.delete(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/ca000000-0000-4000-a000-000000000001",
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"])
)

POST Create or update opportunities in a batch

An item with an id updates that opportunity; an item without one creates an opportunity. By default one invalid item fails the whole call with HTTP 422.

Query parameters

NameTypeDescription
validation-levelintegerBit mask that relaxes validation on this write. 0 (the default) validates everything. Bits: 2 skip unchanged fields, 4 skip admin-defined validations, 8 allow read-only fields, 16 skip relation checks, 32 skip value checks, 64 skip invalid recalculations, 128 skip step-checklist gates, 256 add conditional field requirements, 512 skip uniqueness checks. Add bits together (20 = 4 + 16); member names and comma lists such as 4,16 work too. A value with an internal-only bit is refused with HTTP 400, code 117.
rollback-methodinteger0, the default: one failed item fails the whole batch (HTTP 422, or 404 for an unknown id) and nothing is written. 1: the valid items are written and the call answers 200 with success false and one result per item, an id or an error, in input order. Check every item.

Request body

A JSON array of records: an item with an id updates, an item without one creates. Schema batchOpportunityInput; the fields are in Opportunity fields. Required: closing_date, name, owner_id, step_id, value, account_relations.

Responses

200 Result per item, in request order: the id of the created or updated record, or the error.: success, data 400 Bad request 401 Not authenticated 422 Validation failed 429 Rate limited 500 Server error

POST /entities/Opportunities/batch-modify
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-modify' \
  --request POST \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '[
  {
    "closing_date": "2026-10-13",
    "name": "Northwind opportunity",
    "owner_id": "37000000-0000-4000-a000-000000000001",
    "step_id": "d4000000-0000-4000-a000-000000000001",
    "value": {
      "base_value": 1000
    },
    "account_relations": []
  },
  {
    "id": "ca000000-0000-4000-a000-000000000001",
    "name": "Northwind opportunity (renamed)"
  }
]'
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-modify', {
  method: 'POST',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([
    {
      closing_date: '2026-10-13',
      name: 'Northwind opportunity',
      owner_id: '37000000-0000-4000-a000-000000000001',
      step_id: 'd4000000-0000-4000-a000-000000000001',
      value: {
        base_value: 1000
      },
      account_relations: []
    },
    {
      id: 'ca000000-0000-4000-a000-000000000001',
      name: 'Northwind opportunity (renamed)'
    }
  ])
})
import os

import requests

response = requests.post(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-modify",
    headers={
      "Content-Type": "application/json"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"]),
    json=[
      {
        "closing_date": "2026-10-13",
        "name": "Northwind opportunity",
        "owner_id": "37000000-0000-4000-a000-000000000001",
        "step_id": "d4000000-0000-4000-a000-000000000001",
        "value": {
          "base_value": 1000
        },
        "account_relations": []
      },
      {
        "id": "ca000000-0000-4000-a000-000000000001",
        "name": "Northwind opportunity (renamed)"
      }
    ]
)

POST Delete opportunities in a batch

Soft-deletes the opportunities whose ids are in the body, a JSON array.

Query parameters

NameTypeDescription
rollback-methodinteger0, the default: one failed item fails the whole batch (HTTP 422, or 404 for an unknown id) and nothing is written. 1: the valid items are written and the call answers 200 with success false and one result per item, an id or an error, in input order. Check every item.

Request body

A JSON array of ids.

Responses

200 Result per id, in request order: the id of the deleted record, or the error.: success, data 400 Bad request 401 Not authenticated 404 Not found 422 Validation failed 429 Rate limited 500 Server error

POST /entities/Opportunities/batch-delete
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-delete' \
  --request POST \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '[
  "ca000000-0000-4000-a000-000000000001",
  "ca000000-0000-4000-a000-000000000002"
]'
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-delete', {
  method: 'POST',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(['ca000000-0000-4000-a000-000000000001', 'ca000000-0000-4000-a000-000000000002'])
})
import os

import requests

response = requests.post(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-delete",
    headers={
      "Content-Type": "application/json"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"]),
    json=[
      "ca000000-0000-4000-a000-000000000001",
      "ca000000-0000-4000-a000-000000000002"
    ]
)

POST Restore deleted opportunities

Restores the soft-deleted opportunities whose ids are in the body, a JSON array.

Query parameters

NameTypeDescription
rollback-methodinteger0, the default: one failed item fails the whole batch (HTTP 422, or 404 for an unknown id) and nothing is written. 1: the valid items are written and the call answers 200 with success false and one result per item, an id or an error, in input order. Check every item.

Request body

A JSON array of ids.

Responses

200 Result per id, in request order: the id of the restored record, or the error.: success, data 400 Bad request 401 Not authenticated 404 Not found 422 Validation failed 429 Rate limited 500 Server error

POST /entities/Opportunities/batch-restore
curl 'https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-restore' \
  --request POST \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '[
  "ca000000-0000-4000-a000-000000000001",
  "ca000000-0000-4000-a000-000000000002"
]'
fetch('https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-restore', {
  method: 'POST',
  headers: {
    Authorization: "Basic " + btoa(`${process.env.COEVERA_API_KEY}:${process.env.COEVERA_API_SECRET}`),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(['ca000000-0000-4000-a000-000000000001', 'ca000000-0000-4000-a000-000000000002'])
})
import os

import requests

response = requests.post(
    "https://{region}.api.coevera.com/api/v100/rest/spaces/{space_id}/entities/Opportunities/batch-restore",
    headers={
      "Content-Type": "application/json"
    },
    auth=(os.environ["COEVERA_API_KEY"], os.environ["COEVERA_API_SECRET"]),
    json=[
      "ca000000-0000-4000-a000-000000000001",
      "ca000000-0000-4000-a000-000000000002"
    ]
)

Opportunity fields

FieldTypeNotes
iduuidRead-only Unique identifier of entity.
closing_datedateRequired on create Expected or actual closing date of the opportunity.
namestringRequired on create Name of the entity and its default text representation.
owner_iduuid → ClientsRequired on create Id of the opportunity owner.
step_iduuid → StepsRequired on create Id of the pipeline step.
valueobjectRequired on create Monetary value of the opportunity; on create, send currency_id and base_value, and value_foreign is computed.
account_relationsarray of uri → LeadOpptyAccountRelationsRequired on create Accounts linked to this opportunity; required on create, with one relation marked is_primary: true, the primary account.
createddate-timeCreation time.
active_quote_iduuid → QuotesId of the quote currently synchronized with this opportunity, or empty when no quote is active.
currency_exchange_rates_list_iduuid → CurrencyExchangeRatesListsId of the currency exchange rate list applied to this opportunity.
descriptionstringFree-form description of the opportunity.
is_archivedbooleanTrue when the opportunity has been archived (lost).
is_value_auto_calculatebooleanTrue when value is auto-calculated from the opportunity product line items.
label_flagstringUser-set colored flag used to highlight the opportunity in lists and reports.1 · 2 · 4
last_ai_buying_center_applieddate-timeTime when an AI-suggested buying center was last applied to this opportunity.
Show all 67 fields
FieldTypeNotes
lead_source_iduuid → DataId of the lead source the opportunity originated from.
oppty_type_iduuid → OpportunityTypesId of the opportunity type.
product_currency_iduuid → CurrenciesId of the currency used for product line-item prices on this opportunity.
product_price_list_iduuid → ProductPriceListsId of the price list that supplies prices for product line items added to this opportunity, or empty to use catalog defaults.
product_sectionsobjectProduct sections grouping the record's line items, as a JSON array of {"id": <UUID>, "name": <string>} objects.
quick_account_emailstringFree-text company email captured at opportunity creation when no Account record has been linked yet.
quick_account_namestringFree-text company name captured at opportunity creation when no Account record has been linked yet.
quick_account_phonestringFree-text company phone captured at opportunity creation when no Account record has been linked yet.
quick_contact_namestringFree-text contact name captured at opportunity creation when no Contact record has been linked yet.
quick_emailstringFree-text contact email captured at opportunity creation when no Contact record has been linked yet.
quick_phonestringFree-text contact phone captured at opportunity creation when no Contact record has been linked yet.
rankingintegerQualitative ranking score (1-10) the user assigns to indicate the strength of the opportunity.
reason_of_close_descriptionstringFree-form note explaining why the opportunity was archived (lost).
reason_of_close_iduuid → DataId of the reason of close option selected when the opportunity was archived (lost).
share_modeintegerSharing model applied on top of the owner/unit visibility (e.g.0 Standard · 1 Private · 2 AllView · 3 AllEdit
unit_iduuid → SalesUnitsId of the sales unit.
was_qualifiedbooleanTrue when the opportunity has gone through the qualification step at least once.
revisionintegerRevision when entity was lastly changed.
oppty_recurrenceuri → OpptyRecurrencesRecurrence schedule generating periodic copies of this opportunity, or empty when no recurrence is set up.
revenue_scheduleuri → OpptyRevenueSchedulesRevenue schedule splitting the opportunity value across periods, or empty when revenue scheduling is not enabled for this opportunity.
product_relationsarray of uri → OpptyProductRelationsProduct line items on this opportunity.
contact_relationsarray of uri → LeadOpptyContactRelationsContacts linked to this opportunity, including their roles and org-chart positions.
documentsarray of uri → CloudObjectRelationsDocuments linked to this opportunity.
quote_relationsarray of uri → QuotesQuotes prepared for this opportunity.
won_datedate-timeTimestamp of when the opportunity was won.
lost_datedate-timeTimestamp of when the opportunity was archived (lost).
sharing_unitsarray of uri → LeadOpptySharingSalesUnitRelationsSales units that have been granted shared access to this opportunity.
sharing_clientsarray of uri → LeadOpptySharingClientRelationsUsers that have been granted shared access to this opportunity.
tagsarray of uri → TagRelationsTag labels applied to this opportunity.
static_profilesarray of uri → ProfileRelationsSaved view profiles this opportunity currently matches.
is_delete_protectedbooleanRead-only True when the record is protected against deletion because it must always exist in the space.
is_deletedbooleanRead-only Specifies if the entity is considered deleted.
modifieddate-timeRead-only Last modification time.
active_quoteuri → QuotesRead-only Quote currently used to drive the opportunity (e.g.
currency_exchange_rates_listuri → CurrencyExchangeRatesListsRead-only Currency exchange rate list used to convert monetary fields linked to this opportunity.
lead_sourceuri → DataRead-only How the opportunity originated (e.g.
oppty_typeuri → OpportunityTypesRead-only Opportunity type that classifies this opportunity.
owneruri → ClientsRead-only Sales user who owns this opportunity.
product_currencyuri → CurrenciesRead-only Currency used for product line-item prices on this opportunity.
product_price_listuri → ProductPriceListsRead-only Product price list used to populate prices for product line items added to this opportunity.
reason_of_closeuri → DataRead-only Configurable reason recorded when the opportunity is archived (lost).
stepuri → StepsRead-only Pipeline step the opportunity is currently sitting in.
unituri → SalesUnitsRead-only Sales unit this opportunity is assigned to.
table_namestringRead-only Discriminator identifying the concrete record type — always "opportunity" for Opportunity records.
primary_contacturi → ContactsRead-only Primary contact of this opportunity.
primary_accounturi → AccountsRead-only Primary account of this opportunity.
statusintegerRead-only Status of the opportunity: 1 Open, 2 Lost, 3 Won.1 Open · 2 Lost · 3 Won
qualify_datedate-timeRead-only Timestamp of when the opportunity was qualified, taken from the matching KPI event.
days_in_stepintegerRead-only Number of days the opportunity has been sitting in its current pipeline step.
is_favoritebooleanRead-only True when the current authenticated user has marked this opportunity as favorite.
formatted_namestringRead-only Display version of the opportunity name, used in lists and references.
modified_by_userdate-timeRead-only Timestamp of the most recent modification made by an end user (excluding system changes).

Custom fields appear in your space's live spec: fetch it with your credentials.

Errors

Every error body has success: false, http_status, code, name and message. Branch on code: the status alone does not tell a missing permission from a bad parameter. All codes: error codes; how to handle them: Errors.

HTTPWhen
400Bad request: a bad or unknown parameter (codes 117, 118), a missing permission (code 50), conflicting data (code 2002) or any other API error. The REST API answers 400 where others answer 403 or 409; check code.
401Not authenticated: missing or wrong credentials, a credential of another space, or an expired token (code 401, ERROR_UNAUTHORIZED).
404No such record or entity (code 143 ERROR_NO_ENTITY, or 2006 ERROR_UNKNOWN_TYPE).
422Validation failed (code 40000, with the failing fields) or a required parameter is missing (code 119). By default one failed item fails a whole batch and nothing is written.
429Too many requests (code 182). Wait for the seconds in Retry-After, then retry.
500Unexpected server error (code 1000, ERROR_UNKNOWN).

Webhook events for opportunities

Opportunity.Create Opportunity.Delete Opportunity.DocumentLinked Opportunity.Lost Opportunity.Move Opportunity.OwnerChanged Opportunity.Qualify Opportunity.Update Opportunity.Won See payloads

Subscribe with Create a webhook.