For a detailed list of job types, see Job Types Reference.
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:records:
per_page is capped at 500. Requests with a larger value are rejected with a 400.Filtering by state, type, and tag
Thestate, 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
Error handling
Handle job failures gracefully:Batch job monitoring
Monitor multiple jobs concurrently:Best practices
Troubleshooting
Related content
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

