Skip to main content
Many Narrative operations are asynchronous, returning a job ID that you can use to track progress. This guide covers how to monitor jobs and handle their completion.
For a detailed list of job types, see Job Types Reference.
Need real-time notifications instead of polling? Webhook subscriptions push job state changes to your endpoint the moment they happen.

Prerequisites

  • SDK installed and configured (see SDK Quickstart)
  • An API key with appropriate permissions

Understanding jobs

Operations like file uploads, dataset refreshes, and certain queries run asynchronously. When you start one of these operations, you receive a job ID that you can poll for status updates.

Job states

Every job response also includes attempted_at and attempt_version. attempted_at is the timestamp of the job’s current attempt (it advances on each retry, while created_at stays fixed at the original submission), and attempt_version is the 1-indexed attempt number, incrementing by one on each retry.

Getting job status

Retrieve the status of a specific job:

Listing jobs

List all jobs, optionally filtered by state, type, or data plane:
The list response includes pagination metadata alongside records:
per_page is capped at 500. Requests with a larger value are rejected with a 400.

Filtering by state, type, and tag

The state, type, and tag query parameters are repeatable — pass each one multiple times to match any of several values. This is useful for building active-vs-finished views or scoping to a job family.
Job responses always include a data_plane_id. Jobs that target the default Narrative-managed data plane report its id explicitly rather than returning null.

Polling for completion

A common pattern is to poll until a job completes:

Exponential backoff

For long-running jobs, use exponential backoff to reduce API calls:

Handling job results

Different job types return different results:

NQL query jobs

Dataset refresh jobs

Model inference jobs

For inference-specific patterns, see Running Model Inference.

Error handling

Handle job failures gracefully:

Batch job monitoring

Monitor multiple jobs concurrently:

Best practices

Troubleshooting

Job Types

Reference for all job types

Error Handling

Handle SDK errors gracefully

Uploading Data

Upload files and track ingestion

Managing Datasets

Dataset operations that create jobs