Credit Rates
You can also read the current rates from the pricing catalog. This endpoint does not require an API key.Cached Profiles
Search is billed in blocks of cached profiles returned, using the block size and rate in the pricing catalog. Incomplete blocks round up. A search that returns no cached profiles has no cached-profile search charge. Candidate Discovery results are excluded from the cached-result count. They use the discovery or generation rate described below, not an additional cached-profile search charge. Polling does not bill the same cached results again.Discovery and Profile Generation
Candidate Discovery charges for each unique profile returned in a search. If discovery returns an existing profile without generating it, the discovery rate applies. If the same operation generates a partial or full profile, the corresponding generation rate replaces the discovery charge for that profile; the charges are not added together. Polling the same search does not charge again for profiles already returned. A profile’s tier can rise while the operation runs, and Orbit charges only the difference up to the higher rate: a profile charged the discovery rate that later reaches partial depth costs the partial rate in total. When two results resolve to the same person, that person carries one charge, and Orbit refunds the duplicate charge to your balance. Generation uses the requested profile level. Partial generation and full generation have separate rates. A full-generation operation includes its intermediate partial profile; it is not a partial charge plus a full charge. A later explicit upgrade to full generation is a new full-generation operation. The same generation rates apply whether you request profiles through Search, Enrich, an integration, or an upgrade of an existing profile. A profile already at the requested depth does not incur a new generation charge unless you request regeneration.Reservations
A reservation is a hold on credits. Orbit holds credits when an operation starts, charges each result as it is delivered, and releases the rest when the operation reaches a terminal status. APOST /v3/search holds the sum of:
- the cached-profile search rate for the requested
limit, in blocks; - with
candidate_discovery: true, the generation rate for the requestedprofile_depth, once for each profilecandidate_discovery_limitallows; - with
signals.face_source, the face search rate.
profile_depth. When the balance covers the funded work and falls short of those upgrades, the funded work runs to completion, and each cached result awaiting an upgrade ends failed with the code developer_api_credits_insufficient and the reason insufficient_upgrade_credits. Add credits and start a new request to build those profiles.
Charges belong to the results Orbit delivers. The share of the hold for a result that ends failed returns to your balance when the operation ends.
An Enrich request holds the generation rate for its operation; regenerate holds the full rate. In a batch, each child places its own hold, and a child whose hold exceeds the balance ends failed with developer_api_credits_insufficient while the other children continue. A profile already at the requested depth holds nothing.
Operations in Progress
Held credits leave your available balance when an operation starts, and the unused part returns when it ends. Your available balance therefore sets how many operations can be in progress together: a balance ten times the size of one request’s hold supports ten of those requests at once. A full-depth build stays open for many minutes, so size the balance for your peak number of operations in progress. ReadheldCredits on each billing object to see what an open operation still holds. A request whose hold is larger than the available balance returns 402, and the same request succeeds once open operations settle or after a top-up.
Population Searches
A population search returns everyone at a company or everyone who attended a school. Its price is quoted before it starts as one total, from the profile-read and profile-generation rates at theprofile_depth you chose; a full population costs more than a partial one. Orbit reserves the quoted credits when the search starts, settles them as the work completes, and releases the unused credits.
Profile Reads
An explicit profile read, such asGET /v3/enrich/{profile_id} or MCP get_profile, uses the profile-read rate. It returns the current stored profile and can schedule a refresh when that data is stale. With include_profile: true, Search embeds each readable result’s profile with its identity and contact fields and generated sections. Search charges cover the profiles that Search embeds, and a separate read after Search is a billable profile read.
Reading Your Charge
Search, Enrich, and profile-read responses carry abilling object with the credits held and spent for that operation, when the request opened a billing operation.
status is settled to read the operation’s final consumedCredits. The final figure is the full charge for the request. An Enrich request that returns 202 always carries billing, and its final consumedCredits is 0 when the profile was already at the requested depth. An Enrich request that Orbit answers with 200 from the stored profile omits billing. In a batch, each child carries its own billing, and the batch charge is the sum of its children.
Face Search
A face search is aPOST /v3/search with signals.face_source. It costs the face search rate in the credit rates, charged once Orbit searches the web for the face, plus the normal discovery or generation rate for each person it returns. A face that Orbit cannot read releases the face search rate. Detecting faces and searching the face index are free.
Watchers
Each completed watcher run uses the watcher-run rate. A run that produces an update also uses the watcher-update rate. Reviewcharge_amount in watcher runs. A watcher pauses when its balance is insufficient; top up before resuming it.
Insufficient Credits
Billable work requires an available credit balance. Handle402 developer_api_credits_insufficient by inspecting requiredCredits and remainingCredits, then topping up before retrying. Validation, authentication, and rate-limit rejections do not consume credits.
An accepted asynchronous request can finish with only some results. Inspect the returned status and per-result failures rather than assuming every requested profile completed.
Retries and Polling
Use the sameIdempotency-Key and request body when retrying a logical request. Persist the search or enrichment ID returned by the API and poll that resource instead of starting the work again. Do not reuse a key for different work.
Status polling is covered by the accepted operation and does not repeat charges for work already billed. See the endpoint reference for profile-read options and the response fields returned by a status request.
Rate Limits
Credits and rate limits are independent. A request can return429 even when credits are available, or 402 while its rate-limit bucket still has capacity.