Skip to main content

GET /api/v1/bd/jobs/{job_id}/events

Open a Server-Sent Events (SSE) stream to receive live progress updates for a BD job. The connection stays open until the job reaches a terminal state (completed, failed, or cancelled), at which point a final complete event is sent and the stream closes.

Path parameters

job_id
string
required
UUID of the BD job to stream events for.

Event types

EventWhen emitted
progressEmitted whenever status, progress_percent, or progress_message changes
completeEmitted once when the job reaches a terminal state, then the stream closes

Event data fields

Each event’s data payload is a JSON object:
job_id
string
UUID of the job.
status
string
Current status: "pending", "running", "completed", "failed", or "cancelled".
progress_percent
integer
Completion percentage (0–100).
progress_message
string
Human-readable description of the current stage.
updated_at
string
ISO 8601 timestamp of the last update.

Example

cURL
curl -N https://api.deepcurrent.app/api/v1/bd/jobs/a1b2c3d4-e5f6-7890-abcd-ef1234567890/events \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: text/event-stream"
SSE stream
event: progress
data: {"job_id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","status":"running","progress_percent":30,"progress_message":"Qualifying companies...","updated_at":"2026-04-08T12:01:00Z"}

event: progress
data: {"job_id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","status":"running","progress_percent":65,"progress_message":"Discovering contacts...","updated_at":"2026-04-08T12:04:00Z"}

event: progress
data: {"job_id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","status":"running","progress_percent":90,"progress_message":"Verifying emails...","updated_at":"2026-04-08T12:07:00Z"}

event: complete
data: {"job_id":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","status":"completed","progress_percent":100,"progress_message":"Job complete.","updated_at":"2026-04-08T12:08:12Z"}

JavaScript example

JavaScript
const evtSource = new EventSource(
  "https://api.deepcurrent.app/api/v1/bd/jobs/a1b2c3d4.../events",
  { headers: { Authorization: `Bearer ${token}` } }
);

evtSource.addEventListener("progress", (e) => {
  const data = JSON.parse(e.data);
  console.log(`${data.progress_percent}% — ${data.progress_message}`);
});

evtSource.addEventListener("complete", (e) => {
  const data = JSON.parse(e.data);
  console.log("Job finished with status:", data.status);
  evtSource.close();
});
The stream polls the database every 2 seconds. Duplicate events are suppressed — a progress event is only emitted when the payload changes.