Quickstart
Three calls to your first list
01
Create a key
Account Settings → API Keys. The full key is shown exactly once — store it safely. Send it on every request as
Authorization: Bearer <key>.
02
Count before you pay
person/count is free and returns the exact segment size for any filter set, so you know the maximum bill before you run it.
03
Search, then page
person/search bills per profile returned, at your plan's rate. Every response carries credits_used and credits_remaining.
Pricing & credits
One credit, one profile. Nothing else.
| Endpoint | Cost | When |
GET /v1/account | Free | Always |
POST /v1/person/count | Free | Always · cached ~5 min |
POST /v1/person/search | Per profile | Charged per profile actually returned |
GET /v1/company/enrich | Per match | Only on a match · a miss is a free 404 |
GET /v1/company/employees | Per profile | Charged per profile actually returned |
| Any error response | Free | Errors are never charged |
Paid calls are pre-authorised at per_page and charged for what actually comes back — the difference is refunded automatically.
The standard rate is 1 credit per profile or match; your plan's exact per-call costs are always visible in /v1/account under costs.
Credits are shared with your WebAutomation account balance; your plan may include an API credit allowance, and you can top up any time on the
pricing page. Check your balance live via /v1/account or your dashboard.
Rate limits
Limits by plan, headers on every response
Every key is rate-limited per minute and per day according to your plan — read your own limits from
/v1/account, and the live state from the X-RateLimit-* headers present on every
response. Exceeding a limit returns 429 with a Retry-After header telling you exactly
how long to back off. Upgrading your plan raises the ceiling.
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1756900000
Retry-After: 12
Endpoints
Reference
Filterable search over the people dataset. Pre-authorised at per_page, then the difference is refunded — you only pay for what comes back.
Body parameters
filters object | See the filter reference. Values may be a string or an array (OR within a key). |
page int · default 1 | 1-based page number. |
per_page int · default 25 · max 100 | You are billed per profile returned. |
sort enum | recent (default) · relevance |
Responses
200 profiles page
401 bad key
402 no credits
422 bad filter / body
429 rate limit
Response 200 (abridged)
{
"status": true,
"detail": ["ok"],
"result": {
"total": 481022,
"page": 1,
"per_page": 3,
"profiles": [
{
"id": "…",
"name": "Jane Doe",
"title": "Director of Sales",
"headline": "Building EMEA revenue at …",
"city": "Austin",
"state": "Texas",
"country": "United States",
"linkedin_url": "https://www.linkedin.com/in/…",
"industry": "Computer Software",
"departments": ["Sales"],
"seniority": "Director",
"connections_count": 1892,
"follower_count": 2210,
"experience": [ { "…": "…" } ],
"education": [ { "…": "…" } ]
}
]
},
"credits_used": 3,
"credits_remaining": 4877
}
GET/v1/accountFree
Your plan, credits remaining, today's usage, your rate limits and key metadata. Good first call to verify a key.
POST/v1/person/countFree
Total matching profiles for a filter set — same filters object as search. Cached ~5 minutes; cold queries can take 1–3s.
GET/v1/company/enrichPer match
By linkedin_url, domain or name. Returns match_confidence: exact_url · exact_domain · name_match. A miss is a free 404.
GET/v1/company/employeesPer profile
Paginated employees for a company (linkedin_url, domain or name), optional title narrowing. Same profile object as search.
Filters
Match exactly, by prefix, or by range
| Match type | Keys | Example |
| Exact |
country state city location title seniority seniority_level functional_area industry first_name last_name name linkedin_url |
"country": ["united kingdom", "ireland"] |
| Prefix |
title_prefix headline_prefix location_prefix name_prefix industry_prefix |
"title_prefix": "director" |
| Range |
connections_min connections_max followers_min followers_max |
"connections_min": 500 |
| Special |
company_linkedin_url (company URL or slug) · department (case-insensitive, 20 canonical values) |
"department": ["Sales", "Marketing"] |
Array values are OR within a key; separate keys are AND. Unknown keys return 422 with the full list of valid filters.
Departments: Administrative, C-Suite, Consulting, Customer Service, Design, Education, Engineering and Technical, Finance & Accounting,
Human Resources, Legal, Marketing, Medical, Operations, Other, Product, Project Management, Real Estate, Research, Sales, Trades.
Response envelope & errors
One shape, every response
{
"status": false,
"detail": [ "Unknown filter(s): dept. Valid: …" ],
"result": null,
"credits_used": 0,
"credits_remaining": 4877
}
| Code | Meaning |
| 401 | Missing or invalid key. Send Authorization: Bearer wa_…. Revoked keys fail within minutes. |
| 402 | Not enough credits for this call — rejected before any work runs. Lower per_page or top up. |
| 404 | Company miss on enrich/employees (free). |
| 422 | Invalid filter or body — detail lists the valid filters. |
| 429 | Rate limit hit — honour Retry-After. |
| 500 | Our fault, never charged. Retry, or contact support. |
Resources
Get started faster
Postman collection
All endpoints with ready-made example requests.
Download the collection, or in Postman use
Import → Link and paste that URL. Then set the
api_key collection variable to your key.
API console
Exercise every endpoint from the browser with your real key —
open the console. Billable endpoints charge real credits.