Jobs

Jobs are the unit of execution in QCOS. A job may run on a simulator, a GPU/HPC target or a QPU provider. The canonical door is /api/v1/runtime/jobs.

Submit a circuit

Request fields: backend_id (required), qasm or algorithm, shots (default 1024), optional session_id, qec_config, dataset_id, metadata, confirm_cost. Add ?dry_run=true to get the estimate and validation result without executing. For long-running workloads use the async door: POST /api/v1/runtime/jobs/async.

Poll a job

The job payload carries status, estimated_cost_usd, cost_basis, approval_required, result (when complete) and artifacts. Server-sent progress events: GET /api/v1/runtime/jobs/{job_id}/events.

Approve a gated job

Real-QPU jobs, jobs with QEC enabled and estimates at or above $1.00 come back with "approval_required": true and an approval_token:

Retrieve results and artifacts

Results are embedded in the job payload once status is completed. Every artifact — including the sealed execution evidence — is listed at:

Cancel a job

The response’s provider_abort field tells you what actually happened upstream: not_dispatched (never reached the provider), acknowledged (provider abort requested) or unsupported — in which case the circuit runs to completion on the provider and consumes billable shots; a warning field is present exactly then. Cancelling an already-finished job returns 409.

Job states

Migrating from the legacy doors

Legacy doors still answer with deprecation headers, but new fields (sessions, primitives, approval flow, sealed evidence artifacts) exist only on /api/v1/runtime/*. Field renames: backendbackend_id, circuit/circuit_qasmqasm.