Skip to main content
Horizon is a REST API for LinkedIn person/company data, email finding and verification, job postings, and web search — billed by prepaid credits, not subscriptions.
Just want to ask questions in Slack, no code required? See Add Horizon to Slack instead — this page is for the REST API / MCP integration path.

1. Get an API key

Every new key starts with 200 free trial credits, enough to try every endpoint before you need to add more — see Authentication for the two ways to get one. Keys look like gk_live_.... See Authentication for the full format and how to rotate one.

2. Make your first request

The example below calls POST /v1/person/enrich, which looks up a LinkedIn profile by URL (or by name + company) for 2 credits.
curl https://horizon.gravitygtm.com/api/v1/person/enrich \
  -X POST \
  -H "Authorization: Bearer gk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "linkedin_url": "https://www.linkedin.com/in/example"
  }'
const res = await fetch("https://horizon.gravitygtm.com/api/v1/person/enrich", {
  method: "POST",
  headers: {
    Authorization: "Bearer gk_live_YOUR_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    linkedin_url: "https://www.linkedin.com/in/example",
  }),
});

const result = await res.json();
console.log(result);
import requests

response = requests.post(
    "https://horizon.gravitygtm.com/api/v1/person/enrich",
    headers={"Authorization": "Bearer gk_live_YOUR_KEY"},
    json={"linkedin_url": "https://www.linkedin.com/in/example"},
    timeout=30,
)

print(response.json())
You can also identify the person by name + company instead of linkedin_url. Pass include_email: true to also attempt a verified email find on the same call (this raises the price to 25 credits, only charged if an email is actually found — see Credits & Pricing).

3. Read the response

Every successful call returns the same envelope shape, regardless of endpoint:
{
  "data": {
    "linkedin_url": "https://www.linkedin.com/in/example",
    "name": "...",
    "headline": "...",
    "position": "..."
  },
  "credits_charged": 2,
  "credits_remaining": 198,
  "cached": false,
  "request_id": "b3f1..."
}
  • data — the vendor payload for this endpoint.
  • credits_charged / credits_remaining — what this call cost and what’s left on your key.
  • cachedtrue if this result was served from cache rather than a live vendor call (still charged normally).
  • request_id — include this if you ever need support for a specific call.
If the profile can’t be found, you’ll get a 422 with no charge deducted beyond what the endpoint’s miss policy specifies — see Errors & Rate Limits.

Next steps