How it works
Each successful API call debits credits from your wallet. Most endpoints debit before the work is done; search and semantic search debit after the page is built, for the call and the profiles with contact details in it. Out-of-credits short-circuits with 402 insufficient_credits and never invokes the underlying service.
Every response, including errors, includes X-Credits-Remaining so you can pace your client without polling the wallet.
HTTP/1.1 200 OK
X-Credits-Remaining: 9876
Content-Type: application/jsonRefunds
Every metered call that does not end in 200, 201 or 204 is refunded in full, and so is a call that raises. That includes 4xx responses (for example 404 creator_not_found or 422 page_out_of_range) and 502 upstream errors. Each refund writes a negative-cost row to your ledger. You only pay when value is delivered.
A request refused by validation before it is metered is never charged in the first place.
Search billing
A search call costs 1 credit, plus 1 per profile with contact details it returns. That holds for creators.search, creators.semantic_search and the MCP search_creators tool.
- A profile with contact details is a row that carries a
contact_email,contact_emails,contact_phoneorcontact_phonesvalue. Rows without one are free. A page of 50 with 14 emails on it costs 15; the same page with none costs 1. - Every page and every cursor call is its own call. An empty response costs 0.
include=recent_postsadds nothing. - Control the cost with the contact filters.
has_email=truereturns only creators with an email, so every credit buys someone you can reach.has_email=false&has_phone=falsereturns only creators without contact details, at 1 credit a page of up to 100. - Creators removed by the stated-minors filter are neither served nor charged. On REST search, the same goes for creators removed by the below-minimum-engagement filter when you pass
include_unknown_engagement. - If your balance cannot cover the call and every profile with contact details, the page still comes back whole. The first profiles with contact details that your balance covers keep their contact values. The others come back without them (
has_emailandhas_phonestay true). Nothing is dropped, so apagekeeps its place and a cursor keeps itsnext_cursor. Top up and ask for the same page again to read the rest. - At a balance of 0 the call returns
402 insufficient_creditsand nothing runs. - A key created with contacts hidden never returns contact values, so it pays 1 credit per call.
REST responses carry the details in meta.billing; the MCP tool returns the same object as billing. On semantic search, meta.cost holds the credits this call charged.
| Param | Type | Notes |
|---|---|---|
unit | string | Always call. |
credits_charged | int | Credits this call charged: 1 for the call plus 1 per profile with contact details it paid for. |
rows_with_contacts | int | Rows on the page that carry contact details. |
rows_with_contacts_charged | int | Of those, the ones your balance paid for. The rest are returned without contact values. |
capped_by_balance | bool | true when your balance did not cover every profile with contact details. |
note | string | When capped, a plain-language line saying what was left out. |
X-Credits-Remaining is sent on every call.
Cost per endpoint
| Param | Type | Notes |
|---|---|---|
creators.search | 1 credit / call + 1 / profile with contact details | Per page or cursor call. An empty page costs nothing. See search billing. |
creators.show | 1 credit | |
creators.posts | 25 credits | Charged once even if many posts come back. A 202 analysis_pending is not charged. |
posts.show | 1 credit | Cached read from the local index. |
posts.comments | 2 credits | Per page of comments. |
posts.analyze | 25 credits / URL | Charged per URL submitted in the batch. |
campaigns.create | 1 credit | Plus 25 credits per post URL in the body. |
campaigns.show | 1 credit | |
campaigns.metrics | 2 credits | Aggregates the entire campaign. |
campaigns.posts | 2 credits | Same cost for /influencers. |
campaigns.delete | 0 credits | Destructive ops are free. |
posts.refresh | 25 credits | Explicit re-fetch of a cached post. |
creators.semantic_search | 1 credit / call + 1 / profile with contact details | An empty result costs nothing. See search billing. |
seed_campaigns.create | 250 credits | Starts a crawl. Reading or updating a seed campaign is free. |
On the MCP server, each tool is priced as the endpoint it wraps. suggest_campaign_keywords, which has no REST endpoint, costs 1 credit per call. Tools that read your own lists, crawls and Ultra Search results, plan_creator_list and get_credits are free. See MCP.
Ultra Search is not in this table: it uses your plan's monthly Ultra Searches, never credits. See Ultra Search.
Prices are per call unless the notes say otherwise. creators.posts is charged once per call, for up to 50 posts. posts.analyze is charged per URL submitted.
Refills & rollover
Your wallet refills on a 30-day cycle anchored to your subscription start. Each refill grants your plan's monthly credits on top of whatever is left over from the previous cycle. The exact next-refill date is shown on the Credits page.
Free: 50 credits a month, shared by the app, the API and MCP, no rollover. A free account can create an API key. Its 50 credits pay for web contact reveals, REST calls and MCP calls alike, and each cycle resets the balance to exactly 50: nothing carries over. A Developer plan adds a larger grant for the API.
On a paid plan, unused credits roll forward, but only up to one full monthly grant. After a refill your balance is capped at 2x your monthly grant. A quiet month doesn't double your runway forever; a busy month right after a quiet one gets a full extra cushion to draw on.