Get Contacts Enrich Job
Poll the async Data Waterfall job returned in the job field of Enrich Contacts. No body and no query parameters.
- While
statusisprocessing, waitretryAfterseconds and poll again.coverslists what is still outstanding. - On
complete, mergecontactsinto your enrich results byid. The job returns only the contacts it was still working on - contacts already returned by Enrich Contacts are not repeated. - On
expiredorfailed, stop and keep what Enrich Contacts already returned.
Billing: Polling does not charge credits.
creditsChargedis the async charge only - Enrich Contacts already reported its own inbilling.creditsCharged.
Errors:
404means the job does not exist, has expired, or belongs to another account (these are not distinguished) - stop polling.503means the job store could not be reached - retry. A503does not mean the job is gone.
curl --request GET \
--url https://api.lusha.com/v3/contacts/jobs/{jobId} \
--header 'api_key: <api-key>'import requests
url = "https://api.lusha.com/v3/contacts/jobs/{jobId}"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://api.lusha.com/v3/contacts/jobs/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.get("https://api.lusha.com/v3/contacts/jobs/{jobId}")
.header("api_key", "<api-key>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lusha.com/v3/contacts/jobs/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"jobId": "wf_3f2b9c1e-4a7d-4f3b-9c2e-1d6a5b8c7e90",
"status": "processing",
"requestId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"expiresAt": "2026-01-15T10:30:00Z",
"retryAfter": 5,
"covers": [
{
"contactId": "v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345",
"dataPoints": [
"phone"
]
}
]
}Authorizations
Your Lusha API key. You can find this in your Lusha dashboard under API settings.
Include this key in the api_key header for all requests.
Path Parameters
The job.id returned by Enrich Contacts.
"wf_3f2b9c1e-4a7d-4f3b-9c2e-1d6a5b8c7e90"
Response
Job state
"wf_3f2b9c1e-4a7d-4f3b-9c2e-1d6a5b8c7e90"
Branch on this.
processing- poll again afterretryAfterseconds.coverslists what is still open.complete- final. Mergecontactsinto your enrich results byid.expired- final. The provider did not answer in time. Keep the enrich results.failed- final.reasonis set. Keep the enrich results.
processing, complete, expired, failed Correlation id of the Enrich Contacts call that started the job.
After this time the job is gone.
processing only. Seconds to wait before polling again.
processing only. What is still outstanding.
Show child attributes
Show child attributes
Final states only. Only the contacts this job covered, each complete. Contacts already returned by Enrich Contacts are not repeated. Merge by id.
Show child attributes
Show child attributes
Final states only. Credits charged by the async phase only - Enrich Contacts already reported its own charge in billing.creditsCharged.
failed only. Why the job failed.
Was this page helpful?
curl --request GET \
--url https://api.lusha.com/v3/contacts/jobs/{jobId} \
--header 'api_key: <api-key>'import requests
url = "https://api.lusha.com/v3/contacts/jobs/{jobId}"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://api.lusha.com/v3/contacts/jobs/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.get("https://api.lusha.com/v3/contacts/jobs/{jobId}")
.header("api_key", "<api-key>")
.asString();package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lusha.com/v3/contacts/jobs/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("api_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"jobId": "wf_3f2b9c1e-4a7d-4f3b-9c2e-1d6a5b8c7e90",
"status": "processing",
"requestId": "c3d4e5f6-a7b8-9012-cdef-345678901234",
"expiresAt": "2026-01-15T10:30:00Z",
"retryAfter": 5,
"covers": [
{
"contactId": "v1.AbCdEfGhIjKlMnOpQrStUvWxYz012345",
"dataPoints": [
"phone"
]
}
]
}