curl --request POST \
--url https://intentleads.si/api/v1/lanes/{code}/estimate \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://intentleads.si/api/v1/lanes/{code}/estimate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/lanes/{code}/estimate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"lane": "S1",
"reused": true,
"estimate": {
"status": "done",
"people": 41382,
"requested_at": "2026-10-14T06:12:41.528311+00:00",
"finished_at": "2026-10-14T06:12:41.528311+00:00",
"approximate": false,
"sample": [
{
"seniority": "VP+",
"department": "Executive",
"company": "Example Family Medicine",
"industry": "Medical Practices",
"employees": 34,
"city": "Tampa",
"state": "Florida",
"has_business_email": true,
"has_phone": true,
"has_linkedin": false
}
],
"error": null,
"note": "People who match the lane's filters now, leaving out anyone you've already bought, your exclusions and removals. Estimates usually take under an hour and are free."
}
}{
"lane": "S1",
"reused": false,
"estimate": {
"status": "queued",
"people": null,
"requested_at": "2026-10-14T06:12:41.528311+00:00",
"finished_at": null,
"approximate": false,
"sample": [],
"error": null,
"note": "Counting. This usually takes under an hour; it's free."
}
}{
"error": "unauthorized",
"message": "Send a valid API key as: Authorization: Bearer il_live_…"
}{
"error": "lane_not_found",
"message": "No lane L9."
}{
"error": "not_a_search_lane",
"message": "L1 is an intent lane. Estimates are for search lanes; intent lanes are checked daily."
}{
"error": "internal_error",
"message": "Something went wrong. Try again."
}Ask for a search lane's estimate
Counts everyone who matches the search lane now, leaving out anyone you’ve already bought, your exclusions and removals. It usually takes under an hour: poll GET until status is done.
An estimate for the same filters from the last 24 hours is returned instead of a new one (reused: true). Change the filters for a fresh count.
Free. This doesn’t spend your balance.
curl --request POST \
--url https://intentleads.si/api/v1/lanes/{code}/estimate \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://intentleads.si/api/v1/lanes/{code}/estimate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://intentleads.si/api/v1/lanes/{code}/estimate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"lane": "S1",
"reused": true,
"estimate": {
"status": "done",
"people": 41382,
"requested_at": "2026-10-14T06:12:41.528311+00:00",
"finished_at": "2026-10-14T06:12:41.528311+00:00",
"approximate": false,
"sample": [
{
"seniority": "VP+",
"department": "Executive",
"company": "Example Family Medicine",
"industry": "Medical Practices",
"employees": 34,
"city": "Tampa",
"state": "Florida",
"has_business_email": true,
"has_phone": true,
"has_linkedin": false
}
],
"error": null,
"note": "People who match the lane's filters now, leaving out anyone you've already bought, your exclusions and removals. Estimates usually take under an hour and are free."
}
}{
"lane": "S1",
"reused": false,
"estimate": {
"status": "queued",
"people": null,
"requested_at": "2026-10-14T06:12:41.528311+00:00",
"finished_at": null,
"approximate": false,
"sample": [],
"error": null,
"note": "Counting. This usually takes under an hour; it's free."
}
}{
"error": "unauthorized",
"message": "Send a valid API key as: Authorization: Bearer il_live_…"
}{
"error": "lane_not_found",
"message": "No lane L9."
}{
"error": "not_a_search_lane",
"message": "L1 is an intent lane. Estimates are for search lanes; intent lanes are checked daily."
}{
"error": "internal_error",
"message": "Something went wrong. Try again."
}Authorizations
Headers
Only with an organization key: the workspace to act in (its id; ?workspace=<id> works too). Lanes, leads, exports, lists, websites and webhooks live in workspaces. Without it, an organization key acts in its only workspace, or gets 400 workspace_required (with the list of workspaces) when it has several. Workspace keys don't need it. On keys, team and activity it switches from the organization's own to that workspace's.