- Search finds people from plain-English queries, structured criteria, or identity signals, optionally discovers additional candidates, and builds every result to a requested depth.
- Enrich operates on an existing profile by canonical Orbit ID or profile slug: return a partial profile, return a full profile, or regenerate a fresh full profile.
Endpoint map
Migrate Search
Before
After
query field and removes match reasons. Orbit sends plain-English queries through its normal model router and derives structured intent internally when candidate discovery needs it.
If your application already has exact filters, send intent alone. You can also keep query and add intent when the plain-English request provides useful context but exact fields must take precedence:
When both are present, Orbit derives a base intent from
query and overlays your intent. At each supplied field, arrays, scalar values, and null replace the derived value; nested objects merge field by field. Known-profile Search uses the original query plus the merged intent. Candidate Discovery uses the merged intent. query, intent, or both can be combined with identity signals.
Replace workflow stages with three knobs
Known search always runs.
limit caps existing Orbit index matches and accepts values from 1–100. Candidate Discovery results append outside that quota. candidate_discovery_limit defaults to 10 and accepts values from 1–50. A lower value reduces downstream profile-generation fanout, although source discovery and clustering can still dominate initial discovery time. include_profile changes only the response; it does not skip profile building.
Move identity signals
Remove
structuredIntent.version; Orbit owns it. With candidate_discovery: true, address, email, and phone signals can each return multiple associated people. Profile IDs do not belong in Search.
Migrate profile upgrades to Enrich
regenerate builds toward full for level 1 and 2 profiles. For an existing level 3 profile, it forces a fresh full build.
Migrate profile reads
Read the current public profile directly by Orbit profile ID, known alias ID, or public profile slug. An Enrichrequest_id is not required.
links.profile value
when one is available. See Read a profile for the
response schema.
Profile read is read-only. To build a level 1 profile to level 2, call
POST /v3/enrich/{profile_id} with operation: partial. The POST can return
202 Accepted with status: running. Poll links.status until the operation
is completed or failed. It returns 200 OK immediately when the existing
profile already satisfies the operation.
The response names the canonical Orbit ID profile_id; that is the API field name, not a second ID type.
Update lifecycle handling
- A Search POST can return
202with results already becoming ready. Polllinks.statusuntilcompleted,completed_with_errors, orfailed. - An Enrich POST can return
200immediately when the existing profile satisfies the operation, or202when work is running. - Treat
completed_with_errorsas usable partial success and inspect each result. - Batch Enrich has no aggregate GET. Poll each running child using its own
links.status. - Persist the returned
request_idfor status polling. If you send anIdempotency-Keyheader, reuse it only for the same logical request.
Update scopes and billing assumptions
- Search and Enrich start/status require
search:read. - Any request that embeds profiles also requires
profile:read. - Direct Enrich profile reads require
profile:read. - v3 Search and Enrich do not consume credits. Continue handling
429rate limits.
Cutover checklist
- Keep free-form people searches in
query. Use structured intent alone for fully structured requests, or add it toquerywhen exact fields must override Orbit’s interpretation. - Remove legacy fields and internal workflow terminology from requests.
- Cap
limitat 100. - Store returned
request_idandsearch_idvalues where applicable. - Poll the correct status endpoint with backoff and jitter.
- Handle
completed_with_errorsseparately fromfailed. - Read profiles by canonical Orbit ID or slug, or follow the returned Enrich
links.profileURL. - Run old and new clients side by side on representative inputs before switching production traffic.
- Log v3 IDs and error codes so support can trace a request without its API key.
