Runs an enrichment over the list’s contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts’ existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list’s default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list’s end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job’s total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list’s metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call’s offset plus limit: a call without offset always starts at the list’s first row.
Errors:
402INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows.
404LIST_NOT_FOUND — No list with that id is visible to the token owner.
409ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead.
422CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts.
422CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list.
422VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics.
429RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.
Requires one of the following token scopes: lists.
What to run: email, phone or phone_and_email discover new values through the enrichment waterfall (billed per contact processed, at up to 50 credits per work email — 100 when personal emails are prioritised — and 200 per phone); validate_emails re-verifies the contacts' existing emails (10 credits per address); demographics resolves manually uploaded rows to canonical contacts (1 credit per resolved contact).
Rows to skip before taking limit of them (waterfall modes only, default 0). A repeated call with the same offset and limit takes the same rows; pass a larger offset to reach rows further down the list. Not allowed with contactIds.
Row-filter object narrowing which contacts the waterfall modes process, in the same language as the filters query of GET /business/lists/{listId}/rows; not allowed for validate_emails or demographics and mutually exclusive with contactIds. Text keys (name, title, dept, level, industryName, country, state, personalLocation, companyName, companyIndustry, companyHeadQuartersCountry, companyLocation, website, campaignEngagement, otherLists) take an array of accepted values, e.g. {"companyName":["pomelo"]} or {"country":["argentina"]}, or {"include":[...],"exclude":[...]} — otherLists takes list NAMES, not ids; numberOfEmployees takes headcount ranges the same way but as STRINGS ("51-200", "10001+" or a bare head count "500" — an unquoted JSON number answers 500) and revenue a plain number; keywords (a wildcard match on the job title only) and linkedinUrl take one string; enrichedEmail, enrichedPhone and emailValidity take {"include":[...]} of their statuses; icpMatch takes ["yes"] or ["no"]; customColumns maps a column id to {"dataType":"string","include":[...]}, {"dataType":"boolean","value":true} or {"dataType":"number","rangeMin":1,"rangeMax":10}. Company lists honour companyName, companyIndustry, companyHeadQuartersCountry, website, numberOfEmployees, campaignEngagement and customColumns. Every key is optional; an unknown key or a wrong value shape is rejected rather than ignored. Values inside one key are OR-joined and different keys are AND-ed. VALUES ARE NOT VALIDATED: level, industryName, country, state, website and companyHeadQuartersCountry are matched as whole values and campaignEngagement, icpMatch and enum cells as exact strings, so a value in the wrong vocabulary is accepted and silently matches nothing — each key's own description names its vocabulary and the endpoint that serves it. A rejected filter answers 422 VALIDATION_FAILED.
Explicit contacts to process (24-character hex ids, 1-500) for the waterfall modes. Each must be a row of this list (a row id from GET /business/lists/{listId}/rows); any other id answers 422 CONTACT_NOT_IN_LIST. Not allowed for validate_emails or demographics and mutually exclusive with filters.
Required array length: 1 - 500 elements
24-character hex id of a contact (the row id from GET /business/lists/{listId}/rows).
How many rows to take, starting at offset, in the list's default order (oldest first) after filters (1-10000); required unless contactIds is given, and validate_emails/demographics cap it at 5000. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit.
Waterfall modes only: pending while the job waits behind your other enrichment job, processing once it runs.
Available options:
pending,
processing
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Fuse API","colors":{"primary":"#22857C","light":"#34C7BA","dark":"#22857C"},"logo":{"light":"https://mintcdn.com/fuseai/HxYNa2W1WI8CM0N4/logo/light.svg?fit=max\u0026auto=format\u0026n=HxYNa2W1WI8CM0N4\u0026q=85\u0026s=c9afa73057eb802e14743fbb297c60d5","dark":"https://mintcdn.com/fuseai/HxYNa2W1WI8CM0N4/logo/dark.svg?fit=max\u0026auto=format\u0026n=HxYNa2W1WI8CM0N4\u0026q=85\u0026s=1fc8cdcdfa374184a0d0be9a3559e3ae"},"favicon":{"light":"https://mintcdn.com/fuseai/HxYNa2W1WI8CM0N4/favicon/light.svg?fit=max\u0026auto=format\u0026n=HxYNa2W1WI8CM0N4\u0026q=85\u0026s=ac736774fcb3b9a1a851b2993948e5ec","dark":"https://mintcdn.com/fuseai/HxYNa2W1WI8CM0N4/favicon/dark.svg?fit=max\u0026auto=format\u0026n=HxYNa2W1WI8CM0N4\u0026q=85\u0026s=32e317b320fd34552ab3990cd8a717a4"},"api":{"playground":{"display":"interactive"},"examples":{"defaults":"required","languages":["curl","python","javascript"],"prefill":true}},"background":{"color":{"light":"#FFFFFF","dark":"#161615"}},"navbar":{"links":[{"href":"mailto:support@fuseai.com","label":"Support"}],"primary":{"type":"button","label":"Open Fuse","href":"https://app.tryfuse.ai"}},"footer":{"socials":{"website":"https://fuseai.com","linkedin":"https://www.linkedin.com/company/fuseaicom"}},"contextual":{"options":["copy","view","claude","cursor"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fuseai","hasAudioNarration":false,"actualSubdomain":"fuseai","customDomains":["docs.fuseai.com"],"gitSource":{"type":"github","owner":"kompassai-com","repo":"api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae37b777a4e4821c08feade","collectionId":"5bacfad1-97dd-4f59-945f-2a160fb2f0c7","liveDeploymentHistoryId":"6ae37b777a4e4821c08feade","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae37b777a4e4821c08feade","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"API Reference","count":157},{"language":"default","tag":"Documentation","count":50},{"language":"default","tag":"Agents","count":27},{"language":"default","tag":"Knowledge hubs","count":18},{"language":"default","tag":"Lists","count":17},{"language":"default","tag":"Campaigns","count":15},{"language":"default","tag":"Guides","count":14},{"language":"default","tag":"Workflows","count":10},{"language":"default","tag":"Data","count":9},{"language":"default","tag":"Account","count":8}]},"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":"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#topbar-cta-button .bg-primary-dark{background-color:rgb(0 0 0)}.dark #topbar-cta-button .bg-primary-dark{background-color:rgb(255 255 255)}.dark #topbar-cta-button .text-white,.dark #topbar-cta-button .text-white\\/90{color:rgb(0 0 0)}"}],"page":{"pagePath":"api-reference/lists/enrich-a-lists-contacts-in-place","slug":"/api-reference/lists/enrich-a-lists-contacts-in-place","pageMetadata":{"title":"Enrich a list's contacts in place","description":"Runs an enrichment over the list's contacts in place. `mode` selects what runs: the waterfall modes (`email`, `phone`, `phone_and_email`) discover new values through the provider waterfall and take an optional row `filters` object or an explicit `contactIds` selection; `validate_emails` re-verifies the contacts' existing emails; `demographics` resolves manually-added rows to canonical contacts. `limit` is how many rows are taken, from `offset` (default 0) in the list's default order after `filters` — required unless `contactIds` is given, and capped at 5,000 for `validate_emails`/`demographics`. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward `limit`, so a repeated call with the same `offset` and `limit` takes the same rows: pass a larger `offset` to reach rows further down. A call identical to one whose job is still queued or running (same `mode`, `filters`, `offset` and `limit`) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while `validate_emails` and `demographics` report a nothing-to-do run as 202 with `totalContacts: 0`. Async: `totalContacts` is the number of rows this run takes (at most `limit`, fewer at the list's end; a call that returns a running job, or explicit `contactIds` that join a queued one, answers that job's total) and `estimatedMinutes` a rough duration; poll `GET /business/lists/{listId}/rows` (emails/phones fill in) or the list's `metrics`. The waterfall modes run as a job: the 202 also carries its `jobId` and `status` (`pending` while it waits behind your other enrichment job, `processing` once it runs); poll `GET /business/jobs/{jobId}` for its status and counts. A job whose balance runs out mid-run pauses (`stopped`, with `pausedReason` INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass `offset` as the previous call's `offset` plus `limit`: a call without `offset` always starts at the list's first row.\n\nErrors:\n- `402` `INSUFFICIENT_CREDITS` — The credit balance does not cover the reserved price for the requested rows.\n- `404` `LIST_NOT_FOUND` — No list with that id is visible to the token owner.\n- `409` `ALL_CONTACTS_ALREADY_ENRICHED` — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead.\n- `422` `CONTACT_LIST_REQUIRED` — The list is a company list; enrichment runs on contacts.\n- `422` `CONTACT_NOT_IN_LIST` — A contactIds entry is not a row of this list.\n- `422` `VALIDATION_FAILED` — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics.\n- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\n\nRequires one of the following token scopes: lists.","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/enrich","href":"/api-reference/lists/enrich-a-lists-contacts-in-place","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 li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Runs an enrichment over the list’s contacts in place. \", _jsx(_components.code, {\n children: \"mode\"\n }), \" selects what runs: the waterfall modes (\", _jsx(_components.code, {\n children: \"email\"\n }), \", \", _jsx(_components.code, {\n children: \"phone\"\n }), \", \", _jsx(_components.code, {\n children: \"phone_and_email\"\n }), \") discover new values through the provider waterfall and take an optional row \", _jsx(_components.code, {\n children: \"filters\"\n }), \" object or an explicit \", _jsx(_components.code, {\n children: \"contactIds\"\n }), \" selection; \", _jsx(_components.code, {\n children: \"validate_emails\"\n }), \" re-verifies the contacts’ existing emails; \", _jsx(_components.code, {\n children: \"demographics\"\n }), \" resolves manually-added rows to canonical contacts. \", _jsx(_components.code, {\n children: \"limit\"\n }), \" is how many rows are taken, from \", _jsx(_components.code, {\n children: \"offset\"\n }), \" (default 0) in the list’s default order after \", _jsx(_components.code, {\n children: \"filters\"\n }), \" — required unless \", _jsx(_components.code, {\n children: \"contactIds\"\n }), \" is given, and capped at 5,000 for \", _jsx(_components.code, {\n children: \"validate_emails\"\n }), \"/\", _jsx(_components.code, {\n children: \"demographics\"\n }), \". Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward \", _jsx(_components.code, {\n children: \"limit\"\n }), \", so a repeated call with the same \", _jsx(_components.code, {\n children: \"offset\"\n }), \" and \", _jsx(_components.code, {\n children: \"limit\"\n }), \" takes the same rows: pass a larger \", _jsx(_components.code, {\n children: \"offset\"\n }), \" to reach rows further down. A call identical to one whose job is still queued or running (same \", _jsx(_components.code, {\n children: \"mode\"\n }), \", \", _jsx(_components.code, {\n children: \"filters\"\n }), \", \", _jsx(_components.code, {\n children: \"offset\"\n }), \" and \", _jsx(_components.code, {\n children: \"limit\"\n }), \") returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while \", _jsx(_components.code, {\n children: \"validate_emails\"\n }), \" and \", _jsx(_components.code, {\n children: \"demographics\"\n }), \" report a nothing-to-do run as 202 with \", _jsx(_components.code, {\n children: \"totalContacts: 0\"\n }), \". Async: \", _jsx(_components.code, {\n children: \"totalContacts\"\n }), \" is the number of rows this run takes (at most \", _jsx(_components.code, {\n children: \"limit\"\n }), \", fewer at the list’s end; a call that returns a running job, or explicit \", _jsx(_components.code, {\n children: \"contactIds\"\n }), \" that join a queued one, answers that job’s total) and \", _jsx(_components.code, {\n children: \"estimatedMinutes\"\n }), \" a rough duration; poll \", _jsx(_components.code, {\n children: \"GET /business/lists/{listId}/rows\"\n }), \" (emails/phones fill in) or the list’s \", _jsx(_components.code, {\n children: \"metrics\"\n }), \". The waterfall modes run as a job: the 202 also carries its \", _jsx(_components.code, {\n children: \"jobId\"\n }), \" and \", _jsx(_components.code, {\n children: \"status\"\n }), \" (\", _jsx(_components.code, {\n children: \"pending\"\n }), \" while it waits behind your other enrichment job, \", _jsx(_components.code, {\n children: \"processing\"\n }), \" once it runs); poll \", _jsx(_components.code, {\n children: \"GET /business/jobs/{jobId}\"\n }), \" for its status and counts. A job whose balance runs out mid-run pauses (\", _jsx(_components.code, {\n children: \"stopped\"\n }), \", with \", _jsx(_components.code, {\n children: \"pausedReason\"\n }), \" INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass \", _jsx(_components.code, {\n children: \"offset\"\n }), \" as the previous call’s \", _jsx(_components.code, {\n children: \"offset\"\n }), \" plus \", _jsx(_components.code, {\n children: \"limit\"\n }), \": a call without \", _jsx(_components.code, {\n children: \"offset\"\n }), \" always starts at the list’s first row.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Errors:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"402\"\n }), \" \", _jsx(_components.code, {\n children: \"INSUFFICIENT_CREDITS\"\n }), \" — The credit balance does not cover the reserved price for the requested rows.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"404\"\n }), \" \", _jsx(_components.code, {\n children: \"LIST_NOT_FOUND\"\n }), \" — No list with that id is visible to the token owner.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"409\"\n }), \" \", _jsx(_components.code, {\n children: \"ALL_CONTACTS_ALREADY_ENRICHED\"\n }), \" — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"422\"\n }), \" \", _jsx(_components.code, {\n children: \"CONTACT_LIST_REQUIRED\"\n }), \" — The list is a company list; enrichment runs on contacts.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"422\"\n }), \" \", _jsx(_components.code, {\n children: \"CONTACT_NOT_IN_LIST\"\n }), \" — A contactIds entry is not a row of this list.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"422\"\n }), \" \", _jsx(_components.code, {\n children: \"VALIDATION_FAILED\"\n }), \" — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"429\"\n }), \" \", _jsx(_components.code, {\n children: \"RATE_LIMITED\"\n }), \" — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Requires one of the following token scopes: lists.\"\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":"Enrich a list's contacts in place","description":"Runs an enrichment over the list's contacts in place. `mode` selects what runs: the waterfall modes (`email`, `phone`, `phone_and_email`) discover new values through the provider waterfall and take an optional row `filters` object or an explicit `contactIds` selection; `validate_emails` re-verifies the contacts' existing emails; `demographics` resolves manually-added rows to canonical contacts. `limit` is how many rows are taken, from `offset` (default 0) in the list's default order after `filters` — required unless `contactIds` is given, and capped at 5,000 for `validate_emails`/`demographics`. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward `limit`, so a repeated call with the same `offset` and `limit` takes the same rows: pass a larger `offset` to reach rows further down. A call identical to one whose job is still queued or running (same `mode`, `filters`, `offset` and `limit`) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while `validate_emails` and `demographics` report a nothing-to-do run as 202 with `totalContacts: 0`. Async: `totalContacts` is the number of rows this run takes (at most `limit`, fewer at the list's end; a call that returns a running job, or explicit `contactIds` that join a queued one, answers that job's total) and `estimatedMinutes` a rough duration; poll `GET /business/lists/{listId}/rows` (emails/phones fill in) or the list's `metrics`. The waterfall modes run as a job: the 202 also carries its `jobId` and `status` (`pending` while it waits behind your other enrichment job, `processing` once it runs); poll `GET /business/jobs/{jobId}` for its status and counts. A job whose balance runs out mid-run pauses (`stopped`, with `pausedReason` INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass `offset` as the previous call's `offset` plus `limit`: a call without `offset` always starts at the list's first row.\n\nErrors:\n- `402` `INSUFFICIENT_CREDITS` — The credit balance does not cover the reserved price for the requested rows.\n- `404` `LIST_NOT_FOUND` — No list with that id is visible to the token owner.\n- `409` `ALL_CONTACTS_ALREADY_ENRICHED` — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead.\n- `422` `CONTACT_LIST_REQUIRED` — The list is a company list; enrichment runs on contacts.\n- `422` `CONTACT_NOT_IN_LIST` — A contactIds entry is not a row of this list.\n- `422` `VALIDATION_FAILED` — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics.\n- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\n\nRequires one of the following token scopes: lists.","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/enrich","href":"/api-reference/lists/enrich-a-lists-contacts-in-place","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"enrichList","summary":"Enrich a list's contacts in place","tags":["Lists"],"security":["e78603ff-5076-4d84-a31c-2ae471fd2c76"],"parameters":["a5332723-d714-4d41-895a-6888f0f7ff65"],"responses":{"202":"494e4c49-aef1-4afe-af57-432b111d75c2","400":"664e6367-bf5a-4ac3-a538-b62213399a06","401":"d14458dd-ece7-4f9a-bd79-86cf15fbce2b","402":"848c03db-2b44-491a-bd07-eb2054182bd6","403":"903283eb-8ff1-4897-8743-550600ab1405","404":"dd297eb7-cd7a-4083-94fb-ca2714bf4546","409":"aef50f0f-d0f6-416a-94d1-12b7e34000ed","422":"8f6ad084-6042-476e-bae5-38d9b48cf285","429":"935a63cc-6503-47b8-933c-262980fa71b7","500":"9d748c82-c4ea-49bf-a1b9-0669e2f28558"},"description":"Runs an enrichment over the list's contacts in place. `mode` selects what runs: the waterfall modes (`email`, `phone`, `phone_and_email`) discover new values through the provider waterfall and take an optional row `filters` object or an explicit `contactIds` selection; `validate_emails` re-verifies the contacts' existing emails; `demographics` resolves manually-added rows to canonical contacts. `limit` is how many rows are taken, from `offset` (default 0) in the list's default order after `filters` — required unless `contactIds` is given, and capped at 5,000 for `validate_emails`/`demographics`. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward `limit`, so a repeated call with the same `offset` and `limit` takes the same rows: pass a larger `offset` to reach rows further down. A call identical to one whose job is still queued or running (same `mode`, `filters`, `offset` and `limit`) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while `validate_emails` and `demographics` report a nothing-to-do run as 202 with `totalContacts: 0`. Async: `totalContacts` is the number of rows this run takes (at most `limit`, fewer at the list's end; a call that returns a running job, or explicit `contactIds` that join a queued one, answers that job's total) and `estimatedMinutes` a rough duration; poll `GET /business/lists/{listId}/rows` (emails/phones fill in) or the list's `metrics`. The waterfall modes run as a job: the 202 also carries its `jobId` and `status` (`pending` while it waits behind your other enrichment job, `processing` once it runs); poll `GET /business/jobs/{jobId}` for its status and counts. A job whose balance runs out mid-run pauses (`stopped`, with `pausedReason` INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass `offset` as the previous call's `offset` plus `limit`: a call without `offset` always starts at the list's first row.\n\nErrors:\n- `402` `INSUFFICIENT_CREDITS` — The credit balance does not cover the reserved price for the requested rows.\n- `404` `LIST_NOT_FOUND` — No list with that id is visible to the token owner.\n- `409` `ALL_CONTACTS_ALREADY_ENRICHED` — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead.\n- `422` `CONTACT_LIST_REQUIRED` — The list is a company list; enrichment runs on contacts.\n- `422` `CONTACT_NOT_IN_LIST` — A contactIds entry is not a row of this list.\n- `422` `VALIDATION_FAILED` — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics.\n- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\n\nRequires one of the following token scopes: lists.","requestBody":"2461e26a-59fc-469a-9263-17be02d55e6f","method":"post","type":"path","servers":["4ca8b996-e74f-447c-8937-bc591ab08d00"],"path":"/business/lists/{listId}/enrich","baseUrlOptions":["https://api.tryfuse.ai/api/v1"],"title":"Enrich a list's contacts in place","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.offset":1,"body.filters.name.oneOf.0.items.0":"\u003cstring>","body.filters.title.oneOf.0.items.0":"\u003cstring>","body.filters.dept.oneOf.0.items.0":"\u003cstring>","body.filters.level.oneOf.0.items.0":"\u003cstring>","body.filters.industryName.oneOf.0.items.0":"\u003cstring>","body.filters.country.oneOf.0.items.0":"\u003cstring>","body.filters.state.oneOf.0.items.0":"\u003cstring>","body.filters.personalLocation.oneOf.0.items.0":"\u003cstring>","body.filters.companyName.oneOf.0.items.0":"\u003cstring>","body.filters.companyIndustry.oneOf.0.items.0":"\u003cstring>","body.filters.companyHeadQuartersCountry.oneOf.0.items.0":"\u003cstring>","body.filters.companyLocation.oneOf.0.items.0":"\u003cstring>","body.filters.website.oneOf.0.items.0":"\u003cstring>","body.filters.numberOfEmployees.oneOf.0.items.0.oneOf.0":"\u003cstring>","body.filters.revenue.oneOf.0.items.0.oneOf.0":"\u003cstring>","body.filters.keywords":"\u003cstring>","body.filters.linkedinUrl":"\u003cstring>","body.filters.campaignEngagement.oneOf.0.items.0":"\u003cstring>","body.filters.otherLists.oneOf.0.items.0":"\u003cstring>","body.filters.customColumns":{},"body.contactIds.items.0":"\u003cstring>","body.limit":5000}]},"dependencies":{"parameters":{"a5332723-d714-4d41-895a-6888f0f7ff65":{"name":"listId","in":"path","required":true,"description":"24-character hex id of the list (from GET /business/lists).","schema":{"type":"string","description":"24-character hex id of the list (from GET /business/lists).","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["email","phone","phone_and_email","validate_emails","demographics"],"description":"What to run: email, phone or phone_and_email discover new values through the enrichment waterfall (billed per contact processed, at up to 50 credits per work email — 100 when personal emails are prioritised — and 200 per phone); validate_emails re-verifies the contacts' existing emails (10 credits per address); demographics resolves manually uploaded rows to canonical contacts (1 credit per resolved contact).","isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip before taking limit of them (waterfall modes only, default 0). A repeated call with the same offset and limit takes the same rows; pass a larger offset to reach rows further down the list. Not allowed with contactIds.","uniqueKey":"offset","typeLabel":"integer"},"filters":{"type":"object","properties":{"name":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.name.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Contact full name (contact lists). Free text: each value is matched as a case-insensitive substring of firstName + space + lastName, so Ana matches Ana Silva.","maxItems":200,"minItems":1,"uniqueKey":"filters.name.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Contact full name (contact lists). Free text: each value is matched as a case-insensitive substring of firstName + space + lastName, so Ana matches Ana Silva.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.name.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.name.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.name.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.name.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.name.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.name","typeLabel":"string[] | object"},"title":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.title.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Job title (contact lists). Free text: each value is matched as a case-insensitive substring of the stored job title, so vp also matches VP of Sales. There is no fixed vocabulary — `GET /business/prospects/autocomplete?field=title\u0026q=` suggests the titles the enrichment provider knows.","maxItems":200,"minItems":1,"uniqueKey":"filters.title.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Job title (contact lists). Free text: each value is matched as a case-insensitive substring of the stored job title, so vp also matches VP of Sales. There is no fixed vocabulary — `GET /business/prospects/autocomplete?field=title\u0026q=` suggests the titles the enrichment provider knows.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.title.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.title.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.title.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.title.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.title.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.title","typeLabel":"string[] | object"},"dept":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.dept.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Department (contact lists). Matched as a case-insensitive substring of the contact's department, whose values come from the provider's job_title_role vocabulary — take them from `GET /business/prospects/filter-options` (field `job_title_role`: sales, engineering, human_resources, …). A contact with several roles stores them comma-joined, which a substring match still finds. Any other text is accepted and matches only rows that literally contain it.","maxItems":200,"minItems":1,"uniqueKey":"filters.dept.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Department (contact lists). Matched as a case-insensitive substring of the contact's department, whose values come from the provider's job_title_role vocabulary — take them from `GET /business/prospects/filter-options` (field `job_title_role`: sales, engineering, human_resources, …). A contact with several roles stores them comma-joined, which a substring match still finds. Any other text is accepted and matches only rows that literally contain it.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.dept.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.dept.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.dept.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.dept.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.dept.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.dept","typeLabel":"string[] | object"},"level":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.level.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Seniority level (contact lists). Matched EXACTLY (case-insensitive, whole value) against the contact's level, whose values come from the provider's job_title_levels vocabulary — take them from `GET /business/prospects/filter-options` (field `job_title_levels`): cxo, director, entry, manager, owner, partner, senior, training, unpaid, vp. A contact carrying several levels stores them comma-joined (cxo, owner) and an exact match on one level does NOT find it; any other value is accepted and matches nothing.","maxItems":200,"minItems":1,"uniqueKey":"filters.level.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Seniority level (contact lists). Matched EXACTLY (case-insensitive, whole value) against the contact's level, whose values come from the provider's job_title_levels vocabulary — take them from `GET /business/prospects/filter-options` (field `job_title_levels`): cxo, director, entry, manager, owner, partner, senior, training, unpaid, vp. A contact carrying several levels stores them comma-joined (cxo, owner) and an exact match on one level does NOT find it; any other value is accepted and matches nothing.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.level.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.level.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.level.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.level.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.level.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.level","typeLabel":"string[] | object"},"industryName":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.industryName.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Contact's industry (contact lists). Matched EXACTLY (case-insensitive, whole value) against the industry on the contact, which the enrichment provider fills from its own 147-value list — take the values from `GET /business/prospects/filter-options` (field `industry`, e.g. computer software, hospital \u0026 health care). A near-miss such as Software is accepted and matches nothing.","maxItems":200,"minItems":1,"uniqueKey":"filters.industryName.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Contact's industry (contact lists). Matched EXACTLY (case-insensitive, whole value) against the industry on the contact, which the enrichment provider fills from its own 147-value list — take the values from `GET /business/prospects/filter-options` (field `industry`, e.g. computer software, hospital \u0026 health care). A near-miss such as Software is accepted and matches nothing.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.industryName.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.industryName.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.industryName.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.industryName.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.industryName.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.industryName","typeLabel":"string[] | object"},"country":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.country.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Contact's country (contact lists). Matched EXACTLY (case-insensitive, whole value) against the country of the contact's address, stored as the provider spells it (united states, not US) — take the values from `GET /business/prospects/filter-options` (field `location_country`). An ISO code or another spelling is accepted and matches nothing.","maxItems":200,"minItems":1,"uniqueKey":"filters.country.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Contact's country (contact lists). Matched EXACTLY (case-insensitive, whole value) against the country of the contact's address, stored as the provider spells it (united states, not US) — take the values from `GET /business/prospects/filter-options` (field `location_country`). An ISO code or another spelling is accepted and matches nothing.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.country.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.country.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.country.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.country.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.country.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.country","typeLabel":"string[] | object"},"state":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.state.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Contact's state or region (contact lists). Matched EXACTLY (case-insensitive, whole value) against the state of the contact's address — the provider's region name, e.g. california. There is no enum; `GET /business/prospects/autocomplete?field=region\u0026q=` suggests from the same region vocabulary. A spelling no row carries is accepted and matches nothing.","maxItems":200,"minItems":1,"uniqueKey":"filters.state.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Contact's state or region (contact lists). Matched EXACTLY (case-insensitive, whole value) against the state of the contact's address — the provider's region name, e.g. california. There is no enum; `GET /business/prospects/autocomplete?field=region\u0026q=` suggests from the same region vocabulary. A spelling no row carries is accepted and matches nothing.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.state.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.state.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.state.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.state.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.state.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.state","typeLabel":"string[] | object"},"personalLocation":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.personalLocation.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Contact's location text (contact lists). Each value is matched as a case-insensitive substring against the contact's city, state AND country separately, and the row matches when any one of the three contains it — so pass ONE component (buenos aires, or california, or united states), never a whole line like san francisco, california, united states, which matches no component. No endpoint serves the city names: read the stored components off the rows themselves, where `GET /business/lists/{listId}/rows` returns each row's `location` as {city, state, country}. For the other two components, `GET /business/prospects/autocomplete?field=region\u0026q=` suggests the state/region names and `GET /business/prospects/filter-options` (field `location_country`) lists the country names. Do NOT feed this key from `GET /business/prospects/autocomplete?field=location`: that endpoint returns whole city, state, country lines, which are exactly the shape that matches no component.","maxItems":200,"minItems":1,"uniqueKey":"filters.personalLocation.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Contact's location text (contact lists). Each value is matched as a case-insensitive substring against the contact's city, state AND country separately, and the row matches when any one of the three contains it — so pass ONE component (buenos aires, or california, or united states), never a whole line like san francisco, california, united states, which matches no component. No endpoint serves the city names: read the stored components off the rows themselves, where `GET /business/lists/{listId}/rows` returns each row's `location` as {city, state, country}. For the other two components, `GET /business/prospects/autocomplete?field=region\u0026q=` suggests the state/region names and `GET /business/prospects/filter-options` (field `location_country`) lists the country names. Do NOT feed this key from `GET /business/prospects/autocomplete?field=location`: that endpoint returns whole city, state, country lines, which are exactly the shape that matches no component.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.personalLocation.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.personalLocation.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.personalLocation.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.personalLocation.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.personalLocation.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.personalLocation","typeLabel":"string[] | object"},"companyName":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyName.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Company name (both list kinds). Free text: each value is matched as a case-insensitive substring of the company name. On a company list, `GET /business/lists/{listId}/filter-values?field=name` returns the exact names that list holds.","maxItems":200,"minItems":1,"uniqueKey":"filters.companyName.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Company name (both list kinds). Free text: each value is matched as a case-insensitive substring of the company name. On a company list, `GET /business/lists/{listId}/filter-values?field=name` returns the exact names that list holds.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyName.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.companyName.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyName.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.companyName.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.companyName.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.companyName","typeLabel":"string[] | object"},"companyIndustry":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyIndustry.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Company industry (both list kinds). Matched as a case-insensitive substring of the company's industry, filled by the enrichment provider from its own list — take the values from `GET /business/prospects/filter-options` (field `job_company_industry`). Do not use the company-search vocabulary from /business/companies/filter-options: that is a different provider's list and its values are not what these rows store.","maxItems":200,"minItems":1,"uniqueKey":"filters.companyIndustry.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Company industry (both list kinds). Matched as a case-insensitive substring of the company's industry, filled by the enrichment provider from its own list — take the values from `GET /business/prospects/filter-options` (field `job_company_industry`). Do not use the company-search vocabulary from /business/companies/filter-options: that is a different provider's list and its values are not what these rows store.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyIndustry.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.companyIndustry.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyIndustry.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.companyIndustry.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.companyIndustry.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.companyIndustry","typeLabel":"string[] | object"},"companyHeadQuartersCountry":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyHeadQuartersCountry.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Company headquarters country (both list kinds). Matched EXACTLY (case-insensitive, whole value), but each value is first expanded to every spelling of that country (full name, ISO-3166 alpha-2 and alpha-3), because the field mixes both vocabularies — so the full country name alone is enough. Take the names from `GET /business/prospects/filter-options` (field `location_country`); a value that resolves to no country is matched verbatim.","maxItems":200,"minItems":1,"uniqueKey":"filters.companyHeadQuartersCountry.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Company headquarters country (both list kinds). Matched EXACTLY (case-insensitive, whole value), but each value is first expanded to every spelling of that country (full name, ISO-3166 alpha-2 and alpha-3), because the field mixes both vocabularies — so the full country name alone is enough. Take the names from `GET /business/prospects/filter-options` (field `location_country`); a value that resolves to no country is matched verbatim.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyHeadQuartersCountry.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.companyHeadQuartersCountry.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyHeadQuartersCountry.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.companyHeadQuartersCountry.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.companyHeadQuartersCountry.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.companyHeadQuartersCountry","typeLabel":"string[] | object"},"companyLocation":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyLocation.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Company location text (contact lists). Each value is matched as a case-insensitive substring against the company address's city, state AND country separately, and the row matches when any one of the three contains it, so pass ONE component. Many companies are stored with a country and nothing else, in which case a city or state value is accepted and matches nothing; `GET /business/prospects/filter-options` (field `location_country`) lists the country names.","maxItems":200,"minItems":1,"uniqueKey":"filters.companyLocation.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Company location text (contact lists). Each value is matched as a case-insensitive substring against the company address's city, state AND country separately, and the row matches when any one of the three contains it, so pass ONE component. Many companies are stored with a country and nothing else, in which case a city or state value is accepted and matches nothing; `GET /business/prospects/filter-options` (field `location_country`) lists the country names.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyLocation.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.companyLocation.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.companyLocation.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.companyLocation.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.companyLocation.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.companyLocation","typeLabel":"string[] | object"},"website":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.website.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Company web domain (both list kinds). Matched EXACTLY (case-insensitive, whole value) against the stored domain, so pass the BARE domain — brightpay.com. A full URL (https://brightpay.com/), a www. prefix or a partial domain is accepted and matches nothing. On a company list, `GET /business/lists/{listId}/filter-values?field=domain` returns the exact domains that list holds.","maxItems":200,"minItems":1,"uniqueKey":"filters.website.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Company web domain (both list kinds). Matched EXACTLY (case-insensitive, whole value) against the stored domain, so pass the BARE domain — brightpay.com. A full URL (https://brightpay.com/), a www. prefix or a partial domain is accepted and matches nothing. On a company list, `GET /business/lists/{listId}/filter-values?field=domain` returns the exact domains that list holds.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.website.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.website.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.website.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.website.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.website.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.website","typeLabel":"string[] | object"},"numberOfEmployees":{"oneOf":[{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.numberOfEmployees.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.numberOfEmployees.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.numberOfEmployees.oneOf.0.items.[INDEX]","typeLabel":"string | number"},"description":"Company size (both list kinds). Each value is parsed as a headcount range and matched against the company's LinkedIn head count; accepted values are a range (\"51-200\"), an open top end (\"10001+\") or a bare head count (\"500\", meaning exactly 500). Send every value as a JSON STRING: an unquoted JSON number passes validation and then throws while the range is parsed, so the call answers 500 UNEXPECTED_ERROR instead of filtering. The provider's own labels — 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+, served by `GET /business/prospects/filter-options` (field `job_company_size`) — all parse. Anything else is read with parseInt, so a value that STARTS with digits silently narrows to that one number (\"51 to 200\" matches companies with exactly 51 employees, it is not ignored) and a value that does not (\"Enterprise\") is silently dropped; if every value is dropped nothing is left to match and the call answers zero rows rather than ignoring the filter, and companies with no stored head count never match.","maxItems":200,"minItems":1,"uniqueKey":"filters.numberOfEmployees.oneOf.0","typeLabel":"(string | number)[]"},{"type":"object","description":"Company size (both list kinds). Each value is parsed as a headcount range and matched against the company's LinkedIn head count; accepted values are a range (\"51-200\"), an open top end (\"10001+\") or a bare head count (\"500\", meaning exactly 500). Send every value as a JSON STRING: an unquoted JSON number passes validation and then throws while the range is parsed, so the call answers 500 UNEXPECTED_ERROR instead of filtering. The provider's own labels — 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+, served by `GET /business/prospects/filter-options` (field `job_company_size`) — all parse. Anything else is read with parseInt, so a value that STARTS with digits silently narrows to that one number (\"51 to 200\" matches companies with exactly 51 employees, it is not ignored) and a value that does not (\"Enterprise\") is silently dropped; if every value is dropped nothing is left to match and the call answers zero rows rather than ignoring the filter, and companies with no stored head count never match.","properties":{"include":{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.numberOfEmployees.oneOf.1.include.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.numberOfEmployees.oneOf.1.include.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.numberOfEmployees.oneOf.1.include.items.[INDEX]","typeLabel":"string | number"},"maxItems":200,"description":"Range labels to keep, OR-joined: a row matches when any one of them matches (at most 200).","uniqueKey":"filters.numberOfEmployees.oneOf.1.include","typeLabel":"(string | number)[]"},"exclude":{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.numberOfEmployees.oneOf.1.exclude.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.numberOfEmployees.oneOf.1.exclude.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.numberOfEmployees.oneOf.1.exclude.items.[INDEX]","typeLabel":"string | number"},"maxItems":200,"description":"Range labels to drop: a row is dropped when it matches any one of them (at most 200).","uniqueKey":"filters.numberOfEmployees.oneOf.1.exclude","typeLabel":"(string | number)[]"}},"uniqueKey":"filters.numberOfEmployees.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.numberOfEmployees","typeLabel":"(string | number)[] | object"},"revenue":{"oneOf":[{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.revenue.oneOf.0.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.revenue.oneOf.0.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.revenue.oneOf.0.items.[INDEX]","typeLabel":"string | number"},"description":"Company revenue (contact lists). Accepted values: a plain number, matched for exact equality against the company's stored revenue. The enrichment provider stores revenue as a LABEL (for example $10m-$25m), and a label is coerced to a number before matching, so a label — or any other non-numeric value — is accepted and matches nothing. Use numberOfEmployees to narrow by company size instead.","maxItems":200,"minItems":1,"uniqueKey":"filters.revenue.oneOf.0","typeLabel":"(string | number)[]"},{"type":"object","description":"Company revenue (contact lists). Accepted values: a plain number, matched for exact equality against the company's stored revenue. The enrichment provider stores revenue as a LABEL (for example $10m-$25m), and a label is coerced to a number before matching, so a label — or any other non-numeric value — is accepted and matches nothing. Use numberOfEmployees to narrow by company size instead.","properties":{"include":{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.revenue.oneOf.1.include.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.revenue.oneOf.1.include.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.revenue.oneOf.1.include.items.[INDEX]","typeLabel":"string | number"},"maxItems":200,"description":"Range labels to keep, OR-joined: a row matches when any one of them matches (at most 200).","uniqueKey":"filters.revenue.oneOf.1.include","typeLabel":"(string | number)[]"},"exclude":{"type":"array","items":{"oneOf":[{"type":"string","maxLength":500,"minLength":1,"uniqueKey":"filters.revenue.oneOf.1.exclude.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"filters.revenue.oneOf.1.exclude.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"filters.revenue.oneOf.1.exclude.items.[INDEX]","typeLabel":"string | number"},"maxItems":200,"description":"Range labels to drop: a row is dropped when it matches any one of them (at most 200).","uniqueKey":"filters.revenue.oneOf.1.exclude","typeLabel":"(string | number)[]"}},"uniqueKey":"filters.revenue.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.revenue","typeLabel":"(string | number)[] | object"},"keywords":{"type":"string","minLength":1,"maxLength":500,"description":"Wildcard search over the contact's job title only (contact lists) — it matches no other field. Free text: every character is matched literally except the two wildcards, `*` for any run of characters and `?` for any single one, the match is case-insensitive and unanchored (vp matches VP of Sales), and the regex characters . ^ $ + ( ) [ ] { } | \\ are rejected with 422.","uniqueKey":"filters.keywords","typeLabel":"string"},"linkedinUrl":{"type":"string","minLength":1,"maxLength":500,"description":"LinkedIn URL (contact lists). One value, matched as a case-insensitive substring of the stored URL, which is kept scheme-less and www-less as linkedin.com/in/\u003cslug> — so pass the slug or linkedin.com/in/\u003cslug>. A full https://www.linkedin.com/in/\u003cslug> is longer than the stored value, so it is accepted and matches nothing.","uniqueKey":"filters.linkedinUrl","typeLabel":"string"},"enrichedEmail":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string","enum":["enriched","not_enriched","no_emails_found"],"uniqueKey":"filters.enrichedEmail.include.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to keep: enriched, not_enriched, no_emails_found. A contact is kept when it is in any one of the listed states (OR-joined), so listing every state keeps every row.","uniqueKey":"filters.enrichedEmail.include","typeLabel":"enum\u003cstring>[]"},"exclude":{"type":"array","items":{"type":"string","enum":["enriched","not_enriched","no_emails_found"],"uniqueKey":"filters.enrichedEmail.exclude.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to drop: enriched, not_enriched, no_emails_found. The states are OR-joined: a contact in any one of them is dropped.","uniqueKey":"filters.enrichedEmail.exclude","typeLabel":"enum\u003cstring>[]"}},"description":"Email enrichment state (contact lists). One of exactly: enriched (an email was found), not_enriched (never attempted) or no_emails_found (attempted, nothing found).","uniqueKey":"filters.enrichedEmail","typeLabel":"object"},"enrichedPhone":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string","enum":["enriched","not_enriched"],"uniqueKey":"filters.enrichedPhone.include.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to keep: enriched, not_enriched. A contact is kept when it is in any one of the listed states (OR-joined), so listing both states keeps every row.","uniqueKey":"filters.enrichedPhone.include","typeLabel":"enum\u003cstring>[]"},"exclude":{"type":"array","items":{"type":"string","enum":["enriched","not_enriched"],"uniqueKey":"filters.enrichedPhone.exclude.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to drop: enriched, not_enriched. The states are OR-joined: a contact in any one of them is dropped.","uniqueKey":"filters.enrichedPhone.exclude","typeLabel":"enum\u003cstring>[]"}},"description":"Phone enrichment state (contact lists). One of exactly: enriched (a phone was found) or not_enriched (no phone yet).","uniqueKey":"filters.enrichedPhone","typeLabel":"object"},"emailValidity":{"type":"object","properties":{"include":{"type":"array","items":{"type":"string","enum":["valid","invalid","catch-all","unknown","do_not_mail","personal","unverified"],"uniqueKey":"filters.emailValidity.include.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to keep: valid, invalid, catch-all, unknown, do_not_mail, personal, unverified. OR-joined over statuses and over the contact's addresses: a contact is kept when any one of its emails carries any one of the listed statuses.","uniqueKey":"filters.emailValidity.include","typeLabel":"enum\u003cstring>[]"},"exclude":{"type":"array","items":{"type":"string","enum":["valid","invalid","catch-all","unknown","do_not_mail","personal","unverified"],"uniqueKey":"filters.emailValidity.exclude.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Statuses to drop: valid, invalid, catch-all, unknown, do_not_mail, personal, unverified. OR-joined over statuses and over the contact's addresses: a contact is dropped when any one of its emails carries any one of the listed statuses.","uniqueKey":"filters.emailValidity.exclude","typeLabel":"enum\u003cstring>[]"}},"description":"Validation status of the contact's emails (contact lists). One of exactly: valid, invalid, catch-all, unknown, do_not_mail, personal, unverified — valid means a deliverable WORK address (personal ones are excluded from it), personal means a deliverable personal address, and unverified means a user-uploaded address that was never verified.","uniqueKey":"filters.emailValidity","typeLabel":"object"},"icpMatch":{"oneOf":[{"type":"array","items":{"type":"string","enum":["yes","no"],"uniqueKey":"filters.icpMatch.oneOf.0.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"ICP match outcome (contact lists). Accepted values: exactly one of yes (rows matching the ICP saved in the app) or no (the rest). When the workspace has no ICP configured nothing is a match, so yes returns no rows at all and no returns every row.","minItems":1,"uniqueKey":"filters.icpMatch.oneOf.0","typeLabel":"enum\u003cstring>[]"},{"type":"object","description":"ICP match outcome (contact lists). Accepted values: exactly one of yes (rows matching the ICP saved in the app) or no (the rest). When the workspace has no ICP configured nothing is a match, so yes returns no rows at all and no returns every row.","properties":{"include":{"type":"array","items":{"type":"string","enum":["yes","no"],"uniqueKey":"filters.icpMatch.oneOf.1.include.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"filters.icpMatch.oneOf.1.include","typeLabel":"enum\u003cstring>[]"},"exclude":{"type":"array","items":{"type":"string","enum":["yes","no"],"uniqueKey":"filters.icpMatch.oneOf.1.exclude.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"filters.icpMatch.oneOf.1.exclude","typeLabel":"enum\u003cstring>[]"}},"uniqueKey":"filters.icpMatch.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.icpMatch","typeLabel":"enum\u003cstring>[] | object"},"campaignEngagement":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.campaignEngagement.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Campaign engagement bucket (both list kinds). One of exactly: contacted (at least one campaign email has been sent to the contact), in_active_campaign (targeted by a running campaign, nothing sent yet) or never_engaged (neither) — compared as whole values, case included, so any other value is accepted and returns no rows. A company's bucket is the highest bucket among its contacts.","maxItems":200,"minItems":1,"uniqueKey":"filters.campaignEngagement.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"Campaign engagement bucket (both list kinds). One of exactly: contacted (at least one campaign email has been sent to the contact), in_active_campaign (targeted by a running campaign, nothing sent yet) or never_engaged (neither) — compared as whole values, case included, so any other value is accepted and returns no rows. A company's bucket is the highest bucket among its contacts.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.campaignEngagement.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.campaignEngagement.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.campaignEngagement.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.campaignEngagement.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.campaignEngagement.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.campaignEngagement","typeLabel":"string[] | object"},"otherLists":{"oneOf":[{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.otherLists.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"NAMES (not ids) of other lists the contact must — or with exclude, must not — also belong to (contact lists). Each value is matched as a case-insensitive substring of the list names from `GET /business/lists`; only the team's static contact lists are searched, so the list being read, dynamic lists and archived lists never satisfy it.","maxItems":200,"minItems":1,"uniqueKey":"filters.otherLists.oneOf.0","typeLabel":"string[]"},{"type":"object","description":"NAMES (not ids) of other lists the contact must — or with exclude, must not — also belong to (contact lists). Each value is matched as a case-insensitive substring of the list names from `GET /business/lists`; only the team's static contact lists are searched, so the list being read, dynamic lists and archived lists never satisfy it.","properties":{"include":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.otherLists.oneOf.1.include.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to keep, OR-joined: a row matches when any one of them matches (up to 200).","uniqueKey":"filters.otherLists.oneOf.1.include","typeLabel":"string[]"},"exclude":{"type":"array","items":{"type":"string","minLength":1,"maxLength":500,"uniqueKey":"filters.otherLists.oneOf.1.exclude.items.[INDEX]","typeLabel":"string"},"maxItems":200,"description":"Values to drop: a row is dropped when it matches any one of them (up to 200).","uniqueKey":"filters.otherLists.oneOf.1.exclude","typeLabel":"string[]"}},"uniqueKey":"filters.otherLists.oneOf.1","typeLabel":"object"}],"uniqueKey":"filters.otherLists","typeLabel":"string[] | object"},"customColumns":{"type":"object","properties":{},"description":"Cell filters keyed by custom/smart column id (from `GET /business/lists/{listId}/columns`), both list kinds. Every column listed must match (AND-ed); a column id that is not on this list matches no row.","uniqueKey":"filters.customColumns","typeLabel":"object"}},"description":"Row-filter object narrowing which contacts the waterfall modes process, in the same language as the filters query of GET /business/lists/{listId}/rows; not allowed for validate_emails or demographics and mutually exclusive with contactIds. Text keys (name, title, dept, level, industryName, country, state, personalLocation, companyName, companyIndustry, companyHeadQuartersCountry, companyLocation, website, campaignEngagement, otherLists) take an array of accepted values, e.g. {\"companyName\":[\"pomelo\"]} or {\"country\":[\"argentina\"]}, or {\"include\":[...],\"exclude\":[...]} — otherLists takes list NAMES, not ids; numberOfEmployees takes headcount ranges the same way but as STRINGS (\"51-200\", \"10001+\" or a bare head count \"500\" — an unquoted JSON number answers 500) and revenue a plain number; keywords (a wildcard match on the job title only) and linkedinUrl take one string; enrichedEmail, enrichedPhone and emailValidity take {\"include\":[...]} of their statuses; icpMatch takes [\"yes\"] or [\"no\"]; customColumns maps a column id to {\"dataType\":\"string\",\"include\":[...]}, {\"dataType\":\"boolean\",\"value\":true} or {\"dataType\":\"number\",\"rangeMin\":1,\"rangeMax\":10}. Company lists honour companyName, companyIndustry, companyHeadQuartersCountry, website, numberOfEmployees, campaignEngagement and customColumns. Every key is optional; an unknown key or a wrong value shape is rejected rather than ignored. Values inside one key are OR-joined and different keys are AND-ed. VALUES ARE NOT VALIDATED: level, industryName, country, state, website and companyHeadQuartersCountry are matched as whole values and campaignEngagement, icpMatch and enum cells as exact strings, so a value in the wrong vocabulary is accepted and silently matches nothing — each key's own description names its vocabulary and the endpoint that serves it. A rejected filter answers 422 VALIDATION_FAILED.","uniqueKey":"filters","typeLabel":"object"},"contactIds":{"type":"array","items":{"type":"string","description":"24-character hex id of a contact (the row id from GET /business/lists/{listId}/rows).","uniqueKey":"contactIds.items.[INDEX]","typeLabel":"string"},"minItems":1,"maxItems":500,"description":"Explicit contacts to process (24-character hex ids, 1-500) for the waterfall modes. Each must be a row of this list (a row `id` from GET /business/lists/{listId}/rows); any other id answers 422 CONTACT_NOT_IN_LIST. Not allowed for validate_emails or demographics and mutually exclusive with filters.","uniqueKey":"contactIds","typeLabel":"string[]"},"limit":{"type":"integer","minimum":1,"maximum":10000,"description":"How many rows to take, starting at offset, in the list's default order (oldest first) after filters (1-10000); required unless contactIds is given, and validate_emails/demographics cap it at 5000. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit.","uniqueKey":"limit","typeLabel":"integer"}},"required":["mode"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"offset":1,"filters":{"name":["\u003cstring>"],"title":["\u003cstring>"],"dept":["\u003cstring>"],"level":["\u003cstring>"],"industryName":["\u003cstring>"],"country":["\u003cstring>"],"state":["\u003cstring>"],"personalLocation":["\u003cstring>"],"companyName":["\u003cstring>"],"companyIndustry":["\u003cstring>"],"companyHeadQuartersCountry":["\u003cstring>"],"companyLocation":["\u003cstring>"],"website":["\u003cstring>"],"numberOfEmployees":["\u003cstring>"],"revenue":["\u003cstring>"],"keywords":"\u003cstring>","linkedinUrl":"\u003cstring>","enrichedEmail":{"include":[],"exclude":[]},"enrichedPhone":{"include":[],"exclude":[]},"emailValidity":{"include":[],"exclude":[]},"icpMatch":[],"campaignEngagement":["\u003cstring>"],"otherLists":["\u003cstring>"],"customColumns":{}},"contactIds":["\u003cstring>"],"limit":5000}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"494e4c49-aef1-4afe-af57-432b111d75c2":{"description":"Success","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests permitted in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the current window resets."}},"content":{"application/json":{"schema":{"type":"object","required":["listIds","mode","totalContacts","estimatedMinutes"],"properties":{"listIds":{"type":"array","items":{"type":"string","uniqueKey":"listIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"listIds","typeLabel":"string[]"},"mode":{"type":"string","enum":["email","phone","phone_and_email","validate_emails","demographics"],"isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"totalContacts":{"type":"integer","isRequired":true,"uniqueKey":"totalContacts","typeLabel":"integer"},"estimatedMinutes":{"type":"integer","isRequired":true,"uniqueKey":"estimatedMinutes","typeLabel":"integer"},"jobId":{"type":"string","description":"Waterfall modes only: the run's job, to poll at GET /business/jobs/{jobId}.","uniqueKey":"jobId","typeLabel":"string"},"status":{"type":"string","enum":["pending","processing"],"description":"Waterfall modes only: pending while the job waits behind your other enrichment job, processing once it runs.","uniqueKey":"status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"listIds":["68a1f20b9c41d20014b3e901"],"mode":"phone_and_email","totalContacts":200,"estimatedMinutes":10,"jobId":"68a2109c9c41d20014b41002","status":"pending"},"examples":{"Example":{"title":"Example","value":{"listIds":["68a1f20b9c41d20014b3e901"],"mode":"phone_and_email","totalContacts":200,"estimatedMinutes":10,"jobId":"68a2109c9c41d20014b41002","status":"pending"}}},"exampleType":"examples"}},"exampleType":"examples"},"664e6367-bf5a-4ac3-a538-b62213399a06":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"d14458dd-ece7-4f9a-bd79-86cf15fbce2b":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"848c03db-2b44-491a-bd07-eb2054182bd6":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"903283eb-8ff1-4897-8743-550600ab1405":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"dd297eb7-cd7a-4083-94fb-ca2714bf4546":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"aef50f0f-d0f6-416a-94d1-12b7e34000ed":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"8f6ad084-6042-476e-bae5-38d9b48cf285":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"935a63cc-6503-47b8-933c-262980fa71b7":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"9d748c82-c4ea-49bf-a1b9-0669e2f28558":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"param":{"oneOf":[{"type":"string","uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.param","typeLabel":"string | null"},"doc_url":{"oneOf":[{"type":"string","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string | null"},"request_id":{"oneOf":[{"type":"string","uniqueKey":"error.request_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.request_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.request_id","typeLabel":"string | null"}},"required":["code","message"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e78603ff-5076-4d84-a31c-2ae471fd2c76":{"basicAuth":{"type":"http","scheme":"basic","description":"Your API token (`af_…`) as the Basic-auth username, with an empty password.","scopes":[],"schemeName":"basicAuth"}}},"servers":{"4ca8b996-e74f-447c-8937-bc591ab08d00":{"url":"https://api.tryfuse.ai/api/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"basic","description":"Your API token (`af_…`) as the Basic-auth username, with an empty password.","scopes":[],"schemeName":"basicAuth"},"schema":{"title":"Basic Auth","type":"object","description":"Your API token (`af_…`) as the Basic-auth username, with an empty password.","isRequired":true,"properties":{"username":{"type":"string","uniqueKey":"username","isRequired":true,"typeLabel":"string","deprecated":false},"password":{"type":"string","uniqueKey":"password","isRequired":true,"typeLabel":"string","deprecated":false}},"additionalProperties":false,"deprecated":false},"schemeName":"basicAuth","name":"Authorization"}],"title":"basicAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"fuseai","siteName":"Fuse API","title":"Enrich a list's contacts in place - Fuse API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T16:59:46.065Z","originalFileLocation":"api-reference/lists/enrich-a-lists-contacts-in-place.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=\"Runs an enrichment over the list\u0026#x27;s contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts\u0026#x27; existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list\u0026#x27;s default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list\u0026#x27;s end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job\u0026#x27;s total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list\u0026#x27;s metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call\u0026#x27;s offset plus limit: a call without offset always starts at the list\u0026#x27;s first row. Errors: - 402 INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows. - 404 LIST_NOT_FOUND — No list with that id is visible to the token owner. - 409 ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead. - 422 CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts. - 422 CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list. - 422 VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics. - 429 RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted. Requires one of the following token scopes: lists.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Fuse API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_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/fuseai/tzdaGJCdazH9bA6t/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Enrich a list\u0026#x27;s contacts in place - Fuse API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Runs an enrichment over the list\u0026#x27;s contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts\u0026#x27; existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list\u0026#x27;s default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list\u0026#x27;s end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job\u0026#x27;s total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list\u0026#x27;s metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call\u0026#x27;s offset plus limit: a call without offset always starts at the list\u0026#x27;s first row. Errors: - 402 INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows. - 404 LIST_NOT_FOUND — No list with that id is visible to the token owner. - 409 ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead. - 422 CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts. - 422 CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list. - 422 VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics. - 429 RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted. Requires one of the following token scopes: lists.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Fuse API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fuseai.mintlify.app/_mintlify/api/og/v2?division=Lists\u0026amp;title=Enrich+a+list%27s+contacts+in+place\u0026amp;description=Runs+an+enrichment+over+the+list%27s+contacts+in+place.+%60mode%60+selects+what+runs%3A+the+waterfall+modes+%28%60email%60%2C+%60phone%60%2C+%60phone_and_email%60%29+discover+new+values+th\u0026amp;theme=6edc0ab12d2194e24d86a864\u0026amp;signature=8ad523cfbab55e40580150c1dcc1b5c0c79817ad0a25866cfc5c7c78c70e0506\">\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=\"Enrich a list\u0026#x27;s contacts in place - Fuse API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Runs an enrichment over the list\u0026#x27;s contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts\u0026#x27; existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list\u0026#x27;s default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list\u0026#x27;s end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job\u0026#x27;s total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list\u0026#x27;s metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call\u0026#x27;s offset plus limit: a call without offset always starts at the list\u0026#x27;s first row. Errors: - 402 INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows. - 404 LIST_NOT_FOUND — No list with that id is visible to the token owner. - 409 ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead. - 422 CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts. - 422 CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list. - 422 VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics. - 429 RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted. Requires one of the following token scopes: lists.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fuseai.mintlify.app/_mintlify/api/og/v2?division=Lists\u0026amp;title=Enrich+a+list%27s+contacts+in+place\u0026amp;description=Runs+an+enrichment+over+the+list%27s+contacts+in+place.+%60mode%60+selects+what+runs%3A+the+waterfall+modes+%28%60email%60%2C+%60phone%60%2C+%60phone_and_email%60%29+discover+new+values+th\u0026amp;theme=6edc0ab12d2194e24d86a864\u0026amp;signature=8ad523cfbab55e40580150c1dcc1b5c0c79817ad0a25866cfc5c7c78c70e0506\">\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/fuseai/tzdaGJCdazH9bA6t/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Fuse API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#22857C\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/lists/enrich-a-lists-contacts-in-place.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.fuseai.com/#organization\",\"name\":\"Fuse API\",\"url\":\"https://docs.fuseai.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fuseai/HxYNa2W1WI8CM0N4/logo/light.svg?fit=max\u0026auto=format\u0026n=HxYNa2W1WI8CM0N4\u0026q=85\u0026s=c9afa73057eb802e14743fbb297c60d5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.fuseai.com#website\",\"name\":\"Fuse API\",\"url\":\"https://docs.fuseai.com\",\"publisher\":{\"@id\":\"https://docs.fuseai.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place#webpage\",\"url\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place\",\"name\":\"Enrich a list's contacts in place\",\"description\":\"Runs an enrichment over the list's contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts' existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list's default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list's end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job's total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list's metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call's offset plus limit: a call without offset always starts at the list's first row. Errors: - 402 INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows. - 404 LIST_NOT_FOUND — No list with that id is visible to the token owner. - 409 ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead. - 422 CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts. - 422 CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list. - 422 VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics. - 429 RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted. Requires one of the following token scopes: lists.\",\"dateModified\":\"2026-10-29T16:59:46.065Z\",\"isPartOf\":{\"@id\":\"https://docs.fuseai.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Lists\",\"item\":\"https://docs.fuseai.com/api-reference/lists/list-the-token-owners-prospect-lists\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enrich a list's contacts in place\",\"item\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place#apireference\",\"headline\":\"Enrich a list's contacts in place\",\"name\":\"Enrich a list's contacts in place\",\"description\":\"Runs an enrichment over the list's contacts in place. mode selects what runs: the waterfall modes (email, phone, phone_and_email) discover new values through the provider waterfall and take an optional row filters object or an explicit contactIds selection; validate_emails re-verifies the contacts' existing emails; demographics resolves manually-added rows to canonical contacts. limit is how many rows are taken, from offset (default 0) in the list's default order after filters — required unless contactIds is given, and capped at 5,000 for validate_emails/demographics. Rows that already hold the requested data, or were searched for it before, are skipped and not charged but still count toward limit, so a repeated call with the same offset and limit takes the same rows: pass a larger offset to reach rows further down. A call identical to one whose job is still queued or running (same mode, filters, offset and limit) returns that job instead of starting another. Billing is per processed contact: up to 50 credits per work email (100 when personal emails are prioritised in the workspace settings), 200 per phone, 10 per re-verified address, 1 per resolved demographics row; the balance must cover the reserved price up front (402 INSUFFICIENT_CREDITS) and contacts already carrying the requested data are never re-charged — with the waterfall modes a fully enriched list answers 409 ALL_CONTACTS_ALREADY_ENRICHED before anything bills, while validate_emails and demographics report a nothing-to-do run as 202 with totalContacts: 0. Async: totalContacts is the number of rows this run takes (at most limit, fewer at the list's end; a call that returns a running job, or explicit contactIds that join a queued one, answers that job's total) and estimatedMinutes a rough duration; poll GET /business/lists/{listId}/rows (emails/phones fill in) or the list's metrics. The waterfall modes run as a job: the 202 also carries its jobId and status (pending while it waits behind your other enrichment job, processing once it runs); poll GET /business/jobs/{jobId} for its status and counts. A job whose balance runs out mid-run pauses (stopped, with pausedReason INSUFFICIENT_CREDITS) and is resumed from the app. To work through a list in batches, pass offset as the previous call's offset plus limit: a call without offset always starts at the list's first row. Errors: - 402 INSUFFICIENT_CREDITS — The credit balance does not cover the reserved price for the requested rows. - 404 LIST_NOT_FOUND — No list with that id is visible to the token owner. - 409 ALL_CONTACTS_ALREADY_ENRICHED — Every contact in the list already carries the requested data; nothing to run. Waterfall modes (email, phone, phone_and_email) only — validate_emails and demographics answer 202 with totalContacts 0 instead. - 422 CONTACT_LIST_REQUIRED — The list is a company list; enrichment runs on contacts. - 422 CONTACT_NOT_IN_LIST — A contactIds entry is not a row of this list. - 422 VALIDATION_FAILED — mode missing/unknown, limit missing without contactIds or outside 1-10000, filters/contactIds sent together or with validate_emails/demographics, offset sent with contactIds or with validate_emails/demographics. - 429 RATE_LIMITED — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted. Requires one of the following token scopes: lists.\",\"url\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place\",\"mainEntityOfPage\":{\"@id\":\"https://docs.fuseai.com/api-reference/lists/enrich-a-lists-contacts-in-place#webpage\"},\"dateModified\":\"2026-10-29T16:59:46.065Z\",\"publisher\":{\"@id\":\"https://docs.fuseai.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.fuseai.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Fuse API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Fuse API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Lists","pages":[{"title":"List the token owner's prospect lists","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists","href":"/api-reference/lists/list-the-token-owners-prospect-lists"},{"title":"Create a prospect list","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists","href":"/api-reference/lists/create-a-prospect-list"},{"title":"Get one list's metadata","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}","href":"/api-reference/lists/get-one-lists-metadata"},{"title":"Delete a list","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/lists/{listId}","href":"/api-reference/lists/delete-a-list"},{"title":"Rename a list or move it between folders","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/lists/{listId}","href":"/api-reference/lists/rename-a-list-or-move-it-between-folders"},{"title":"Copy rows from one list into another","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/save-to-list","href":"/api-reference/lists/copy-rows-from-one-list-into-another"},{"title":"Build a company list from a contact list's companies","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/derive-company-list","href":"/api-reference/lists/build-a-company-list-from-a-contact-lists-companies"},{"title":"Distinct values a company list carries for a field","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/filter-values","href":"/api-reference/lists/distinct-values-a-company-list-carries-for-a-field"},{"title":"List a list's contacts (with ids and column values)","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/rows","href":"/api-reference/lists/list-a-lists-contacts-with-ids-and-column-values"},{"title":"Add existing contacts to a list (by id)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/members","href":"/api-reference/lists/add-existing-contacts-to-a-list-by-id"},{"title":"Remove contacts from a list","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/lists/{listId}/members","href":"/api-reference/lists/remove-contacts-from-a-list"},{"title":"Upload new contact data into a list (RAW upload)","description":"Creates new contacts from the supplied data and adds them to the list, the same path a CSV upload takes (no enrichment runs and no credits are spent). Every row becomes a new contact — there is no de-duplication against contacts already in the workspace, so retrying a call duplicates rows. Emails are stored as the primary email with status `valid` without verification, phones are normalised to E.164 (US assumed when no country code is given), and LinkedIn URLs are normalised to `linkedin.com/in/\u003cslug>` so the contact can later be found with `POST /business/contacts/resolve`. The returned `contactIds` are the new rows' ids, usable with `columns/{columnId}/values`, `enrich` and `crm-push`. Up to 500 contacts per call.\n\nErrors:\n- `404` `LIST_NOT_FOUND` — No list with that id is visible to the token owner.\n- `422` `CONTACT_LIST_REQUIRED` — The list is a company list; contact rows cannot be written into it.\n- `422` `VALIDATION_FAILED` — contacts missing/empty/over 500, a row with none of email/linkedinUrl/firstName/lastName, a malformed email, or an unknown key.\n- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\n\nRequires one of the following token scopes: lists.","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/contacts","href":"/api-reference/lists/upload-new-contact-data-into-a-list-raw-upload"},{"title":"Enrich a list's contacts in place","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/enrich","href":"/api-reference/lists/enrich-a-lists-contacts-in-place"},{"title":"Push a list's contacts into a connected CRM","description":"Pushes the list's contacts into a connected CRM. `crm` names which one (`hubspot`, `salesforce`, `zoho`, `attio`, `pipedrive`; several can be connected at once); the connection checked is the team's designated sync user's, so an unconnected CRM answers 422 CRM_NOT_CONNECTED. An explicit `contactIds` selection pushes just those contacts (the response still echoes the list id). Async, with no job to poll: the sync runs in the background against the field mapping saved in the app's CRM settings, and results appear in the CRM. No credits are spent.\n\nErrors:\n- `404` `LIST_NOT_FOUND` — No list with that id is visible to the token owner.\n- `422` `CONTACT_LIST_REQUIRED` — The list is a company list; the push sends contacts.\n- `422` `CRM_NOT_CONNECTED` — The team's sync user has no live connection to that CRM.\n- `422` `VALIDATION_FAILED` — crm missing or outside the supported set, or contactIds outside 1-500.\n- `429` `RATE_LIMITED` — The lists rate bucket (120 requests/minute, 10,000/day per token owner) is exhausted.\n\nRequires one of the following token scopes: lists.","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/crm-push","href":"/api-reference/lists/push-a-lists-contacts-into-a-connected-crm"},{"title":"Presigned upload for a large import file","deprecated":null,"version":null,"openapi":"/openapi.json post /business/imports/presign","href":"/api-reference/lists/presigned-upload-for-a-large-import-file"},{"title":"Start an import (parse + suggested mapping)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/imports","href":"/api-reference/lists/start-an-import-parse-+-suggested-mapping"},{"title":"Commit an import into a list","deprecated":null,"version":null,"openapi":"/openapi.json post /business/imports/{importId}/commit","href":"/api-reference/lists/commit-an-import-into-a-list"}]},{"group":"Custom columns","pages":[{"title":"List a list's custom column definitions","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/columns","href":"/api-reference/custom-columns/list-a-lists-custom-column-definitions"},{"title":"Create a custom column on a list","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/columns","href":"/api-reference/custom-columns/create-a-custom-column-on-a-list"},{"title":"Delete a custom column (its values go with it)","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/lists/{listId}/columns/{columnId}","href":"/api-reference/custom-columns/delete-a-custom-column-its-values-go-with-it"},{"title":"Write custom column values (keyed by contact id)","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/lists/{listId}/columns/{columnId}/values","href":"/api-reference/custom-columns/write-custom-column-values-keyed-by-contact-id"}]},{"group":"Smart columns","pages":[{"title":"Add an AI column that researches every row","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/smart-columns","href":"/api-reference/smart-columns/add-an-ai-column-that-researches-every-row"},{"title":"Poll a smart-column run","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/smart-columns/{jobId}/status","href":"/api-reference/smart-columns/poll-a-smart-column-run"},{"title":"A smart column's definition and run state","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/smart-columns/{columnId}","href":"/api-reference/smart-columns/a-smart-columns-definition-and-run-state"},{"title":"Rename a smart column, change its prompt or providers","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/lists/{listId}/smart-columns/{columnId}","href":"/api-reference/smart-columns/rename-a-smart-column-change-its-prompt-or-providers"},{"title":"Run a smart column again","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/smart-columns/{columnId}/rerun","href":"/api-reference/smart-columns/run-a-smart-column-again"},{"title":"Where a smart-column cell's value came from","deprecated":null,"version":null,"openapi":"/openapi.json get /business/lists/{listId}/rows/{contactId}/columns/{columnId}/provenance","href":"/api-reference/smart-columns/where-a-smart-column-cells-value-came-from"}]},{"group":"Exports","pages":[{"title":"Start an async CSV export of a list (returns a jobId)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/lists/{listId}/export","href":"/api-reference/exports/start-an-async-csv-export-of-a-list-returns-a-jobid"},{"title":"Poll an export job (presigned download URL when completed)","deprecated":null,"version":null,"openapi":"/openapi.json get /business/exports/{jobId}","href":"/api-reference/exports/poll-an-export-job-presigned-download-url-when-completed"}]},{"group":"Campaigns","pages":[{"title":"List the token owner's campaigns with headline analytics","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns","href":"/api-reference/campaigns/list-the-token-owners-campaigns-with-headline-analytics"},{"title":"Create a draft campaign","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns","href":"/api-reference/campaigns/create-a-draft-campaign"},{"title":"Get a campaign's status","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}","href":"/api-reference/campaigns/get-a-campaigns-status"},{"title":"Stop and delete a campaign","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/campaigns/{campaignId}","href":"/api-reference/campaigns/stop-and-delete-a-campaign"},{"title":"Update a campaign's settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaigns-settings"},{"title":"List a campaign's sequence steps","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/steps","href":"/api-reference/campaigns/list-a-campaigns-sequence-steps"},{"title":"Edit a sequence step","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/campaigns/{campaignId}/steps/{stepId}","href":"/api-reference/campaigns/edit-a-sequence-step"},{"title":"Approve (activate) a draft campaign","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/approve","href":"/api-reference/campaigns/approve-activate-a-draft-campaign"},{"title":"Stop an active campaign (approve re-activates it)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/stop","href":"/api-reference/campaigns/stop-an-active-campaign-approve-re-activates-it"},{"title":"Copy a campaign as a fresh draft","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/duplicate","href":"/api-reference/campaigns/copy-a-campaign-as-a-fresh-draft"},{"title":"The personalization variables this campaign's steps can use","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/variables","href":"/api-reference/campaigns/the-personalization-variables-this-campaigns-steps-can-use"},{"title":"A campaign's headline metrics since `since`","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/stats","href":"/api-reference/campaigns/a-campaigns-headline-metrics-since-`since`"},{"title":"The campaign's leads with their per-step state","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/leads","href":"/api-reference/campaigns/the-campaigns-leads-with-their-per-step-state"},{"title":"Export the campaign's leads to CSV","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/leads/export","href":"/api-reference/campaigns/export-the-campaigns-leads-to-csv"},{"title":"Per-arm results of a campaign's A/B splits","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/split-results","href":"/api-reference/campaigns/per-arm-results-of-a-campaigns-ab-splits"}]},{"group":"Campaign steps","pages":[{"title":"Add a sequence step","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/steps","href":"/api-reference/campaign-steps/add-a-sequence-step"},{"title":"Remove a sequence step","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/campaigns/{campaignId}/steps/{stepId}","href":"/api-reference/campaign-steps/remove-a-sequence-step"},{"title":"Copy one arm of an A/B split into the other","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/steps/{stepId}/copy-arm","href":"/api-reference/campaign-steps/copy-one-arm-of-an-ab-split-into-the-other"},{"title":"Render the step for a sample lead without saving or sending","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/steps/{stepId}/generate","href":"/api-reference/campaign-steps/render-the-step-for-a-sample-lead-without-saving-or-sending"},{"title":"Rebuild the AI topic plan across the campaign's steps","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaigns/{campaignId}/steps/regenerate-topics","href":"/api-reference/campaign-steps/rebuild-the-ai-topic-plan-across-the-campaigns-steps"}]},{"group":"Knowledge hubs","pages":[{"title":"List the token owner's knowledge hubs","deprecated":null,"version":null,"openapi":"/openapi.json get /business/knowledge-hubs","href":"/api-reference/knowledge-hubs/list-the-token-owners-knowledge-hubs"},{"title":"Create a knowledge hub from websites","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs","href":"/api-reference/knowledge-hubs/create-a-knowledge-hub-from-websites"},{"title":"Make a hub the default one","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs/default","href":"/api-reference/knowledge-hubs/make-a-hub-the-default-one"},{"title":"Facts learned from the team's communications","deprecated":null,"version":null,"openapi":"/openapi.json get /business/knowledge-hubs/learned-facts","href":"/api-reference/knowledge-hubs/facts-learned-from-the-teams-communications"},{"title":"Discard a learned fact","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/knowledge-hubs/learned-facts/{factId}","href":"/api-reference/knowledge-hubs/discard-a-learned-fact"},{"title":"Correct a learned fact","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/knowledge-hubs/learned-facts/{factId}","href":"/api-reference/knowledge-hubs/correct-a-learned-fact"},{"title":"A hub's full detail","deprecated":null,"version":null,"openapi":"/openapi.json get /business/knowledge-hubs/{hubId}","href":"/api-reference/knowledge-hubs/a-hubs-full-detail"},{"title":"Delete a hub","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/knowledge-hubs/{hubId}","href":"/api-reference/knowledge-hubs/delete-a-hub"},{"title":"Update a hub's name, websites, or notes","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/knowledge-hubs/{hubId}","href":"/api-reference/knowledge-hubs/update-a-hubs-name-websites-or-notes"},{"title":"Re-crawl one of the hub's websites","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs/{hubId}/refresh","href":"/api-reference/knowledge-hubs/re-crawl-one-of-the-hubs-websites"},{"title":"The hub's knowledge pages","deprecated":null,"version":null,"openapi":"/openapi.json get /business/knowledge-hubs/{hubId}/pages","href":"/api-reference/knowledge-hubs/the-hubs-knowledge-pages"},{"title":"Add a custom knowledge page","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs/{hubId}/pages","href":"/api-reference/knowledge-hubs/add-a-custom-knowledge-page"},{"title":"Remove a knowledge page","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/knowledge-hubs/{hubId}/pages/{pageId}","href":"/api-reference/knowledge-hubs/remove-a-knowledge-page"},{"title":"Edit a page's title or content","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/knowledge-hubs/{hubId}/pages/{pageId}","href":"/api-reference/knowledge-hubs/edit-a-pages-title-or-content"},{"title":"Rebuild a page from the hub's sources","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs/{hubId}/pages/{pageId}/regenerate","href":"/api-reference/knowledge-hubs/rebuild-a-page-from-the-hubs-sources"},{"title":"Attach a document to one of the hub's notes","deprecated":null,"version":null,"openapi":"/openapi.json post /business/knowledge-hubs/{hubId}/attachments","href":"/api-reference/knowledge-hubs/attach-a-document-to-one-of-the-hubs-notes"},{"title":"A download URL for a note's attachment","deprecated":null,"version":null,"openapi":"/openapi.json get /business/knowledge-hubs/{hubId}/attachments/{noteId}","href":"/api-reference/knowledge-hubs/a-download-url-for-a-notes-attachment"},{"title":"Remove a note's attachment","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/knowledge-hubs/{hubId}/attachments/{noteId}","href":"/api-reference/knowledge-hubs/remove-a-notes-attachment"}]},{"group":"Analytics","pages":[{"title":"Campaigns analytics roll-up","deprecated":null,"version":null,"openapi":"/openapi.json get /business/analytics/campaigns","href":"/api-reference/analytics/campaigns-analytics-roll-up"},{"title":"Dialer analytics roll-up","deprecated":null,"version":null,"openapi":"/openapi.json get /business/analytics/dialer","href":"/api-reference/analytics/dialer-analytics-roll-up"},{"title":"Enrichment analytics roll-up","deprecated":null,"version":null,"openapi":"/openapi.json get /business/analytics/enrichment","href":"/api-reference/analytics/enrichment-analytics-roll-up"},{"title":"Website intent analytics roll-up","deprecated":null,"version":null,"openapi":"/openapi.json get /business/analytics/website-intent","href":"/api-reference/analytics/website-intent-analytics-roll-up"},{"title":"Agents analytics roll-up","deprecated":null,"version":null,"openapi":"/openapi.json get /business/analytics/agents","href":"/api-reference/analytics/agents-analytics-roll-up"}]},{"group":"Website intent","pages":[{"title":"The deanonymized visitor feed","deprecated":null,"version":null,"openapi":"/openapi.json get /business/website-visitors","href":"/api-reference/website-intent/the-deanonymized-visitor-feed"},{"title":"Tracking config: domains, pages, script, credit limit","deprecated":null,"version":null,"openapi":"/openapi.json get /business/website-tracking","href":"/api-reference/website-intent/tracking-config:-domains-pages-script-credit-limit"},{"title":"Update tracked domains/pages or the monthly credit limit","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/website-tracking","href":"/api-reference/website-intent/update-tracked-domainspages-or-the-monthly-credit-limit"}]},{"group":"Account","pages":[{"title":"Connected sending accounts by channel","deprecated":null,"version":null,"openapi":"/openapi.json get /business/accounts","href":"/api-reference/account/connected-sending-accounts-by-channel"},{"title":"Teammates (id, name, email)","deprecated":null,"version":null,"openapi":"/openapi.json get /business/team/members","href":"/api-reference/account/teammates-id-name-email"},{"title":"The writing styles AI campaigns accept","deprecated":null,"version":null,"openapi":"/openapi.json get /business/writing-styles","href":"/api-reference/account/the-writing-styles-ai-campaigns-accept"},{"title":"Which CRMs the team has connected","deprecated":null,"version":null,"openapi":"/openapi.json get /business/integrations","href":"/api-reference/account/which-crms-the-team-has-connected"},{"title":"Poll any async job","deprecated":null,"version":null,"openapi":"/openapi.json get /business/jobs/{jobId}","href":"/api-reference/account/poll-any-async-job"},{"title":"The credit spend ledger","deprecated":null,"version":null,"openapi":"/openapi.json post /business/credits/usage","href":"/api-reference/account/the-credit-spend-ledger"},{"title":"Get the token owner's identity","deprecated":null,"version":null,"openapi":"/openapi.json get /business/me","href":"/api-reference/account/get-the-token-owners-identity"},{"title":"Get the token owner's credit balance","deprecated":null,"version":null,"openapi":"/openapi.json get /business/credits","href":"/api-reference/account/get-the-token-owners-credit-balance"}]},{"group":"Data","pages":[{"title":"Get your key's usage plan","deprecated":null,"version":null,"openapi":"/openapi.json get /business/data/pricing","href":"/api-reference/data/get-your-keys-usage-plan"},{"title":"Count people matching a search (free)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/people/count","href":"/api-reference/data/count-people-matching-a-search-free"},{"title":"Count companies matching a search (free)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/companies/count","href":"/api-reference/data/count-companies-matching-a-search-free"},{"title":"Find a company's domain, LinkedIn page and logo (free)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/companies/resolve","href":"/api-reference/data/find-a-companys-domain-linkedin-page-and-logo-free"},{"title":"Find a person's email","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/people/email","href":"/api-reference/data/find-a-persons-email"},{"title":"Find a person's phone","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/people/phone","href":"/api-reference/data/find-a-persons-phone"},{"title":"Verify an email address","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/emails/verify","href":"/api-reference/data/verify-an-email-address"},{"title":"Find emails and phones for up to 100 people","deprecated":null,"version":null,"openapi":"/openapi.json post /business/data/people/enrich-jobs","href":"/api-reference/data/find-emails-and-phones-for-up-to-100-people"},{"title":"Get a people enrichment job's progress and rows","deprecated":null,"version":null,"openapi":"/openapi.json get /business/data/people/enrich-jobs/{jobId}","href":"/api-reference/data/get-a-people-enrichment-jobs-progress-and-rows"}]},{"group":"Prospect search","pages":[{"title":"Get the accepted prospect-search filter values","deprecated":null,"version":null,"openapi":"/openapi.json get /business/prospects/filter-options","href":"/api-reference/prospect-search/get-the-accepted-prospect-search-filter-values"},{"title":"Suggest values for a free-text search field","deprecated":null,"version":null,"openapi":"/openapi.json get /business/prospects/autocomplete","href":"/api-reference/prospect-search/suggest-values-for-a-free-text-search-field"},{"title":"Run a people search","deprecated":null,"version":null,"openapi":"/openapi.json post /business/prospects/search","href":"/api-reference/prospect-search/run-a-people-search"},{"title":"Save people-search results into a list","deprecated":null,"version":null,"openapi":"/openapi.json post /business/prospects/search/save-to-list","href":"/api-reference/prospect-search/save-people-search-results-into-a-list"}]},{"group":"Scheduled sends","pages":[{"title":"The campaign's send queue by status","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaigns/{campaignId}/scheduled-sends","href":"/api-reference/scheduled-sends/the-campaigns-send-queue-by-status"},{"title":"Edit a queued send's copy or time before it goes out","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/scheduled-sends/{sendId}","href":"/api-reference/scheduled-sends/edit-a-queued-sends-copy-or-time-before-it-goes-out"},{"title":"Skip one queued send","deprecated":null,"version":null,"openapi":"/openapi.json post /business/scheduled-sends/{sendId}/skip","href":"/api-reference/scheduled-sends/skip-one-queued-send"},{"title":"Approve queued sends awaiting review","deprecated":null,"version":null,"openapi":"/openapi.json post /business/scheduled-sends/approve","href":"/api-reference/scheduled-sends/approve-queued-sends-awaiting-review"},{"title":"Decline queued sends awaiting review","deprecated":null,"version":null,"openapi":"/openapi.json post /business/scheduled-sends/decline","href":"/api-reference/scheduled-sends/decline-queued-sends-awaiting-review"}]},{"group":"Campaign templates","pages":[{"title":"The workspace's saved campaign templates","deprecated":null,"version":null,"openapi":"/openapi.json get /business/campaign-templates","href":"/api-reference/campaign-templates/the-workspaces-saved-campaign-templates"},{"title":"Save a campaign's sequence as a reusable template","deprecated":null,"version":null,"openapi":"/openapi.json post /business/campaign-templates","href":"/api-reference/campaign-templates/save-a-campaigns-sequence-as-a-reusable-template"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/campaign-templates/{campaignTemplateId}","href":"/api-reference/campaign-templates/delete-a-template"}]},{"group":"Agents","pages":[{"title":"The agent kinds the wizard offers","deprecated":null,"version":null,"openapi":"/openapi.json get /business/agents/signal-types","href":"/api-reference/agents/the-agent-kinds-the-wizard-offers"},{"title":"The token owner's agents across every kind","deprecated":null,"version":null,"openapi":"/openapi.json get /business/agents","href":"/api-reference/agents/the-token-owners-agents-across-every-kind"},{"title":"Create a web monitor agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/web-monitor","href":"/api-reference/agents/create-a-web-monitor-agent"},{"title":"Create a person starting new job agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/person-starting-new-job","href":"/api-reference/agents/create-a-person-starting-new-job-agent"},{"title":"Create a linkedin posts agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/linkedin-posts","href":"/api-reference/agents/create-a-linkedin-posts-agent"},{"title":"Create a person discovery via filters agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/person-discovery-via-filters","href":"/api-reference/agents/create-a-person-discovery-via-filters-agent"},{"title":"Create a job postings agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/job-postings","href":"/api-reference/agents/create-a-job-postings-agent"},{"title":"Create a job posting in location agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/job-posting-in-location","href":"/api-reference/agents/create-a-job-posting-in-location-agent"},{"title":"Create a first person hired in company department agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/first-person-hired-in-company-department","href":"/api-reference/agents/create-a-first-person-hired-in-company-department-agent"},{"title":"Create a first person hired internationally agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/first-person-hired-internationally","href":"/api-reference/agents/create-a-first-person-hired-internationally-agent"},{"title":"Create a company headcount growth agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/company-headcount-growth","href":"/api-reference/agents/create-a-company-headcount-growth-agent"},{"title":"Create a company headcount growth over baseline agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/company-headcount-growth-over-baseline","href":"/api-reference/agents/create-a-company-headcount-growth-over-baseline-agent"},{"title":"Create a company department headcount agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/company-department-headcount","href":"/api-reference/agents/create-a-company-department-headcount-agent"},{"title":"Create a company employee job location in two countries agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/company-employee-job-location-in-two-countries","href":"/api-reference/agents/create-a-company-employee-job-location-in-two-countries-agent"},{"title":"Create a funding announcements agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/funding-announcements","href":"/api-reference/agents/create-a-funding-announcements-agent"},{"title":"Create a people watcher agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/people-watcher","href":"/api-reference/agents/create-a-people-watcher-agent"},{"title":"Create a companies watcher agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/companies-watcher","href":"/api-reference/agents/create-a-companies-watcher-agent"},{"title":"Create a job changes watcher agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/job-changes-watcher","href":"/api-reference/agents/create-a-job-changes-watcher-agent"},{"title":"Create a linkedin profile agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/linkedin-profile","href":"/api-reference/agents/create-a-linkedin-profile-agent"},{"title":"Create a linkedin post agent","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/linkedin-post","href":"/api-reference/agents/create-a-linkedin-post-agent"},{"title":"Canonical values for agent config filters","deprecated":null,"version":null,"openapi":"/openapi.json get /business/agents/autocomplete","href":"/api-reference/agents/canonical-values-for-agent-config-filters"},{"title":"An agent's config as the drawer shows it","deprecated":null,"version":null,"openapi":"/openapi.json get /business/agents/{agentId}","href":"/api-reference/agents/an-agents-config-as-the-drawer-shows-it"},{"title":"Delete an agent (409 while a run is processing)","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/agents/{agentId}","href":"/api-reference/agents/delete-an-agent-409-while-a-run-is-processing"},{"title":"Update a draft agent's config (partial)","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/agents/{agentId}","href":"/api-reference/agents/update-a-draft-agents-config-partial"},{"title":"Start a draft agent (spends credits)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/{agentId}/activate","href":"/api-reference/agents/start-a-draft-agent-spends-credits"},{"title":"Pause an agent (one-way, there is no resume)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/{agentId}/stop","href":"/api-reference/agents/pause-an-agent-one-way-there-is-no-resume"},{"title":"Copy an agent as a fresh draft","deprecated":null,"version":null,"openapi":"/openapi.json post /business/agents/{agentId}/duplicate","href":"/api-reference/agents/copy-an-agent-as-a-fresh-draft"}]},{"group":"Research","pages":[{"title":"The research providers a run can use","deprecated":null,"version":null,"openapi":"/openapi.json get /business/research/providers","href":"/api-reference/research/the-research-providers-a-run-can-use"},{"title":"Research runs currently in flight","deprecated":null,"version":null,"openapi":"/openapi.json get /business/research/runs","href":"/api-reference/research/research-runs-currently-in-flight"},{"title":"Start a Deep Research run","deprecated":null,"version":null,"openapi":"/openapi.json post /business/research/runs","href":"/api-reference/research/start-a-deep-research-run"},{"title":"A research run's state, report, and result list","deprecated":null,"version":null,"openapi":"/openapi.json get /business/research/runs/{runId}","href":"/api-reference/research/a-research-runs-state-report-and-result-list"},{"title":"A research run's progress events","deprecated":null,"version":null,"openapi":"/openapi.json get /business/research/runs/{runId}/events","href":"/api-reference/research/a-research-runs-progress-events"},{"title":"Cancel an in-flight research run","deprecated":null,"version":null,"openapi":"/openapi.json post /business/research/runs/{runId}/cancel","href":"/api-reference/research/cancel-an-in-flight-research-run"}]},{"group":"Company search","pages":[{"title":"Get the accepted company-search filter values","deprecated":null,"version":null,"openapi":"/openapi.json get /business/companies/filter-options","href":"/api-reference/company-search/get-the-accepted-company-search-filter-values"},{"title":"Suggest values for company and location filters","deprecated":null,"version":null,"openapi":"/openapi.json get /business/companies/autocomplete","href":"/api-reference/company-search/suggest-values-for-company-and-location-filters"},{"title":"Run a company search","deprecated":null,"version":null,"openapi":"/openapi.json post /business/companies/search","href":"/api-reference/company-search/run-a-company-search"},{"title":"Save company-search results into a list","deprecated":null,"version":null,"openapi":"/openapi.json post /business/companies/search/save-to-list","href":"/api-reference/company-search/save-company-search-results-into-a-list"}]},{"group":"Saved searches","pages":[{"title":"List the token owner's saved searches","deprecated":null,"version":null,"openapi":"/openapi.json get /business/saved-searches","href":"/api-reference/saved-searches/list-the-token-owners-saved-searches"},{"title":"Create a saved search","deprecated":null,"version":null,"openapi":"/openapi.json post /business/saved-searches","href":"/api-reference/saved-searches/create-a-saved-search"},{"title":"Get one saved search","deprecated":null,"version":null,"openapi":"/openapi.json get /business/saved-searches/{savedSearchId}","href":"/api-reference/saved-searches/get-one-saved-search"},{"title":"Delete a saved search","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/saved-searches/{savedSearchId}","href":"/api-reference/saved-searches/delete-a-saved-search"},{"title":"Rename a saved search or replace its filters","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/saved-searches/{savedSearchId}","href":"/api-reference/saved-searches/rename-a-saved-search-or-replace-its-filters"},{"title":"Replay a saved search","deprecated":null,"version":null,"openapi":"/openapi.json post /business/saved-searches/{savedSearchId}/run","href":"/api-reference/saved-searches/replay-a-saved-search"}]},{"group":"Folders","pages":[{"title":"List the token owner's list folders of one kind","deprecated":null,"version":null,"openapi":"/openapi.json get /business/folders","href":"/api-reference/folders/list-the-token-owners-list-folders-of-one-kind"},{"title":"Create a list folder","deprecated":null,"version":null,"openapi":"/openapi.json post /business/folders","href":"/api-reference/folders/create-a-list-folder"},{"title":"Delete a folder (its lists move to the root)","deprecated":null,"version":null,"openapi":"/openapi.json delete /business/folders/{folderId}","href":"/api-reference/folders/delete-a-folder-its-lists-move-to-the-root"},{"title":"Rename a folder","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/folders/{folderId}","href":"/api-reference/folders/rename-a-folder"}]},{"group":"Contacts","pages":[{"title":"Resolve the caller's contact by LinkedIn URL","deprecated":null,"version":null,"openapi":"/openapi.json post /business/contacts/resolve","href":"/api-reference/contacts/resolve-the-callers-contact-by-linkedin-url"},{"title":"Set a contact's primary email and/or phone","deprecated":null,"version":null,"openapi":"/openapi.json patch /business/contacts/{contactId}","href":"/api-reference/contacts/set-a-contacts-primary-email-andor-phone"},{"title":"A contact's activity timeline","deprecated":null,"version":null,"openapi":"/openapi.json get /business/contacts/{contactId}/activities","href":"/api-reference/contacts/a-contacts-activity-timeline"},{"title":"Start an async duplicate-contact scan (returns a jobId)","deprecated":null,"version":null,"openapi":"/openapi.json post /business/contacts/dedupe-scan","href":"/api-reference/contacts/start-an-async-duplicate-contact-scan-returns-a-jobid"},{"title":"Merge the duplicate groups a completed scan found","deprecated":null,"version":null,"openapi":"/openapi.json post /business/contacts/dedupe-merge","href":"/api-reference/contacts/merge-the-duplicate-groups-a-completed-scan-found"},{"title":"Poll a dedupe scan or merge job (groups / totals when completed)","deprecated":null,"version":null,"openapi":"/openapi.json get /business/contacts/dedupe-jobs/{jobId}","href":"/api-reference/contacts/poll-a-dedupe-scan-or-merge-job-groups-totals-when-completed"}]}]}]},"basePath":"","title":"Enrich a list's contacts in place - Fuse API","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-B7XKH4J3.js","utils-lOYzL7z-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DF6jUUIM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dpsj5f7C.js","snippetPresets-CYeiDe8v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CUFz1YZ_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D8H_iLS4.js","shallow-DdluZBHX.js","getApiPlaygroundDisplay-B9922vev.js","CodeSnippet-CMoRNGYs.js","CodeSnippets-DwyrPHuw.js","Page-DSVu9Ucl.js","getPastedJson-G-zIvlHh.js","icon-B03fnEy0.js","MethodPill-CW7teklc.js","DuplicateIcon-CtO8eekd.js","createIcon-DZTKdM_A.js","DynamicMarkdown-D5M2At0B.js","SectionHeading-C_2NaA2U.js","axios-vUo_bRtp.js","Markdown-D7QRHV3m.js","clsx-D1Z-ELXV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-lvhuD9Du.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CKfC4ywL.js"]}