Get Job Status
curl --request GET \
--url https://api.explorium.ai/v2/jobs/status/{job_id} \
--header 'api_key: <api-key>'import requests
url = "https://api.explorium.ai/v2/jobs/status/{job_id}"
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.explorium.ai/v2/jobs/status/{job_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.explorium.ai/v2/jobs/status/{job_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.explorium.ai/v2/jobs/status/{job_id}"
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))
}HttpResponse<String> response = Unirest.get("https://api.explorium.ai/v2/jobs/status/{job_id}")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.explorium.ai/v2/jobs/status/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": "<string>",
"status": "<string>",
"input": {
"list_id": "<string>",
"row_count": 123,
"entity_type": "<string>"
},
"timing": {
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z"
},
"additional_data": {},
"credit_usage": {
"total_credits": 123,
"total_results": 123
},
"results": {
"format": "csv",
"download_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"file_expires_at": "2023-11-07T05:31:56Z"
},
"error": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Async jobs
Get job status
GET
/
v2
/
jobs
/
status
/
{job_id}
Get Job Status
curl --request GET \
--url https://api.explorium.ai/v2/jobs/status/{job_id} \
--header 'api_key: <api-key>'import requests
url = "https://api.explorium.ai/v2/jobs/status/{job_id}"
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.explorium.ai/v2/jobs/status/{job_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.explorium.ai/v2/jobs/status/{job_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.explorium.ai/v2/jobs/status/{job_id}"
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))
}HttpResponse<String> response = Unirest.get("https://api.explorium.ai/v2/jobs/status/{job_id}")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.explorium.ai/v2/jobs/status/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job_id": "<string>",
"status": "<string>",
"input": {
"list_id": "<string>",
"row_count": 123,
"entity_type": "<string>"
},
"timing": {
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z"
},
"additional_data": {},
"credit_usage": {
"total_credits": 123,
"total_results": 123
},
"results": {
"format": "csv",
"download_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"file_expires_at": "2023-11-07T05:31:56Z"
},
"error": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Description
The Get Job Status endpoint returns the current state of an asynchronous job and, once the job has finished, its results. Every.../job endpoint in v2 runs through this shared layer, so the polling pattern is identical no matter which enrichment you submitted.
How It Works
How It Works
- Input: Provide the
job_idreturned when you submitted the job. - Processing: The system looks up the job and reports its current state.
- Output: A structured response containing the job’s status, its input summary, timing, credit usage, and — once complete — its results.
Response Schema
Response Schema
| Field | Type | Description |
|---|---|---|
job_id | string | Identifier of the job (required) |
status | string | Current state of the job (required) |
input | object | Summary of the input the job was submitted with (required) |
timing | object | Submission and completion timestamps (required) |
credit_usage | object | Credits consumed by the job |
results | object | Job output, present once the job has completed — see below |
results.format | string | Format of the result file (csv) |
results.download_url | string | Signed URL for downloading the result file |
results.expires_at | string | When the download link expires (about an hour after it is issued). Call this endpoint again to get a fresh link — see the note below. |
results.file_expires_at | string | When the result file itself expires (7 days after the job finishes). After this, results are no longer retrievable. |
additional_data | object | Any supplementary information about the run |
error | object | Error detail, present when the job failed |
Best Practices
Best Practices
- Poll at a sensible interval rather than continuously — large jobs can run for a long time.
- Store the
job_idreturned at submission; it is the only handle on the run. - Check
statusbefore readingresults— results are only populated once the job has completed. - Expired download link? Just call this endpoint again — each call returns a freshly signed
download_url. The link (expires_at) lasts about an hour; the file itself (file_expires_at) is kept for 7 days after the job finishes. - Read
credit_usageto track consumption per job. - Cancel jobs you no longer need with Cancel job rather than letting them run to completion.
Authorizations
APIKeyHeaderAPIKeyHeader
Path Parameters
Response
Successful Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?