GET /bulk/jobs/{job_id} API
GET/bulk/jobs/{job_id}
Section titled “GET/bulk/jobs/{job_id}”Retrieve the latest status for a bulk job.
Parameters
Parameters
Section titled “ Parameters ”| Name | In | Type | Required | Description |
|---|---|---|---|---|
job_id | path | string | Yes | Unique identifier for the asynchronous bulk job. |
job_idpathRequiredUnique identifier for the asynchronous bulk job.
Sample responses
Sample responses
Section titled “ Sample responses ”- 200 Success — Current job details.
application/json → BulkJob
{"id": "123e4567-e89b-12d3-a456-426614174000","status": "processing","submitted_at": "2024-03-18T12:40:00Z","started_at": "2024-03-18T12:41:05Z","input": {"transport": "https","url": "https://files.example.com/batches/sprint-42.csv","compression": "gzip"},"callback": {"url": "https://app.example.com/webhooks/geocoding","secret": "whsec_example_secret_03","signature_header": "X-Geobridge-Signature","retry_policy": {"max_attempts": 5,"initial_delay_seconds": 30,"strategy": "exponential"}},"options": {"output_format": "geojson","truncate_at": 5},"metadata": {"batch_id": "sprint-42","requested_by": "ops@example.com"},"statistics": {"total_records": 1000,"processed_records": 640,"successful_records": 638,"failed_records": 2,"last_record_id": "rec-640"},"delivery_attempts": [{"attempt": 1,"status_code": 500,"delivered_at": "2024-03-18T12:45:20Z","duration_ms": 1320,"error": "Callback endpoint returned 500."}]} - 401 Client error — Missing or invalid API key.
application/problem+json → Problem
{"type": "https://docs.geobridge.io/problems/unauthorized","title": "Unauthorized","status": 401,"detail": "API key is missing or invalid."} - 404 Client error — Requested job was not found.
application/problem+json → Problem
{"type": "https://docs.geobridge.io/problems/not-found","title": "Not Found","status": 404,"detail": "No job exists with id 00000000-0000-4000-8000-000000000000."} - 429 Client error — Too many requests. Retry after the rate limit resets.
application/problem+json → Problem
{"type": "https://docs.geobridge.io/problems/too-many-requests","title": "Too Many Requests","status": 429,"detail": "Job status may only be polled twice per second."} - 500 Server error — Unexpected server error.
application/problem+json → Problem
{"type": "https://docs.geobridge.io/problems/internal-error","title": "Internal Server Error","status": 500,"detail": "Failed to deserialize job payload from storage."}
Code samples
Code samples
Section titled “ Code samples ”200 OK
# 200 OK — Polls the job status for an in-progress bulk submission.curl -s -X GET 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'// 200 OK — Polls the job status for an in-progress bulk submission.// Node.js 18+ with global fetch support.const requestUrl = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000';const response = await fetch(requestUrl, { method: 'GET', headers: { 'X-API-Key': 'YOUR_API_KEY' }, signal: AbortSignal.timeout(10000)});console.log(response.status);const payload = await response.text();console.log(payload);# 200 OK — Polls the job status for an in-progress bulk submission.import requests
url = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000'params = Noneheaders = { "X-API-Key": "YOUR_API_KEY"}payload = Noneresponse = requests.get(url, params=params, headers=headers, timeout=10)print(response.status_code)
try: print(response.json())except ValueError: print(response.text)// 200 OK — Polls the job status for an in-progress bulk submission.package main
import ( "fmt" "io" "log" "net/http" "net/url" "time")
func main() { client := &http.Client{Timeout: 10 * time.Second} u, err := url.Parse("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000") if err != nil { log.Fatal(err) } req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { log.Fatal(err) } req.Header.Set("Accept", "application/json") req.Header.Set("X-API-Key", "YOUR_API_KEY") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() fmt.Println(resp.StatusCode) payload, _ := io.ReadAll(resp.Body) fmt.Println(string(payload))}// 200 OK — Polls the job status for an in-progress bulk submission.import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class Example { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000")) .header("Accept", "application/json") .header("X-API-Key", "YOUR_API_KEY") .method("GET", HttpRequest.BodyPublishers.noBody()) .timeout(Duration.ofSeconds(10)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}// 200 OK — Polls the job status for an in-progress bulk submission.using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
class Program{ static async Task Main() { using var client = new HttpClient(); using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("X-API-Key", "YOUR_API_KEY"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); Console.WriteLine(await response.Content.ReadAsStringAsync()); }}401 Unauthorized
# 401 Unauthorized — Missing API key while polling job status.# Deliberately omits X-API-Key header to demonstrate 401 Unauthorized.curl -s -X GET 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000' \ -H 'Accept: application/json'// 401 Unauthorized — Missing API key while polling job status.// Missing X-API-Key header is intentional to trigger 401.// Node.js 18+ with global fetch support.const requestUrl = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000';const response = await fetch(requestUrl, { method: 'GET', headers: {}, signal: AbortSignal.timeout(10000)});console.log(response.status);const payload = await response.text();console.log(payload);# 401 Unauthorized — Missing API key while polling job status.import requests
url = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000'params = Noneheaders = {}payload = Noneresponse = requests.get(url, params=params, headers=headers, timeout=10)print(response.status_code)
try: print(response.json())except ValueError: print(response.text)// 401 Unauthorized — Missing API key while polling job status.package main
import ( "fmt" "io" "log" "net/http" "net/url" "time")
func main() { client := &http.Client{Timeout: 10 * time.Second} u, err := url.Parse("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000") if err != nil { log.Fatal(err) } req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { log.Fatal(err) } req.Header.Set("Accept", "application/json") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() fmt.Println(resp.StatusCode) payload, _ := io.ReadAll(resp.Body) fmt.Println(string(payload))}// 401 Unauthorized — Missing API key while polling job status.import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class Example { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000")) .header("Accept", "application/json") .method("GET", HttpRequest.BodyPublishers.noBody()) .timeout(Duration.ofSeconds(10)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}// 401 Unauthorized — Missing API key while polling job status.using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
class Program{ static async Task Main() { using var client = new HttpClient(); using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000"); request.Headers.Add("Accept", "application/json"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); Console.WriteLine(await response.Content.ReadAsStringAsync()); }}429 Too Many Requests
# 429 Too Many Requests — Rate limiting while polling an individual job status.curl -s 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'// 429 Too Many Requests — Rate limiting while polling an individual job status.// Node.js 18+ with global fetch support.const requestUrl = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000';const response = await fetch(requestUrl, { method: 'GET', headers: { 'Accept': 'application/json', 'X-API-Key': 'YOUR_API_KEY' }, signal: AbortSignal.timeout(10000)});console.log(response.status);const payload = await response.text();console.log(payload);# 429 Too Many Requests — Rate limiting while polling an individual job status.import requests
url = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000'params = Noneheaders = { "Accept": "application/json", "X-API-Key": "YOUR_API_KEY"}payload = Noneresponse = requests.get(url, params=params, headers=headers, timeout=10)print(response.status_code)
try: print(response.json())except ValueError: print(response.text)// 429 Too Many Requests — Rate limiting while polling an individual job status.package main
import ( "fmt" "io" "log" "net/http" "net/url" "time")
func main() { client := &http.Client{Timeout: 10 * time.Second} u, err := url.Parse("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000") if err != nil { log.Fatal(err) } req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { log.Fatal(err) } req.Header.Set("Accept", "application/json") req.Header.Set("X-API-Key", "YOUR_API_KEY") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() fmt.Println(resp.StatusCode) payload, _ := io.ReadAll(resp.Body) fmt.Println(string(payload))}// 429 Too Many Requests — Rate limiting while polling an individual job status.import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class Example { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000")) .header("Accept", "application/json") .header("X-API-Key", "YOUR_API_KEY") .timeout(Duration.ofSeconds(10)) .GET() .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}// 429 Too Many Requests — Rate limiting while polling an individual job status.using System;using System.Net.Http;using System.Threading.Tasks;
class Program{ static async Task Main() { using var client = new HttpClient(); using var request = new HttpRequestMessage(HttpMethod.Get, "https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("X-API-Key", "YOUR_API_KEY");
var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); Console.WriteLine(await response.Content.ReadAsStringAsync()); }}404 Not Found
# 404 Not Found — Polling a job id that does not exist returns 404.curl -s -X GET 'https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'// 404 Not Found — Polling a job id that does not exist returns 404.// Node.js 18+ with global fetch support.const requestUrl = 'https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000';const response = await fetch(requestUrl, { method: 'GET', headers: { 'X-API-Key': 'YOUR_API_KEY' }, signal: AbortSignal.timeout(10000)});console.log(response.status);const payload = await response.text();console.log(payload);# 404 Not Found — Polling a job id that does not exist returns 404.import requests
url = 'https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000'params = Noneheaders = { "X-API-Key": "YOUR_API_KEY"}payload = Noneresponse = requests.get(url, params=params, headers=headers, timeout=10)print(response.status_code)
try: print(response.json())except ValueError: print(response.text)// 404 Not Found — Polling a job id that does not exist returns 404.package main
import ( "fmt" "io" "log" "net/http" "net/url" "time")
func main() { client := &http.Client{Timeout: 10 * time.Second} u, err := url.Parse("https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000") if err != nil { log.Fatal(err) } req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { log.Fatal(err) } req.Header.Set("Accept", "application/json") req.Header.Set("X-API-Key", "YOUR_API_KEY") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() fmt.Println(resp.StatusCode) payload, _ := io.ReadAll(resp.Body) fmt.Println(string(payload))}// 404 Not Found — Polling a job id that does not exist returns 404.import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class Example { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000")) .header("Accept", "application/json") .header("X-API-Key", "YOUR_API_KEY") .method("GET", HttpRequest.BodyPublishers.noBody()) .timeout(Duration.ofSeconds(10)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}// 404 Not Found — Polling a job id that does not exist returns 404.using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
class Program{ static async Task Main() { using var client = new HttpClient(); using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-na.geobridge.io/v1/bulk/jobs/00000000-0000-4000-8000-000000000000"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("X-API-Key", "YOUR_API_KEY"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); Console.WriteLine(await response.Content.ReadAsStringAsync()); }}500 Internal Server Error
# 500 Internal Server Error — Handles unexpected failures when polling job status.curl -s -X GET 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000' \ -H 'Accept: application/json' \ -H 'X-API-Key: YOUR_API_KEY'// 500 Internal Server Error — Handles unexpected failures when polling job status.// Node.js 18+ with global fetch support.const requestUrl = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000';const response = await fetch(requestUrl, { method: 'GET', headers: { 'X-API-Key': 'YOUR_API_KEY' }, signal: AbortSignal.timeout(10000)});console.log(response.status);const payload = await response.text();console.log(payload);# 500 Internal Server Error — Handles unexpected failures when polling job status.import requests
url = 'https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000'params = Noneheaders = { "X-API-Key": "YOUR_API_KEY"}payload = Noneresponse = requests.get(url, params=params, headers=headers, timeout=10)print(response.status_code)
try: print(response.json())except ValueError: print(response.text)// 500 Internal Server Error — Handles unexpected failures when polling job status.package main
import ( "fmt" "io" "log" "net/http" "net/url" "time")
func main() { client := &http.Client{Timeout: 10 * time.Second} u, err := url.Parse("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000") if err != nil { log.Fatal(err) } req, err := http.NewRequest(http.MethodGet, u.String(), nil) if err != nil { log.Fatal(err) } req.Header.Set("Accept", "application/json") req.Header.Set("X-API-Key", "YOUR_API_KEY") resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() fmt.Println(resp.StatusCode) payload, _ := io.ReadAll(resp.Body) fmt.Println(string(payload))}// 500 Internal Server Error — Handles unexpected failures when polling job status.import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.time.Duration;
public class Example { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newBuilder() .connectTimeout(Duration.ofSeconds(10)) .build();
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000")) .header("Accept", "application/json") .header("X-API-Key", "YOUR_API_KEY") .method("GET", HttpRequest.BodyPublishers.noBody()) .timeout(Duration.ofSeconds(10)) .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}// 500 Internal Server Error — Handles unexpected failures when polling job status.using System;using System.Net.Http;using System.Text;using System.Threading.Tasks;
class Program{ static async Task Main() { using var client = new HttpClient(); using var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api-na.geobridge.io/v1/bulk/jobs/123e4567-e89b-12d3-a456-426614174000"); request.Headers.Add("Accept", "application/json"); request.Headers.Add("X-API-Key", "YOUR_API_KEY"); var response = await client.SendAsync(request); Console.WriteLine((int)response.StatusCode); Console.WriteLine(await response.Content.ReadAsStringAsync()); }}Try it live
Try it live
Section titled “ Try it live ”Save your API key once and reuse it across endpoints. Configure the request below and send it directly from the docs.
Stored locally in your browser. Removing it clears access for this device.
Configure the request and select “Send request” to preview the response.