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/v1

Make your first request

  1. 1

    Create a key

    Open API keys, create a key and save it when it appears. Prefer a browser test? Click Test key there to see a response and its actual credit cost.
  2. 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.
bash
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.

json
{
  "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.

Empty results? Use the company's own domain and check spelling. A missing company can return 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.

http
X-API-Key: idx_YOUR_KEY_HERE
Every plan gets an API key, and every plan can pull depth. A free key needs no card. Free gets company & investor search by name or domain (full public cards, 25 searches a day), entity detail and POST /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.

ActionEndpointCredits
Search (inside daily quota)GET /companies · GET /investors0
Search (past daily quota, paid plans)GET /companies · GET /investors1 credit per nonempty page
Domain lookup (per hit)POST /companies/lookup1 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=slim1
Entity (standard)GET /companies/:slug?depth=standard2
Entity (full)GET /companies/:slug?depth=full3
Reveal (per entity)POST /reveal3
Bulk enrich (per matched entity)POST /enrich3
Webhook event (per delivered)any subscribed event delivery1
Usage check · webhooks mgmt · test sendGET /usage · /webhooks · /webhooks/:id/testfree

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:

ShapeMeaningFields
{ …card, _revealed: false }Depth not yet unlocked by this accountAll public card fields
{ …card, _revealed: true }Reveal recorded within the last 12 monthsAll 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:

ValueReturnsCost
all (default)All matches, with reveal flagsIncluded in daily quota; 1 credit/page afterward on paid plans
revealedOnly entities you've revealedsearch quota
unrevealedOnly entities with locked depthsearch 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.

bash
# 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:

PlanRate limitMax keysReveal batchReveal/hour
Free30 req/min1510
Silver60 req/min3550
Gold120 req/min1010100
Platinum240 req/min2525250
Enterprise600 req/min default10050500

Every response includes rate-limit headers. When the limit is exceeded, you'll get a 429 with a Retry-After header.

http
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1712345678

Errors

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.

json
{
  "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" }
  ]
}
StatusCodeMeaning
400VALIDATION_FAILEDInvalid query params or request body
400BAD_REQUESTMalformed JSON or missing required field
400BATCH_SIZE_EXCEEDEDReveal batch exceeds tier limit
401AUTH_REQUIREDMissing X-API-Key header
401AUTH_INVALIDKey is invalid, revoked, or expired
400FREE_TIER_SEARCH_RESTRICTEDFree keys search by q or domain only, without funding filters or sorting, 10 rows × 3 pages; cursors require a paid plan
403TIER_UPGRADE_REQUIREDEndpoint 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)
403KEY_SUSPENDEDAn automated enumeration rule suspended this key — the message names the rule; contact support to restore it
403NO_CREDITSTier has no credit allocation
404NOT_FOUNDEntity not found
429RATE_LIMITEDPer-minute rate limit exceeded
429SEARCH_QUOTA_EXCEEDEDFree plan: daily search quota reached — resets at 00:00 UTC (paid plans continue at 1 credit per page)
429REVEAL_VELOCITY_EXCEEDEDHourly reveal cap reached
402CREDIT_LIMIT_REACHEDCredits exhausted — follow top_up_url or upgrade_url; next_plan names the step up
500INTERNAL_ERRORServer error — please retry
503DATA_UNAVAILABLERequested entity sections could not be loaded. Retry later; failed preparation does not charge.
503SYSTEM_ERRORCredit 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.

GET/companiesIncluded in daily quota; 1 credit/page afterward on paid plans

List companies

Search and filter companies by name, industry, geography, funding amount, and more.

Query parameters

q

string

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.

industries

string

Comma-separated industry slugs

countries

string

Comma-separated HQ countries (e.g., "United States")

employees

string

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+.

minFunding

integer

Minimum total funding raised (USD). Totals sum itemized equity rounds, notes, SAFEs and grants; debt and exits are excluded.

maxFunding

integer

Maximum total funding raised (USD), on the same basis as minFunding.

operatingStatus

string

active, acquired, ipo, closed

domain

string

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.

minCompleteness

integer

Minimum data_completeness_score (0–64) — skip thin records

updated_since

string

Incremental sync: only records modified at/after this ISO date/timestamp. Combine with cursor for delta pulls.

techStack

string

Premium: comma-separated tech names (React, PostgreSQL, etc.). 3cr + 15min session.

appStack

string

Premium: comma-separated SaaS tools (Salesforce, Slack, etc.). 3cr + 15min session.

stackMatch

string

