Skip to navigation

Search Opportunities

Search opportunities using up to two filters (prop1/op1/value1 and optionally prop2/op2/value2), combined with logic (AND/OR).

Properties:

  • propX can be a standard field (e.g., status, title, city, type, accountId, etc.) or a custom property key name.
  • Use the property key from your company settings.
  • Filter by parent account with accountId. clientId is accepted as a deprecated alias for backwards compatibility.

Operators (opX):

  • Equality: eq, neq
  • Numeric/datetime comparisons: gt, gte, lt, lte
  • Text/string matching: contains (case-insensitive)
  • Lists: in, nin (CSV list in valueX)
  • Ranges: between (use valueX as from,to)
  • Existence: exists is not supported for custom properties due to performance limitations. Use eq or neq instead.
  • status has a fixed set of values, so it supports only eq, neq, in, and nin.

Value formats:

  • in/nin: lists can be provided as:
    • Plain CSV: value1=OPEN,ACTIVE
    • Quoted CSV (to include commas inside a value): value1="Last, First",Other
    • JSON array: value1=["Last, First","Other"]
  • between: from,to (e.g., value1=2025-01-01,2025-12-31 or value1=10,20)
  • Dates should be ISO 8601 strings; numeric-like values on custom properties are matched against both numeric and text representations.

Examples:

  • status equals ACTIVE: ?prop1=status&op1=eq&value1=ACTIVE
  • won or lost: ?prop1=status&op1=in&value1=WON,LOST (opportunity status is ACTIVE, ON_HOLD, WON, or LOST)
  • custom id equals 1234: ?prop1=legacy_tool_project_id&op1=eq&value1=1234
  • title contains “Solar”: ?prop1=name&op1=contains&value1=Solar
  • status IN (ACTIVE, ON_HOLD) AND city = Austin: ?prop1=status&op1=in&value1=ACTIVE,ON_HOLD&logic=and&prop2=city&op2=eq&value2=Austin

Note: The /requests path is an alias for /opportunities and will continue to work until users are individually notified and migrated.

Note: If an opportunity has no title (empty or whitespace-only), the response returns the parent account’s title instead. The stored value is not modified — this is a read-time fallback only.

Authentication

x-api-keystring
API Key authentication via header

Query parameters

prop1stringRequired

First field to filter (standard or custom keyName)

op1enumRequired
Operator for prop1
value1stringRequired

Value for prop1 (comma-separated values for in/nin or between)

logicenumOptionalDefaults to and
Logical combination when both prop1 and prop2 are provided
Allowed values:
prop2stringOptional
Optional second field to filter
op2enumOptional
Operator for prop2
value2stringOptional

Value for prop2 (comma-separated values for in/nin or between)

page_sizeintegerOptional1-100Defaults to 20

Number of items per page (max 100)

pageintegerOptional>=1Defaults to 1

Page number (1-based)

entered_phase_idintegerOptional

Phase template ID to filter by phase-entry date. Required when entered_after or entered_before is provided. Given alone (no date bounds), matches records that ever entered this phase.

entered_afterstringOptional

Only include records that entered the phase given by entered_phase_id on or after this date/timestamp. Accepts a date (2026-07-01) or a full ISO 8601 timestamp (2026-07-01T00:00:00Z). Requires entered_phase_id.

entered_beforestringOptional

Only include records that entered the phase given by entered_phase_id before this date/timestamp (exclusive). Accepts a date (2026-08-01) or a full ISO 8601 timestamp (2026-08-01T00:00:00Z). Requires entered_phase_id.

exited_phase_idintegerOptional

Phase template ID to filter by phase-exit date. Required when exited_after or exited_before is provided. Given alone (no date bounds), matches records that have exited this phase at any point.

exited_afterstringOptional

Only include records that exited the phase given by exited_phase_id on or after this date/timestamp. Accepts a date (2026-07-01) or a full ISO 8601 timestamp (2026-07-01T00:00:00Z). Requires exited_phase_id.

exited_beforestringOptional

Only include records that exited the phase given by exited_phase_id before this date/timestamp (exclusive). Accepts a date (2026-08-01) or a full ISO 8601 timestamp (2026-08-01T00:00:00Z). Requires exited_phase_id. On opportunities, combine with exited_phase_id set to a “Closed - Won”-style phase template to find deals that closed within a date range.

order_byenumOptionalDefaults to asc
Sort order for results
Allowed values:
include_archivedbooleanOptionalDefaults to false

Whether to include archived (inactive) records in the response. By default only active records are returned.

include_contactsbooleanOptionalDefaults to false
Whether to include associated contacts in the response. Defaults to false unless explicitly set to true.
include_phasesbooleanOptionalDefaults to false

Also return phaseInstances (every phase with its status, startedAt and completedAt) and phase.startedAt / phase.completedAt for the current phase, in the same shape as the single-record GET. Defaults to false. Adds two relation reads per row, so use a page_size of 25 or less when it is on.

Response

List of opportunities matching filters
ownerIdinteger or nullOptional
ID of the owning user
salesRepIdinteger or nullOptional
ID of the assigned sales rep
projectManagerIdinteger or nullOptional
ID of the assigned project manager
addresslist of stringsOptional

An array containing a single string, which represents the full opportunity location/address.

tradeslist of enumsOptional
Array of trade types
valuedouble or nullOptional
Deal value
sizedouble or nullOptional
Deal size
confidencedouble or nullOptional

Deal confidence score (0-100)

statusenumOptional

Status of the opportunity:

  • ACTIVE - Opportunity is open
  • ON_HOLD - Opportunity is temporarily paused
  • WON - Opportunity was won
  • LOST - Opportunity was lost
Allowed values:
workflowIdinteger or nullOptional
Associated workflow ID
accountIdinteger or nullOptional
Associated account ID
geoLocationlist of stringsOptionalRead-only

Latitude/Longitude in “lat,lon” format. Read-only here — settable only via PATCH /sites/{id} on the linked site.

imageUrlstring or nullOptionalRead-only

Image URL for the opportunity. Read-only — not settable via this API.

streetViewUrlstring or nullOptionalRead-only

Street view image URL. Read-only — derived from geoLocation, not settable directly.

citystringOptional
zipcodestringOptional
statestringOptional
streetstringOptional
phaseTimelinelist of objectsOptional

Only present on GET /opportunities and /opportunities/search when entered_phase_id/exited_phase_id is used to filter the results. Contains the deal’s full phase-transition history (not just the matched phase) in compact form — use GET /opportunities/{opportunity_id} for the complete phaseInstances with names, positions, and SLA info.

ownerobject or nullOptional
salesRepobject or nullOptional
projectManagerobject or nullOptional
jurisdictionobject or nullOptional
lastActivitystring or nullOptionalformat: "date-time"
phaseIdinteger or nullOptional
numberintegerOptional
Sequential opportunity number
workflowNamestringOptional
Name of the associated workflow.
contactslist of objectsOptional

Contacts associated with this opportunity (independent of, and not inherited from, the parent account’s contacts). Set on create or update via the contacts request field. On GET requests, only populated when include_contacts=true is passed. Always populated on POST (create) and PATCH (update) responses. Ordered with the primary contact first, capped at 20 contacts.

phaseobject or nullOptional

Current phase. startedAt and completedAt are present on GET /opportunities/{opportunity_id} and on lists with include_phases=true.

phaseInstanceslist of objectsOptional

Ordered list of phase instances for the opportunity. Returned by GET /opportunities/{opportunity_id}, and on lists and search with include_phases=true.

Errors

400
Bad Request Error
401
Unauthorized Error