Skip to main content
GET
Get Search Status
Returns the latest search snapshot. Polling this endpoint advances pending discovery and profile work before returning the response.
A backend that starts a search and moves on can receive these rows instead of asking for them: start the search with "webhooks": true and Orbit delivers each result’s whole profile as it is built. See Push search results.
The response has the same shape as Start a search. Every result includes sources containing search, candidate_discovery, or both. Known-search results retain their lightweight preview on every poll, regardless of include_profile. When include_profile is true, every poll also embeds the latest profile for each readable result, with its identity fields, contact fields, and generated sections. That includes a level 1 profile while its result is still enriching. For the image gallery and source links, call Read a profile.

Know When a Search Is Done

status answers one question: is the whole search done, and how did it go? Continue polling while it is running. Stop when it becomes:
  • completed: every result reached the requested profile_depth. A search can also complete with an empty results list when nothing matched.
  • completed_with_errors: ready results are available, but at least one result or candidate discovery failed.
  • failed: work failed and the search has no ready results.
A search completes when every result is published at the requested depth. Orbit can continue to improve published profiles afterward, so a later profile read can return more data than the search response embedded.

Track Each Phase

Two snapshot fields report the search’s phases independently:
  • candidate_discovery_completed answers: is the result list final? When true, discovery adds no more results to this search. For discovery searches it becomes true as soon as clustering fixes the candidate set and every discovered person appears in results — usually while those results are still generating. Present only when the search ran with candidate_discovery: true. If discovery failed, candidate_discovery_failure explains why.
  • profile_upgrades_completed answers: are the current profiles final? When true, every result currently in results reached the requested profile_depth or failed. While candidate_discovery_completed is false, discovery can still add results that bring new profile work.
  • provider_results_final answers: is the owner set for the supplied contact final? When the request carried a phone, email, or address signal, Orbit asks its people-data provider for every owner of that contact inside the first response and saves each owner with the provider’s contacts at Level 1. When true, all of those owners are in results and their emails and phone numbers are readable through Read a profile while biographies are still building. Discovery by name can still add results until candidate_discovery_completed is true. Present only when the search ran with candidate_discovery: true and a contact signal.
Poll on status alone — it is the only signal that the search is finished. Use these fields to show progress. For a discovery search, candidate_discovery_completed: true with profile_upgrades_completed: false is the normal mid-run state: all people are found and their profiles are still building, so you can render the final list of people while their profiles fill in.

Result Statuses

Each entry in results moves through its own lifecycle, separate from the search status: Statuses only move forward: generating becomes enriching, enriching becomes ready or failed, and ready never regresses.

Result Stability

Snapshots are stable between polls:
  • A result never disappears from a later response. New candidate results append after the existing rows.
  • limit caps only the initial matches from the existing Orbit index. Candidate Discovery results append outside that quota, and profile upgrades update rows in place. The final results count can therefore exceed limit and has no fixed multiple of it.
Key your UI by profile_id and update rows in place. You can render ready results while the rest of the search is still running.
During candidate discovery, the polling response includes pending and assigned source receipts:
discovered_sources starts filling within seconds of the search starting, while Orbit is still gathering, and grows as the search finds more pages. It lists every page the search has found, in the order the search first found each one, up to 200 pages. A page stays in the list through later polls and after the search ends. When Orbit assigns a page to a candidate, the receipt also appears in results[].candidate_sources and remains there when the result becomes ready. Every receipt contains link, title, and sourceImage. results[].sources is the existing result-origin list and does not contain source receipts. In both receipt arrays, link is the URL of the discovered source page, title is the display title of the source page or site, and sourceImage is the URL of the favicon for the site that hosts the source page. This endpoint requires search:read. If the original search used include_profile: true, the caller also needs profile:read. A search is only visible to the API key that created it.

Authorizations

Authorization
string
header
required

Use an Orbit API key from the Developer Dashboard.

Path Parameters

search_id
string
required

The search ID returned by POST /v3/search.

Minimum string length: 1

Response

The current search snapshot.

search_id
string
required

Server-generated identifier for this search. Use it to poll the status endpoint.

request_id
string
required

The idempotency key from the original request, or a generated value when the request omitted it.

status
enum<string>
required

Overall search lifecycle. running means work is still in progress; poll until the status is terminal. completed means every result reached the requested profile depth; a search can complete with an empty results list when nothing matched. completed_with_errors means ready results are available but some work failed. failed means work failed and no ready results are available.

Available options:
running,
completed,
completed_with_errors,
failed
candidate_discovery
boolean
required

Whether this search runs candidate discovery, as resolved from the request.

profile_depth
enum<string>
required

The minimum profile depth requested for each ready result.

Available options:
partial,
full
include_profile
boolean
required

Whether readable results embed their Search profile.

profile_upgrades_completed
boolean
required

Whether every result in results has reached the requested profile_depth or failed. While candidate_discovery_completed is false, discovery can still add results with new profile work.

results
object[]
required

The people this search has found so far. Results are append-only: a reported result is never removed, and a ready result never regresses.

created_at
string<date-time>
required

When the search was created.

updated_at
string<date-time>
required

When the snapshot last changed.

candidate_discovery_completed
boolean

Whether the result list is final. Once true, discovery adds no more results to this search; the results themselves can still be generating or enriching toward the requested depth. For discovery searches this becomes true when clustering completes and every discovered person appears in results. If discovery failed, candidate_discovery_failure explains why. Present only when candidate_discovery is true.

provider_results_final
boolean

Whether the people-data provider lookup for a supplied phone, email, or address returned its complete owner set. Once true, every owner of that contact is in results with the contacts the provider reported, usually within the first response and before biography work. Discovery by name can still add results until candidate_discovery_completed is true. Present only when candidate_discovery is true and the request carried a phone, email, or address signal.

confidence_kind
enum<string>

identity when the search looks for one person, such as by name, contact, or face, and criteria when it looks for everyone who fits a description.

Available options:
identity,
criteria
none_of_above_confidence
number

One minus the best result's confidence. It is high when no result matches well. Present on identity searches.

Required range: 0 <= x <= 1
discovered_sources
object[]

Every page the search has found, in the order the search first found each one. The list starts filling within seconds and holds up to 200 pages. A page stays listed through later polls and after the search ends, including a page that is also in a result's candidate_sources. Present when candidate_discovery is true.

candidate_discovery_failure
object

Why candidate discovery failed. Present only when discovery failed.

population
object

Present on population searches: the subject, the depth, the reserved credits and where the search is.

query_intent
object

Present when the search parsed a plain-English query.

billing
object

Credits held and spent for this search. The final consumedCredits is the full charge once status is settled.