any (default, OR) or all (AND) — for tech/app stack

sort

string

Relevance when omitted; total_funding_raised, name, last_funding_date, last_funding_amount, founded_year, data_completeness_score

reveal_status

string

all (default), revealed, unrevealed

page

integer

Page number, default 1

limit

integer

Results per page, max 100, default 25; Free capped at 10. meta.limit reports the effective size.

cursor

string

Paid plans only. Keyset cursor for sequential bulk pulls. Pass meta.next_cursor from the previous page; ignores page/sort.

bash
curl "https://indexed.vc/api/v1/companies?q=fintech&minFunding=10000000&limit=10" \
  -H "X-API-Key: idx_YOUR_KEY_HERE"
POST/companies/lookup1 credit per hit · misses free

Batch 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

domains

string[]

Required body field, 1–100 bare domains or full URLs.

bash
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}
GET/companies/:slug1–3 credits

Get a company

Retrieve a single company by slug. Use the depth param to control response size and cost.

Query parameters

depth

string

slim (1cr: identity only), standard (2cr, default: company scalars + reviewed ownership links), full (3cr: + funding rounds + investors + tech/app stack + valuations)

bash
curl "https://indexed.vc/api/v1/companies/stripe?depth=full" \
  -H "X-API-Key: idx_YOUR_KEY_HERE"
GET/investorsIncluded in daily quota; 1 credit/page afterward on paid plans

List investors

Search and filter investors — VCs, angels, PE firms, and more.

Query parameters

q

string

Text search across name

types

string

vc, pe, angel, cvc, accelerator, family_office, etc.

stages

string

Comma-separated stage preferences (seed, series_a, etc.)

countries

string

Comma-separated HQ countries

minAum

integer

Minimum assets under management (USD)

minCompleteness

integer

Minimum data_completeness_score (0–64) — skip thin records

updated_since

string

Incremental sync: only records modified at/after this ISO date/timestamp. Combine with cursor for delta pulls.

sort

string

Name when omitted (query matches ranked by relevance); name, aum, portfolio_count, total_investments, last_investment_date, data_completeness_score

reveal_status

string

all (default), revealed, unrevealed

page

integer

Page number, default 1

limit

integer

Results per page, max 100, default 25; Free capped at 10. meta.limit reports the effective size.

cursor

string

Paid plans only. Keyset cursor (see companies)

bash
curl "https://indexed.vc/api/v1/investors?types=vc&countries=United+States" \
  -H "X-API-Key: idx_YOUR_KEY_HERE"
GET/investors/:slug1–3 credits

Get an investor

Retrieve a single investor by slug. Depth controls whether portfolio companies are included.

Query parameters

depth

string

slim (1cr: identity only), standard (2cr, default: profile scalars; premium capital/check-size fields stay null), full (3cr: + portfolio + investment history + premium fields)

bash
curl "https://indexed.vc/api/v1/investors/sequoia-capital?depth=full" \
  -H "X-API-Key: idx_YOUR_KEY_HERE"
POST/reveal3 per entity

Reveal 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_type

string · required

Either company or investor

id

string · optional

Single entity slug (shortcut for ids: ["…"])

ids

string[] · optional

Array of entity slugs. Batch limit: free: 5, silver: 5, gold: 10, platinum: 25, enterprise: 50.

bash
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:

json
{
  "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.

POST/enrich3 credits per matched entity

Bulk 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

domains

string[]

Body field. Website domains, e.g. ["stripe.com","mercury.com"]

slugs

string[]

Body field. Indexed company slugs. Provide domains and/or slugs.

bash
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"]}'
POST/webhooks1 credit per delivered event · management free

Webhook 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

url

string

Body. HTTPS endpoint (public host; internal/private addresses rejected).

event_types

string[]

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_id

uuid

Body. Scope to one of your saved company lists. Omit for all companies.

description

string

Body. Optional label.

bash
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.
POST/scheduled-exportsper run: 1 credit / 10 rows (3 credits with funding) · management free

Scheduled 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

entity

string

Body. companies or investors.

columns

string[]

Body. Registered export columns for the entity.

cadence

string

Body. daily, weekly, or monthly.

format

string

Body. csv (default) or json.

include_funding

boolean

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_id

uuid

Body. Scope to one of your saved lists. Omit for the full visible dataset.

bash
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.
GET/usagefree

Check usage

Check your current credit balance, rate limit, reveal caps, and renewal date. This endpoint does not consume credits.

bash
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.

json
{
  "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.

Domains, URLs or work emails, up to 25 to check here

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