Skip to main content
Horizon is billed with prepaid credits, not subscriptions. You buy (or receive, as a trial) a balance of credits; each API call debits a fixed number of credits from that balance. There’s no monthly plan, no seat count, and no usage tier to pick — you just keep credits topped up. 1 credit = $0.01.
There’s one credit balance per account, shared across every surface — the Slack app, the REST API, and the MCP server all debit from and top up the same pool. A pack bought from Slack works for a curl call, and vice versa.

Checking your balance

GET /v1/usage is free (no credits charged) and returns your current balance:
{
  "tenantId": "...",
  "credits_remaining": 173
}

Reading credits on every response

Every billed endpoint’s response envelope includes:
  • credits_charged — what this specific call cost. Usually equal to the endpoint’s listed price below, but can be 0 in a few cases (see “Charging on misses” below).
  • credits_remaining — your balance immediately after this call.
{
  "data": { "...": "..." },
  "credits_charged": 2,
  "credits_remaining": 171,
  "cached": false,
  "request_id": "..."
}
If a call fails before it’s ever charged (bad auth, bad request, rate limit), there’s no credits_charged field at all — nothing was debited. If your balance is too low for the call’s price, you get a 402 before any vendor is ever called — see Errors & Rate Limits.

Per-endpoint pricing

Prices below are current as of this writing, pulled directly from Horizon’s pricing table. GET /v1/usage doesn’t return per-endpoint prices today — this page is the source of truth; check back here (or ask support) if you suspect a price has changed.
EndpointCreditsNotes
POST /v1/person/enrich2Charged even if no matching profile is found
POST /v1/person/email25Charged only when a verified email is found
POST /v1/person/search3Returns the full candidate list; charged even if no matching profiles are found
POST /v1/email/verify3
POST /v1/company/enrich2Charged even if no matching company is found
POST /v1/company/people5Charged even if no people are found. Accepts a company URL, or a company name/domain (resolved internally at no extra charge)
POST /v1/company/search3
POST /v1/jobs/search3
POST /v1/linkedin/posts3
POST /v1/linkedin/engagement3
POST /v1/search/web3
GET /v1/usageFree
GET /v1/healthFreeNo auth required

Charging on misses

Most endpoints charge their full listed price even when the result is a clean “nothing found” — the vendor call still happened and cost Gravity real money either way, so it’s still a completed, billable lookup. The one exception is POST /v1/person/email: its 25-credit price is calibrated against a high hit rate for genuine finds, so it’s charged only on success. A miss refunds the reservation in full and returns credits_charged: 0.

Cached results

A response with "cached": true means the answer was served from Gravity’s cache instead of calling the vendor again — you’re still charged the normal price for it, since a cache hit still means the data was verified and delivered to you (it just cost Gravity $0 in vendor spend that time).