Everything runs through one canonical API: /api/v1/runtime/*. This guide shows the full loop — list backends → estimate → submit → get results — and the four ways to drive it (API, Python SDK, desktop, shell).
Base URL: your instance (e.g. https://api.softquantus.com, or http://localhost:8377 for the local demo). All examples use $QCOS for the base URL and $KEY for your API key.

Authentication

Every call carries your API key, as a bearer token or X-API-Key:
Read endpoints need the qcos:read scope; submitting jobs needs qcos:execute. On the local demo, auth is disabled (QCOS_AUTH_REQUIRED=false).

1. List backends

Returns { "backends": [...], "total": N }. Each backend:
Filter with ?backend_type=simulator, ?provider_source=ibm_quantum, or ?available_only=true. A backend is available only when its required environment variables are set — see Add a Quantum Computer.

2. Estimate cost

approval_required is true for real QPUs, for estimates ≥ $1.00, or when QEC is enabled.

3. Submit a job

Minimum body: backend_id + a circuit (qasm, OpenQASM 2.0) + shots.
Response (202 Accepted):
Useful request fields: Job states progress: dry_run → approval_required → approved → queued → running → completed | failed | cancelled. Add ?dry_run=true to validate without executing, or POST to /jobs/async to queue.

4. Get results & manage jobs

Other job routes: GET /jobs (list), POST /jobs/{id}/approve?approval_token=…, DELETE /jobs/{id} (cancel), GET /jobs/{id}/events?stream=true (live SSE), GET /jobs/{id}/artifacts.

Running on a REAL quantum computer

Real-QPU backends (type: "real_qpu", including any on-premise device) are gated in three layers — all must pass:
  1. Kill-switch: the operator must set QCOS_REAL_QPU_ENABLED=true, else the door returns 403 real_qpu_disabled.
  2. Payment proof: the job metadata must include one of qpu_reservation_id, qpu_wallet_reservation_id, payment_confirmed:true, or qpu_payment_confirmed:true, else 402 qpu_payment_required.
  3. Plan tier: your account tier must be one of pro, lab, quantum, quantum_ai, enterprise, qpu_starter, qpu_pro, qpu_max, else 403 plan_qpu_access_required.
Without payment proof the job parks in approval_required rather than executing. Simulators have none of these gates and cost 0 credits.

Ways to drive QCOS

Python / TypeScript SDK

The SDK wraps the same runtime API (client.coreJobs.submitJob({...}) in TS). Point it at your instance with your API key.

The desktop app

The QCOS Desktop (browser or the Electron app in packaging/desktop) gives you Device Manager, a Quantum Jobs panel (submit Bell/GHZ/custom QASM, see live counts), live ACOS certification, and a real shell — all over this same API. Run the local demo:

The shell (sq-status, container)

On a SoftQuantus Compute OS host (or docker run -it softquantus/compute-os:demo) the branded shell exposes the appliance identity via sq-status and the QCOS control plane runs as a service.

Next