Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (“load more” or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone.
Billing
per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize.
The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.
Workspace API key (loice_sk_ + 48 hex characters), created under Settings → API Keys. Sent as Authorization: Bearer loice_sk_…. Invalid, missing, or expired keys are rejected with 401 before any billable work happens.
At least one non-empty filter is required — unless continueFromRunId is set, in which case filters may be omitted (the continuation inherits the prior run’s criteria; submitted filters must match them).
How many leads to deliver (default 25, maximum 10000). Billing is per lead actually delivered, never per lead requested. On a continuation this means additional leads beyond the prior run.
Id of a finished run to continue ("load more" / retry after a partial failure). The new run inherits its criteria, resumes where it stopped, and never re-delivers or re-bills leads the prior run or any run it continued already delivered. Only the newest run of a search can be continued: a run that already has a continuation answers 409 run_already_continued.
Fetch exactly this one source page and stop there — the on-demand fetch behind as-if-local pagination. On a continuation it replaces resuming sequentially; on a new search it picks the page. The run delivers what that page holds (at most count) and is billed only for those; leads the chain already delivered are never re-billed. Without page, a run reads pages in order until it has count leads.
Required range: 1 <= x <= 100
Response
Run created (poll GET /api/v1/lead-search/runs/{runId}), or refused uncharged with reason: "insufficient-credits" when the balance cannot cover the worst case — inspect run and reason.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Loice","description":"Loice is the AI agent that finds verified leads: product guides, API reference and MCP set-up.","colors":{"primary":"#ff5a1f","light":"#ff7c46","dark":"#e14e15"},"logo":{"light":"https://mintcdn.com/loice-ai/BjcqR91eFdyMv2fQ/logo/loice-black.png?fit=max\u0026auto=format\u0026n=BjcqR91eFdyMv2fQ\u0026q=85\u0026s=bec1e804b7d2b4e6090aad41f5ec149e","dark":"https://mintcdn.com/loice-ai/BjcqR91eFdyMv2fQ/logo/loice-white.png?fit=max\u0026auto=format\u0026n=BjcqR91eFdyMv2fQ\u0026q=85\u0026s=047e3e67ec3049b5fd51a830b6d6ecf5","href":"https://app.loice.ai"},"favicon":"https://mintcdn.com/loice-ai/idv10iVf8OQiCSpv/favicon.svg?fit=max\u0026auto=format\u0026n=idv10iVf8OQiCSpv\u0026q=85\u0026s=a2b1dfa846aba2dd2708a97f2239882d","api":{"openapi":"openapi.json","playground":{"display":"interactive","proxy":false,"credentials":false},"examples":{"defaults":"required","languages":["curl","javascript","node","python"]}},"navbar":{"links":[{"href":"/connect-mcp","label":"Connect MCP"},{"href":"https://app.loice.ai/settings/account?tab=api","label":"API keys"}],"primary":{"type":"button","label":"Open Loice","href":"https://app.loice.ai"}},"footer":{"links":[{"header":"Loice","items":[{"label":"App","href":"https://app.loice.ai"},{"label":"Website","href":"https://loice.ai"},{"label":"Status","href":"https://status.loice.ai"}]}]},"contextual":{"options":["copy","view"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"loice-ai","hasAudioNarration":false,"actualSubdomain":"loice-ai","customDomains":["docs.loice.ai"],"gitSource":{"type":"github","owner":"loice-ai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af3055c2e595ebec461a1ad","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"API reference","count":12},{"language":"default","tag":"API Reference","count":12},{"language":"default","tag":"API basics","count":8},{"language":"default","tag":"Product","count":7},{"language":"default","tag":"Account","count":4},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Integrations","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/start-lead-search","slug":"/api-reference/start-lead-search","pageMetadata":{"title":"Start lead search","description":"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a **background run** that delivers up to `count` directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll `GET /api/v1/lead-search/runs/{runId}` for status and results. Set `continueFromRunId` to continue a finished run (\"load more\" or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s `linkedinUrl` into `POST /api/v1/find` (linkedin mode) to get a verified email. Rate limited per workspace. **Breaking change from the earlier synchronous contract**: the old one-batch `page` request/response is gone.\n\n#### Billing\n\n- per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; `unitCost × count` is reserved up front and the unused remainder is released at finalize.\n\nThe current cost is shown in the app under Settings → Billing and in the live `GET /api/v1/openapi.json`. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The `charged` and `pointsCharged` fields of the response state what this call actually consumed.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/lead-search","href":"/api-reference/start-lead-search","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n h4: \"h4\",\n li: \"li\",\n p: \"p\",\n strong: \"strong\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a \", _jsx(_components.strong, {\n children: \"background run\"\n }), \" that delivers up to \", _jsx(_components.code, {\n children: \"count\"\n }), \" directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll \", _jsx(_components.code, {\n children: \"GET /api/v1/lead-search/runs/{runId}\"\n }), \" for status and results. Set \", _jsx(_components.code, {\n children: \"continueFromRunId\"\n }), \" to continue a finished run (“load more” or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s \", _jsx(_components.code, {\n children: \"linkedinUrl\"\n }), \" into \", _jsx(_components.code, {\n children: \"POST /api/v1/find\"\n }), \" (linkedin mode) to get a verified email. Rate limited per workspace. \", _jsx(_components.strong, {\n children: \"Breaking change from the earlier synchronous contract\"\n }), \": the old one-batch \", _jsx(_components.code, {\n children: \"page\"\n }), \" request/response is gone.\"]\n }), \"\\n\", _jsx(_components.h4, {\n children: \"Billing\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; \", _jsx(_components.code, {\n children: \"unitCost × count\"\n }), \" is reserved up front and the unused remainder is released at finalize.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The current cost is shown in the app under Settings → Billing and in the live \", _jsx(_components.code, {\n children: \"GET /api/v1/openapi.json\"\n }), \". Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The \", _jsx(_components.code, {\n children: \"charged\"\n }), \" and \", _jsx(_components.code, {\n children: \"pointsCharged\"\n }), \" fields of the response state what this call actually consumed.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Start lead search","description":"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a **background run** that delivers up to `count` directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll `GET /api/v1/lead-search/runs/{runId}` for status and results. Set `continueFromRunId` to continue a finished run (\"load more\" or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s `linkedinUrl` into `POST /api/v1/find` (linkedin mode) to get a verified email. Rate limited per workspace. **Breaking change from the earlier synchronous contract**: the old one-batch `page` request/response is gone.\n\n#### Billing\n\n- per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; `unitCost × count` is reserved up front and the unused remainder is released at finalize.\n\nThe current cost is shown in the app under Settings → Billing and in the live `GET /api/v1/openapi.json`. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The `charged` and `pointsCharged` fields of the response state what this call actually consumed.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/lead-search","href":"/api-reference/start-lead-search","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Start lead search","description":"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a **background run** that delivers up to `count` directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll `GET /api/v1/lead-search/runs/{runId}` for status and results. Set `continueFromRunId` to continue a finished run (\"load more\" or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s `linkedinUrl` into `POST /api/v1/find` (linkedin mode) to get a verified email. Rate limited per workspace. **Breaking change from the earlier synchronous contract**: the old one-batch `page` request/response is gone.\n\n#### Billing\n\n- per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; `unitCost × count` is reserved up front and the unused remainder is released at finalize.\n\nThe current cost is shown in the app under Settings → Billing and in the live `GET /api/v1/openapi.json`. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The `charged` and `pointsCharged` fields of the response state what this call actually consumed.","security":["51d545ce-c578-4a9d-8eb7-95d3763a3ed8"],"requestBody":"73678ce7-502e-4ebc-adf4-bbd5cfd0ed90","responses":{"200":"8881a40d-4219-4e4e-b189-088fe53461db","400":"29472f48-27bb-4bc5-b1db-f1796a7f34fe","401":"9ba05aeb-c445-444f-9652-51de2a015323","405":"9edbe5ff-6989-4982-8af0-e2afddc00dfc","409":"27e280a9-3ae8-4585-99fc-062fa1b9b241","429":"23b469a9-a738-4718-af51-af70cd5ef9a5","500":"dfd326ab-3b39-48d0-a1c5-1a8c4b542e59","503":"472e9619-71f7-47c4-8d15-5a0049019ebb"},"method":"post","type":"path","servers":["695260fa-a90d-430f-9fda-0588978e186c"],"path":"/api/v1/lead-search","baseUrlOptions":["https://app.loice.ai"],"title":"Start lead search","codeSamples":[],"requestExampleLanguages":["bash","javascript","node","python"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filters":{"type":"object","properties":{"people":{"type":"array","items":{"type":"string","maxLength":200,"uniqueKey":"filters.people.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Free-text hints about the people sought.","uniqueKey":"filters.people","typeLabel":"string[]"},"jobTitle":{"type":"array","items":{"type":"string","maxLength":200,"uniqueKey":"filters.jobTitle.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Current job titles, e.g. \"Head of Sales\".","uniqueKey":"filters.jobTitle","typeLabel":"string[]"},"company":{"type":"array","items":{"type":"string","maxLength":200,"uniqueKey":"filters.company.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Company names. Applied as a keyword plus a server-side match on each result’s stated employer.","uniqueKey":"filters.company","typeLabel":"string[]"},"location":{"type":"array","items":{"type":"string","maxLength":200,"uniqueKey":"filters.location.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Locations, e.g. \"Germany\" or \"Berlin\".","uniqueKey":"filters.location","typeLabel":"string[]"},"keywords":{"type":"array","items":{"type":"string","maxLength":200,"uniqueKey":"filters.keywords.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"Free keywords (LinkedIn search operators work).","uniqueKey":"filters.keywords","typeLabel":"string[]"},"headcount":{"type":"array","items":{"type":"string","enum":["Self-employed","1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10001+"],"uniqueKey":"filters.headcount.items.[INDEX]","typeLabel":"enum\u003cstring>"},"maxItems":20,"description":"Company headcount buckets.","uniqueKey":"filters.headcount","typeLabel":"enum\u003cstring>[]"},"industry":{"type":"array","items":{"type":"string","uniqueKey":"filters.industry.items.[INDEX]","typeLabel":"string"},"maxItems":20,"description":"LinkedIn industry labels (434-entry taxonomy), e.g. \"Software Development\"; legacy aliases (SaaS, Finance, …) are accepted.","uniqueKey":"filters.industry","typeLabel":"string[]"},"yearsExperience":{"type":"array","items":{"type":"string","enum":["Less than 1 year","1-2 years","3-5 years","6-10 years","11-15 years","16-20 years","20+ years"],"uniqueKey":"filters.yearsExperience.items.[INDEX]","typeLabel":"enum\u003cstring>"},"maxItems":20,"description":"Years-of-experience buckets.","uniqueKey":"filters.yearsExperience","typeLabel":"enum\u003cstring>[]"},"seniorityLevel":{"type":"array","items":{"type":"string","enum":["In Training","Entry Level","Senior","Strategic","Entry Level Manager","Experienced Manager","Director","Vice President","CXO","Owner / Partner"],"uniqueKey":"filters.seniorityLevel.items.[INDEX]","typeLabel":"enum\u003cstring>"},"maxItems":20,"description":"Seniority levels.","uniqueKey":"filters.seniorityLevel","typeLabel":"enum\u003cstring>[]"},"function":{"type":"array","items":{"type":"string","enum":["Accounting","Administrative","Arts and Design","Business Development","Community \u0026 Social Services","Consulting","Customer Success and Support","Education","Engineering","Entrepreneurship","Finance","Healthcare Services","Human Resources","Information Technology","Legal","Marketing","Media and Communication","Military and Protective Services","Operations","Product Management","Program and Project Management","Purchasing","Quality Assurance","Real Estate","Research","Sales"],"uniqueKey":"filters.function.items.[INDEX]","typeLabel":"enum\u003cstring>"},"maxItems":20,"description":"Job functions (departments).","uniqueKey":"filters.function","typeLabel":"enum\u003cstring>[]"}},"additionalProperties":false,"description":"At least one non-empty filter is required — unless `continueFromRunId` is set, in which case filters may be omitted (the continuation inherits the prior run’s criteria; submitted filters must match them).","uniqueKey":"filters","typeLabel":"object"},"count":{"type":"integer","minimum":1,"maximum":10000,"description":"How many leads to deliver (default 25, maximum 10000). Billing is per lead actually delivered, never per lead requested. On a continuation this means additional leads beyond the prior run.","uniqueKey":"count","typeLabel":"integer"},"continueFromRunId":{"type":"string","description":"Id of a finished run to continue (\"load more\" / retry after a partial failure). The new run inherits its criteria, resumes where it stopped, and never re-delivers or re-bills leads the prior run or any run it continued already delivered. Only the newest run of a search can be continued: a run that already has a continuation answers 409 `run_already_continued`.","uniqueKey":"continueFromRunId","typeLabel":"string"},"page":{"type":"integer","minimum":1,"maximum":100,"description":"Fetch exactly this one source page and stop there — the on-demand fetch behind as-if-local pagination. On a continuation it replaces resuming sequentially; on a new search it picks the page. The run delivers what that page holds (at most `count`) and is billed only for those; leads the chain already delivered are never re-billed. Without `page`, a run reads pages in order until it has `count` leads.","uniqueKey":"page","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"filters":{"jobTitle":["Head of Sales"],"location":["Germany"],"headcount":["51-200"]},"count":500},"examples":{"Example":{"title":"Example","value":{"filters":{"jobTitle":["Head of Sales"],"location":["Germany"],"headcount":["51-200"]},"count":500}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"8881a40d-4219-4e4e-b189-088fe53461db":{"description":"Run created (poll `GET /api/v1/lead-search/runs/{runId}`), or refused uncharged with `reason: \"insufficient-credits\"` when the balance cannot cover the worst case — inspect `run` and `reason`.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"balance":{"type":"object","properties":{"available":{"type":"integer","isRequired":true,"uniqueKey":"data.balance.available","typeLabel":"integer"},"reserved":{"type":"integer","isRequired":true,"uniqueKey":"data.balance.reserved","typeLabel":"integer"},"granted":{"type":"integer","isRequired":true,"uniqueKey":"data.balance.granted","typeLabel":"integer"}},"required":["available","reserved","granted"],"description":"Post-reservation balance: `maxCost` moves to `reserved` until finalize.","isRequired":true,"uniqueKey":"data.balance","typeLabel":"object"},"run":{"type":"object","properties":{"id":{"type":"string","description":"Run id — poll it via `GET /api/v1/lead-search/runs/{runId}`.","isRequired":true,"uniqueKey":"data.run.id","typeLabel":"string"},"kind":{"type":"string","enum":["criteria","employees"],"description":"Always `criteria` on v1 (a criteria search). Employee Finder runs are not part of the public API and answer 404.","isRequired":true,"uniqueKey":"data.run.kind","typeLabel":"enum\u003cstring>"},"lookupMode":{"oneOf":[{"type":"string","enum":["domain","linkedin",null],"description":"Employee Finder runs only; null for a criteria run.","isRequired":true,"uniqueKey":"data.run.lookupMode.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["domain","linkedin",null],"description":"Employee Finder runs only; null for a criteria run.","isRequired":true,"uniqueKey":"data.run.lookupMode.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.lookupMode","typeLabel":"enum\u003cstring> | null"},"lookupInput":{"oneOf":[{"type":"string","description":"Employee Finder runs only; null for a criteria run.","isRequired":true,"uniqueKey":"data.run.lookupInput.oneOf.0","typeLabel":"string"},{"type":"null","description":"Employee Finder runs only; null for a criteria run.","isRequired":true,"uniqueKey":"data.run.lookupInput.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.lookupInput","typeLabel":"string | null"},"status":{"type":"string","enum":["queued","processing","cancelling","completed","cancelled","failed"],"description":"Lifecycle state. `queued`/`processing`/`cancelling` are active — keep polling; `completed`/`cancelled`/`failed` are terminal.","isRequired":true,"uniqueKey":"data.run.status","typeLabel":"enum\u003cstring>"},"requestedCount":{"type":"integer","description":"Leads requested for this run.","isRequired":true,"uniqueKey":"data.run.requestedCount","typeLabel":"integer"},"deliveredCount":{"type":"integer","description":"Distinct leads delivered so far — the only number billed.","isRequired":true,"uniqueKey":"data.run.deliveredCount","typeLabel":"integer"},"sourceTotalElements":{"oneOf":[{"type":"integer","description":"Total results the source reports for these criteria (set from the first fetched page); the browsable window is capped at 100 pages.","isRequired":true,"uniqueKey":"data.run.sourceTotalElements.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Total results the source reports for these criteria (set from the first fetched page); the browsable window is capped at 100 pages.","isRequired":true,"uniqueKey":"data.run.sourceTotalElements.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.sourceTotalElements","typeLabel":"integer | null"},"sourceTotalPages":{"oneOf":[{"type":"integer","description":"Source-reported page count (capped at 100 by the source).","isRequired":true,"uniqueKey":"data.run.sourceTotalPages.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Source-reported page count (capped at 100 by the source).","isRequired":true,"uniqueKey":"data.run.sourceTotalPages.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.sourceTotalPages","typeLabel":"integer | null"},"sourceExhausted":{"type":"boolean","description":"True when the source ran out of matches before `requestedCount`.","isRequired":true,"uniqueKey":"data.run.sourceExhausted","typeLabel":"boolean"},"sourcePages":{"type":"array","items":{"type":"object","properties":{"page":{"type":"integer","description":"Source page number.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].page","typeLabel":"integer"},"sourceRows":{"type":"integer","description":"Rows the source returned for this page.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].sourceRows","typeLabel":"integer"},"delivered":{"type":"integer","description":"Rows this run delivered from it (billed).","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].delivered","typeLabel":"integer"},"notAtCompany":{"type":"integer","description":"Rows whose stated employer did not match the company filter.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].notAtCompany","typeLabel":"integer"},"titleNotStated":{"type":"integer","description":"Searches with a job-title filter: rows with no current position that states that title (for an employee search, no position at the company that states it). The source matches titles loosely. 0 otherwise.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].titleNotStated","typeLabel":"integer"},"duplicates":{"type":"integer","description":"Rows already delivered on this page or by any earlier run of the chain.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].duplicates","typeLabel":"integer"},"doNotContact":{"type":"integer","description":"Rows on the workspace’s do-not-contact list.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].doNotContact","typeLabel":"integer"},"beyondRequested":{"type":"integer","description":"Rows left once the run had `requestedCount` leads.","isRequired":true,"uniqueKey":"data.run.sourcePages.items.[INDEX].beyondRequested","typeLabel":"integer"}},"required":["page","sourceRows","delivered","notAtCompany","titleNotStated","duplicates","doNotContact","beyondRequested"],"uniqueKey":"data.run.sourcePages.items.[INDEX]","typeLabel":"object"},"description":"Per source page this run fetched, counts only: what the source returned and why rows were not delivered. `sourceRows` is `delivered` plus the five reasons. Empty for runs created before this field existed.","isRequired":true,"uniqueKey":"data.run.sourcePages","typeLabel":"object[]"},"continuedFromId":{"oneOf":[{"type":"string","description":"Id of the run this one continues, when it is a continuation.","isRequired":true,"uniqueKey":"data.run.continuedFromId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Id of the run this one continues, when it is a continuation.","isRequired":true,"uniqueKey":"data.run.continuedFromId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.continuedFromId","typeLabel":"string | null"},"unitCost":{"type":"integer","description":"Points per delivered lead.","isRequired":true,"uniqueKey":"data.run.unitCost","typeLabel":"integer"},"maxCost":{"type":"integer","description":"Worst-case cost disclosed up front: `unitCost × requestedCount` (reserved at creation; the unused remainder frees at finalize).","isRequired":true,"uniqueKey":"data.run.maxCost","typeLabel":"integer"},"creditsCharged":{"oneOf":[{"type":"integer","description":"Points actually debited — set at finalize to `deliveredCount × unitCost`, null while the run is active. An empty run charges 0.","isRequired":true,"uniqueKey":"data.run.creditsCharged.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Points actually debited — set at finalize to `deliveredCount × unitCost`, null while the run is active. An empty run charges 0.","isRequired":true,"uniqueKey":"data.run.creditsCharged.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.creditsCharged","typeLabel":"integer | null"},"error":{"oneOf":[{"type":"string","description":"Failure reason key when `status` is `failed` (e.g. `search-failed`).","isRequired":true,"uniqueKey":"data.run.error.oneOf.0","typeLabel":"string"},{"type":"null","description":"Failure reason key when `status` is `failed` (e.g. `search-failed`).","isRequired":true,"uniqueKey":"data.run.error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.error","typeLabel":"string | null"},"criteria":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"data.run.criteria.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"data.run.criteria.additionalProperties","typeLabel":"string[]"},"description":"Echo of the normalized search criteria the run executes.","isRequired":true,"uniqueKey":"data.run.criteria","typeLabel":"object"},"createdAt":{"type":"string","description":"ISO timestamp the run was created.","isRequired":true,"uniqueKey":"data.run.createdAt","typeLabel":"string"},"startedAt":{"oneOf":[{"type":"string","description":"ISO timestamp processing began, null while queued.","isRequired":true,"uniqueKey":"data.run.startedAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO timestamp processing began, null while queued.","isRequired":true,"uniqueKey":"data.run.startedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.startedAt","typeLabel":"string | null"},"finishedAt":{"oneOf":[{"type":"string","description":"ISO timestamp the run reached a terminal state.","isRequired":true,"uniqueKey":"data.run.finishedAt.oneOf.0","typeLabel":"string"},{"type":"null","description":"ISO timestamp the run reached a terminal state.","isRequired":true,"uniqueKey":"data.run.finishedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.run.finishedAt","typeLabel":"string | null"}},"required":["id","kind","lookupMode","lookupInput","status","requestedCount","deliveredCount","sourceTotalElements","sourceTotalPages","sourceExhausted","sourcePages","continuedFromId","unitCost","maxCost","creditsCharged","error","criteria","createdAt","startedAt","finishedAt"],"description":"The created run (absent on `insufficient-credits`).","uniqueKey":"data.run","typeLabel":"object"},"replay":{"type":"boolean","description":"True when this is the run an earlier call with the same `Idempotency-Key` created (nothing new was held or started). Absent on a refusal.","uniqueKey":"data.replay","typeLabel":"boolean"},"pointsReservedMax":{"type":"integer","description":"Points reserved for the run (`unitCost × requestedCount`) — the most it can cost; the actual debit is per delivered lead.","uniqueKey":"data.pointsReservedMax","typeLabel":"integer"},"reason":{"type":"string","enum":["insufficient-credits"],"description":"Present when no run was created because the workspace cannot cover the worst-case cost. Nothing is charged.","uniqueKey":"data.reason","typeLabel":"enum\u003cstring>"}},"required":["balance"],"isRequired":true,"uniqueKey":"data","typeLabel":"object"}},"required":["data"],"uniqueKey":"","typeLabel":"object"},"example":{"data":{"run":{"id":"cmf3x0v2b0001abcd","status":"queued","requestedCount":500,"deliveredCount":0,"sourceExhausted":false,"sourceTotalElements":23000,"sourceTotalPages":100,"sourcePages":[],"continuedFromId":null,"unitCost":1,"maxCost":500,"creditsCharged":null,"error":null,"criteria":{"jobTitle":["Head of Sales"],"location":["Germany"],"headcount":["51-200"]},"createdAt":"2026-09-01T09:00:00.000Z","startedAt":null,"finishedAt":null},"balance":{"available":734,"reserved":500,"granted":1234},"pointsReservedMax":500}},"examples":{"Example":{"title":"Example","value":{"data":{"run":{"id":"cmf3x0v2b0001abcd","status":"queued","requestedCount":500,"deliveredCount":0,"sourceExhausted":false,"sourceTotalElements":23000,"sourceTotalPages":100,"sourcePages":[],"continuedFromId":null,"unitCost":1,"maxCost":500,"creditsCharged":null,"error":null,"criteria":{"jobTitle":["Head of Sales"],"location":["Germany"],"headcount":["51-200"]},"createdAt":"2026-09-01T09:00:00.000Z","startedAt":null,"finishedAt":null},"balance":{"available":734,"reserved":500,"granted":1234},"pointsReservedMax":500}}}},"exampleType":"examples"}},"exampleType":"examples"},"29472f48-27bb-4bc5-b1db-f1796a7f34fe":{"description":"`validation_error`: the whole body is parsed — no filter, an unsupported filter key, an unknown label for a listed criterion, more than 20 values or one over 200 characters, a `count` outside 1–10000 or not a number. `invalid_continuation`: `continueFromRunId` names no finished search of this workspace, or the submitted filters differ from its criteria. Never billed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_error","unauthenticated","not_found","forbidden","method_not_allowed","idempotency_conflict","idempotency_in_progress","rate_limited","internal_error","run_already_active","run_already_continued","search_unavailable","invalid_continuation","invalid_input","insufficient_credits","incomplete"],"description":"Machine-readable error code. Branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryAfterSeconds":{"type":"integer","description":"Present on a 429 only: seconds until the workspace may call again (same value as the `Retry-After` header).","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_error","message":"\u003cstring>","retryAfterSeconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"9ba05aeb-c445-444f-9652-51de2a015323":{"description":"API key missing (`Missing API key. Pass it as: Authorization: Bearer \u003ckey>`), invalid (`Invalid API key`), or expired (`This API key has expired`).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"9edbe5ff-6989-4982-8af0-e2afddc00dfc":{"description":"Method not allowed — see the `Allow` response header.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"27e280a9-3ae8-4585-99fc-062fa1b9b241":{"description":"`run_already_active`: a run is already active for this workspace, or an Add to list / Export is still buying pages of the search being continued — wait for it or cancel it. `run_already_continued`: `continueFromRunId` already has a continuation; continue the newest run of that search instead. `idempotency_conflict`: the `Idempotency-Key` was used for another request. Never billed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_error","unauthenticated","not_found","forbidden","method_not_allowed","idempotency_conflict","idempotency_in_progress","rate_limited","internal_error","run_already_active","run_already_continued","search_unavailable","invalid_continuation","invalid_input","insufficient_credits","incomplete"],"description":"Machine-readable error code. Branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryAfterSeconds":{"type":"integer","description":"Present on a 429 only: seconds until the workspace may call again (same value as the `Retry-After` header).","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_error","message":"\u003cstring>","retryAfterSeconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"23b469a9-a738-4718-af51-af70cd5ef9a5":{"description":"Rate limit exceeded for this workspace. Retry after the number of seconds in the `Retry-After` header (60). Rate-limited calls are never billed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"required":["message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"dfd326ab-3b39-48d0-a1c5-1a8c4b542e59":{"description":"`internal_error`: failed on our side. Never billed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_error","unauthenticated","not_found","forbidden","method_not_allowed","idempotency_conflict","idempotency_in_progress","rate_limited","internal_error","run_already_active","run_already_continued","search_unavailable","invalid_continuation","invalid_input","insufficient_credits","incomplete"],"description":"Machine-readable error code. Branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryAfterSeconds":{"type":"integer","description":"Present on a 429 only: seconds until the workspace may call again (same value as the `Retry-After` header).","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_error","message":"\u003cstring>","retryAfterSeconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"472e9619-71f7-47c4-8d15-5a0049019ebb":{"description":"`search_unavailable`: lead search is not configured right now. Never billed.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["validation_error","unauthenticated","not_found","forbidden","method_not_allowed","idempotency_conflict","idempotency_in_progress","rate_limited","internal_error","run_already_active","run_already_continued","search_unavailable","invalid_continuation","invalid_input","insufficient_credits","incomplete"],"description":"Machine-readable error code. Branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"retryAfterSeconds":{"type":"integer","description":"Present on a 429 only: seconds until the workspace may call again (same value as the `Retry-After` header).","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"validation_error","message":"\u003cstring>","retryAfterSeconds":123}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"51d545ce-c578-4a9d-8eb7-95d3763a3ed8":{"workspaceApiKey":{"type":"http","scheme":"bearer","description":"Workspace API key (`loice_sk_` + 48 hex characters), created under Settings → API Keys. Sent as `Authorization: Bearer loice_sk_…`. Invalid, missing, or expired keys are rejected with 401 before any billable work happens.","scopes":[],"schemeName":"workspaceApiKey"}}},"servers":{"695260fa-a90d-430f-9fda-0588978e186c":{"url":"https://app.loice.ai"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Workspace API key (`loice_sk_` + 48 hex characters), created under Settings → API Keys. Sent as `Authorization: Bearer loice_sk_…`. Invalid, missing, or expired keys are rejected with 401 before any billable work happens.","scopes":[],"schemeName":"workspaceApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Workspace API key (`loice_sk_` + 48 hex characters), created under Settings → API Keys. Sent as `Authorization: Bearer loice_sk_…`. Invalid, missing, or expired keys are rejected with 401 before any billable work happens.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"workspaceApiKey","name":"Authorization"}],"title":"workspaceApiKey"}]},"originalFileLocation":"openapi.json"},"subdomain":"loice-ai","siteName":"Loice","title":"Start lead search - Loice","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T13:15:54.040Z","originalFileLocation":"api-reference/start-lead-search.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (\u0026quot;load more\u0026quot; or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone. #### Billing - per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize. The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Loice\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start lead search - Loice\">\u003cmeta data-mint-head property=\"og:description\" content=\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (\u0026quot;load more\u0026quot; or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone. #### Billing - per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize. The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Loice\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.loice.ai/api-reference/start-lead-search\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://loice-ai.mintlify.site/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Start+lead+search\u0026amp;description=Finds+people+by+criteria+%E2%80%94+job+title%2C+location%2C+company%2C+industry%2C+headcount%2C+seniority%2C+keywords+%E2%80%94+with+no+target+person+known+in+advance.+Creates+a+**backgrou\u0026amp;theme=aaaf477007e472ee8ada61f7\u0026amp;signature=7148ea730149b5ae059a8378112a8844fc9927fe5c1db2a052482f8a9a0a2365\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Start lead search - Loice\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (\u0026quot;load more\u0026quot; or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone. #### Billing - per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize. The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://loice-ai.mintlify.site/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Start+lead+search\u0026amp;description=Finds+people+by+criteria+%E2%80%94+job+title%2C+location%2C+company%2C+industry%2C+headcount%2C+seniority%2C+keywords+%E2%80%94+with+no+target+person+known+in+advance.+Creates+a+**backgrou\u0026amp;theme=aaaf477007e472ee8ada61f7\u0026amp;signature=7148ea730149b5ae059a8378112a8844fc9927fe5c1db2a052482f8a9a0a2365\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/loice-ai/dsWJfncwTF1mrm64/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Loice\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ff5a1f\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.loice.ai/api-reference/start-lead-search\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/start-lead-search.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.loice.ai/#organization\",\"name\":\"Loice\",\"url\":\"https://docs.loice.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/loice-ai/BjcqR91eFdyMv2fQ/logo/loice-black.png?fit=max\u0026auto=format\u0026n=BjcqR91eFdyMv2fQ\u0026q=85\u0026s=bec1e804b7d2b4e6090aad41f5ec149e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.loice.ai#website\",\"name\":\"Loice\",\"url\":\"https://docs.loice.ai\",\"publisher\":{\"@id\":\"https://docs.loice.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.loice.ai/api-reference/start-lead-search#webpage\",\"url\":\"https://docs.loice.ai/api-reference/start-lead-search\",\"name\":\"Start lead search\",\"description\":\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (\\\"load more\\\" or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone. #### Billing - per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize. The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.\",\"dateModified\":\"2026-11-09T13:15:54.040Z\",\"isPartOf\":{\"@id\":\"https://docs.loice.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.loice.ai/api-reference/start-lead-search#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.loice.ai/api-reference/start-lead-search#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.loice.ai/api-reference/find-and-verify-email\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Start lead search\",\"item\":\"https://docs.loice.ai/api-reference/start-lead-search\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.loice.ai/api-reference/start-lead-search#apireference\",\"headline\":\"Start lead search\",\"name\":\"Start lead search\",\"description\":\"Finds people by criteria — job title, location, company, industry, headcount, seniority, keywords — with no target person known in advance. Creates a background run that delivers up to count directory-style results (name, title, company, location, profile URL — never contact data) and returns immediately with the run handle and your post-reservation balance; poll GET /api/v1/lead-search/runs/{runId} for status and results. Set continueFromRunId to continue a finished run (\\\"load more\\\" or retry) — already-delivered leads are never re-delivered or re-billed. One active run per workspace at a time. Feed a result’s linkedinUrl into POST /api/v1/find (linkedin mode) to get a verified email. Rate limited per workspace. Breaking change from the earlier synchronous contract: the old one-batch page request/response is gone. #### Billing - per delivered lead, debited once when the run finalizes — an empty run is free, and a continuation run never re-bills previously delivered leads; unitCost × count is reserved up front and the unused remainder is released at finalize. The current cost is shown in the app under Settings → Billing and in the live GET /api/v1/openapi.json. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The charged and pointsCharged fields of the response state what this call actually consumed.\",\"url\":\"https://docs.loice.ai/api-reference/start-lead-search\",\"mainEntityOfPage\":{\"@id\":\"https://docs.loice.ai/api-reference/start-lead-search#webpage\"},\"dateModified\":\"2026-11-09T13:15:54.040Z\",\"publisher\":{\"@id\":\"https://docs.loice.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.loice.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Loice\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Loice","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"API Reference","pages":[{"title":"Find and verify email","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/find","href":"/api-reference/find-and-verify-email"},{"title":"Enrich an email address","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/enrich/email","href":"/api-reference/enrich-an-email-address"},{"title":"Search LinkedIn profiles by name","description":"Searches public LinkedIn profiles for a person by first and last name, optionally narrowed by employer. Returns candidate profiles with their headline, parsed employer and title, location, and profile URL — feed a chosen `linkedinUrl` into `POST /api/v1/find` (linkedin mode) to get a verified email for it. At most one candidate comes back; a completed not-found carries no `reason`. Send an `Idempotency-Key` to make a retry safe: the same key replays the first answer, uncharged. Rate limited per workspace.\n\n#### Billing\n\n- charged per completed search — matches or none — never on provider errors.\n\nThe current cost is shown in the app under Settings → Billing and in the live `GET /api/v1/openapi.json`. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The `charged` and `pointsCharged` fields of the response state what this call actually consumed.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/linkedin-search","href":"/api-reference/search-linkedin-profiles-by-name"},{"title":"Start lead search","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/lead-search","href":"/api-reference/start-lead-search"},{"title":"Start an employee search","description":"Finds the current employees of ONE company, named by its website `domain` or its LinkedIn company URL, optionally filtered by title, seniority, department and location. Creates a **background run** like `POST /api/v1/lead-search` and returns immediately; poll and read it with `GET /api/v1/lead-search/runs/{runId}`. One active run per workspace at a time. Rate limited per workspace.\n\n#### Billing\n\n- once per search, when any source answered; released when every source was unavailable.\n- per delivered employee, debited when the run finalizes; an empty run is free.\n\nThe current cost is shown in the app under Settings → Billing and in the live `GET /api/v1/openapi.json`. Calls that end in a system or provider error (HTTP 500) or are rate limited (HTTP 429) are not billed. The `charged` and `pointsCharged` fields of the response state what this call actually consumed.","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/employee-search","href":"/api-reference/start-an-employee-search"},{"title":"Poll lead search","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/lead-search/runs/{runId}","href":"/api-reference/poll-lead-search"},{"title":"Cancel lead search","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/lead-search/runs/{runId}/cancel","href":"/api-reference/cancel-lead-search"},{"title":"List lead lists","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/lead-lists","href":"/api-reference/list-lead-lists"},{"title":"Save lead-search results to a list","deprecated":null,"version":null,"openapi":"/openapi.json post /api/v1/lead-lists/add","href":"/api-reference/save-lead-search-results-to-a-list"},{"title":"Read a list’s members","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/lead-lists/{listId}/members","href":"/api-reference/read-a-list’s-members"},{"title":"Check the points balance","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/points","href":"/api-reference/check-the-points-balance"},{"title":"This API description","deprecated":null,"version":null,"openapi":"/openapi.json get /api/v1/openapi.json","href":"/api-reference/this-api-description"}]}]}]},"basePath":"","title":"Start lead search - Loice","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}