{"openapi":"3.1.0","info":{"title":"LeadOcean API","version":"1.0.0","summary":"B2B people and company data — search, enrich and verify, over REST or MCP.","description":"B2B people and company data for software and for agents. Search a corpus of people and companies by filter,\nenrich one person or one company into a full profile, and ask four narrow questions about a contact point —\nover plain REST with an API key, or through the hosted MCP server with no key at all.\n\nEverything below is generated from the running API, so it describes the service as it is right now.\n\n## Base URL and authentication\n\n```\nhttps://api.leadocean.io\n```\n\nSend your key in the `x-api-key` header on every request. Keys carry scopes — `search` and `enrich` — and a key\nwithout the scope an endpoint needs is answered `403` rather than an empty result, so a permissions mistake never\nlooks like a data gap. Create, view and rotate keys in your account.\n\n```bash\ncurl -s \"https://api.leadocean.io/v1/people/enrich?linkedin_url=https://www.linkedin.com/in/williamhgates\" \\\n  -H \"x-api-key: $LEADOCEAN_API_KEY\"\n```\n\n## What a call costs\n\nUsage is counted in **records**, never in requests. One person or one company returned is one record: a search page\nof 25 rows costs 25, an enrichment costs 1 whether or not it finds anything, and each of the four contact endpoints\ncosts 1 for the same reason — they are doors onto the same lookup.\n\nSizing an audience is cheap and separate from pulling it: add `count=true` and the total comes back in `meta.total`,\ncapped at 100,000 — or withheld as `null` with `meta.totalWithheld` when a filter could not be applied, never published as a\nnumber that does not mean what it looks like. A search row also publishes `has_email`, `email_status` and `email_type` as flags, so \"does this\nperson have a deliverable address\" is answered before you buy the address. Requests we reject are not counted.\n\n## Rate limits, quotas and errors\n\nEvery response carries its own limits in headers: `X-RateLimit-Limit`, `X-Quota-State`, `X-Quota-Reset` and\n`X-Quota-Contact`. A `429` means you went faster than your account’s per-second rate — wait for `Retry-After` and\nretry. Running out of records does not cut you off on a paid plan: the API keeps answering at a reduced rate and says\nso in `meta.notice` and `X-Quota-State` until the allowance resets.\n\nErrors are a JSON envelope with `success: false` and a machine-readable `error.code`; the HTTP status and that code\nalways agree.\n\n## What the email statuses mean\n\n- **`verified`** — **we** sent to the address and the server accepted it. Not a claim inherited from a data supplier:\n  a supplier’s word alone is published as `untested`, never as verified.\n- **`catch_all_valid`** — a mailbox on a catch-all domain whose existence we confirmed through the provider's identity check (Microsoft 365 managed tenants and Google Workspace). Safe to send; ranks just under `verified`.\n- **`catch_all`** — the domain accepts everything, so no per-address test can confirm or refute it. Labelled rather\n  than quietly mixed in with the checked ones.\n- **`untested`** — we hold the address and have not checked it ourselves.\n- **`invalid`**, **`risky`**, **`disposable`**, **`role`** — checked and not safe to send to.\n\n`verified_batch_date` is the date of the verification run that confirmed an address. A whole batch shares one date,\nso read it as \"checked in that run\", not as a timestamp for that single address. `null` there means the verdict was\nnot ours — not that the address is bad.\n\n## Naming a person\n\nAny of `linkedin_url`, `email`, `phone` or `person_id` identifies a person. `person_id` is the one that always works:\nabout a fifth of the people search can find have no LinkedIn URL, and search publishes email flags rather than\naddresses, so without the id that cohort would be findable and not enrichable. It is on every search row at\n`meta.source_ids.person_id` and costs no more to use than any other key.\n\n`person_id` names a **record**; `person_group_id` names the **person**. We hold more than one record for some people,\nand which one a lookup lands on depends on the key you used, so the same human can come back under different\n`person_id`s through different contact points. Two records sharing a `person_group_id` are the same person as far as\nour de-duplication knows. Compare it; never look it up — `person_id` stays the key you send back.\n\n## For agents\n\nThe hosted MCP server at `https://api.leadocean.io/mcp` gives Claude, ChatGPT, Cursor, Codex and the rest the same surface as tools,\nover OAuth 2.1 — your assistant signs in to your account and never handles a key. Set-up per client is in the guides.\n\n## Guides and machine-readable copies\n\nThe long-form guides explain *why* you would call something and what the answers mean: [enrich a person](https://leadocean.io/docs/enrich),\n[company lookup](https://leadocean.io/docs/company), [contact endpoints](https://leadocean.io/docs/contact), [search](https://leadocean.io/docs/search),\n[filter reference](https://leadocean.io/docs/filters), [records, limits and errors](https://leadocean.io/docs/limits) and [MCP for agents](https://leadocean.io/docs/mcp).\n\nThe same surface in three machine-readable forms: [openapi.json](https://api.leadocean.io/openapi.json) for code generation,\n[llms.txt](https://api.leadocean.io/llms.txt) for a short index an agent can read, and [llms-full.txt](https://api.leadocean.io/llms-full.txt) for the\nexhaustive field-by-field description. All three are generated from the running API and cannot drift from it.","contact":{"url":"https://leadocean.io"}},"servers":[{"url":"https://api.leadocean.io"}],"security":[{"ApiKey":[]}],"tags":[{"name":"Search","description":"Find people and companies by filter. Every row returned counts one record; sizing a search with a count costs nothing."},{"name":"Enrichment","description":"Everything we hold about one person or one company, from a LinkedIn URL, a work email, a phone number or a person_id."},{"name":"Contact (v2)","description":"Four doors that each answer one narrow question — the current work email, the personal addresses, the phone numbers, or who a contact point belongs to — instead of returning a whole person to sift. Doors onto the same lookup enrichment makes: same cached record, same one-record price. Stable since 2026-09-22."},{"name":"Reference","description":"The filter contract and the enum catalogues behind it. Free to read."},{"name":"Export","description":"Bulk CSV export of people — asynchronous: start, poll, download. Rows bill like search results, reserved up front."},{"name":"Account","description":"What you have spent and what is left."}],"paths":{"/v1/search":{"x-canonical":"/v1/people/search","get":{"tags":["Search"],"operationId":"searchPeople","summary":"Search people (flat path)","description":"Filters combine with AND; multiple values inside one filter combine with OR. Each person returned counts one record. Page with meta.nextCursor. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},"description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},{"name":"profileKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeProfileKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"description":"profile keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"title","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"job title keywords; wrap a value in [brackets] for an exact match"},"description":"job title keywords; wrap a value in [brackets] for an exact match","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeTitle","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"job titles to exclude"},"description":"job titles to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"seniority","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/seniority"},"description":"LeadOcean seniority band (mapped onto job_level upstream)"},"description":"LeadOcean seniority band (mapped onto job_level upstream)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"jobLevel","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/job_level"},"description":"seniority band as the data source defines it"},"description":"seniority band as the data source defines it","style":"form","explode":false,"x-format":"comma-separated"},{"name":"jobFunction","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/job_function"},"description":"department or function of the current role"},"description":"department or function of the current role","style":"form","explode":false,"x-format":"comma-separated"},{"name":"country","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"where the person is located"},"description":"where the person is located","style":"form","explode":false,"x-format":"comma-separated"},{"name":"continent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent the person is in"},"description":"continent the person is in","style":"form","explode":false,"x-format":"comma-separated"},{"name":"salesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region the person is in"},"description":"commercial region the person is in","style":"form","explode":false,"x-format":"comma-separated"},{"name":"city","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"city keywords for the person"},"description":"city keywords for the person","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"cities to exclude"},"description":"cities to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"education","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"school, degree or year phrases"},"description":"school, degree or year phrases","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minConnections","in":"query","required":false,"schema":{"type":"integer","description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"domain","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company domain the person works at"},"description":"company domain the person works at","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"description":"company name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeCompanyName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"description":"company name keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyLinkedin","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs"},"description":"company LinkedIn URLs","style":"form","explode":false,"x-format":"comma-separated"},{"name":"industry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"description":"company industry","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeIndustry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"description":"industries to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"description":"legal type of the company","style":"form","explode":false,"x-format":"comma-separated"},{"name":"employeeRange","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"minRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFounded","in":"query","required":false,"schema":{"type":"integer","description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFounded","in":"query","required":false,"schema":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFollowers","in":"query","required":false,"schema":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"fundingType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the last funding round"},"description":"type of the last funding round","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},{"name":"minLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"investors","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"lead investor keywords"},"description":"lead investor keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"naics","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"NAICS codes"},"description":"NAICS codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"sic","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"SIC codes"},"description":"SIC codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"keywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"description":"profile keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCountry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"description":"company headquarters country","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"description":"company headquarters city keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqState","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"description":"company headquarters state or region","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqContinent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"description":"continent of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqSalesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"description":"commercial region of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologies","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"technologies detected on the company website (own data only)"},"description":"technologies detected on the company website (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologyCategories","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"emailStatus","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/email_status"},"description":"email deliverability (own data only)"},"description":"email deliverability (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"emailType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/email_type"},"description":"work or personal email (own data only)"},"description":"work or personal email (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hasEmail","in":"query","required":false,"schema":{"type":"boolean","description":"only people with, or without, a known email (own data only)"},"description":"only people with, or without, a known email (own data only)"},{"name":"hasPhone","in":"query","required":false,"schema":{"type":"boolean","description":"only people with, or without, a known phone number (own data only)"},"description":"only people with, or without, a known phone number (own data only)"},{"name":"reachable","in":"query","required":false,"schema":{"type":"string","description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},"description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"opaque, from meta.nextCursor"},"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"description":"records per page, 1–100"},{"name":"facets","in":"query","required":false,"schema":{"type":"boolean","description":"also return counts by seniority, country, industry and company size"},"description":"also return counts by seniority, country, industry and company size"},{"name":"count","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Also return the total number of matches in meta.total, capped at 100,000. Opt-in because it is work: a page is ranked either way, a total has to be tallied. FREE WITH limit=1: that combination is a sizing call, costs no records however often you send it, and answers with an empty `data` and `meta.countOnly: true` — the number is the answer, and a count that handed back its row would be a page of one record for nothing. With any larger limit you are buying the page as usual and the total rides along with it. Accepted on the JSON body form too. If a requested filter could not be applied (see unsupportedFilters), the total is withheld — null, with meta.totalWithheld saying which filter — rather than published as a number that does not mean what it looks like."}],"responses":{"200":{"description":"Matching people, as a thin projection — no contact points. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"402":{"$ref":"#/components/responses/Quota"},"429":{"$ref":"#/components/responses/RateLimit"}}},"post":{"tags":["Search"],"operationId":"searchPeoplePost","summary":"Search people (flat path, JSON body)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},"profileKeywords":{"type":"array","items":{"type":"string"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it"},"excludeProfileKeywords":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"title":{"type":"array","items":{"type":"string"},"description":"job title keywords; wrap a value in [brackets] for an exact match"},"excludeTitle":{"type":"array","items":{"type":"string"},"description":"job titles to exclude"},"seniority":{"type":"array","items":{"$ref":"#/components/schemas/seniority"},"description":"LeadOcean seniority band (mapped onto job_level upstream)"},"jobLevel":{"type":"array","items":{"$ref":"#/components/schemas/job_level"},"description":"seniority band as the data source defines it"},"jobFunction":{"type":"array","items":{"$ref":"#/components/schemas/job_function"},"description":"department or function of the current role"},"country":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"where the person is located"},"continent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent the person is in"},"salesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region the person is in"},"city":{"type":"array","items":{"type":"string"},"description":"city keywords for the person"},"excludeCity":{"type":"array","items":{"type":"string"},"description":"cities to exclude"},"education":{"type":"array","items":{"type":"string"},"description":"school, degree or year phrases"},"minConnections":{"type":"integer","description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"domain":{"type":"array","items":{"type":"string"},"description":"company domain the person works at"},"companyName":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"excludeCompanyName":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"companyLinkedin":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs"},"industry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"excludeIndustry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"companyType":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"employeeRange":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees"},"minEmployees":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"maxEmployees":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"minRevenue":{"type":"integer","description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},"maxRevenue":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"minFounded":{"type":"integer","description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"maxFounded":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"minFollowers":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"fundingType":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the last funding round"},"minFunding":{"type":"integer","description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},"maxFunding":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"minLastFundingYear":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"maxLastFundingYear":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"investors":{"type":"array","items":{"type":"string"},"description":"lead investor keywords"},"naics":{"type":"array","items":{"type":"string"},"description":"NAICS codes"},"sic":{"type":"array","items":{"type":"string"},"description":"SIC codes"},"keywords":{"type":"array","items":{"type":"string"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together"},"excludeKeywords":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"hqCountry":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"hqCity":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"hqState":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"hqContinent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"hqSalesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"technologies":{"type":"array","items":{"type":"string"},"description":"technologies detected on the company website (own data only)"},"technologyCategories":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"emailStatus":{"type":"array","items":{"$ref":"#/components/schemas/email_status"},"description":"email deliverability (own data only)"},"emailType":{"type":"array","items":{"$ref":"#/components/schemas/email_type"},"description":"work or personal email (own data only)"},"hasEmail":{"type":"boolean","description":"only people with, or without, a known email (own data only)"},"hasPhone":{"type":"boolean","description":"only people with, or without, a known phone number (own data only)"},"reachable":{"type":"string","description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},"cursor":{"type":"string","description":"opaque, from meta.nextCursor"},"limit":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"facets":{"type":"boolean","description":"also return counts by seniority, country, industry and company size"}}}}}},"responses":{"200":{"description":"Matching people, as a thin projection — no contact points. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/search/companies":{"x-canonical":"/v1/companies/search","get":{"tags":["Search"],"operationId":"searchCompanies","summary":"Search companies (flat path)","description":"Each company returned counts one record. Page with meta.nextCursor. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"free text over company name and description"},"description":"free text over company name and description"},{"name":"name","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"description":"company name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"description":"company name keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"domain","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company website domains"},"description":"company website domains","style":"form","explode":false,"x-format":"comma-separated"},{"name":"linkedin","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works","style":"form","explode":false,"x-format":"comma-separated"},{"name":"industry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"description":"company industry","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeIndustry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"description":"industries to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"description":"legal type of the company","style":"form","explode":false,"x-format":"comma-separated"},{"name":"employeeRange","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket — broader and cheaper than min/maxEmployees"},"description":"headcount bracket — broader and cheaper than min/maxEmployees","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"minRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFollowers","in":"query","required":false,"schema":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"minFounded","in":"query","required":false,"schema":{"type":"integer","description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFounded","in":"query","required":false,"schema":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"fundingType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the most recent funding round"},"description":"type of the most recent funding round","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},{"name":"minLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"investors","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"lead investor name keywords"},"description":"lead investor name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"naics","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"NAICS industry codes"},"description":"NAICS industry codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"sic","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"SIC industry codes"},"description":"SIC industry codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"keywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"keywords across company description, specialties and categories"},"description":"keywords across company description, specialties and categories","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company keywords to exclude"},"description":"company keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCountry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"description":"company headquarters country","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"description":"company headquarters city keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqState","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"description":"company headquarters state or region","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqContinent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"description":"continent of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqSalesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"description":"commercial region of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologies","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"detected technologies (own data only)"},"description":"detected technologies (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologyCategories","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"opaque, from meta.nextCursor"},"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"description":"records per page, 1–100"},{"name":"count","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Also return the total number of matches in meta.total, capped at 100,000. Opt-in because it is work: a page is ranked either way, a total has to be tallied. FREE WITH limit=1: that combination is a sizing call, costs no records however often you send it, and answers with an empty `data` and `meta.countOnly: true` — the number is the answer, and a count that handed back its row would be a page of one record for nothing. With any larger limit you are buying the page as usual and the total rides along with it. Accepted on the JSON body form too. If a requested filter could not be applied (see unsupportedFilters), the total is withheld — null, with meta.totalWithheld saying which filter — rather than published as a number that does not mean what it looks like."}],"responses":{"200":{"description":"Matching companies. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}},"post":{"tags":["Search"],"operationId":"searchCompaniesPost","summary":"Search companies (flat path, JSON body)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","description":"free text over company name and description"},"name":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"excludeName":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"domain":{"type":"array","items":{"type":"string"},"description":"company website domains"},"linkedin":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works"},"industry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"excludeIndustry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"companyType":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"employeeRange":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket — broader and cheaper than min/maxEmployees"},"minEmployees":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"maxEmployees":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"minRevenue":{"type":"integer","description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},"maxRevenue":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"minFollowers":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"minFounded":{"type":"integer","description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"maxFounded":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"fundingType":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the most recent funding round"},"minFunding":{"type":"integer","description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},"maxFunding":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"minLastFundingYear":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"maxLastFundingYear":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"investors":{"type":"array","items":{"type":"string"},"description":"lead investor name keywords"},"naics":{"type":"array","items":{"type":"string"},"description":"NAICS industry codes"},"sic":{"type":"array","items":{"type":"string"},"description":"SIC industry codes"},"keywords":{"type":"array","items":{"type":"string"},"description":"keywords across company description, specialties and categories"},"excludeKeywords":{"type":"array","items":{"type":"string"},"description":"company keywords to exclude"},"hqCountry":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"hqCity":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"hqState":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"hqContinent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"hqSalesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"technologies":{"type":"array","items":{"type":"string"},"description":"detected technologies (own data only)"},"technologyCategories":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"cursor":{"type":"string","description":"opaque, from meta.nextCursor"},"limit":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"}}}}}},"responses":{"200":{"description":"Matching companies. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v2/people/email/work":{"get":{"tags":["Contact (v2)"],"operationId":"v2WorkEmail","summary":"Get the current work email","x-stability":"stable","description":"Returns ONE address, or `data: null`. STABLE — the shape, the prices and the rules behind the data are all promises now. Returns only addresses at the person's CURRENT employer's domain (email type `work`) whose deliverability was actually checked (`verified`), whose mailbox we confirmed on a catch-all domain (`catch_all_valid`), or whose domain accepts everything (`catch_all`). A former employer's address (`work_other`) is never returned here, and neither is an address nobody has tested — so `data: null` means \"none that qualify\", not \"no work email\" — this door has no `found` field, and no `meta`, so `at_current_employer` is not reported; Each address carries verified_batch_date, the run we checked it in; null there means the check was not ours, NOT that it is unverified. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","parameters":[{"name":"linkedin_url","in":"query","schema":{"type":"string","format":"uri"},"description":"A personal LinkedIn profile URL (linkedin.com/in/...)."},{"name":"contact_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The numeric id a people-search row carries at meta.source_ids.person_id. `person_id` is accepted as the same field under its original name; send one of the two, never both."},{"name":"person_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The original name of contact_id. Identical behaviour."}],"responses":{"200":{"description":"The one best current, checked address — or data:null when the person is real and no address of theirs qualifies. The work door PREFERS an address at the domain the record gives as the current employer over the source ordering, which is what stops a merged record answering with another company address; that preference is applied and is NOT reported in the response.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"oneOf":[{"$ref":"#/components/schemas/V2Email"},{"type":"null"}]}}}}}},"404":{"description":"We hold no record for this person at all"}}},"post":{"tags":["Contact (v2)"],"operationId":"v2WorkEmailPost","summary":"Get the current work email (JSON body)","x-stability":"stable","description":"Returns ONE address, or `data: null`. STABLE — the shape, the prices and the rules behind the data are all promises now. Returns only addresses at the person's CURRENT employer's domain (email type `work`) whose deliverability was actually checked (`verified`), whose mailbox we confirmed on a catch-all domain (`catch_all_valid`), or whose domain accepts everything (`catch_all`). A former employer's address (`work_other`) is never returned here, and neither is an address nobody has tested — so `data: null` means \"none that qualify\", not \"no work email\" — this door has no `found` field, and no `meta`, so `at_current_employer` is not reported; Each address carries verified_batch_date, the run we checked it in; null there means the check was not ours, NOT that it is unverified. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of linkedin_url or contact_id (person_id is the same field).","properties":{"linkedin_url":{"type":"string","format":"uri"},"contact_id":{"type":"string"},"person_id":{"type":"string"}}}}}},"responses":{"200":{"description":"The one best current, checked address — or data:null when the person is real and no address of theirs qualifies. The work door PREFERS an address at the domain the record gives as the current employer over the source ordering, which is what stops a merged record answering with another company address; that preference is applied and is NOT reported in the response.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"oneOf":[{"$ref":"#/components/schemas/V2Email"},{"type":"null"}]}}}}}},"404":{"description":"We hold no record for this person at all"}}}},"/v2/people/email/personal":{"get":{"tags":["Contact (v2)"],"operationId":"v2PersonalEmail","summary":"Get personal email addresses","x-stability":"stable","description":"Returns a LIST, with no status field. STABLE — the shape is a promise. Every personal address (webmail and similar) we hold and do not know to be bad. A verified-only door would return almost nothing here while looking as though it had searched — our verifier has never tested a personal address, not one. The status is APPLIED rather than published: invalid, spam_trap, abuse, disposable, risky and role are WITHHELD, because a door with no status field leaves a caller nothing to be careful with. Each address carries `email` and `verified_batch_date`, and nothing else. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","parameters":[{"name":"linkedin_url","in":"query","schema":{"type":"string","format":"uri"},"description":"A personal LinkedIn profile URL (linkedin.com/in/...)."},{"name":"contact_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The numeric id a people-search row carries at meta.source_ids.person_id. `person_id` is accepted as the same field under its original name; send one of the two, never both."},{"name":"person_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The original name of contact_id. Identical behaviour."}],"responses":{"200":{"description":"Every personal address we hold and do not know to be bad, as a list — empty when there are none.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/V2PersonalEmail"}}}}}}},"404":{"description":"We hold no record for this person at all"}}},"post":{"tags":["Contact (v2)"],"operationId":"v2PersonalEmailPost","summary":"Get personal email addresses (JSON body)","x-stability":"stable","description":"Returns a LIST, with no status field. STABLE — the shape is a promise. Every personal address (webmail and similar) we hold and do not know to be bad. A verified-only door would return almost nothing here while looking as though it had searched — our verifier has never tested a personal address, not one. The status is APPLIED rather than published: invalid, spam_trap, abuse, disposable, risky and role are WITHHELD, because a door with no status field leaves a caller nothing to be careful with. Each address carries `email` and `verified_batch_date`, and nothing else. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of linkedin_url or contact_id (person_id is the same field).","properties":{"linkedin_url":{"type":"string","format":"uri"},"contact_id":{"type":"string"},"person_id":{"type":"string"}}}}}},"responses":{"200":{"description":"Every personal address we hold and do not know to be bad, as a list — empty when there are none.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/V2PersonalEmail"}}}}}}},"404":{"description":"We hold no record for this person at all"}}}},"/v2/people/phone":{"get":{"tags":["Contact (v2)"],"operationId":"v2Phone","summary":"Get phone numbers","x-stability":"stable","description":"STABLE — the shape is a promise. Every number we hold for the person, best first; the position in the array is the priority. Each number is just `phone` and `type` (mobile, direct, office). v2 does NOT publish `dnc`: it is unpopulated at source, and a field that looks like a compliance answer while carrying none is a trap either way — its absence here is not clearance any more than v1's null was. To find people who have a number before spending anything, search with hasPhone=true. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","parameters":[{"name":"linkedin_url","in":"query","schema":{"type":"string","format":"uri"},"description":"A personal LinkedIn profile URL (linkedin.com/in/...)."},{"name":"contact_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The numeric id a people-search row carries at meta.source_ids.person_id. `person_id` is accepted as the same field under its original name; send one of the two, never both."},{"name":"person_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The original name of contact_id. Identical behaviour."}],"responses":{"200":{"description":"The numbers, and found:false if we hold none.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/ContactPhones"}}}}}},"404":{"description":"We hold no record for this person at all"}}},"post":{"tags":["Contact (v2)"],"operationId":"v2PhonePost","summary":"Get phone numbers (JSON body)","x-stability":"stable","description":"STABLE — the shape is a promise. Every number we hold for the person, best first; the position in the array is the priority. Each number is just `phone` and `type` (mobile, direct, office). v2 does NOT publish `dnc`: it is unpopulated at source, and a field that looks like a compliance answer while carrying none is a trap either way — its absence here is not clearance any more than v1's null was. To find people who have a number before spending anything, search with hasPhone=true. This endpoint returns `data` and NO `meta` object. The price is unchanged at one record per call but is not reported per call - read GET /v1/usage for it. There is NO exception, including for a throttled account: the throttle is reported in headers on every response (X-Quota-State, X-Quota-Reset, X-Quota-Contact, X-RateLimit-Limit), so no meta key is needed to carry it. /v2/people/reverse still returns meta. Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask. This door, the other v2 doors and /v1/people/enrich all resolve to the same cached record, so a person looked up once is answered from cache by all of them.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"description":"Exactly one of linkedin_url or contact_id (person_id is the same field).","properties":{"linkedin_url":{"type":"string","format":"uri"},"contact_id":{"type":"string"},"person_id":{"type":"string"}}}}}},"responses":{"200":{"description":"The numbers, and found:false if we hold none.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/ContactPhones"}}}}}},"404":{"description":"We hold no record for this person at all"}}}},"/v2/people/reverse":{"get":{"tags":["Contact (v2)"],"operationId":"v2Reverse","summary":"Find who holds an email or phone","x-stability":"stable","description":"STABLE — the shape is a promise. The reverse of the three lookups above: send an email address or a phone number and get the person who holds it, plus that point's own type, status and check date. Returns the identity rather than the full profile — for everything we know about the person, call /v1/people/enrich, which is the same price and answers from the very same cached record this call populates. matched_in_record distinguishes \"the record echoes this exact point back\" from \"the record was matched on it upstream but does not list it\", so a null matched is never read as \"nobody found\". Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask.","parameters":[{"name":"email","in":"query","schema":{"type":"string","format":"email"},"description":"An address to look up. Send this OR phone, never both."},{"name":"phone","in":"query","schema":{"type":"string"},"description":"A number to look up, in any common format. Send this OR email, never both."}],"responses":{"200":{"description":"Who holds it, and what we know about the point itself. This is the one v2 door that DOES answer with meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/ReverseMatch"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"No person holds this contact point"}}},"post":{"tags":["Contact (v2)"],"operationId":"v2ReversePost","summary":"Find who holds an email or phone (JSON body)","x-stability":"stable","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"}}}}}},"description":"STABLE — the shape is a promise. The reverse of the three lookups above: send an email address or a phone number and get the person who holds it, plus that point's own type, status and check date. Returns the identity rather than the full profile — for everything we know about the person, call /v1/people/enrich, which is the same price and answers from the very same cached record this call populates. matched_in_record distinguishes \"the record echoes this exact point back\" from \"the record was matched on it upstream but does not list it\", so a null matched is never read as \"nobody found\". Costs one record, the same as an enrichment, because it is the same lookup — including when the answer is found:false. Asking whether a person HAS a deliverable address is free: a people-search row publishes has_email, email_status and email_type as flags, and sizing a search spends nothing however often you ask.","responses":{"200":{"description":"Who holds it, and what we know about the point itself. This is the one v2 door that DOES answer with meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/ReverseMatch"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"No person holds this contact point"}}}},"/v1/enrich":{"post":{"deprecated":true,"description":"Legacy alias of POST /v1/people/enrich — identical behaviour, kept for existing integrations. New code should use /v1/people/enrich.","tags":["Enrichment"],"operationId":"enrichPerson","summary":"Enrich one person","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Exactly one of linkedin_url, email, phone or person_id — the same four this endpoint has always validated, through the same contract as /v1/people/enrich.","properties":{"linkedin_url":{"type":"string","format":"uri"},"email":{"type":"string","format":"email"},"phone":{"type":"string","description":"A phone number, in any common format — the reverse lookup: who is this number."},"person_id":{"type":"string","pattern":"^[1-9][0-9]{0,19}$","description":"The id a people-search row carries at meta.source_ids.person_id — send it back to enrich that exact person without having carried an identifier between the two calls. It is a translation rather than a fourth key: we look the person up by id and then enrich the identifier their own record holds (their email, or their LinkedIn URL when we hold no address for them — email is preferred, because it is what this cohort has and because it round-trips back to the same person), so the answer, the one record billed, the cache entry and meta.key_hash are identical to sending that identifier yourself. Digits only, as returned. It matters because about a fifth of the people search can find have no LinkedIn URL and search publishes email flags rather than addresses, so without this they are findable and not enrichable. Two distinct 404s: no person carries that id, or the person exists and we hold no identifier we can enrich by for them — the second says so plainly, is not your mistake, and will not change on a retry. 503 (no_source) when the lookup cannot be reached, never a 404."},"reveal_email":{"type":"boolean","default":false,"description":"Include every email address and phone number we hold. No extra record."}}}}}},"responses":{"200":{"description":"The person. Contact points are present only when you sent reveal_email.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Person"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"No record"}}}},"/v1/company":{"post":{"deprecated":true,"description":"Legacy alias of POST /v1/companies/enrich — identical behaviour, kept for existing integrations. New code should use /v1/companies/enrich.","tags":["Enrichment"],"operationId":"getCompany","summary":"Look up one company","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"linkedin_url":{"type":"string","format":"uri"}}}}}},"responses":{"200":{"description":"The company.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Company"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/people/phone":{"get":{"tags":["Enrichment"],"operationId":"findPhoneGet","summary":"Find the phone numbers for one person","description":"Send exactly one identifier. Returns has_phone plus every number we hold, best first, each with its type. Costs one record — the same as an enrichment, because it is the same lookup. To find people who HAVE a number before spending anything, search with hasPhone=true. has_phone: false means we hold none, not that the lookup failed. dnc is published on every number but is not yet populated: null means unknown, never \"safe to call\".","parameters":[{"name":"linkedin_url","in":"query","schema":{"type":"string"}},{"name":"email","in":"query","schema":{"type":"string"}},{"name":"phone","in":"query","schema":{"type":"string"},"description":"A number you already hold, to find the rest we have for that person."},{"name":"person_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The id a people-search row carries at meta.source_ids.person_id — send it back to enrich that exact person without having carried an identifier between the two calls. It is a translation rather than a fourth key: we look the person up by id and then enrich the identifier their own record holds (their email, or their LinkedIn URL when we hold no address for them — email is preferred, because it is what this cohort has and because it round-trips back to the same person), so the answer, the one record billed, the cache entry and meta.key_hash are identical to sending that identifier yourself. Digits only, as returned. It matters because about a fifth of the people search can find have no LinkedIn URL and search publishes email flags rather than addresses, so without this they are findable and not enrichable. Two distinct 404s: no person carries that id, or the person exists and we hold no identifier we can enrich by for them — the second says so plainly, is not your mistake, and will not change on a retry. 503 (no_source) when the lookup cannot be reached, never a 404."}],"responses":{"200":{"description":"has_phone, and every number we hold, best first.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Phones"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"Not in our data"}}},"post":{"tags":["Enrichment"],"operationId":"findPhonePost","summary":"Find the phone numbers for one person (JSON body)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"linkedin_url":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"person_id":{"type":"string","pattern":"^[1-9][0-9]{0,19}$","description":"The id a people-search row carries at meta.source_ids.person_id — send it back to enrich that exact person without having carried an identifier between the two calls. It is a translation rather than a fourth key: we look the person up by id and then enrich the identifier their own record holds (their email, or their LinkedIn URL when we hold no address for them — email is preferred, because it is what this cohort has and because it round-trips back to the same person), so the answer, the one record billed, the cache entry and meta.key_hash are identical to sending that identifier yourself. Digits only, as returned. It matters because about a fifth of the people search can find have no LinkedIn URL and search publishes email flags rather than addresses, so without this they are findable and not enrichable. Two distinct 404s: no person carries that id, or the person exists and we hold no identifier we can enrich by for them — the second says so plainly, is not your mistake, and will not change on a retry. 503 (no_source) when the lookup cannot be reached, never a 404."}}}}}},"responses":{"200":{"description":"has_phone, and every number we hold, best first.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Phones"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/people/enrich":{"get":{"tags":["Enrichment"],"operationId":"enrichPersonGet","summary":"Enrich one person by linkedin_url, email, phone or person_id","description":"Send exactly one identifier. Costs one record; reveal_email adds every email and phone we hold at no extra charge.","parameters":[{"name":"linkedin_url","in":"query","schema":{"type":"string"}},{"name":"email","in":"query","schema":{"type":"string"}},{"name":"phone","in":"query","schema":{"type":"string"},"description":"Any human format; the source parses it."},{"name":"person_id","in":"query","schema":{"type":"string","pattern":"^[1-9][0-9]{0,19}$"},"description":"The id a people-search row carries at meta.source_ids.person_id — send it back to enrich that exact person without having carried an identifier between the two calls. It is a translation rather than a fourth key: we look the person up by id and then enrich the identifier their own record holds (their email, or their LinkedIn URL when we hold no address for them — email is preferred, because it is what this cohort has and because it round-trips back to the same person), so the answer, the one record billed, the cache entry and meta.key_hash are identical to sending that identifier yourself. Digits only, as returned. It matters because about a fifth of the people search can find have no LinkedIn URL and search publishes email flags rather than addresses, so without this they are findable and not enrichable. Two distinct 404s: no person carries that id, or the person exists and we hold no identifier we can enrich by for them — the second says so plainly, is not your mistake, and will not change on a retry. 503 (no_source) when the lookup cannot be reached, never a 404."},{"name":"reveal_email","in":"query","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"The person. Contact points are present only when you sent reveal_email.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Person"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"Not in our data"}}},"post":{"tags":["Enrichment"],"operationId":"enrichPersonPost","summary":"Enrich one person (JSON body)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"linkedin_url":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"person_id":{"type":"string","pattern":"^[1-9][0-9]{0,19}$","description":"The id a people-search row carries at meta.source_ids.person_id — send it back to enrich that exact person without having carried an identifier between the two calls. It is a translation rather than a fourth key: we look the person up by id and then enrich the identifier their own record holds (their email, or their LinkedIn URL when we hold no address for them — email is preferred, because it is what this cohort has and because it round-trips back to the same person), so the answer, the one record billed, the cache entry and meta.key_hash are identical to sending that identifier yourself. Digits only, as returned. It matters because about a fifth of the people search can find have no LinkedIn URL and search publishes email flags rather than addresses, so without this they are findable and not enrichable. Two distinct 404s: no person carries that id, or the person exists and we hold no identifier we can enrich by for them — the second says so plainly, is not your mistake, and will not change on a retry. 503 (no_source) when the lookup cannot be reached, never a 404."},"reveal_email":{"type":"boolean","default":false}}}}}},"responses":{"200":{"description":"The person. Contact points are present only when you sent reveal_email.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Person"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"Not in our data"}}}},"/v1/people/search":{"get":{"tags":["Search"],"operationId":"searchPeopleV2","summary":"Search people","description":"Each person returned counts one record. Page with meta.nextCursor. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},"description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},{"name":"profileKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeProfileKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"description":"profile keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"title","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"job title keywords; wrap a value in [brackets] for an exact match"},"description":"job title keywords; wrap a value in [brackets] for an exact match","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeTitle","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"job titles to exclude"},"description":"job titles to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"seniority","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/seniority"},"description":"LeadOcean seniority band (mapped onto job_level upstream)"},"description":"LeadOcean seniority band (mapped onto job_level upstream)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"jobLevel","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/job_level"},"description":"seniority band as the data source defines it"},"description":"seniority band as the data source defines it","style":"form","explode":false,"x-format":"comma-separated"},{"name":"jobFunction","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/job_function"},"description":"department or function of the current role"},"description":"department or function of the current role","style":"form","explode":false,"x-format":"comma-separated"},{"name":"country","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"where the person is located"},"description":"where the person is located","style":"form","explode":false,"x-format":"comma-separated"},{"name":"continent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent the person is in"},"description":"continent the person is in","style":"form","explode":false,"x-format":"comma-separated"},{"name":"salesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region the person is in"},"description":"commercial region the person is in","style":"form","explode":false,"x-format":"comma-separated"},{"name":"city","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"city keywords for the person"},"description":"city keywords for the person","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"cities to exclude"},"description":"cities to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"education","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"school, degree or year phrases"},"description":"school, degree or year phrases","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minConnections","in":"query","required":false,"schema":{"type":"integer","description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"domain","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company domain the person works at"},"description":"company domain the person works at","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"description":"company name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeCompanyName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"description":"company name keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyLinkedin","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs"},"description":"company LinkedIn URLs","style":"form","explode":false,"x-format":"comma-separated"},{"name":"industry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"description":"company industry","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeIndustry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"description":"industries to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"description":"legal type of the company","style":"form","explode":false,"x-format":"comma-separated"},{"name":"employeeRange","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"minRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFounded","in":"query","required":false,"schema":{"type":"integer","description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFounded","in":"query","required":false,"schema":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFollowers","in":"query","required":false,"schema":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"fundingType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the last funding round"},"description":"type of the last funding round","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},{"name":"minLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"investors","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"lead investor keywords"},"description":"lead investor keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"naics","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"NAICS codes"},"description":"NAICS codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"sic","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"SIC codes"},"description":"SIC codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"keywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"description":"profile keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCountry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"description":"company headquarters country","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"description":"company headquarters city keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqState","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"description":"company headquarters state or region","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqContinent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"description":"continent of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqSalesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"description":"commercial region of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologies","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"technologies detected on the company website (own data only)"},"description":"technologies detected on the company website (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologyCategories","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"emailStatus","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/email_status"},"description":"email deliverability (own data only)"},"description":"email deliverability (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"emailType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/email_type"},"description":"work or personal email (own data only)"},"description":"work or personal email (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hasEmail","in":"query","required":false,"schema":{"type":"boolean","description":"only people with, or without, a known email (own data only)"},"description":"only people with, or without, a known email (own data only)"},{"name":"hasPhone","in":"query","required":false,"schema":{"type":"boolean","description":"only people with, or without, a known phone number (own data only)"},"description":"only people with, or without, a known phone number (own data only)"},{"name":"reachable","in":"query","required":false,"schema":{"type":"string","description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},"description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"opaque, from meta.nextCursor"},"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"description":"records per page, 1–100"},{"name":"facets","in":"query","required":false,"schema":{"type":"boolean","description":"also return counts by seniority, country, industry and company size"},"description":"also return counts by seniority, country, industry and company size"},{"name":"count","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Also return the total number of matches in meta.total, capped at 100,000. Opt-in because it is work: a page is ranked either way, a total has to be tallied. FREE WITH limit=1: that combination is a sizing call, costs no records however often you send it, and answers with an empty `data` and `meta.countOnly: true` — the number is the answer, and a count that handed back its row would be a page of one record for nothing. With any larger limit you are buying the page as usual and the total rides along with it. Accepted on the JSON body form too. If a requested filter could not be applied (see unsupportedFilters), the total is withheld — null, with meta.totalWithheld saying which filter — rather than published as a number that does not mean what it looks like."}],"responses":{"200":{"description":"Matching people, as a thin projection — no contact points. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"402":{"$ref":"#/components/responses/Quota"},"429":{"$ref":"#/components/responses/RateLimit"}}},"post":{"tags":["Search"],"operationId":"searchPeopleV2Post","summary":"Search people (JSON body)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","description":"free text over the person: name, title, headline, profile summary, skills, job descriptions, and their company name"},"profileKeywords":{"type":"array","items":{"type":"string"},"description":"the same as keywords — the person’s own profile text; kept under this name for clients that adopted it"},"excludeProfileKeywords":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"title":{"type":"array","items":{"type":"string"},"description":"job title keywords; wrap a value in [brackets] for an exact match"},"excludeTitle":{"type":"array","items":{"type":"string"},"description":"job titles to exclude"},"seniority":{"type":"array","items":{"$ref":"#/components/schemas/seniority"},"description":"LeadOcean seniority band (mapped onto job_level upstream)"},"jobLevel":{"type":"array","items":{"$ref":"#/components/schemas/job_level"},"description":"seniority band as the data source defines it"},"jobFunction":{"type":"array","items":{"$ref":"#/components/schemas/job_function"},"description":"department or function of the current role"},"country":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"where the person is located"},"continent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent the person is in"},"salesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region the person is in"},"city":{"type":"array","items":{"type":"string"},"description":"city keywords for the person"},"excludeCity":{"type":"array","items":{"type":"string"},"description":"cities to exclude"},"education":{"type":"array","items":{"type":"string"},"description":"school, degree or year phrases"},"minConnections":{"type":"integer","description":"minimum LinkedIn connections, 0–500 — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"domain":{"type":"array","items":{"type":"string"},"description":"company domain the person works at"},"companyName":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"excludeCompanyName":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"companyLinkedin":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs"},"industry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"excludeIndustry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"companyType":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"employeeRange":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket; coarser and faster than minEmployees/maxEmployees"},"minEmployees":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"maxEmployees":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"minRevenue":{"type":"integer","description":"annual revenue in USD — only records whose value we hold; one with no figure on file is never returned"},"maxRevenue":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"minFounded":{"type":"integer","description":"year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"maxFounded":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"minFollowers":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"fundingType":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the last funding round"},"minFunding":{"type":"integer","description":"total funding raised, USD — only records whose value we hold; one with no figure on file is never returned"},"maxFunding":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"minLastFundingYear":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"maxLastFundingYear":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"investors":{"type":"array","items":{"type":"string"},"description":"lead investor keywords"},"naics":{"type":"array","items":{"type":"string"},"description":"NAICS codes"},"sic":{"type":"array","items":{"type":"string"},"description":"SIC codes"},"keywords":{"type":"array","items":{"type":"string"},"description":"keywords in the person’s own profile: headline, summary, skills and job descriptions — the PERSON’s text, not the employer’s (for the company’s text search companies, or filter people by industry / companyName). Each value is a phrase whose words must all appear; several values OR together"},"excludeKeywords":{"type":"array","items":{"type":"string"},"description":"profile keywords to exclude"},"hqCountry":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"hqCity":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"hqState":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"hqContinent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"hqSalesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"technologies":{"type":"array","items":{"type":"string"},"description":"technologies detected on the company website (own data only)"},"technologyCategories":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"emailStatus":{"type":"array","items":{"$ref":"#/components/schemas/email_status"},"description":"email deliverability (own data only)"},"emailType":{"type":"array","items":{"$ref":"#/components/schemas/email_type"},"description":"work or personal email (own data only)"},"hasEmail":{"type":"boolean","description":"only people with, or without, a known email (own data only)"},"hasPhone":{"type":"boolean","description":"only people with, or without, a known phone number (own data only)"},"reachable":{"type":"string","description":"holding an email OR a phone — `strict` additionally requires the email to be verified, catch_all_valid or catch_all"},"cursor":{"type":"string","description":"opaque, from meta.nextCursor"},"limit":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"facets":{"type":"boolean","description":"also return counts by seniority, country, industry and company size"}}}}}},"responses":{"200":{"description":"Matching people, as a thin projection — no contact points. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/companies/enrich":{"get":{"tags":["Enrichment"],"operationId":"getCompanyGet","summary":"Look up one company by domain or linkedin_url","parameters":[{"name":"domain","in":"query","schema":{"type":"string"}},{"name":"linkedin_url","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"The company.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Company"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"Not in our data"}}},"post":{"tags":["Enrichment"],"operationId":"getCompanyPost","summary":"Look up one company (JSON body)","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"linkedin_url":{"type":"string"}}}}}},"responses":{"200":{"description":"The company.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Company"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"Not in our data"}}}},"/v1/companies/search":{"get":{"tags":["Search"],"operationId":"searchCompaniesV2","summary":"Search companies","description":"Each company returned counts one record. Page with meta.nextCursor. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"free text over company name and description"},"description":"free text over company name and description"},{"name":"name","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"description":"company name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeName","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"description":"company name keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"domain","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company website domains"},"description":"company website domains","style":"form","explode":false,"x-format":"comma-separated"},{"name":"linkedin","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works","style":"form","explode":false,"x-format":"comma-separated"},{"name":"industry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"description":"company industry","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeIndustry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"description":"industries to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"companyType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"description":"legal type of the company","style":"form","explode":false,"x-format":"comma-separated"},{"name":"employeeRange","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket — broader and cheaper than min/maxEmployees"},"description":"headcount bracket — broader and cheaper than min/maxEmployees","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxEmployees","in":"query","required":false,"schema":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},{"name":"minRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxRevenue","in":"query","required":false,"schema":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},{"name":"minFollowers","in":"query","required":false,"schema":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},{"name":"minFounded","in":"query","required":false,"schema":{"type":"integer","description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFounded","in":"query","required":false,"schema":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},{"name":"fundingType","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the most recent funding round"},"description":"type of the most recent funding round","style":"form","explode":false,"x-format":"comma-separated"},{"name":"minFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxFunding","in":"query","required":false,"schema":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},{"name":"minLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"maxLastFundingYear","in":"query","required":false,"schema":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},{"name":"investors","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"lead investor name keywords"},"description":"lead investor name keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"naics","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"NAICS industry codes"},"description":"NAICS industry codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"sic","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"SIC industry codes"},"description":"SIC industry codes","style":"form","explode":false,"x-format":"comma-separated"},{"name":"keywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"keywords across company description, specialties and categories"},"description":"keywords across company description, specialties and categories","style":"form","explode":false,"x-format":"comma-separated"},{"name":"excludeKeywords","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company keywords to exclude"},"description":"company keywords to exclude","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCountry","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"description":"company headquarters country","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqCity","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"description":"company headquarters city keywords","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqState","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"description":"company headquarters state or region","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqContinent","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"description":"continent of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"hqSalesRegion","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"description":"commercial region of the company headquarters","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologies","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"detected technologies (own data only)"},"description":"detected technologies (own data only)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"technologyCategories","in":"query","required":false,"schema":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)","style":"form","explode":false,"x-format":"comma-separated"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"opaque, from meta.nextCursor"},"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"},"description":"records per page, 1–100"},{"name":"count","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Also return the total number of matches in meta.total, capped at 100,000. Opt-in because it is work: a page is ranked either way, a total has to be tallied. FREE WITH limit=1: that combination is a sizing call, costs no records however often you send it, and answers with an empty `data` and `meta.countOnly: true` — the number is the answer, and a count that handed back its row would be a page of one record for nothing. With any larger limit you are buying the page as usual and the total rides along with it. Accepted on the JSON body form too. If a requested filter could not be applied (see unsupportedFilters), the total is withheld — null, with meta.totalWithheld saying which filter — rather than published as a number that does not mean what it looks like."}],"responses":{"200":{"description":"Matching companies. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}},"post":{"tags":["Search"],"operationId":"searchCompaniesV2Post","summary":"Search companies (JSON body)","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"q":{"type":"string","description":"free text over company name and description"},"name":{"type":"array","items":{"type":"string"},"description":"company name keywords"},"excludeName":{"type":"array","items":{"type":"string"},"description":"company name keywords to exclude"},"domain":{"type":"array","items":{"type":"string"},"description":"company website domains"},"linkedin":{"type":"array","items":{"type":"string"},"description":"company LinkedIn URLs — resolved through the people we hold at the company (most real companies); a URL nobody works at is a 404 pointing at GET /v1/companies/enrich?linkedin_url=…, which always works"},"industry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"company industry"},"excludeIndustry":{"type":"array","items":{"$ref":"#/components/schemas/industry"},"description":"industries to exclude"},"companyType":{"type":"array","items":{"$ref":"#/components/schemas/company_type"},"description":"legal type of the company"},"employeeRange":{"type":"array","items":{"$ref":"#/components/schemas/employee_range"},"description":"headcount bracket — broader and cheaper than min/maxEmployees"},"minEmployees":{"type":"integer","description":"company headcount, lower bound — only records whose value we hold; one with no figure on file is never returned"},"maxEmployees":{"type":"integer","description":"company headcount, upper bound — only records whose value we hold; one with no figure on file is never returned"},"minRevenue":{"type":"integer","description":"annual revenue floor in USD — only records whose value we hold; one with no figure on file is never returned"},"maxRevenue":{"type":"integer","description":"annual revenue ceiling in USD — only records whose value we hold; one with no figure on file is never returned"},"minFollowers":{"type":"integer","description":"minimum company LinkedIn followers — 0 means no minimum; any value of 1 or more matches only records whose figure we hold"},"minFounded":{"type":"integer","description":"earliest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"maxFounded":{"type":"integer","description":"latest year the company was founded — only records whose value we hold; one with no figure on file is never returned"},"fundingType":{"type":"array","items":{"$ref":"#/components/schemas/funding_type"},"description":"type of the most recent funding round"},"minFunding":{"type":"integer","description":"total funding raised, USD floor — only records whose value we hold; one with no figure on file is never returned"},"maxFunding":{"type":"integer","description":"total funding raised, USD ceiling — only records whose value we hold; one with no figure on file is never returned"},"minLastFundingYear":{"type":"integer","description":"funded no earlier than this year — only records whose value we hold; one with no figure on file is never returned"},"maxLastFundingYear":{"type":"integer","description":"funded no later than this year — only records whose value we hold; one with no figure on file is never returned"},"investors":{"type":"array","items":{"type":"string"},"description":"lead investor name keywords"},"naics":{"type":"array","items":{"type":"string"},"description":"NAICS industry codes"},"sic":{"type":"array","items":{"type":"string"},"description":"SIC industry codes"},"keywords":{"type":"array","items":{"type":"string"},"description":"keywords across company description, specialties and categories"},"excludeKeywords":{"type":"array","items":{"type":"string"},"description":"company keywords to exclude"},"hqCountry":{"type":"array","items":{"$ref":"#/components/schemas/country"},"description":"company headquarters country"},"hqCity":{"type":"array","items":{"type":"string"},"description":"company headquarters city keywords"},"hqState":{"type":"array","items":{"type":"string"},"description":"company headquarters state or region"},"hqContinent":{"type":"array","items":{"$ref":"#/components/schemas/continent"},"description":"continent of the company headquarters"},"hqSalesRegion":{"type":"array","items":{"$ref":"#/components/schemas/sales_region"},"description":"commercial region of the company headquarters"},"technologies":{"type":"array","items":{"type":"string"},"description":"detected technologies (own data only)"},"technologyCategories":{"type":"array","items":{"$ref":"#/components/schemas/tech_category"},"description":"what the detected technology is for, e.g. Analytics or CDN, rather than its name (own data only; covers the ~7.8M crawled companies)"},"cursor":{"type":"string","description":"opaque, from meta.nextCursor"},"limit":{"type":"integer","maximum":100,"default":25,"description":"records per page, 1–100"}}}}}},"responses":{"200":{"description":"Matching companies. meta carries count, limit, credits, total (when you asked for it) and nextCursor.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Company"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/companies/{domain}/people":{"get":{"tags":["Search"],"operationId":"companyPeople","summary":"The people we hold at a company, paged","description":"Thin records, one record billed per person returned. Contact points are not included — enrich a person for those. Page with the cursor from meta.nextCursor. BEHAVIOUR CHANGE, 2026-09-19: this roster is now subject to the same depth cap and the same signed cursors as search, where before it paged without any limit and passed its cursor through unsigned. A roster deeper than the cap stops issuing cursors, with meta.depthCapped true on the last page, and a cursor issued before that date is refused with 400 \"Invalid cursor\" — restart the walk. Rosters are bounded by company size, so almost none reach the cap. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors.","parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},{"name":"limit","in":"query","schema":{"type":"integer","default":25,"maximum":100}}],"responses":{"200":{"description":"People at the company, thin records, paged. meta additionally carries companyIds — the company ids actually represented in this page.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Person"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"description":"No people for this company"}}}},"/v1/filters/people":{"get":{"tags":["Reference"],"operationId":"listPeopleFilters","summary":"People search filters only","security":[],"responses":{"200":{"description":"The filter contract. Free to read, and no meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/FilterContract"}}}}}}}}},"/v1/filters/companies":{"get":{"tags":["Reference"],"operationId":"listCompanyFilters","summary":"Company search filters only","security":[],"responses":{"200":{"description":"The filter contract. Free to read, and no meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/FilterContract"}}}}}}}}},"/v1/filters":{"get":{"tags":["Reference"],"operationId":"listFilters","summary":"Filters, enum index and schema names","security":[],"responses":{"200":{"description":"The filter contract. Free to read, and no meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/FilterContract"}}}}}}}}},"/v1/enums":{"get":{"tags":["Reference"],"operationId":"listEnums","summary":"Every enum with its size and the filters it applies to","security":[],"responses":{"200":{"description":"Every enum, with its size and where to fetch its values. No meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/EnumIndex"}}}}}}}}},"/v1/enums/{name}":{"get":{"tags":["Reference"],"operationId":"getEnumValues","summary":"Values of one enum, searchable","security":[],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","enum":["industry","company_type","employee_range","funding_type","job_function","job_level","continent","sales_region","country","seniority","email_type","reachable","email_status","tech_category"]}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Filter values by substring — how you find the exact string for a concept"},{"name":"limit","in":"query","schema":{"type":"integer","default":200,"maximum":500}}],"responses":{"200":{"description":"One enum, filtered by q. No meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/EnumValues"}}}}}}}}},"/v1/exports":{"post":{"tags":["Export"],"operationId":"createExport","summary":"Start a bulk CSV export of people (async)","description":"Admitted or refused on the spot; a worker does the walk. RESERVES up to `limit` records on the account at once (times 2 when a column needs the full record) and bills each row written. Ceilings per account: 50,000 rows per export, 500,000 per day, 10,000,000 per period — on top of the records quota. Refusals: 400 export_limit_rows / export_filter_unsupported, 429 export_limit_daily / export_limit_monthly (with remaining, resetsAt), 402 quota (with remaining, perRow), 403 when contact columns are asked without the enrich scope, 503 when storage is off. One export runs per account at a time; others queue. Poll GET /v1/exports/{id}; when done, GET /v1/exports/{id}/download.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportCreate"}}}},"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Export"}}}}}},"400":{"description":"Over the per-export ceiling, or a filter that cannot be applied"},"402":{"description":"Fewer records left than the export needs"},"429":{"description":"Daily or period export ceiling"}}},"get":{"tags":["Export"],"operationId":"listExports","summary":"Your exports, newest first","parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["queued","running","done","failed","cancelled"]}},{"name":"limit","in":"query","schema":{"type":"integer","default":25,"maximum":100}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of exports; meta.nextCursor pages on","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Export"}},"meta":{"$ref":"#/components/schemas/Meta"}}}}}}}}},"/v1/exports/columns":{"get":{"tags":["Export"],"operationId":"exportColumns","summary":"The column catalogue","security":[],"description":"Every column an export can carry: id, group, whether the thin search row already has it (`search: true` — one record per row) or an enrichment is needed (`reveal`), and for numbered blocks (emails, phones, past roles, education, certifications, awards) the cap key and default cap. Plus the account-independent ceilings.","responses":{"200":{"description":"The catalogue","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object"}},"defaults":{"type":"object"},"ceilings":{"type":"object"}}}}}}}}}}},"/v1/exports/{id}":{"get":{"tags":["Export"],"operationId":"getExport","summary":"Status and progress of one export","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The export","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Export"}}}}}},"404":{"description":"Not yours, or no such export"}}},"delete":{"tags":["Export"],"operationId":"cancelExport","summary":"Cancel a queued or running export","description":"A queued export never runs and releases its reservation. A running one stops at its next checkpoint; rows written stay billed and downloadable.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The export, cancelled","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"description":"No `meta`. This endpoint answers with `success` and `data` only — including for a throttled account, whose state rides in the X-Quota-* and X-RateLimit-* headers on every response. The price is unchanged at one record; GET /v1/usage is where it is read.","properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Export"}}}}}}}}},"/v1/exports/{id}/download":{"get":{"tags":["Export"],"operationId":"downloadExport","summary":"The file, as plain text/csv","description":"With your key or session for the file’s lifetime (7 days), or — no key — with the signed token `t` that `downloadUrl` carries: GET /v1/exports/{id}, GET /v1/exports, the MCP tools and the ready email all return the same kind of link, minted fresh on every read, valid 24 hours and never past the file’s expiry. Streams `Content-Disposition: attachment`. 409 while the export is still running; 410 once the file has expired.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"t","in":"query","schema":{"type":"string"},"description":"Download token from the ready email"}],"responses":{"200":{"description":"text/csv; charset=utf-8","content":{"text/csv":{"schema":{"type":"string"}}}},"409":{"description":"Not ready"},"410":{"description":"Expired"}}}},"/coverage":{"get":{"tags":["Reference"],"operationId":"getCoverage","summary":"What the dataset holds, by sales region and country","security":[],"description":"People, and how many of them carry a work email (a `work` or `work_other` address), a personal email and a phone number, for the whole index and for every country grouped into the four sales regions (NORAM, EMEA, APAC, LATAM; Antarctica, the uninhabited territories and people with no country under Other). Free, no key, no record. Computed at most once a day — read computedAt. Percentages are yours to take: fill.work / people. 202 with data null only before the first computation has landed.","responses":{"200":{"description":"The coverage document. No meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Coverage"}}}}}},"202":{"description":"Not computed yet — retry in a minute","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"null"},"meta":{"type":"object","properties":{"ready":{"type":"boolean","enum":[false]}}}}}}}}}}},"/v1/usage":{"get":{"tags":["Account"],"operationId":"getUsage","summary":"Records used this month, plan and per-day totals","responses":{"200":{"description":"Records used this period, the plan, and per-day and per-key totals. No meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Usage"}}}}}}}}},"/v1/account":{"get":{"tags":["Account"],"operationId":"getAccount","summary":"Everything about the account in one read: plan, records left, grant, subscription state, export windows, rate","description":"Free. With a key or a session. Composed from the same functions as the dashboard, so the API and the app cannot disagree. Billing here is the subscription STATE only — invoices and payment details stay behind sign-in.","responses":{"200":{"description":"The whole account in one document: identity, key, records used / remaining / reset, grant, subscription state, export windows, rate. No meta.","content":{"application/json":{"schema":{"type":"object","required":["success","data"],"additionalProperties":false,"properties":{"success":{"type":"boolean"},"data":{"$ref":"#/components/schemas/Account"}}}}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"x-api-key"},"OAuth2":{"type":"oauth2","description":"Used by the MCP server","flows":{"authorizationCode":{"authorizationUrl":"https://api.leadocean.io/oauth/authorize","tokenUrl":"https://api.leadocean.io/oauth/token","scopes":{"mcp":"Search and enrich through the MCP tools"}}}}},"schemas":{"industry":{"type":"string","description":"Company industry. One of 534 normalised values.","enum":["Abrasives and Nonmetallic Minerals Manufacturing","Accessible Architecture and Design","Accessible Hardware Manufacturing","Accommodation and Food Services","Accounting","Administration of Justice","Administrative and Support Services","Advertising Services","Agricultural Chemical Manufacturing","Agriculture; Construction; Mining Machinery Manufacturing","Air; Water; and Waste Program Management","Airlines and Aviation","Airlines/Aviation","Alternative Dispute Resolution","Alternative Fuel Vehicle Manufacturing","Alternative Medicine","Ambulance Services","Amusement Parks and Arcades","Animal Feed Manufacturing","Animation","Animation and Post-production","Apparel Manufacturing","Apparel and Fashion","Appliances; Electrical; and Electronics Manufacturing","Architectural and Structural Metal Manufacturing","Architecture and Planning","Armed Forces","Artificial Rubber and Synthetic Fiber Manufacturing","Artists and Writers","Arts and Crafts","Audio and Video Equipment Manufacturing","Automation Machinery Manufacturing","Automotive","Aviation and Aerospace","Aviation and Aerospace Component Manufacturing","Baked Goods Manufacturing","Banking","Bars; Taverns; and Nightclubs","Bed-and-Breakfasts; Hostels; Homestays","Beverage Manufacturing","Biomass Electric Power Generation","Biotechnology","Biotechnology Research","Blockchain Services","Blogs","Boilers; Tanks; and Shipping Container Manufacturing","Book Publishing","Book and Periodical Publishing","Breweries","Broadcast Media","Broadcast Media Production and Distribution","Building Construction","Building Equipment Contractors","Building Finishing Contractors","Building Materials","Building Structure and Exterior Contractors","Business Consulting and Services","Business Content","Business Intelligence Platforms","Business Supplies and Equipment","Cable and Satellite Programming","Capital Markets","Caterers","Chemical Manufacturing","Chemical Raw Materials Manufacturing","Chemicals","Child Day Care Services","Chiropractors","Circuses and Magic Shows","Civic and Social Organization","Civic and Social Organizations","Civil Engineering","Claims Adjusting; Actuarial Services","Clay and Refractory Products Manufacturing","Climate Data and Analytics","Climate Technology Product Manufacturing","Coal Mining","Collection Agencies","Commercial Real Estate","Commercial and Industrial Equipment Rental","Commercial and Industrial Machinery Maintenance","Commercial and Service Industry Machinery Manufacturing","Communications Equipment Manufacturing","Community Development and Urban Planning","Community Services","Computer Games","Computer Hardware","Computer Hardware Manufacturing","Computer Networking","Computer Networking Products","Computer Software","Computer and Network Security","Computers and Electronics Manufacturing","Conservation Programs","Construction","Construction Hardware Manufacturing","Consumer Electronics","Consumer Goods","Consumer Goods Rental","Consumer Services","Correctional Institutions","Cosmetics","Cosmetology and Barber Schools","Courts of Law","Credit Intermediation","Cutlery and Handtool Manufacturing","Dairy","Dairy Product Manufacturing","Dance Companies","Data Infrastructure and Analytics","Data Security Software Products","Death Care Services","Defense and Space","Defense and Space Manufacturing","Dentists","Design","Design Services","Desktop Computing Software Products","Digital Accessibility Services","Distilleries","E-Learning Providers","E-learning","Economic Programs","Education","Education Administration Programs","Education Management","Electric Lighting Equipment Manufacturing","Electric Power Generation","Electric Power Transmission; Control; and Distribution","Electrical Equipment Manufacturing","Electrical and Electronic Manufacturing","Electronic and Precision Equipment Maintenance","Embedded Software Products","Emergency and Relief Services","Energy Technology","Engineering Services","Engines and Power Transmission Equipment Manufacturing","Entertainment","Entertainment Providers","Environmental Quality Programs","Environmental Services","Equipment Rental Services","Events Services","Executive Office","Executive Offices","Executive Search Services","Fabricated Metal Products","Facilities Services","Family Planning Centers","Farming","Farming; Ranching; Forestry","Fashion Accessories Manufacturing","Financial Services","Fine Art","Fine Arts Schools","Fire Protection","Fisheries","Fishery","Flight Training","Food Production","Food and Beverage Manufacturing","Food and Beverage Retail","Food and Beverage Services","Food and Beverages","Footwear Manufacturing","Footwear and Leather Goods Repair","Forestry and Logging","Fossil Fuel Electric Power Generation","Freight and Package Transportation","Fruit and Vegetable Preserves Manufacturing","Fuel Cell Manufacturing","Fundraising","Funds and Trusts","Funeral Services","Furniture","Furniture and Home Furnishings Manufacturing","Gambling Facilities and Casinos","Gambling and Casinos","Geothermal Electric Power Generation","Glass Product Manufacturing","Glass; Ceramics and Concrete","Glass; Ceramics and Concrete Manufacturing","Golf Courses and Country Clubs","Government Administration","Government Relations","Government Relations Services","Graphic Design","Ground Passenger Transportation","HVAC and Refrigeration Equipment Manufacturing","Health and Human Services","Health; Wellness and Fitness","Higher Education","Highway; Street; and Bridge Construction","Historical Sites","Holding Companies","Home Health Care Services","Horticulture","Hospital and Health Care","Hospitality","Hospitals","Hospitals and Health Care","Hotels and Motels","Household Appliance Manufacturing","Household Services","Household and Institutional Furniture Manufacturing","Housing Programs","Housing and Community Development","Human Resources","Human Resources Services","Hydroelectric Power Generation","IT Services and IT Consulting","IT System Custom Software Development","IT System Data Services","IT System Design Services","IT System Installation and Disposal","IT System Operations and Maintenance","IT System Testing and Evaluation","IT System Training and Support","Import and Export","Individual and Family Services","Industrial Automation","Industrial Machinery Manufacturing","Industry Associations","Information Services","Information Technology and Services","Insurance","Insurance Agencies and Brokerages","Insurance Carriers","Insurance and Employee Benefit Funds","Interior Design","International Affairs","International Trade and Development","Internet","Internet Marketplace Platforms","Internet News","Internet Publishing","Interurban and Rural Bus Services","Investment Advice","Investment Banking","Investment Management","Janitorial Services","Judiciary","Landscaping Services","Language Schools","Laundry and Drycleaning Services","Law Enforcement","Law Practice","Leasing Non-residential Real Estate","Leasing Residential Real Estate","Leather Product Manufacturing","Legal Services","Legislative Offices","Leisure; Travel and Tourism","Libraries","Lime and Gypsum Products Manufacturing","Loan Brokers","Logistics and Supply Chain","Luxury Goods and Jewelry","Machinery","Machinery Manufacturing","Magnetic and Optical Media Manufacturing","Management Consulting","Manufacturing","Maritime","Maritime Transportation","Market Research","Marketing Services","Marketing and Advertising","Mattress and Blinds Manufacturing","Measuring and Control Instrument Manufacturing","Meat Products Manufacturing","Mechanical Or Industrial Engineering","Media Production","Media and Telecommunications","Medical Device","Medical Equipment Manufacturing","Medical Practice","Medical Practices","Medical and Diagnostic Laboratories","Mental Health Care","Metal Ore Mining","Metal Treatments","Metal Valve; Ball; and Roller Manufacturing","Metalworking Machinery Manufacturing","Military","Military and International Affairs","Mining","Mining and Metals","Mobile Computing Software Products","Mobile Food Services","Mobile Games","Mobile Gaming Apps","Motion Pictures and Film","Motor Vehicle Manufacturing","Motor Vehicle Parts Manufacturing","Movies and Sound Recording","Movies; Videos; and Sound","Museums","Museums and Institutions","Museums; Historical Sites; and Zoos","Music","Musicians","Nanotechnology","Nanotechnology Research","Natural Gas Distribution","Natural Gas Extraction","Newspaper Publishing","Newspapers","Non-profit Organization Management","Non-profit Organizations","Nonmetallic Mineral Mining","Nonresidential Building Construction","Nuclear Electric Power Generation","Nursing Homes and Residential Care Facilities","Office Administration","Office Furniture and Fixtures Manufacturing","Oil Extraction","Oil and Coal Product Manufacturing","Oil and Energy","Oil and Gas","Oil; Gas; and Mining","Online Audio and Video Media","Online Media","Online and Mail Order Retail","Operations Consulting","Optometrists","Other","Outpatient Care Centers","Outsourcing and Offshoring Consulting","Outsourcing/Offshoring","Package/Freight Delivery","Packaging and Containers","Packaging and Containers Manufacturing","Paint; Coating; and Adhesive Manufacturing","Paper and Forest Product Manufacturing","Paper and Forest Products","Parts Distribution","Pension Funds","Performing Arts","Performing Arts and Spectator Sports","Periodical Publishing","Personal Care Product Manufacturing","Personal Care Services","Personal and Laundry Services","Pet Services","Pharmaceutical Manufacturing","Pharmaceuticals","Philanthropic Fundraising Services","Philanthropy","Photography","Physical; Occupational and Speech Therapists","Physicians","Pipeline Transportation","Plastics","Plastics Manufacturing","Plastics and Rubber Product Manufacturing","Political Organization","Political Organizations","Postal Services","Primary Metal Manufacturing","Primary and Secondary Education","Primary/Secondary Education","Printing","Printing Services","Professional Organizations","Professional Services","Professional Training and Coaching","Program Development","Public Assistance Programs","Public Health","Public Policy","Public Policy Offices","Public Relations and Communications","Public Relations and Communications Services","Public Safety","Public Works","Publishing","Racetracks","Radio and Television Broadcasting","Rail Transportation","Railroad Equipment Manufacturing","Railroad Manufacture","Ranching","Ranching and Fisheries","Real Estate","Real Estate Agents and Brokers","Real Estate and Equipment Rental Services","Recreational Facilities","Recreational Facilities and Services","Regenerative Design","Religious Institutions","Renewable Energy Equipment Manufacturing","Renewable Energy Power Generation","Renewable Energy Semiconductor Manufacturing","Renewables and Environment","Repair and Maintenance","Research","Research Services","Residential Building Construction","Restaurants","Retail","Retail Apparel and Fashion","Retail Appliances; Electrical; and Electronic Equipment","Retail Art Dealers","Retail Art Supplies","Retail Books and Printed News","Retail Building Materials and Garden Equipment","Retail Florists","Retail Furniture and Home Furnishings","Retail Gasoline","Retail Groceries","Retail Health and Personal Care Products","Retail Luxury Goods and Jewelry","Retail Motor Vehicles","Retail Musical Instruments","Retail Office Equipment","Retail Office Supplies and Gifts","Retail Pharmacies","Retail Recyclable Materials and Used Merchandise","Reupholstery and Furniture Repair","Robot Manufacturing","Robotics Engineering","Rubber Products Manufacturing","Satellite Telecommunications","Savings Institutions","School and Employee Bus Services","Seafood Product Manufacturing","Secretarial Schools","Securities and Commodity Exchanges","Security Guards and Patrol Services","Security Systems Services","Security and Investigations","Semiconductor Manufacturing","Semiconductors","Services for Renewable Energy","Services for the Elderly and Disabled","Sheet Music Publishing","Shipbuilding","Shuttles and Special Needs Transportation Services","Sightseeing Transportation","Skiing Facilities","Smart Meter Manufacturing","Soap and Cleaning Product Manufacturing","Social Networking Platforms","Software Development","Solar Electric Power Generation","Sound Recording","Space Research and Technology","Specialty Trade Contractors","Spectator Sports","Sporting Goods","Sporting Goods Manufacturing","Sports","Sports Teams and Clubs","Sports and Recreation Instruction","Spring and Wire Product Manufacturing","Staffing and Recruiting","Steam and Air-Conditioning Supply","Strategic Management Services","Subdivision of Land","Sugar and Confectionery Product Manufacturing","Supermarkets","Surveying and Mapping Services","Taxi and Limousine Services","Technical and Vocational Training","Technology; Information and Internet","Technology; Information and Media","Telecommunications","Telecommunications Carriers","Telephone Call Centers","Temporary Help Services","Textile Manufacturing","Textiles","Theater Companies","Think Tanks","Tobacco","Tobacco Manufacturing","Translation and Localization","Transportation Equipment Manufacturing","Transportation Programs","Transportation/Trucking/Railroad","Transportation; Logistics; Supply Chain and Storage","Travel Arrangements","Truck Transportation","Trusts and Estates","Turned Products and Fastener Manufacturing","Urban Transit Services","Utilities","Utilities Administration","Utility System Construction","Vehicle Repair and Maintenance","Venture Capital and Private Equity","Venture Capital and Private Equity Principals","Veterinary","Veterinary Services","Vocational Rehabilitation Services","Warehousing","Warehousing and Storage","Waste Collection","Waste Treatment and Disposal","Water Supply and Irrigation Systems","Water; Waste; Steam; and Air Conditioning Services","Wellness and Fitness Services","Wholesale","Wholesale Alcoholic Beverages","Wholesale Apparel and Sewing Supplies","Wholesale Appliances; Electrical; and Electronics","Wholesale Building Materials","Wholesale Chemical and Allied Products","Wholesale Computer Equipment","Wholesale Drugs and Sundries","Wholesale Food and Beverage","Wholesale Footwear","Wholesale Furniture and Home Furnishings","Wholesale Hardware; Plumbing; Heating Equipment","Wholesale Import and Export","Wholesale Luxury Goods and Jewelry","Wholesale Machinery","Wholesale Metals and Minerals","Wholesale Motor Vehicles and Parts","Wholesale Paper Products","Wholesale Petroleum and Petroleum Products","Wholesale Photography Equipment and Supplies","Wholesale Raw Farm Products","Wholesale Recyclable Materials","Wind Electric Power Generation","Wine and Spirits","Wineries","Wireless","Wireless Services","Women's Handbag Manufacturing","Wood Product Manufacturing","Writing and Editing","Zoos and Botanical Gardens"],"x-enum-url":"https://api.leadocean.io/v1/enums/industry"},"company_type":{"type":"string","description":"Legal/organisational type of the company.","enum":["Educational","Educational Institution","Government Agency","Nonprofit","Partnership","Privately Held","Public Company","Self-Employed","Self-Owned","Sole Proprietorship"],"x-enum-url":"https://api.leadocean.io/v1/enums/company_type"},"employee_range":{"type":"string","description":"Company headcount bracket.","enum":["1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10001+"],"x-enum-url":"https://api.leadocean.io/v1/enums/employee_range"},"funding_type":{"type":"string","description":"Type of the most recent funding round.","enum":["Series unknown","Pre seed","Seed","Series A","Series B","Series C","Series D","Series E-J","Grant","Angel","Private equity","Debt financing","Non equity assistance","Post IPO equity","Undisclosed","Post IPO debt","Product crowdfunding","Equity crowdfunding","Corporate round","Convertible note","Secondary market","Initial coin offering","Post IPO secondary"],"x-enum-url":"https://api.leadocean.io/v1/enums/funding_type"},"job_function":{"type":"string","description":"Department or function of the person's current role.","enum":["Advertising & Marketing","Art, Culture and Creative Professionals","Construction","Customer/Client Service","Education","Engineering","Finance & Accounting","General Business & Management","Healthcare & Human Services","Human Resources","Information Technology","Legal","Manufacturing & Production","Operations","Other","Public Administration & Safety","Purchasing","Research & Development","Sales & Business Development","Science","Supply Chain & Logistics","Writing/Editing"],"x-enum-url":"https://api.leadocean.io/v1/enums/job_function"},"job_level":{"type":"string","description":"Seniority band of the person's current role.","enum":["C-Team","Director","Manager","Other","Staff","VP"],"x-enum-url":"https://api.leadocean.io/v1/enums/job_level"},"continent":{"type":"string","description":"Continent of the person or the company headquarters.","enum":["Africa","Antarctica","Asia","Europe","North America","Oceania","South America"],"x-enum-url":"https://api.leadocean.io/v1/enums/continent"},"sales_region":{"type":"string","description":"Commercial region of the person or the company headquarters.","enum":["NORAM","LATAM","EMEA","APAC"],"x-enum-url":"https://api.leadocean.io/v1/enums/sales_region"},"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code, plus XK for Kosovo. Labels give the English country name.","enum":["AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DY","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","HV","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NH","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RH","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XK","YE","YT","ZA","ZM","ZW"],"x-enum-url":"https://api.leadocean.io/v1/enums/country","x-enum-labels":{"AD":"Andorra","AE":"United Arab Emirates","AF":"Afghanistan","AG":"Antigua & Barbuda","AI":"Anguilla","AL":"Albania","AM":"Armenia","AO":"Angola","AQ":"Antarctica","AR":"Argentina","AS":"American Samoa","AT":"Austria","AU":"Australia","AW":"Aruba","AX":"Åland Islands","AZ":"Azerbaijan","BA":"Bosnia & Herzegovina","BB":"Barbados","BD":"Bangladesh","BE":"Belgium","BF":"Burkina Faso","BG":"Bulgaria","BH":"Bahrain","BI":"Burundi","BJ":"Benin","BL":"St. Barthélemy","BM":"Bermuda","BN":"Brunei","BO":"Bolivia","BQ":"Caribbean Netherlands","BR":"Brazil","BS":"Bahamas","BT":"Bhutan","BV":"Bouvet Island","BW":"Botswana","BY":"Belarus","BZ":"Belize","CA":"Canada","CC":"Cocos (Keeling) Islands","CD":"Congo - Kinshasa","CF":"Central African Republic","CG":"Congo - Brazzaville","CH":"Switzerland","CI":"Côte d’Ivoire","CK":"Cook Islands","CL":"Chile","CM":"Cameroon","CN":"China","CO":"Colombia","CR":"Costa Rica","CU":"Cuba","CV":"Cape Verde","CW":"Curaçao","CX":"Christmas Island","CY":"Cyprus","CZ":"Czechia","DE":"Germany","DJ":"Djibouti","DK":"Denmark","DM":"Dominica","DO":"Dominican Republic","DY":"Benin","DZ":"Algeria","EC":"Ecuador","EE":"Estonia","EG":"Egypt","EH":"Western Sahara","ER":"Eritrea","ES":"Spain","ET":"Ethiopia","FI":"Finland","FJ":"Fiji","FK":"Falkland Islands","FM":"Micronesia","FO":"Faroe Islands","FR":"France","GA":"Gabon","GB":"United Kingdom","GD":"Grenada","GE":"Georgia","GF":"French Guiana","GG":"Guernsey","GH":"Ghana","GI":"Gibraltar","GL":"Greenland","GM":"Gambia","GN":"Guinea","GP":"Guadeloupe","GQ":"Equatorial Guinea","GR":"Greece","GS":"South Georgia & South Sandwich Islands","GT":"Guatemala","GU":"Guam","GW":"Guinea-Bissau","GY":"Guyana","HK":"Hong Kong SAR China","HM":"Heard & McDonald Islands","HN":"Honduras","HR":"Croatia","HT":"Haiti","HU":"Hungary","HV":"Burkina Faso","ID":"Indonesia","IE":"Ireland","IL":"Israel","IM":"Isle of Man","IN":"India","IO":"British Indian Ocean Territory","IQ":"Iraq","IR":"Iran","IS":"Iceland","IT":"Italy","JE":"Jersey","JM":"Jamaica","JO":"Jordan","JP":"Japan","KE":"Kenya","KG":"Kyrgyzstan","KH":"Cambodia","KI":"Kiribati","KM":"Comoros","KN":"St. Kitts & Nevis","KP":"North Korea","KR":"South Korea","KW":"Kuwait","KY":"Cayman Islands","KZ":"Kazakhstan","LA":"Laos","LB":"Lebanon","LC":"St. Lucia","LI":"Liechtenstein","LK":"Sri Lanka","LR":"Liberia","LS":"Lesotho","LT":"Lithuania","LU":"Luxembourg","LV":"Latvia","LY":"Libya","MA":"Morocco","MC":"Monaco","MD":"Moldova","ME":"Montenegro","MF":"St. Martin","MG":"Madagascar","MH":"Marshall Islands","MK":"North Macedonia","ML":"Mali","MM":"Myanmar (Burma)","MN":"Mongolia","MO":"Macao SAR China","MP":"Northern Mariana Islands","MQ":"Martinique","MR":"Mauritania","MS":"Montserrat","MT":"Malta","MU":"Mauritius","MV":"Maldives","MW":"Malawi","MX":"Mexico","MY":"Malaysia","MZ":"Mozambique","NA":"Namibia","NC":"New Caledonia","NE":"Niger","NF":"Norfolk Island","NG":"Nigeria","NH":"Vanuatu","NI":"Nicaragua","NL":"Netherlands","NO":"Norway","NP":"Nepal","NR":"Nauru","NU":"Niue","NZ":"New Zealand","OM":"Oman","PA":"Panama","PE":"Peru","PF":"French Polynesia","PG":"Papua New Guinea","PH":"Philippines","PK":"Pakistan","PL":"Poland","PM":"St. Pierre & Miquelon","PN":"Pitcairn Islands","PR":"Puerto Rico","PS":"Palestinian Territories","PT":"Portugal","PW":"Palau","PY":"Paraguay","QA":"Qatar","RE":"Réunion","RH":"Zimbabwe","RO":"Romania","RS":"Serbia","RU":"Russia","RW":"Rwanda","SA":"Saudi Arabia","SB":"Solomon Islands","SC":"Seychelles","SD":"Sudan","SE":"Sweden","SG":"Singapore","SH":"St. Helena","SI":"Slovenia","SJ":"Svalbard & Jan Mayen","SK":"Slovakia","SL":"Sierra Leone","SM":"San Marino","SN":"Senegal","SO":"Somalia","SR":"Suriname","SS":"South Sudan","ST":"São Tomé & Príncipe","SV":"El Salvador","SX":"Sint Maarten","SY":"Syria","SZ":"Eswatini","TC":"Turks & Caicos Islands","TD":"Chad","TF":"French Southern Territories","TG":"Togo","TH":"Thailand","TJ":"Tajikistan","TK":"Tokelau","TL":"Timor-Leste","TM":"Turkmenistan","TN":"Tunisia","TO":"Tonga","TR":"Türkiye","TT":"Trinidad & Tobago","TV":"Tuvalu","TW":"Taiwan","TZ":"Tanzania","UA":"Ukraine","UG":"Uganda","UM":"U.S. Outlying Islands","US":"United States","UY":"Uruguay","UZ":"Uzbekistan","VA":"Vatican City","VC":"St. Vincent & Grenadines","VE":"Venezuela","VG":"British Virgin Islands","VI":"U.S. Virgin Islands","VN":"Vietnam","VU":"Vanuatu","WF":"Wallis & Futuna","WS":"Samoa","YE":"Yemen","YT":"Mayotte","ZA":"South Africa","ZM":"Zambia","ZW":"Zimbabwe","XK":"Kosovo"}},"seniority":{"type":"string","description":"LeadOcean seniority band, normalised across sources.","enum":["owner","founder","c_suite","partner","vp","head","director","manager","senior","entry","intern","unknown"],"x-enum-url":"https://api.leadocean.io/v1/enums/seniority"},"email_type":{"type":"string","description":"Kind of the person's best email address. work is at their CURRENT employer's domain. work_other is a business address at a different company — usually a former employer, so it is the one most likely to bounce or to reach whoever inherited the mailbox; ask for it deliberately, not by accident. work_any is the union of the two. personal is webmail and similar; other is a business address where we do not know the employer; unknown means the address exists but we cannot classify it, which is the most common answer; none means the person has no email. Pair it with emailStatus to ask for a deliverable address at the company they actually work for.","enum":["work","work_other","work_any","personal","other","unknown","none"],"x-enum-url":"https://api.leadocean.io/v1/enums/email_type","x-enum-labels":{"work":"Work (current employer)","work_other":"Work (a different company)","work_any":"Any work address","personal":"Personal","other":"Other","unknown":"Unknown","none":"No email"}},"reachable":{"type":"string","description":"How a person can be reached at all. any = we hold an email or a phone. strict = we hold a phone, or an email that is verified or on a catch-all domain — i.e. excluding addresses we know are bad and addresses nobody has checked yet.","enum":["any","strict"],"x-enum-url":"https://api.leadocean.io/v1/enums/reachable","x-enum-labels":{"any":"Email or phone","strict":"Good email or phone"}},"email_status":{"type":"string","description":"Deliverability of the person's best email, from verification rather than a guess. On a BUSINESS address (`work`, `work_other`, `other`), `verified` means OUR OWN verifier sent to the address and it accepted — nothing else earns the word, and a data supplier asserting that an address is good is not a check, whichever supplier it is: those are published as `untested`. PERSONAL ADDRESSES ARE THE EXCEPTION and the difference is worth knowing: we do not verify consumer domains at all, so on a personal address `verified` still means a supplier asserted it and you should treat it as a lead to verify rather than a confirmed one. The dedicated personal-email endpoint publishes no status for that reason. `catch_all` means WE probed the domain, on the same rule and with the same personal-address exception. In practice that changes nothing for catch_all — a catch-all verdict can only come from probing the domain, which no supplier does — so the whole of the current catch_all population already qualifies. This narrowed on 2026-09-20 and again on 2026-09-22, so a `verified` count taken before either date is not comparable with one taken after — the population is smaller each time and every address in it has been tested by us. ONE INCONSISTENCY WHILE THIS ROLLS OUT: enrichment (/v1/people/enrich, the v2 contact endpoints, MCP) applies the narrow rule per address; people search does not, because the search index carries no per-address verification provenance. A person can come back `verified` in a search row and `untested` when enriched, and the enriched answer is the correct one. Treat a search count of `verified` as an upper bound and confirm per address on enrichment. Safe to send: verified, and catch_all_valid — a mailbox on a catch-all domain whose EXISTENCE we confirmed through the provider's identity check (Microsoft 365 managed tenants and Google Workspace only; the domain would accept any address, this one is known to be real). It ranks between verified and catch_all and is earned only by that check, never by a supplier and never by re-reading an older catch_all verdict. As a FILTER, `catch_all` matches both catch_all and catch_all_valid (a confirmed mailbox is still on a catch-all domain), so an existing verified+catch_all filter keeps the promoted people; filter on `catch_all_valid` alone for the narrow set. Cannot be confirmed either way, because the domain accepts everything: catch_all. Do not send: invalid, spam_trap, abuse, disposable. Use with care: risky, role (a shared mailbox like info@) and derived (built from the company's address pattern and never tested). untested means nobody has checked this address yet — it may well be fine, and it is the largest group; unknown means it WAS checked and the result was inconclusive, which is a weaker signal than untested, not a stronger one. none means the person has no email.","enum":["verified","catch_all_valid","catch_all","risky","unknown","untested","invalid","role","disposable","spam_trap","abuse","derived","none"],"x-enum-url":"https://api.leadocean.io/v1/enums/email_status","x-enum-labels":{"verified":"Deliverable","catch_all_valid":"Catch-all, mailbox confirmed","catch_all":"Catch-all domain","risky":"Risky","unknown":"Unknown","invalid":"Undeliverable","role":"Role address","disposable":"Disposable address","spam_trap":"Spam trap","abuse":"Abuse / complainer","derived":"Derived, not verified","none":"No email","untested":"Not yet checked"}},"tech_category":{"type":"string","description":"What a detected technology is FOR, rather than its name: ask for Analytics instead of naming Google Analytics, Matomo and Plausible one by one. Detected from the company's own website, so it covers the 7,843,598 companies we have crawled - about an eighth of the corpus - and a category filter searches that eighth rather than all 63,569,167. Counts are from the 2026-09-07 crawl; web enrichment has not run since, and sites change stacks, so treat this as a recent snapshot.","enum":["Web servers","JavaScript libraries","CMS","Programming languages","Security","Miscellaneous","Blogs","CDN","Databases","WordPress plugins","Tag managers","Analytics","Page builders","Reverse proxies","UI frameworks","SEO","JavaScript frameworks","Caching","Widgets","Form builders","Ecommerce","PaaS","Web frameworks","Font scripts","WordPress themes","Hosting","Video players","Photo galleries","Cookie compliance","Operating systems","JavaScript graphics","Marketing automation","Maps","Performance","Translation","Static site generator","IaaS","Mobile frameworks","Advertising","RUM","Hosting panels","Issue trackers","Email","Live chat","Editors","A/B Testing","Web server extensions","Payment processors","Reviews","Load balancers","Accessibility","CRM","Authentication","Appointment scheduling","Personalisation","Development","Search engines","Rich text editors","LMS","Reservations & delivery","Recruitment & staffing","Fundraising & donations","Documentation","Buy now pay later","Affiliate programs","Shopify apps","Content curation","Artificial Intelligence","Surveys","Segmentation","Customer data platform","Retargeting","Browser fingerprinting","Digital asset management","Cart abandonment","Geolocation","Ticket booking","User onboarding","Loyalty & rewards","Ecommerce frontends","Message boards","Referral marketing","Augmented reality","Wikis","DMS","Webmail","Cross border ecommerce","Containers","Fulfilment","Accounting","Returns","Livestreaming","Domain parking","Feed readers","Database managers","Media servers","Comment systems","Network storage","Control systems","Shipping carriers","Feature management","Remote access","Cryptominers","SSL/TLS certificate authorities","Network devices"],"x-enum-url":"https://api.leadocean.io/v1/enums/tech_category","x-enum-labels":{"Web servers":"Web servers (4,743,796 companies)","JavaScript libraries":"JavaScript libraries (4,445,343 companies)","CMS":"CMS (3,820,518 companies)","Programming languages":"Programming languages (3,755,947 companies)","Security":"Security (3,594,006 companies)","Miscellaneous":"Miscellaneous (3,001,023 companies)","Blogs":"Blogs (2,998,457 companies)","CDN":"CDN (2,928,746 companies)","Databases":"Databases (2,885,702 companies)","WordPress plugins":"WordPress plugins (2,603,737 companies)","Tag managers":"Tag managers (2,557,454 companies)","Analytics":"Analytics (2,161,057 companies)","Page builders":"Page builders (2,146,258 companies)","Reverse proxies":"Reverse proxies (1,722,291 companies)","UI frameworks":"UI frameworks (1,441,682 companies)","SEO":"SEO (1,303,924 companies)","JavaScript frameworks":"JavaScript frameworks (1,271,448 companies)","Caching":"Caching (1,005,821 companies)","Widgets":"Widgets (964,054 companies)","Form builders":"Form builders (921,479 companies)","Ecommerce":"Ecommerce (858,663 companies)","PaaS":"PaaS (825,506 companies)","Web frameworks":"Web frameworks (799,229 companies)","Font scripts":"Font scripts (769,646 companies)","WordPress themes":"WordPress themes (682,136 companies)","Hosting":"Hosting (617,957 companies)","Video players":"Video players (558,469 companies)","Photo galleries":"Photo galleries (512,266 companies)","Cookie compliance":"Cookie compliance (455,229 companies)","Operating systems":"Operating systems (448,683 companies)","JavaScript graphics":"JavaScript graphics (373,877 companies)","Marketing automation":"Marketing automation (301,981 companies)","Maps":"Maps (250,631 companies)","Performance":"Performance (219,012 companies)","Translation":"Translation (208,640 companies)","Static site generator":"Static site generator (202,400 companies)","IaaS":"IaaS (174,142 companies)","Mobile frameworks":"Mobile frameworks (166,714 companies)","Advertising":"Advertising (153,265 companies)","RUM":"RUM (144,481 companies)","Hosting panels":"Hosting panels (122,623 companies)","Issue trackers":"Issue trackers (122,062 companies)","Email":"Email (115,737 companies)","Live chat":"Live chat (88,011 companies)","Editors":"Editors (76,893 companies)","A/B Testing":"A/B Testing (56,678 companies)","Web server extensions":"Web server extensions (56,113 companies)","Payment processors":"Payment processors (55,453 companies)","Reviews":"Reviews (48,596 companies)","Load balancers":"Load balancers (43,323 companies)","Accessibility":"Accessibility (37,932 companies)","CRM":"CRM (35,416 companies)","Authentication":"Authentication (31,571 companies)","Appointment scheduling":"Appointment scheduling (29,169 companies)","Personalisation":"Personalisation (26,029 companies)","Development":"Development (22,644 companies)","Search engines":"Search engines (11,679 companies)","Rich text editors":"Rich text editors (10,454 companies)","LMS":"LMS (9,858 companies)","Reservations & delivery":"Reservations & delivery (9,703 companies)","Recruitment & staffing":"Recruitment & staffing (9,503 companies)","Fundraising & donations":"Fundraising & donations (9,216 companies)","Documentation":"Documentation (9,056 companies)","Buy now pay later":"Buy now pay later (5,757 companies)","Affiliate programs":"Affiliate programs (5,645 companies)","Shopify apps":"Shopify apps (5,535 companies)","Content curation":"Content curation (5,062 companies)","Artificial Intelligence":"Artificial Intelligence (4,954 companies)","Surveys":"Surveys (4,475 companies)","Segmentation":"Segmentation (2,902 companies)","Customer data platform":"Customer data platform (2,697 companies)","Retargeting":"Retargeting (2,237 companies)","Browser fingerprinting":"Browser fingerprinting (2,128 companies)","Digital asset management":"Digital asset management (2,099 companies)","Cart abandonment":"Cart abandonment (1,720 companies)","Geolocation":"Geolocation (1,270 companies)","Ticket booking":"Ticket booking (1,204 companies)","User onboarding":"User onboarding (1,156 companies)","Loyalty & rewards":"Loyalty & rewards (1,020 companies)","Ecommerce frontends":"Ecommerce frontends (969 companies)","Message boards":"Message boards (613 companies)","Referral marketing":"Referral marketing (582 companies)","Augmented reality":"Augmented reality (525 companies)","Wikis":"Wikis (450 companies)","DMS":"DMS (388 companies)","Webmail":"Webmail (305 companies)","Cross border ecommerce":"Cross border ecommerce (249 companies)","Containers":"Containers (247 companies)","Fulfilment":"Fulfilment (83 companies)","Accounting":"Accounting (70 companies)","Returns":"Returns (65 companies)","Livestreaming":"Livestreaming (59 companies)","Domain parking":"Domain parking (54 companies)","Feed readers":"Feed readers (48 companies)","Database managers":"Database managers (47 companies)","Media servers":"Media servers (43 companies)","Comment systems":"Comment systems (37 companies)","Network storage":"Network storage (34 companies)","Control systems":"Control systems (31 companies)","Shipping carriers":"Shipping carriers (30 companies)","Feature management":"Feature management (27 companies)","Remote access":"Remote access (16 companies)","Cryptominers":"Cryptominers (8 companies)","SSL/TLS certificate authorities":"SSL/TLS certificate authorities (3 companies)","Network devices":"Network devices (2 companies)"}},"Meta":{"type":"object","properties":{"notice":{"type":"object","description":"Present only while the account is past its monthly records: it is being served at a reduced rate until they reset","properties":{"code":{"type":"string"},"message":{"type":"string"},"throttledTo":{"type":"string"},"resetsAt":{"type":"string"},"contact":{"type":"string"}}},"source":{"type":"string","enum":["leadocean"],"description":"Which dataset answered"},"schema":{"type":"string"},"count":{"type":"integer"},"total":{"type":["integer","null"],"description":"Matches, counted only when count=true. Capped: see totalIsExact. NULL, with totalWithheld set, when a requested filter could not be applied — a count that would be wrong is not published as a number."},"totalIsExact":{"type":"boolean","description":"false means total is a floor — there are at least that many; also false whenever total is withheld"},"totalWithheld":{"type":"object","description":"Present only when a requested filter landed in unsupportedFilters and the total was therefore withheld. The rows are unfiltered on that dimension and are still returned; only the count is not a number. Narrow the query (an `industry` enum or a country instead of a broad company-side filter such as `technologies`) and count again. `keywords` on a people search is the person’s own text and is never dropped.","properties":{"reason":{"type":"string","enum":["unsupported_filters"]},"filters":{"type":"array","items":{"type":"string"}}}},"nextCursor":{"type":["string","null"],"description":"Opaque page token: pass back exactly the string meta.nextCursor returned, unchanged. Cursors are signed — one that has been edited, truncated or hand-built is refused with 400 \"Invalid cursor\", as is one minted for a different search. A cursor is a position in one walk rather than a handle on a result set: do not store it, restart the query instead. Cursors issued before 2026-09-19 no longer verify."},"depthCapped":{"type":"boolean","description":"Present and true only on the page where the search reached its depth cap; absent otherwise. nextCursor is null on that page and stays null: this walk is over. One search pages through at most 10,000 rows by default; past that no further cursor is issued and meta.depthCapped is true. The figure is per account — support can raise it for a genuine large export, so ask rather than working around it. It counts rows paged through and is not the monthly records allowance, which is separate. The answer to a capped walk is to narrow the filters and run several smaller searches; paging harder returns no more cursors."},"credits":{"type":"integer","description":"Records counted for this call"},"unsupportedFilters":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","description":"The page size this call used. Search only."},"records":{"type":"integer","description":"Rows the engine returned for this page BEFORE suppression. It can exceed count when a suppressed person was dropped from the page; it is not what you were billed — that is credits. Search only."},"facets":{"type":"object","description":"Counts by seniority, country, industry and company size. Present only when you sent facets=true. People search only."},"companyIds":{"type":"array","items":{"type":"integer"},"description":"The company ids actually represented in this page. GET /v1/companies/{domain}/people only."},"key_hash":{"type":"string","description":"The cache key the identifier resolved to. The same person reached through enrich, the phone door or any v2 door carries the same value, which is how you can tell two lookups landed on one record. Enrichment and /v2/people/reverse only."},"stability":{"type":"string","enum":["stable"],"description":"On /v2/people/reverse only. The other three v2 doors send no meta at all."},"countOnly":{"type":"boolean","description":"Present and true when this was a free sizing call: count=true with limit=1. `data` is deliberately EMPTY — read `total`. An empty array here does not mean no matches, and credits is 0."}}},"Person":{"type":"object","description":"leadocean.person.v1","properties":{"profile_data":{"type":"object"},"contact_data":{"type":"object","properties":{"contact_emails":{"type":"array","description":"Present only when reveal_email=true.","items":{"$ref":"#/components/schemas/ContactEmail"}},"contact_phones":{"type":"array","description":"Present only when reveal_email=true. For numbers alone, use /v1/people/phone.","items":{"$ref":"#/components/schemas/ContactPhone"}},"has_email":{"type":"boolean","nullable":true,"description":"Whether we hold an address. Answered whether or not you revealed."},"has_phone":{"type":"boolean","nullable":true,"description":"Whether we hold a number. Answered whether or not you revealed, so you can see there is one to ask for."},"email_status":{"type":"string","nullable":true,"description":"Deliverability of the best address — see GET /v1/enums/email_status."},"email_type":{"type":"string","nullable":true,"description":"work, work_other (a former employer), personal… — see GET /v1/enums/email_type."},"contact_current_experiences":{"type":"array","items":{"type":"object"}}}},"resume_data":{"type":"object"},"meta":{"type":"object"}}},"ContactEmail":{"type":"object","properties":{"email":{"type":"string","nullable":true},"type":{"type":"string","nullable":true},"status":{"type":"string","nullable":true},"verified_batch_date":{"type":"string","format":"date","nullable":true,"example":"2026-09-20","description":"The verification RUN this verdict came from, YYYY-MM-DD — a whole batch shares one date, so it is not a timestamp for this address. null means we did not run the check ourselves; the status came from a source we hold to the same standard. COVERAGE, from a full scan of all 392,827,626 status rows on 2026-09-21 — not a sample: 58.4% of `verified` addresses carry a date (24,727,038 of 42,343,306) and 41.6% do not; `catch_all` is 100% dated. Only two dates exist, 2026-09-14 and 2026-09-20, because only two verification rounds recorded one. AND THE NULL IS A SIGNAL, NOT A GAP: measured in BOTH directions over the full population with no exceptions either way — a null implies our verifier never tested it (17,616,268 rows, 0 counter-examples) and a date implies we did (24,727,038 rows, 0). WARNING: our verifier has never tested a PERSONAL address, not one (108,242 of 108,242 verified personal rows are supplier-asserted), so this filter returns an EMPTY set for personal addresses rather than a stricter one. Share of `verified` that is supplier-asserted by kind: work 44.7%, other 7.0%, work_other 4.7%, personal 100%. They are the supplier-asserted half of the rule, kept `verified` on a source we hold to our own standard. So `verified_batch_date IS NOT NULL` selects exactly the addresses WE tested, with no false positives, and is the filter to use if you want only self-verified addresses. What it is NOT is a \"recently verified\" filter — there are only two dates, so it cannot rank recency. null is NOT \"unverified\"."},"priority":{"type":"integer","nullable":true},"score":{"type":"number","nullable":true}}},"ContactPhone":{"type":"object","properties":{"phone":{"type":"string","nullable":true,"example":"+14155550133"},"type":{"type":"string","nullable":true,"description":"mobile, direct, office…"},"ddi":{"type":"boolean","nullable":true},"dnc":{"type":"boolean","nullable":true,"description":"Do-not-call. Published but NOT yet populated by the source: null means unknown, never \"safe to call\"."},"carrier":{"type":"string","nullable":true},"priority":{"type":"integer","nullable":true,"description":"Best first."},"score":{"type":"number","nullable":true}}},"V2PersonRef":{"type":"object","properties":{"person_id":{"type":["string","null"],"description":"The value to send as contact_id next time. Present even when found is false. If you looked this person up BY an id, the same id is echoed back verbatim — enrichment resolves an id to a DUPLICATE GROUP and answers from one row of it, so for about 8% of people the record carries a different id than the one you sent. The id you send is the one proven to work for you, because you just used it. The record’s own id is published only when you looked up by linkedin_url and had none to send."}}},"V2Identity":{"type":"object","description":"Who the answer is about. Returned by /v2/people/reverse, where naming the person is the point. For everything else we know about them, call /v1/people/enrich — same price, answered from the same cached record.","properties":{"person_id":{"type":["string","null"],"description":"Also the value to send back as contact_id. It names a RECORD."},"person_group_id":{"type":["string","null"],"description":"Names the PERSON. We hold more than one record for some people and which one a lookup lands on depends on the key you used, so the same human can come back under different person_ids through different contact points. Two records sharing a person_group_id are the same person as far as our de-duplication knows. Compare it; never look it up — person_id stays the key you send back."},"linkedin_url":{"type":["string","null"]},"full_name":{"type":["string","null"]},"job_title":{"type":["string","null"]},"company_name":{"type":["string","null"]},"company_domain":{"type":["string","null"]}}},"V2Email":{"type":"object","description":"Best first — the position in the array IS the priority.","properties":{"email":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/email_status"},"verified_batch_date":{"type":["string","null"],"format":"date","description":"The verification run this address was checked in, YYYY-MM-DD. null means the check was not ours — NOT that the address is unverified. COVERAGE, from a full scan of all 392,827,626 status rows on 2026-09-21 — not a sample: 58.4% of `verified` addresses carry a date (24,727,038 of 42,343,306) and 41.6% do not; `catch_all` is 100% dated. Only two dates exist, 2026-09-14 and 2026-09-20, because only two verification rounds recorded one. AND THE NULL IS A SIGNAL, NOT A GAP: measured in BOTH directions over the full population with no exceptions either way — a null implies our verifier never tested it (17,616,268 rows, 0 counter-examples) and a date implies we did (24,727,038 rows, 0). WARNING: our verifier has never tested a PERSONAL address, not one (108,242 of 108,242 verified personal rows are supplier-asserted), so this filter returns an EMPTY set for personal addresses rather than a stricter one. Share of `verified` that is supplier-asserted by kind: work 44.7%, other 7.0%, work_other 4.7%, personal 100%. They are the supplier-asserted half of the rule, kept `verified` on a source we hold to our own standard. So `verified_batch_date IS NOT NULL` selects exactly the addresses WE tested, with no false positives, and is the filter to use if you want only self-verified addresses. What it is NOT is a \"recently verified\" filter — there are only two dates, so it cannot rank recency."}}},"V2Phone":{"type":"object","description":"Best first — the position in the array IS the priority. v2 does NOT publish `dnc`: it is unpopulated at source, and a field that looks like a compliance answer but carries none is a trap. Its ABSENCE here is not clearance either. v1 still publishes it as null.","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"],"description":"The source’s own label, passed through unmapped — it is NOT a closed enum. Sampled across 54 live numbers on 2026-09-21: mobile 41, unknown 10, office 2, switchboard 1. Treat an unrecognised value as “unknown” rather than as an error, and note that “unknown” means we were not told the kind, not that the number is doubtful."}}},"V2PersonalEmail":{"type":"object","description":"No status field: measured over 154 personal addresses on 2026-09-21, 149 were untested — a field that reads the same 97% of the time is noise. Instead the status is APPLIED: anything we hold a negative verdict about (invalid, spam_trap, abuse, disposable, risky, role) is withheld rather than published with nothing to notice it on. What you get back carries nothing we know to be bad, and you verify the rest yourself.","properties":{"email":{"type":["string","null"]},"verified_batch_date":{"type":["string","null"],"format":"date"}}},"ContactPhones":{"allOf":[{"$ref":"#/components/schemas/V2PersonRef"},{"type":"object","properties":{"found":{"type":"boolean"},"phones":{"type":"array","items":{"$ref":"#/components/schemas/V2Phone"}},"best":{"oneOf":[{"$ref":"#/components/schemas/V2Phone"},{"type":"null"}]}}}]},"ReverseMatch":{"allOf":[{"$ref":"#/components/schemas/V2Identity"},{"type":"object","properties":{"query":{"type":"object","description":"The point you asked about, normalised as we compared it.","properties":{"email":{"type":"string"},"phone":{"type":"string"}}},"matched":{"type":["object","null"],"description":"The point as the record holds it, with its own type, status and check date. null when the record does not echo it back — see matched_in_record."},"matched_in_record":{"type":"boolean","description":"true when the record lists the exact point you sent. false means we matched this person on it upstream but the record does not carry it in its list; it does NOT mean no person was found — if no person held it you would have had a 404."}}}]},"Phones":{"type":"object","description":"leadocean.phones.v1","properties":{"key":{"type":"string","nullable":true},"has_phone":{"type":"boolean","description":"false means we hold none — not that the lookup failed."},"contact_phones":{"type":"array","items":{"$ref":"#/components/schemas/ContactPhone"}}}},"Company":{"type":"object","description":"leadocean.company.v1","properties":{"company_data":{"type":"object"},"company_detected_technologies":{"type":"object"},"company_metrics":{"type":"object"},"meta":{"type":"object"}}},"FilterContract":{"type":"object","description":"What GET /v1/filters and its two narrower forms answer with. The narrow forms carry `scope` and one filter set; GET /v1/filters carries both sets under `filters` and `companyFilters`, plus an inline enum index.","properties":{"scope":{"type":"string","enum":["people","companies"],"description":"Present on /v1/filters/people and /v1/filters/companies only."},"filters":{"type":"object","description":"Filter name to { type, enum, desc, max, default }. On the scoped endpoints this is that scope’s set."},"companyFilters":{"type":"object","description":"GET /v1/filters only."},"enums":{"type":"object","description":"GET /v1/filters only — the enum index, values inlined for the small sets."},"enums_url":{"type":"string"},"schema":{"type":"string","description":"The record schema name this scope returns."},"notes":{"type":"string"}}},"EnumIndex":{"type":"object","properties":{"enums":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer"},"appliesTo":{"type":"array","items":{"type":"string"}},"url":{"type":"string"}}}}}},"EnumValues":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"total":{"type":"integer","description":"How many values the enum has."},"matched":{"type":"integer","description":"How many matched q — which can exceed the number returned, because values is capped by limit."},"values":{"type":"array","items":{"type":"string"}},"labels":{"type":"object","description":"Human labels, for the enums that have them."}}},"ExportCreate":{"type":"object","required":["filters","limit"],"properties":{"name":{"type":"string","maxLength":120},"filters":{"type":"object","description":"A people search filter set — every /v1/people/search filter except cursor, limit, count and facets"},"limit":{"type":"integer","minimum":1,"description":"Rows to export; at most the per-export ceiling (50,000)"},"columns":{"type":"array","items":{"type":"string"},"description":"Column ids from /v1/exports/columns, in order. Omit to use a preset; the default preset is `full`."},"preset":{"type":"string","enum":["search","full"],"description":"A named column set. `full` (default, 45 columns): identity, profile, address, contact flags, emails 1–3, phones 1–2, current role, education, skills — needs the enrich scope. `search` (27 columns): only what the search row carries, no contact points. Every row costs one record whatever the columns."},"caps":{"type":"object","description":"Numbered-block sizes 1–10: emails (3), phones (2), past (3), educations (2), certifications (2), awards (1)"},"reveal":{"type":"string","enum":["none","email","email_phone"],"description":"Derived from the columns when omitted"}}},"Export":{"type":"object","properties":{"id":{"type":"string"},"downloadUrl":{"type":"string","description":"Present once there is a file. A signed link that opens without an API key (the same kind the ready email carries), minted on every read, valid until downloadExpiresAt."},"downloadExpiresAt":{"type":"string","format":"date-time"},"downloadNote":{"type":"string","description":"The same in words, for a person or an agent to relay: how long the link works without a key, that reading the export again gives a new one free (nothing is rebuilt), and until when the file is kept."},"name":{"type":["string","null"]},"status":{"type":"string","enum":["queued","running","done","failed","cancelled"]},"requested":{"type":"integer","description":"Rows asked for = records reserved"},"estimatedTotal":{"type":["integer","null"],"description":"The free count at creation"},"reveal":{"type":"string"},"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"integer","description":"Rows written so far, deduplicated by person_id"},"billed":{"type":"integer","description":"Records charged so far"},"released":{"type":"integer","description":"Reserved records given back when the export ended"},"pollAfter":{"type":["integer","null"],"description":"Seconds to wait before polling again; null when finished"},"file":{"type":["object","null"],"properties":{"bytes":{"type":"integer"},"sha256":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"expired":{"type":"boolean"},"downloads":{"type":"integer"}}},"error":{"type":["object","null"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"createdAt":{"type":"string","format":"date-time"},"startedAt":{"type":["string","null"]},"finishedAt":{"type":["string","null"]},"remaining":{"type":["integer","null"],"description":"On creation only: records left after this reservation (null = unlimited plan)"},"perRow":{"type":"integer","description":"On creation only: records per row (1, or 2 with an enrichment)"}}},"Fill":{"type":"object","description":"How many of the people in this row carry each contact point. A person is counted once per column however many addresses they hold.","required":["anyEmail","work","personal","phone"],"properties":{"anyEmail":{"type":"integer","description":"Hold at least one email address of any kind"},"work":{"type":"integer","description":"Hold at least one business address — at the current employer (work) or a former one (work_other); the emailType=work_any filter"},"personal":{"type":"integer","description":"Hold at least one personal address"},"phone":{"type":"integer","description":"Hold at least one phone number"}}},"Coverage":{"type":"object","required":["computedAt","total","fill","regions"],"properties":{"computedAt":{"type":"string","format":"date-time","description":"When this was counted. Daily."},"total":{"type":"integer","description":"People in the index"},"fill":{"$ref":"#/components/schemas/Fill"},"regions":{"type":"array","description":"NORAM, EMEA, APAC, LATAM, Other — in that order, always all five. Region people sum to total.","items":{"type":"object","required":["region","people","fill","countries"],"properties":{"region":{"type":"string","enum":["NORAM","EMEA","APAC","LATAM","Other"]},"people":{"type":"integer"},"fill":{"$ref":"#/components/schemas/Fill"},"countries":{"type":"array","description":"Most people first","items":{"type":"object","required":["code","people","fill"],"properties":{"code":{"type":["string","null"],"description":"ISO 3166-1 alpha-2; null for people with no country, under Other"},"people":{"type":"integer"},"fill":{"$ref":"#/components/schemas/Fill"}}}}}}}}},"Account":{"type":"object","description":"One document per account. `records.ceiling` is null on a fair-use plan (nothing to run out of); `records.whenOver` says what happens past it: throttled (paid, paced to 1 request a minute) or refused (free plan, 402). `subscription` is null until the account has ever subscribed.","properties":{"account":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"plan":{"type":["string","null"]},"fairUse":{"type":"boolean"},"suspended":{"type":"boolean"},"emailVerified":{"type":"boolean"},"createdAt":{"type":["string","null"],"format":"date-time"}}},"key":{"type":["object","null"],"description":"The calling key; null for a signed-in session.","properties":{"id":{"type":"string"},"prefix":{"type":["string","null"]},"scopes":{"type":"array","items":{"type":"string"}},"maxDepth":{"type":["integer","null"]}}},"records":{"type":"object","properties":{"ceiling":{"type":["integer","null"]},"used":{"type":"integer"},"remaining":{"type":["integer","null"]},"addOn":{"type":"integer"},"period":{"type":"string"},"periodKey":{"type":"string"},"resetsAt":{"type":["string","null"],"format":"date-time"},"overLimit":{"type":"boolean"},"whenOver":{"type":"string","enum":["never","throttled","refused"]}}},"grant":{"type":["object","null"],"properties":{"planSlug":{"type":"string"},"endsAt":{"type":["string","null"],"format":"date-time"},"daysLeft":{"type":["integer","null"]},"discountPercent":{"type":"integer"},"discountMonths":{"type":["integer","null"]},"active":{"type":"boolean"},"awaitingVerification":{"type":"boolean"},"discountUntil":{"type":["string","null"],"format":"date-time"}}},"subscription":{"type":["object","null"],"properties":{"status":{"type":["string","null"]},"planSlug":{"type":["string","null"]},"currentPeriodEnd":{"type":["string","null"],"format":"date-time"},"cancelAtPeriodEnd":{"type":"boolean"}}},"exports":{"type":["object","null"],"properties":{"day":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":"integer"},"resetsAt":{"type":"string","format":"date-time"}}},"period":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":"integer"},"resetsAt":{"type":["string","null"],"format":"date-time"}}},"maxRows":{"type":"integer"},"override":{"type":["object","null"]}}},"rate":{"type":"object","properties":{"rps":{"type":["number","null"]},"rpm":{"type":["integer","null"]},"throttledRpm":{"type":["integer","null"]}}}}},"Usage":{"type":"object","description":"Your own account. Counted over the PLAN’s period, which is not always a calendar month — read `period` and `resetsAt` rather than assuming.","properties":{"month":{"type":"string","description":"The counter bucket this period is keyed by."},"period":{"type":"string","description":"month, billing period, or lifetime for a one-off allowance."},"resetsAt":{"type":["string","null"],"format":"date-time"},"used":{"type":"integer","description":"Records spent this period."},"plan":{"type":["object","null"],"properties":{"slug":{"type":"string"},"rps":{"type":"integer"},"rpm":{"type":"integer"},"monthlyCredits":{"type":["integer","null"],"description":"null on a fair-use plan — there is no number to run out of."}}},"daily":{"type":"array","description":"The last 30 days, one row per day per key.","items":{"type":"object","properties":{"day":{"type":"string","format":"date"},"keyId":{"type":"string"},"enrich":{"type":"integer"},"search":{"type":"integer"},"credits":{"type":"integer"},"r429":{"type":"integer"},"r402":{"type":"integer"},"records":{"type":"integer"},"recordsOwn":{"type":"integer"}}}},"perKey":{"type":"array","description":"The same 30 days totalled per key.","items":{"type":"object","properties":{"key":{"type":"object"},"enrich":{"type":"integer"},"search":{"type":"integer"},"credits":{"type":"integer"},"r429":{"type":"integer"},"r402":{"type":"integer"},"records":{"type":"integer"},"recordsOwn":{"type":"integer"}}}}}},"Error":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"object","properties":{"message":{"type":"string"},"details":{}}}}}},"responses":{"Quota":{"description":"The account's records are spent. On Free that is permanent: the 1,000 are a one-off allowance and do not reset. A paid account is paced to 1 request/minute instead of refused, until its billing date.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimit":{"description":"Over the account rate (100 requests/second by default; 1/minute while a paid account is past its monthly records) — honour Retry-After","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}