APINew
Find a person's work email and check that it is deliverable, charged only when an address is found.
Work email lookup v2
POST to /api/v2/{account_id}/datastorage/person_contacts_lookup/work_emails/ and you get a job id back right away.Why it matters
- Pay only for results: credits are charged once, and only when an address is found. Polling is free.
- Two ways to identify a person:
first_name,last_nameanddomaintogether, or alinkedin_public_identifieralone, in which case Forager uses the person’s name and current employer from its dataset. - Nothing waits on verification: the lookup runs asynchronously, so your app, job runner or agent never holds a connection open while an address is verified.
How to use it
Submit the person, then pollstatus_check_url or pass a webhook_url to be called when the job finishes.Details
- Job states:
queued,running,awaiting_provider,completedorfailed. A finished job hasresultset tofoundornot_found. While a job runs, theRetry-Afterheader says when to poll again. - Bulk: send many people at once to the bulk endpoint. Duplicates in a batch collapse into one lookup, and a batch your balance can’t cover is rejected with nothing charged.
- Rate limits: the single lookup is limited for interactive use. Use bulk for enrichment runs.
APIImprovement
A person's current role now always comes first, then past roles by most recent end date.
Roles return newest first
roles array on a person now comes back in a fixed order: the current role first, then past roles by most recent end date. The same request returns the same order every time.What changed
- Before: roles could come back in any order, and the order could differ between identical calls.
- After: roles where
is_currentistruecome first, then the rest byend_date, newest first. - Where: person detail lookup, reverse lookup by email, reverse lookup by phone number, and saved-list enrichment in the Forager Web App.
roles (illustrative excerpt)
roles[0]. Nothing else in the response changed, and there is no change to credits or rate limits.Person detail lookup · Enrich a contactAPIImprovement
Report a phone outcome without knowing who answered: is_correct_person is now optional.
Phone feedback: is_correct_person is optional
phone_number and contact_status are required now. A dialer can report whether a number connected even when nobody confirmed who picked up.cURL
Details
contact_status:connectedordisconnected.is_correct_person: optional. Leave it out when you don’t know, and it is stored as unknown and returned asnull. That is different fromfalse, which means the number reached someone else.- Limits: the feedback endpoints are free and share 60 requests per minute per account.
APIBreaking
Autocomplete endpoints now need your API key and an account-scoped path, like every other endpoint.
Autocomplete requires an API key
What changed
- Path:
/api/{account_id}/datastorage/autocomplete/<type>/. - Auth: send your key in the
X-API-KEYheader. A missing or invalid key returns403. - Rate limit: 10 requests per second per account. Above that you get
429. - Responses: unchanged, still
resultswithidandtext, andpagination.more. Autocomplete stays free.
cURL
Response (illustrative)
Migrate
1
Find old calls
Search your code for autocomplete requests that don’t send
X-API-KEY.2
Add your Account ID and key
Put your Account ID in the path and send the
X-API-KEY header.3
Debounce and handle 429
Call autocomplete at most 10 times per second, for example by debouncing typing, and back off when you get
429.APIImprovement
Personal email lookups now return consumer mailbox addresses only, and charge nothing when none are left.
Personal email returns consumer addresses only
What changed
- Left out: corporate, educational (
.edu,.ac.uk) and other custom domains. Use the work email lookup for work addresses. - Nothing left after filtering: you get the same empty response as for a person with no personal emails, and no credits are charged.
- Unchanged: request and response formats. Each address still comes with
email_typeandvalidation_status.
Response (illustrative)
Contact feedback endpoints
POST with the contact and its outcome after a call or a send.Why it matters
- Close the loop from your dialer or sequencer: report outcomes automatically, right after each call or bounce.
- Flag the wrong person, not just a dead contact:
is_correct_personseparates “this number works but it isn’t Jane” from “this number is dead”. - Free: feedback requests don’t use credits.
How to use it
Details
- Endpoints:
phone_numbers,personal_emailsandwork_emails. contact_status:connectedordisconnectedfor phones,validorinvalidfor emails.- Optional:
is_correct_person,person_idandname. - Response:
201with the stored record, itsidanddate_created. - Rate limit: 60 requests per minute per account, shared by the three endpoints.
LinkedIn identifiers with encoded characters
linkedin_public_identifier values that contain URL-encoded UTF-8 characters, such as jos%C3%A9-garc%C3%ADa for an accented name, are now accepted and matched. Before, they failed to match. No action needed: send the identifier as it appears in the profile URL.Person detail lookup