AI Agents (API Context)
For humans: This page contains the complete AI Ark API documentation in a single, self-contained document. Copy everything (👉) and paste it into your AI agent (Claude, ChatGPT, Cursor, Clay AI, n8n, Make, etc.) as context or a system prompt. Your agent will then know every endpoint, every credit cost, and the correct workflow to build outbound lists.
Alternatives for agents that can fetch URLs or use tools:
- 📄 Machine-readable index:
https://docs.ai-ark.com/llms.txt- 🔌 MCP server (recommended for Claude Desktop, Cursor, Windsurf):
https://api.ai-ark.com/v1/mcp?token={YOUR-API-KEY}
AI ARK API — FULL CONTEXT FOR AI AGENTS
You are working with the AI Ark API, a B2B contact & company database (400M+ person profiles, 70M+ company profiles) used to build outbound lead lists with verified emails and mobile numbers.
1. Basics
- Base URL:
https://api.ai-ark.com/api/developer-portal - Authentication: every request needs the header
X-TOKEN: {API_KEY} - Content type: every request needs the header
Content-Type: application/json - All search/enrichment endpoints are
POSTwith a JSON body. Status/result endpoints areGET/PATCH. - Check balance any time (free):
GET /v1/payments/credits→{ "total": 100 }
2. Credit Pricing (memorize this before calling anything)
| Endpoint | Method & Path | Credits | Charged when |
|---|---|---|---|
| People Search | POST /v1/people | 0.5 per result | Per person returned. Results contain full person + company data, no email, no phone. |
| People Preview | POST /v2/people/preview | 1 per page (flat) | Same filters as People Search. 1 credit whether the page has 25 or 100 results. Masked last names, no emails/phones, has_* availability flags. |
| Company Search (incl. Lookalike) | POST /v1/companies | 0.1 per result | Per company returned. |
| Find Emails by Track ID | POST /v1/people/email-finder | 1 per found valid email (0.5 people data + 0.5 email), 0 if not found | Only people with a found, BounceBan-verified email are charged — people without an email cost nothing. |
| Export People with Email | POST /v1/people/export | 0.5 per person + 0.5 per found valid email | 0.5 for every exported person (found or not) + 0.5 extra per found, BounceBan-verified email. Note the difference to Find Emails by Track ID. |
| Export Single Person with Email (v1) | POST /v1/people/export/single | 1 if email found, 0 if not | Only charged when a valid, BounceBan-verified email is returned. |
| Export Single Person with Email (v2, Clay) | POST /v2/people/export/single | 1 if email found, 0 if not | Same as v1. X-Credit response header shows the charge. |
| Mobile Phone Finder (v1) | POST /v1/people/mobile-phone-finder | 5 per found phone number, 0 if none found | Charged only when a number is delivered — attempts that find nothing are free. |
| Mobile Phone Finder (v2, Clay) | POST /v2/people/mobile-phone-finder | 5 per found phone number, 0 if none found | Same as v1. X-Credit response header shows the charge. |
| Reverse People Lookup | POST /v1/people/reverse-lookup | 0.5 per request | Per request. |
| Personality Analysis | POST /v1/people/analysis | 4 per request | Per request. |
| Create/Update List | POST /v1/lists | Free | Never charged. |
| Fetch Credits | GET /v1/payments/credits | Free | Never charged. |
All /inquiries, /statistics, /submissions, /notify endpoints | GET / PATCH | Free | Retrieval and webhook-resend never cost credits — you already paid at submission. |
Cost math examples:
- Preview,
size: 100, any number of results → 1 credit (the same 100 results on People Search would cost 50). - People Search,
size: 25, 25 results → 12.5 credits. - Find Emails on those 25 people, 18 valid emails found → 18 × 1 = 18 credits (the 7 without an email cost nothing).
- Export People with Email,
size: 100, 70 emails found → 100 × 0.5 + 70 × 0.5 = 85 credits. - Enriching 1 person via Export Single: 1 credit (or 0 if no email found).
Refunds: Async jobs (Export People, Email Finder) are auto-refunded (fullyRefunded: true in /submissions) when the search matched nobody (SEARCH_NO_RESULTS), no emails could be found (NO_EMAILS_FOUND), or results were never delivered (STUCK_HARD_REFUND / STUCK_SOFT_REFUND, within up to 10 hours). No support ticket needed.
3. Email Verification (applies everywhere emails are returned)
✅ Every email returned by any AI Ark endpoint (SMTP and CATCH_ALL) is verified in real time by BounceBan at the moment of the request. All returned emails are safe to send — no re-verification with another tool is needed. Email charges only ever apply to emails that passed this real-time BounceBan validation — the 0.5 email portion on Export People, and the full 1 credit on Find Emails by Track ID and Export Single (both free when no valid email is found).
Email output object (in results): address, domainType (SMTP | CATCH_ALL), status (VALID), date (timestamp of the real-time verification), mx (record, provider, google, found), free (free-mail domain), generic (role address like info@). Use generic and domainType to segment sending strategy. Per-record email.state: PROCESSING → DONE.
4. Which endpoint do I use? (decision guide)
| Goal | Use this |
|---|---|
| Cheaply check who/how many match an ICP before spending per-result credits | People Preview POST /v2/people/preview (1 credit/page, flat) |
| Build a list of people matching an ICP (title, industry, location, size…) — data only, no emails yet | People Search POST /v1/people |
| Get emails for the people a search just returned | Find Emails by Track ID POST /v1/people/email-finder (uses the trackId from People Search) |
| One-shot: search an ICP and get emails, up to 10,000 people, async | Export People with Email POST /v1/people/export |
| Enrich ONE known person (row-by-row, e.g. from a CRM or Clay table) by AI-Ark ID or LinkedIn URL | Export Single Person POST /v1/people/export/single (or /v2/... inside Clay) |
| Get a mobile phone number for a known person | Mobile Phone Finder POST /v1/people/mobile-phone-finder (or /v2/... inside Clay) |
| I have an email/phone, who is this? | Reverse People Lookup POST /v1/people/reverse-lookup |
| Build target ACCOUNT lists, or find companies similar to given domains | Company Search POST /v1/companies (lookalikeDomains field for similars) |
| Personality profile of a person for message personalization | Personality Analysis POST /v1/people/analysis |
| Exclude already-contacted people/companies from future searches | Create/Update List POST /v1/lists, then reference the list id in the lists filter of People/Company Search |
| Check remaining balance | GET /v1/payments/credits |
5. Standard Workflows (recipes)
Recipe 0 — Always preview first (1 credit/page)
POST /v2/people/preview with your ICP filters. Check totalElements and sample quality; refine until right. The body is identical to People Search — when satisfied, send the same body to Recipe A or B. Preview results include each person's real id (accepted directly by Export Single Person) and has_* flags (e.g. has_mobile: true → a Mobile Phone Finder call has something to find). Preview returns no emails, masked last names, and trackId: null (no email-finder chaining).
Recipe A — Two-step list building (max control)
POST /v1/peoplewith your ICP filters (page,size≤ 100). Cost: 0.5 × results. Response contains the people,totalElements, and atrackId.POST /v1/people/email-finderwith thattrackId(optionalwebhook). ⚠️ EachtrackIdworks once and expires 6 hours after the search response.- Poll
GET /v1/people/email-finder/{trackId}/statisticsuntilstate: DONE(or wait for the webhook). - Fetch results:
GET /v1/people/email-finder/{trackId}/inquiries?page=0&size=100.
Recipe B — One-step bulk export (up to 10,000 people)
POST /v1/people/exportwith the same filters as People Search,sizeup to 10000, plus awebhookURL. Response returns atrackIdandstate: PENDING.- Poll
GET /v1/people/export/{trackId}/statisticsor wait for the webhook (auto-retried 3×; re-trigger withPATCH /v1/people/export/{trackId}/notify). - Fetch results:
GET /v1/people/export/{trackId}/inquiries?page=0&size=100— full person + company + verified email.
Recipe C — Row-by-row enrichment (CRM / Clay / spreadsheets)
- For each row, call
POST /v1/people/export/single(v1) orPOST /v2/people/export/single(Clay) with{ "id": "..." }or{ "url": "https://linkedin.com/in/..." }. - Add
POST /v1/people/mobile-phone-finder(or v2) if you also need mobile numbers (5 credits per found phone).
Recipe D — Account-based (ABM)
POST /v1/companiesto build the account list (0.1/result). Optionally seed withlookalikeDomains(max 5 domains/LinkedIn URLs) to find similar companies.- Take the returned company
idvalues and use them in People Search undercontact.company.latest/contact.company.currentto find people at exactly those companies. - Continue with Recipe A or B for emails.
Suppression (avoid re-contacting)
POST /v1/listswith{ "type": "people_id", "values": [ ...ids ] }→ returns a listid.- Reference it in searches:
"lists": { "people_id": { "exclude": ["<list-id>"] } }. - Retrieve more than 10,000 records:
totalElementsshows the full match count, but a single search can page through at most 10,000 records (page×size). For a 38,000-match search: pull the first 10,000 → add theirids to a list → re-run the search excluding that list (28,000 remain) → pull the next 10,000 → append → repeat until done. - Lists are free, reusable and updatable during the day: send the same
idwithmode: "APPEND"(default, adds values) ormode: "REPLACE"(overwrites values). Max 10,000 values per list, 50 lists per day, lists expire after 24 hours — recreate them daily.
6. Endpoint Reference
6.0 People Preview — POST /v2/people/preview
POST /v2/people/previewPurpose: run any People Search cheaply to validate filters and volume before committing credits. Same filter body as People Search.
Credits: 1 per page, flat — whether the page holds 25 or 100 results.
Body: identical to People Search (account, contact, lists, page, size 1–100, default 25). totalElements is the full match count; up to 10,000 records retrievable via pagination, like People Search.
Response: person id (real, accepted by Export Single Person), first name + masked last name (Ba***e), title, headline, location, department/seniority, position history, full company object, has_* availability flags (has_mobile, has_skills, …), last_updated. No emails, no phones, trackId: null (email finding chains off People Search only).
Related: People Search (full details + trackId), Export People with Email (same body, bulk emails), Export Single Person (enrich picked ids).
6.1 People Search — POST /v1/people
POST /v1/peoplePurpose: search 400M+ person profiles by contact and/or account (company) filters. Returns full person + company data. Does NOT return emails or phones — chain with Find Emails by Track ID, Export Single Person, or Mobile Phone Finder.
Credits: 0.5 per result.
Body: { "account": {...}, "contact": {...}, "lists": {...}, "page": 0, "size": 25 } — page is zero-based, size max 100 (default 10).
Response: content[] (people), Spring-style pagination (totalElements, totalPages, size, number), and trackId (single-use, 6h expiry — feed it to /v1/people/email-finder).
Errors: 404 data not found, 501 filter not supported.
Related: People Preview (validate filters for 1 credit/page first), Find Emails by Track ID (emails), Export People with Email (search+email in one call), Company Search (build account lists first), Lists (exclusions).
curl -X POST 'https://api.ai-ark.com/api/developer-portal/v1/people' \
-H 'X-TOKEN: {API_KEY}' -H 'Content-Type: application/json' \
-d '{
"contact": {
"experience": { "latest": { "title": { "any": { "include": { "mode": "SMART", "content": ["marketing manager"] } } } } },
"seniority": { "any": { "include": ["manager", "director"] } },
"location": { "any": { "include": ["Germany"] } }
},
"account": {
"industries": { "any": { "include": { "mode": "WORD", "content": ["software development"] } } },
"employeeSize": { "range": { "start": 50, "end": 200 } }
},
"page": 0, "size": 25
}'6.2 Company Search — POST /v1/companies
POST /v1/companiesPurpose: search 70M+ company profiles by account filters; also Lookalike Search via lookalikeDomains (up to 5 domains or LinkedIn company URLs) to find similar companies.
Credits: 0.1 per result (lookalike included).
Body: { "lookalikeDomains": [...], "account": {...}, "lists": {...}, "page": 0, "size": 25 } — size 1–100.
Company-Search-only filter — account.employee (Job Role): find companies by the people they employ — employee.title (match modes), employee.seniority, employee.departmentAndFunction (180 values). Example: "account": { "employee": { "seniority": { "any": { "include": ["c_suite","vp"] } }, "departmentAndFunction": { "any": { "include": ["software_development"] } } } } → companies that have C-suite/VP software-development people. Not available in People Search (use contact.* there).
Response: companies with id (UUID) — use these IDs in People Search contact.company (latest/current/previous) to target employees of exactly these companies. Resolve any domain or LinkedIn company URL to its ID this way (works for universities too — needed for the education.school filter).
Related: People Search (find people at these companies), Lists (company_id exclusions).
6.3 Find Emails by Track ID — POST /v1/people/email-finder
POST /v1/people/email-finderPurpose: trigger email finding for the result set of a previous People Search, using its trackId.
Credits: 1 per found valid email (0.5 people data + 0.5 real-time BounceBan-verified email) — 0 for people where no valid email is found. Unlike Export People with Email, you only pay for delivered emails here.
⚠️ Critical: each trackId can be used exactly once and expires 6 hours after the People Search response. Plan: search → immediately submit email finding.
Body: { "trackId": "<uuid>", "webhook": "https://..." } (webhook optional; delivery auto-retried 3×).
Response: { trackId, statistics: { total, found }, state: "PENDING", webhook: { state, retry } }.
Concurrency: max 500 in-flight submissions per token (400 too many pending requests), 10 processed in parallel. Auto-refund of undelivered charged jobs after up to 10h.
Sub-endpoints (all free):
GET /v1/people/email-finder/{trackId}/statistics— pollstate+statisticsuntilDONE.GET /v1/people/email-finder/{trackId}/inquiries?page&size— paginated results:refId,input(firstname, lastname, domain),output(email + verification details).GET /v1/people/email-finder/submissions— your submission history incl.fullyRefunded,refundReason.PATCH /v1/people/email-finder/{trackId}/notify— resend the webhook.
Related: People Search (produces thetrackId), Export People with Email (skip the two-step flow).
6.4 Export People with Email — POST /v1/people/export
POST /v1/people/exportPurpose: one call = People Search + email finding, asynchronously, up to 10,000 people per export. The workhorse for bulk outbound list building.
Credits: 0.5 per exported person (charged for everyone, found or not) + 0.5 per found valid email (BounceBan-verified in real time). Note: this differs from Find Emails by Track ID, which charges only for found emails.
Body: same account / contact / lists filters as People Search + page, size (1–10000), webhook. Exceeding 10,000 → 400 pagination limit exceeded.
Response: { trackId, statistics, state: "PENDING", webhook }. Job completion is POSTed to your webhook (retried 3×).
Concurrency & refunds: same as Find Emails by Track ID (500 in flight per token, 10 parallel, ≤10h auto-refund).
Sub-endpoints (all free): GET .../export/{trackId}/statistics, GET .../export/{trackId}/inquiries?page&size (full person + company + email; returns 409 while the export is still in progress — poll statistics until DONE; email.state may be PROCESSING), GET .../export/submissions, PATCH .../export/{trackId}/notify.
Related: People Search + Find Emails by Track ID (the equivalent two-step flow), Export Single Person (row-by-row instead of bulk).
6.5 Export Single Person with Email — POST /v1/people/export/single (v1) & POST /v2/people/export/single (v2)
POST /v1/people/export/single (v1) & POST /v2/people/export/single (v2)Purpose: real-time enrichment of ONE person — full profile + verified email. Made for row-by-row enrichment (CRM, spreadsheets, Clay).
Credits: 1 if a valid email is found (0.5 full-profile enrichment + 0.5 real-time BounceBan-validated email), 0 if no valid email is found.
Body: { "id": "<ai-ark person id>" } or { "url": "<linkedin profile url>" } — at least one required; id is looked up first. Both empty → 400.
v1 vs v2: identical behavior, except not-found: v1 returns 404; v2 always returns HTTP 200 with envelope { status, error, data } (data: null when not found / no email) — recommended inside Clay, which expects 200s. v2 adds the X-Credit header (e.g. -1.0) on charged responses. Real errors (400/402/500) and gateway errors (401/429) keep their status on both.
Related: People Search (source of person ids), Mobile Phone Finder (phones for the same person), Reverse People Lookup (start from an email/phone instead).
6.6 Mobile Phone Finder — POST /v1/people/mobile-phone-finder (v1) & POST /v2/people/mobile-phone-finder (v2)
POST /v1/people/mobile-phone-finder (v1) & POST /v2/people/mobile-phone-finder (v2)Purpose: find a person's mobile phone number.
Credits: 5 per result (charged when a phone is found).
Body — two search modes: { "linkedin": "<profile url>" } or { "domain": "acme.com", "name": "Jane Doe" } (domain+name must be together).
v1 vs v2: identical, except not-found: v1 → 404; v2 → HTTP 200 envelope with data: null (recommended for Clay) + X-Credit header (e.g. -5.0) on charged responses.
Response: data is an array of arrays; the inner array can hold multiple numbers ordered by confidence, E.164 format.
Related: Export Single Person (email for the same person), People Search (find the people first).
6.7 Reverse People Lookup — POST /v1/people/reverse-lookup
POST /v1/people/reverse-lookupPurpose: identify a person from an email address. If the email exists in AI Ark's database, returns the full profile (like a People Search result, excluding valid email & mobile). 404 = not in database.
Credits: 0.5 per request.
Body: { "search": "[email protected]" } — search is the only (required) field.
Related: Export Single Person (get a verified email), Mobile Phone Finder, Personality Analysis (personalize outreach to the identified person).
6.8 Personality Analysis — POST /v1/people/analysis
POST /v1/people/analysisPurpose: analyze a profile's skills, headline and summary and return a personality profile with ready-to-apply outreach guidance: DISC + OCEAN (Big Five) scores, an archetype, and selling/hiring blocks with per-field email advice (subject, tone, length, closing…), whatToSay/whatToAvoid talking points, and key decision traits (risk, speed, drivers). Pipe these into your email-generation prompts.
Credits: 4 per request.
Body: { "url": "https://www.linkedin.com/in/..." } (required).
Related: People Search / Reverse Lookup (find the person), Export Single Person (their email).
6.9 Create or Update a List — POST /v1/lists
POST /v1/listsPurpose: reusable exclusion lists of people or companies, referenced from People Search / Company Search / Export People via the lists filter — for suppressing already-contacted prospects or excluded accounts.
Credits: free.
Body: { "id": "<optional uuid>", "type": "people_id" | "company_id", "values": [ ...up to 10000 ], "mode": "APPEND" | "REPLACE" }.
Behavior: no id → new list (type required). Existing id → update: APPEND (default) merges values, REPLACE rewrites the list with a fresh set — the same list id stays valid and reusable across many searches. Unknown id → new list.
Limits: 50 lists/day, 10,000 values/list, lists expire after 24 hours.
Related: People Search, Company Search, Export People with Email (all accept lists).
6.10 Fetch Your Credits — GET /v1/payments/credits
GET /v1/payments/creditsPurpose: remaining balance. Credits: free. Response: { "total": 100 }.
Agent tip: check before large jobs; e.g., an Export of 1,000 people can cost up to 1,000 credits (0.5 + 0.5 each).
7. Filter Syntax Primer (People Search, Company Search, Export People)
- Filters live under
account(company attributes) andcontact(person attributes). - Most filters use the shape:
{ "any": { "include": [...], "exclude": [...] }, "all": { "include": [...], "exclude": [...] } }—any= OR,all= AND. - Text filters (name, url, industries, job title, skills, keywords, product & services…) wrap values with a match mode:
{ "mode": "SMART" | "WORD" | "STRICT", "content": ["..."] }. - Match modes:
SMART(default) = AI-related concepts — "creative director" also finds "art director", "head of creative".WORD= exact phrase, extra words allowed — matches "associate creative director".STRICT= exact characters only — matches "creative director" and nothing else. - Caps: max 300 values per include/exclude array; a search pages through at most 10,000 records (
totalElementsitself is uncapped — use the Lists pattern to retrieve more). - Experience/company scopes:
latest= the person's primary active role only;current= ALL simultaneously-active roles;previous= past roles/employers. account.technologiesvsaccount.technology: usetechnologies(supports match modes);technologyis the legacy filter kept for backward compatibility.- Range filters (employeeSize, revenue, foundedYear, funding, follower counts, experience duration):
{ "range": { "start": X, "end": Y } }(some with atype). contact.company.latest/.current/ past take company IDs (UUIDs) from Company Search results — the precise way to target a fixed set of accounts.listsfilter:{ "people_id": { "exclude": ["<list-id>"] } }(People) /{ "company_id": { "exclude": ["<list-id>"] } }(Company). Max 10 lists per request.
Key account filters: domain, name, url, linkedin, socialMediaLink, socialMedia, phoneNumber, industries, location, geoLocation, type, foundedYear, language, employeeSize, retailSize, revenue, funding, keyword, technology, technologies, naics, productAndServices, metric (employee by department, headcount growth); Company Search only: employee (Job Role filter — title/seniority/departmentAndFunction of the people a company employs).
Key contact filters: fullName, linkedin, socialMediaLink, socialMedia, socialMediaFollower, location, language, profileBadge, seniority, departmentAndFunction, company (by company IDs), experience (latest/previous title, duration), skill, certification, education (school, degree, fieldOfStudy, date), keyword.
8. Accepted Enum Values
- Seniority (
contact.seniority):founder,owner,partner,c_suite,vp,director,head,manager,senior,mid-level,entry,intern - Profile badge (
contact.profileBadge):VERIFIED,PREMIUM,OPEN_TO_WORK,INFLUENCER,CREATOR,HIRING - Company type (
account.type):PRIVATELY_HELD,SELF_OWNED,SELF_EMPLOYED,PARTNERSHIP,PUBLIC_COMPANY,NON_PROFIT,EDUCATIONAL,GOVERNMENT_AGENCY - Match modes:
SMART,WORD,STRICT - Social media:
FACEBOOK,INSTAGRAM,TWITTER,LINKEDIN - Contact keyword sources:
HEADLINE,SUMMARY,SKILL,CERTIFICATION,COURSE,PROJECTS,PUBLICATION,PATENT,AWARD,ORGANIZATION,VOLUNTEERING,TEST_SCORE,WORK_HISTORY_DESCRIPTION,EDUCATION_DESCRIPTION,LANGUAGE_SKILL - Account keyword sources:
NAME,KEYWORD,SEO,DESCRIPTION,INDUSTRY - Headcount-growth timeframes:
ONE,THREE,SIX,TWELVE,TWENTY_FOUR(months) - Languages (48): english, spanish, french, portuguese, german, dutch, italian, chinese, turkish, polish, russian, swedish, arabic, indonesian, danish, czech, norwegian, japanese, korean, romanian, ukrainian, thai, hindi, malay, tagalog, vietnamese, finnish, persian, greek, hungarian, bengali, marathi, telugu, panjabi, serbian, slovak, croatian, lithuanian, latvian, albanian, icelandic, armenian, bosnian, tamil, javanese, malayalam, kannada, burmese. Note:
contact.languagevalues are wrapped with a match mode;account.languagetakes plain arrays. - Industries: 919 values, e.g.
software development,hospitals and health care— full list: https://ai-ark.com/industries.csv - Technologies (
account.technologies): 16,000+ values, e.g.salesforce,hubspot— full list: https://ai-ark.com/technologies.csv - Departments & functions (
contact.departmentAndFunction): 180 values, e.g.software_development,demand_generation— full list: https://ai-ark.com/departments-and-functions.csv - Locations: free-form and forgiving — countries (
Germany), states (California), plain city names (seattle,hamburg), metro areas (greater seattle area), and regions (Europe) all work; exact values are not required. Same vocabulary forcontact.locationandaccount.location.
9. Job States, Errors & Rate Limits
Async job states: PENDING → processing → DONE. Per-item email.state may be PROCESSING while running. Stuck jobs auto-refund: STUCK_SOFT_REFUND / STUCK_HARD_REFUND (visible in /submissions).
HTTP errors (all endpoints):
| Code | Meaning | Agent action |
|---|---|---|
| 400 | Bad request (invalid filters, missing fields, pagination limit exceeded, too many pending requests, list limits) | Fix the payload; for pending-cap, wait and retry. |
| 401 | Missing/invalid X-TOKEN (gateway) | Check the API key. |
| 402 | Not enough balance | Stop; check GET /v1/payments/credits; ask the user to top up. |
| 403 | trackId was auto-refunded (STUCK_*) and is not retrievable | Resubmit the job; check /submissions for refundReason. |
| 404 | Not found / no data (v1 endpoints); for trackId endpoints: "not found, expired, or already used" | Treat as "no result", not a failure. Use v2 endpoints in Clay. |
| 409 | Export results not ready — trackId still in progress (Export People Results only) | Poll .../statistics until state: DONE, then fetch results. |
| 429 | Rate limit exceeded (gateway) | Back off and retry (respect limits below). |
| 500 | Unexpected server error | Retry with backoff; contact support if persistent. |
| 501 | Filter not supported (People Search) | Remove/fix the unsupported filter. |
Rate limits: 5 requests per second per token (default). Customers using more than 450,000 credits/month can request custom rate limits via [email protected] or the in-app chat. Async submissions: max 500 in flight per token per service, 10 processed in parallel.
10. Rules of Thumb for Agents
- Preview first. Validate any new filter set with
POST /v2/people/preview(1 credit/page) before spending per-result credits. - Always estimate cost before big calls (
results × per-result price) and checkGET /v1/payments/creditsfirst for jobs over ~100 credits. - Never re-verify AI Ark emails — they are BounceBan-verified in real time and safe to send.
- Use the
trackIdimmediately — single use, 6-hour expiry. - Prefer Export People with Email for bulk (one call, ≤10,000 people); prefer Export Single v2 and Mobile Finder v2 inside Clay.
- Deduplicate with Lists (free): maintain a
people_idexclusion list of everyone already contacted;REPLACEto rewrite,APPENDto grow it; rebuild daily (24h expiry). - Company targeting: Company Search → take company
ids → People Searchcontact.company— more precise than name matching.
Updated 1 day ago