API Reference · v1
Indexed API
Programmatic access to 98,000+ company profiles, 22,200+ investors, and 127,600+ funding rounds. A REST API with predictable resource-oriented URLs, JSON-encoded responses, and standard HTTP codes. Updated continuously as new companies, rounds, and investors are researched and verified.
Coverage focuses on private-company, funding and investor research, rather than a complete registry of every business. Availability varies by company and market. A missing result is not an eligibility decision. Recorded coverage requests are reviewed manually; additions require verified identity and qualifying evidence.
https://indexed.vc/api/v1Make your first request
- 1
Create a key
Open API keys, create a key and save it when it appears. Prefer a browser test? ClickTest keythere to see a response and its actual credit cost. - 2
Set your key in your terminal
The examples read the key from an environment variable. Run this in your terminal, replacing the placeholder with your key. Keep it on your server or local machine; exclude it from browser code and public repositories.
export INDEXED_API_KEY='idx_YOUR_KEY_HERE'Look up stripe.com, or replace it with a company domain you want to research. This name/domain search works on every plan. Free includes 25 searches a day; within your quota this request costs zero credits. Filter-only searches require a paid plan.
curl --fail-with-body --max-time 30 'https://indexed.vc/api/v1/companies?domain=stripe.com&limit=1' \
-H "X-API-Key: $INDEXED_API_KEY"curl prints the JSON response. With Node.js 18 or later, save the example as lookup.mjs or the Python example as lookup.py and run the command shown; neither needs an additional library.
Read the result
A match returns a public company card in data. _revealed: false means funding-history and other depth remain locked; the public card is still usable. Detail/reveal endpoints unlock depth using credits. This is an Illustrative response excerpt; returned fields and current values vary by company.
{
"data": [
{
"name": "Stripe",
"slug": "stripe",
"website": "https://stripe.com",
"_revealed": false
}
]
}A successful quota-included search returns X-Credits-Cost: 0. Your actual quota and request limits are in the response headers. Add -i to curl to see them, and retain X-Request-Id when investigating a failure.
data: [] with a coverage acknowledgement. For 401, check the key; for 403, check endpoint access; for 429, inspect the error code and reset/retry headers. See errors before retrying.Next: get company depth, look up a list of domains, or check usage.
Coverage & missing results
Indexed focuses on technology and product companies globally, including bootstrapped businesses, and their funding and investor relationships. Software, hardware, platforms and scientific or engineering products are core areas. Coverage and field completeness vary by company and market; a missing result is not an eligibility decision.
Agencies, consultancies and ordinary nontechnology businesses are outside our current focus. Funding, company size or using software does not by itself establish fit. Mixed services and product businesses require evidence of what the exact company owns and sells; ambiguous cases are held for review.
Additions require verified identity and supporting evidence. Existing coverage is not a complete registry or a fully scope-reviewed catalogue. Decisions can be reviewed again when new product or identity evidence becomes available.
An unfiltered, first-page lookup using the explicit domain parameter returns an empty data array on a miss and a top-level coverage_requested boolean. true means the request was durably recorded for manual review; false means recording failed and you can retry. Neither admission nor a review date is guaranteed. Batch lookup reports this boolean on each miss item, with coverage_eta_days: null. Filtered, paginated and q-based searches do not return this acknowledgement; its absence does not mean recording failed.
For a company-domain miss, check meta.alternate_entities when present: the domain may belong to a visible investor with its own profile. Use the returned profile_path to identify that profile.
Authentication
The Indexed API uses API keys for authentication. Pass your key in the X-API-Key header on every request. All requests must be made over HTTPS. Calls without authentication will fail.
API keys start with idx_. Keep keys secret: do not expose them in browser-side code, public repositories, or client bundles. If a key is compromised, revoke it immediately from your API keys dashboard.
X-API-Key: idx_YOUR_KEY_HEREPOST /reveal paid from its 25 credits a month (about 8 full records), /industries, and /usage. Every paid plan (Silver and up) adds the bulk and automation surface — filter-only listing with sorting, bulk enrichment, tech/app-stack search, webhooks, and scheduled exports — plus far more credits and searches. Paid tiers differ by volume (searches per day, credits, keys, rate limit), not by whether depth exists.Enriching a list of company domains? The domain to company guide covers single and batch lookups, matching rules and what misses mean. For prices and coverage next to Crunchbase, PitchBook and others, see the comparison.
Credits & pricing
Search is included. Every account has a daily search quota that costs no credits: free: 25; silver: 250; gold: 1,000; platinum: 2,500; enterprise: 10,000. Enterprise values are defaults; contractual overrides may apply. The quota is per account across all of its keys and resets at 00:00 UTC. Past the quota a paid plan continues at 1 credit per page; the Free plan waits for the reset. A search that returns nothing never counts and is never charged. Every response carries meta.search_quota and X-Search-Quota-Remaining.
Depth — funding history, valuations, stacks, investor relationships — costs credits from your monthly allocation on every plan, Free included. All tiers use one unified credit pool, the same credits that power profile views, exports, and tech stack reveals in the dashboard; an entity you reveal in the app is _revealed in the API and vice versa. On Free,25 credits a month is about 8 full records, refreshed monthly.
| Action | Endpoint | Credits |
|---|---|---|
| Search (inside daily quota) | GET /companies · GET /investors | 0 |
| Search (past daily quota, paid plans) | GET /companies · GET /investors | 1 credit per nonempty page |
| Domain lookup (per hit) | POST /companies/lookup | 1 credit · misses free |
| Premium search (tech/app stack) | GET /companies?techStack=… or appStack=… | 3 credits first nonempty page · 0 within session |
| Entity (slim) | GET /companies/:slug?depth=slim | 1 |
| Entity (standard) | GET /companies/:slug?depth=standard | 2 |
| Entity (full) | GET /companies/:slug?depth=full | 3 |
| Reveal (per entity) | POST /reveal | 3 |
| Bulk enrich (per matched entity) | POST /enrich | 3 |
| Webhook event (per delivered) | any subscribed event delivery | 1 |
| Usage check · webhooks mgmt · test send | GET /usage · /webhooks · /webhooks/:id/test | free |
Entity cache: repeating a detail fetch for the same entity at the same depth is free for 12 months. A different depth or endpoint is not automatically free. Reveal and enrich share the existing entity reveal cache; search's _revealedflag reports that state, not a promise that every detail action is free. Concurrent requests honor these same cache rules without charging again for a cached action. Internal batch recovery reuses its original charge; a new HTTP request is a separate operation subject to these cache rules. While a search page still has unrevealed rows, its meta.depth names the detail endpoint that unlocks them and what it costs, so a client can act on a public card without reading these docs.
Out of credits? The response is a 402 CREDIT_LIMIT_REACHED carryingtop_up_url, upgrade_url and next_plan (the plan one step up, with its credits and price), so a client can recover without leaving the API. Enable overage at $0.065/credit in Settings, or buy a credit pack (500 credits for $25, up to 25% off at volume).
Cards & reveal state
On every plan a search result is the full public card — identical to what an anonymous visitor sees on indexed.vc, funding summary included. What you pay to unlock is depth: funding history, valuations, tech/app stacks, and investor relationships, via POST /reveal or the entity detail endpoints — on the Free plan too, from its monthly credits. Repeat access follows the action-specific cache rules above.
Each result in the data array carries a reveal flag:
| Shape | Meaning | Fields |
|---|---|---|
| { …card, _revealed: false } | Depth not yet unlocked by this account | All public card fields |
| { …card, _revealed: true } | Reveal recorded within the last 12 months | All public card fields |
The meta block on search responses includes revealed_count and unrevealed_count for the current page, so you know how many new reveals you'd need to unlock every entity's depth.
Exact company-domain misses may also include meta.alternate_entities when the domain belongs to a visible investor. These are identity-only navigation pointers; they never expose investor AUM, thesis, check sizes, contacts, portfolio, or deal data, and they do not turn an investor into a company match.
Filter by reveal state with the reveal_status query param:
| Value | Returns | Cost |
|---|---|---|
| all (default) | All matches, with reveal flags | Included in daily quota; 1 credit/page afterward on paid plans |
| revealed | Only entities you've revealed | search quota |
| unrevealed | Only entities with locked depth | search quota |
Every value is an ordinary search: free inside your daily quota, 1 credit per nonempty page past it on paid plans. An empty data page consumes no search quota or credits, even when meta.total is positive. Request-rate limits still apply. For reveal_status=unrevealed, all_revealed: true appears only when the first noncursor page verifies the complete, nonempty match set is already revealed. An empty partial or later page does not establish this. Follow hasMore and the normal pagination fields; an absent hint does not mean unrevealed matches exist.
# Only return entities you've already revealed (an ordinary search)
curl "https://indexed.vc/api/v1/companies?q=fintech&reveal_status=revealed" \
-H "X-API-Key: idx_YOUR_KEY_HERE"Rate limits
Rate limits are enforced per API key, sliding 60-second window. Limits vary by plan:
| Plan | Rate limit | Max keys | Reveal batch | Reveal/hour |
|---|---|---|---|---|
| Free | 30 req/min | 1 | 5 | 10 |
| Silver | 60 req/min | 3 | 5 | 50 |
| Gold | 120 req/min | 10 | 10 | 100 |
| Platinum | 240 req/min | 25 | 25 | 250 |
| Enterprise | 600 req/min default | 100 | 50 | 500 |
Every response includes rate-limit headers. When the limit is exceeded, you'll get a 429 with a Retry-After header.
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1712345678Errors
Errors return a flat JSON shape with a human-readable error message and a machine-readable code. Validation errors include a details array with field-level messages.
{
"error": "Credits exhausted. Top up to continue.",
"code": "CREDIT_LIMIT_REACHED",
"reason": "credits_exhausted",
"remaining": 0,
"top_up_url": "https://indexed.vc/settings?buy_pack=pack_5k",
"top_up_pack": { "id": "pack_5k", "credits": 5000, "price_cents": 20000 }
}
// Validation errors include per-field details:
{
"error": "Invalid query parameters",
"code": "VALIDATION_FAILED",
"details": [
{ "field": "limit", "message": "Number must be less than or equal to 100" }
]
}| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_FAILED | Invalid query params or request body |
| 400 | BAD_REQUEST | Malformed JSON or missing required field |
| 400 | BATCH_SIZE_EXCEEDED | Reveal batch exceeds tier limit |
| 401 | AUTH_REQUIRED | Missing X-API-Key header |
| 401 | AUTH_INVALID | Key is invalid, revoked, or expired |
| 400 | FREE_TIER_SEARCH_RESTRICTED | Free keys search by q or domain only, without funding filters or sorting, 10 rows × 3 pages; cursors require a paid plan |
| 403 | TIER_UPGRADE_REQUIRED | Endpoint needs a paid plan — bulk enrichment, webhooks, scheduled exports and tech-stack search are Silver or higher (entity detail and reveal are on every plan) |
| 403 | KEY_SUSPENDED | An automated enumeration rule suspended this key — the message names the rule; contact support to restore it |
| 403 | NO_CREDITS | Tier has no credit allocation |
| 404 | NOT_FOUND | Entity not found |
| 429 | RATE_LIMITED | Per-minute rate limit exceeded |
| 429 | SEARCH_QUOTA_EXCEEDED | Free plan: daily search quota reached — resets at 00:00 UTC (paid plans continue at 1 credit per page) |
| 429 | REVEAL_VELOCITY_EXCEEDED | Hourly reveal cap reached |
| 402 | CREDIT_LIMIT_REACHED | Credits exhausted — follow top_up_url or upgrade_url; next_plan names the step up |
| 500 | INTERNAL_ERROR | Server error — please retry |
| 503 | DATA_UNAVAILABLE | Requested entity sections could not be loaded. Retry later; failed preparation does not charge. |
| 503 | SYSTEM_ERROR | Credit service unavailable. A cache-read failure does not charge; a lost deduction response can have an unknown billing outcome. Check credit usage before retrying. |
Endpoints
The endpoints below cover the core use cases: searching and fetching companies + investors, batch domain resolution, revealing entity depth, and a free usage check.
Enriching a list of domains in Clay? The Clay integration guide has the exact HTTP API column settings and field paths.
/companiesIncluded in daily quota; 1 credit/page afterward on paid plansList companies
Search and filter companies by name, industry, geography, funding amount, and more.
Query parameters
qstring
Text search across name and description. A domain or URL in q (criteo.com) is resolved like domain= first, with domain_match and the same miss coverage_status; if no company owns it, q runs as a name search.
industriesstring
Comma-separated industry slugs
countriesstring
Comma-separated HQ countries (e.g., "United States")
employeesstring
Comma-separated employee ranges: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+. Unsupported ranges return 400 VALIDATION_FAILED. URL-encode + as %2B in 10001+.
minFundinginteger
Minimum total funding raised (USD). Totals sum itemized equity rounds, notes, SAFEs and grants; debt and exits are excluded.
maxFundinginteger
Maximum total funding raised (USD), on the same basis as minFunding.
operatingStatusstring
active, acquired, ipo, closed
domainstring
Exact registrable-domain lookup (e.g. stripe.com). Matches the domain + its subdomains, never superstrings (bluemercury.com ≠ mercury.com). Accepts bare domains or full URLs. Alias/rebrand hits include domain_match; zero-result lookups stay free. Unfiltered first-page domain= lookups include a top-level coverage_requested boolean (true when recorded for manual review; false if recording failed or the domain belongs to a company outside coverage scope) and a coverage_status (queued, not_queued, pending_enrichment, scope_review or not_in_coverage_scope) saying why it missed; filtered, paginated and q= searches can omit them. If a visible investor owns the domain, meta.alternate_entities returns an identity-only pointer to /investors/:slug.
minCompletenessinteger
Minimum data_completeness_score (0–64) — skip thin records
updated_sincestring
Incremental sync: only records modified at/after this ISO date/timestamp. Combine with cursor for delta pulls.
techStackstring
Premium: comma-separated tech names (React, PostgreSQL, etc.). 3cr + 15min session.
appStackstring
Premium: comma-separated SaaS tools (Salesforce, Slack, etc.). 3cr + 15min session.
stackMatchstring
any (default, OR) or all (AND) — for tech/app stack
sortstring
Relevance when omitted; total_funding_raised, name, last_funding_date, last_funding_amount, founded_year, data_completeness_score
reveal_statusstring
all (default), revealed, unrevealed
pageinteger
Page number, default 1
limitinteger
Results per page, max 100, default 25; Free capped at 10. meta.limit reports the effective size.
cursorstring
Paid plans only. Keyset cursor for sequential bulk pulls. Pass meta.next_cursor from the previous page; ignores page/sort.
curl "https://indexed.vc/api/v1/companies?q=fintech&minFunding=10000000&limit=10" \
-H "X-API-Key: idx_YOUR_KEY_HERE"/companies/lookup1 credit per hit · misses freeBatch company-domain lookup
Resolve up to 100 website domains in one call. Inputs are normalized and deduplicated in first-seen order. Each delivered hit costs 1 credit; individual GET domain searches use the daily search quota; misses are free and return coverage_requested: true after the request is durably recorded for manual review (false means recording failed and you can retry). This does not promise admission or coverage. Each miss also carries coverage_status: queued, not_queued, pending_enrichment (we hold the company but its profile is not yet servable), scope_review, or not_in_coverage_scope (held but outside coverage scope, so coverage_requested is false). coverage_eta_days is null because there is no guaranteed review date. Alias and former-domain hits carry domain_match with the queried host, current canonical host, and match source. If credits run out mid-batch, remaining known hits return insufficient_credits without exposing data.
Query parameters
domainsstring[]
Required body field, 1–100 bare domains or full URLs.
curl -X POST "https://indexed.vc/api/v1/companies/lookup" \
-H "X-API-Key: idx_YOUR_KEY_HERE" -H "Content-Type: application/json" \
-d '{"domains":["stripe.com","old-brand.example","missing.example"]}'
# Alias hit:
# {"domain":"old-brand.example","status":"hit","credits_charged":1,
# "data":{"website":"https://new-brand.example","domain_match":{
# "queried":"old-brand.example","canonical_domain":"new-brand.example",
# "matched_via":"former_website"}}}
# Miss item in the response data array:
# {"domain":"missing.example","status":"miss","coverage_requested":true,
# "coverage_eta_days":null,"credits_charged":0}/companies/:slug1–3 creditsGet a company
Retrieve a single company by slug. Use the depth param to control response size and cost.
Query parameters
depthstring
slim (1cr: identity only), standard (2cr, default: company scalars + reviewed ownership links), full (3cr: + funding rounds + investors + tech/app stack + valuations)
curl "https://indexed.vc/api/v1/companies/stripe?depth=full" \
-H "X-API-Key: idx_YOUR_KEY_HERE"/investorsIncluded in daily quota; 1 credit/page afterward on paid plansList investors
Search and filter investors — VCs, angels, PE firms, and more.
Query parameters
qstring
Text search across name
typesstring
vc, pe, angel, cvc, accelerator, family_office, etc.
stagesstring
Comma-separated stage preferences (seed, series_a, etc.)
countriesstring
Comma-separated HQ countries
minAuminteger
Minimum assets under management (USD)
minCompletenessinteger
Minimum data_completeness_score (0–64) — skip thin records
updated_sincestring
Incremental sync: only records modified at/after this ISO date/timestamp. Combine with cursor for delta pulls.
sortstring
Name when omitted (query matches ranked by relevance); name, aum, portfolio_count, total_investments, last_investment_date, data_completeness_score
reveal_statusstring
all (default), revealed, unrevealed
pageinteger
Page number, default 1
limitinteger
Results per page, max 100, default 25; Free capped at 10. meta.limit reports the effective size.
cursorstring
Paid plans only. Keyset cursor (see companies)
curl "https://indexed.vc/api/v1/investors?types=vc&countries=United+States" \
-H "X-API-Key: idx_YOUR_KEY_HERE"/investors/:slug1–3 creditsGet an investor
Retrieve a single investor by slug. Depth controls whether portfolio companies are included.
Query parameters
depthstring
slim (1cr: identity only), standard (2cr, default: profile scalars; premium capital/check-size fields stay null), full (3cr: + portfolio + investment history + premium fields)
curl "https://indexed.vc/api/v1/investors/sequoia-capital?depth=full" \
-H "X-API-Key: idx_YOUR_KEY_HERE"/reveal3 per entityReveal entities
Unlock the full depth of one or more entities from search results — funding history, valuations, and stacks. Previously-revealed entities are returned for free (cached for 12 months). Each successful reveal costs 3 credits.
Request body
entity_typestring · required
Either company or investor
idstring · optional
Single entity slug (shortcut for ids: ["…"])
idsstring[] · optional
Array of entity slugs. Batch limit: free: 5, silver: 5, gold: 10, platinum: 25, enterprise: 50.
curl -X POST "https://indexed.vc/api/v1/reveal" \
-H "X-API-Key: idx_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{"entity_type":"company","ids":["stripe","mercury","openai"]}'Response:
{
"data": [
{ "id": "a1…", "entity_type": "company", "status": "revealed",
"credits_charged": 3, "data": { "name": "Stripe", "slug": "stripe", … } },
{ "id": "b2…", "entity_type": "company", "status": "cached",
"credits_charged": 0, "data": { "name": "Mercury", … } },
{ "id": "openai", "entity_type": "company", "status": "not_found",
"credits_charged": 0 }
],
"summary": {
"total_requested": 3, "total_revealed": 1, "total_cached": 1,
"total_failed": 1, "total_credits_charged": 3
}
}Per-entity status values: revealed (just paid, 3 credits), cached (free, within 12 months),insufficient_credits (credits ran out mid-batch), not_found (unknown slug, 0 credits).
Partial batches are supported: if you request 10 reveals but only have 6 credits, 2 entities will be revealed and 8 will return insufficient_credits.
/enrich3 credits per matched entityBulk enrich by domain or slug
The GTM/RevOps query: submit up to a tier-limited batch of website domains and/or slugs, get the matched company records back in one call. Domain matching is EXACT registrable-domain (mercury.com → Mercury, never Bluemercury); you are never billed for a fuzzy match. Billed like reveal — 3 credits per newly-revealed company, cached matches free (12-month cache), unmatched inputs return not_found with no charge and a coverage_status (not_in_coverage_scope, scope_review, pending_enrichment, not_found, or invalid_domain when the input is not a domain and was never searched). This endpoint does not enqueue research. Normalized duplicate inputs are returned once, with domains before slugs and first-seen order within each group. Repeated matches to the same company are billed once. Domain identity uses the same most-specific-host rule as lookup: a parent website wins over subsidiary sub-sites, and current owners outrank former websites. Delivered domain hits include domain_match. Enrich still requires a publicly available profile; a lookup identity alone does not unlock data. Genuine ownership conflicts return 409 AMBIGUOUS_DOMAIN without billing.
Query parameters
domainsstring[]
Body field. Website domains, e.g. ["stripe.com","mercury.com"]
slugsstring[]
Body field. Indexed company slugs. Provide domains and/or slugs.
curl -X POST "https://indexed.vc/api/v1/enrich" \
-H "X-API-Key: idx_YOUR_KEY_HERE" -H "Content-Type: application/json" \
-d '{"domains":["stripe.com","mercury.com"]}'/webhooks1 credit per delivered event · management freeWebhook endpoints — data and coverage alerts (paid plans)
Subscribe a URL to funding, entity, or domain-coverage events. domain.coverage.added is opt-in and fires once per endpoint/domain when a domain that user previously missed becomes API-resolvable. Indexed POSTs a signed event to your endpoint within ~5 minutes. Manage with GET/PATCH/DELETE /webhooks/:id, verify connectivity with POST /webhooks/:id/test (free), and audit deliveries with GET /webhooks/:id/deliveries. Endpoint limits: Silver 2, Gold 3, Platinum 10, Enterprise 25. Full schema + signature-verification guide in the OpenAPI spec.
Query parameters
urlstring
Body. HTTPS endpoint (public host; internal/private addresses rejected).
event_typesstring[]
Body. One or more of funding_round.created, funding_round.updated, company.created, company.updated (requires list_id), investor.created, domain.coverage.added. Default ["funding_round.created"].
list_iduuid
Body. Scope to one of your saved company lists. Omit for all companies.
descriptionstring
Body. Optional label.
curl -X POST "https://indexed.vc/api/v1/webhooks" \
-H "X-API-Key: idx_YOUR_KEY_HERE" -H "Content-Type: application/json" \
-d '{"url":"https://hooks.example.com/indexed","list_id":"YOUR_LIST_ID"}'
# → 201 with a whsec_ secret (shown once). Verify each delivery:
# X-Indexed-Signature: t=<unix>,v1=<hex> where
# v1 = HMAC_SHA256(secret, "{t}.{raw_body}") (reject if |now-t| > 300s)
# Delivery is at-least-once — dedupe on X-Indexed-Delivery-Id; billing is
# exactly-once per delivery id./scheduled-exportsper run: 1 credit / 10 rows (3 credits with funding) · management freeScheduled exports — recurring file delivery (Platinum/Enterprise)
Set a cadence and Indexed delivers a fresh CSV or JSON export by email — a private, expiring signed link (7 days), never an attachment. Scope to a saved list or the full visible dataset (capped at 5,000 rows per run; contact us for full-dataset Enterprise feeds). Manage with GET /scheduled-exports and DELETE /scheduled-exports/:id. Limits: Platinum 5 schedules, Enterprise 20.
Query parameters
entitystring
Body. companies or investors.
columnsstring[]
Body. Registered export columns for the entity.
cadencestring
Body. daily, weekly, or monthly.
formatstring
Body. csv (default) or json.
include_fundingboolean
Body. Append full funding history (3x credit rate), including debt and exits; each row carries counts_toward_total (Yes/No) for whether it sums into total_funding_raised.
list_iduuid
Body. Scope to one of your saved lists. Omit for the full visible dataset.
curl -X POST "https://indexed.vc/api/v1/scheduled-exports" \
-H "X-API-Key: idx_YOUR_KEY_HERE" -H "Content-Type: application/json" \
-d '{"entity":"companies","columns":["name","website","hq_country","total_funding_raised"],"cadence":"weekly","format":"json"}'
# → 201; every week a signed download link lands in your account email./usagefreeCheck usage
Check your current credit balance, rate limit, reveal caps, and renewal date. This endpoint does not consume credits.
curl "https://indexed.vc/api/v1/usage" \
-H "X-API-Key: idx_YOUR_KEY_HERE"Pagination
List endpoints return paginated results. Use page and limit to navigate. Every list response includes a meta object with total, page, limit, and hasMore.
{
"data": [ … ],
"meta": {
"total": 3124,
"page": 1,
"limit": 25,
"hasMore": true
}
}Paid search page size is up to 100; Free is capped at 10 rows and 3 pages. The response's meta.limit reports the effective page size after plan caps. To navigate, increment page until hasMore is false.
Cursor pagination (bulk pulls): for large sequential exports, pass ?cursor= using meta.next_cursor from the previous page. Cursor mode requires a paid plan and uses slug keysets rather than page/sort. Dataset changes can still affect membership; iterate until next_cursor is null.
Versioning
The API is currently at version v1. We commit to backwards compatibility within a major version: new optional parameters and response fields may be added, but existing fields and behaviors will not break.
Breaking changes ship under a new version path (e.g., /api/v2). We'll announce deprecation at least 6 months before removing a version.
Machine-readable spec: the full OpenAPI 3.1 definition is published at indexed.vc/openapi.yaml — import it into Postman, Insomnia, or your codegen tool.
Try it on your own list
Paste a few domains to see which companies we cover. The same lookup runs in the API and in Enrich my list.
Ready to build?
Every plan includes an API key — free tier included, with credits that spend on real depth. Create a key and pull your first full record in under a minute, then upgrade to any paid plan for volume, bulk enrichment, and webhooks.
Questions? hello@indexed.vc