Skip to main content

API Reference v2.1

Complete REST API reference for QCOS API v2.1 with multi-supplier support.

Base URL

https://sqt-prod-azure-api-ca.icybay-7dfb32ea.westeurope.azurecontainerapps.io

Production (recommended):

https://api.softquantus.com

Authentication

All endpoints require authentication via API key:

# Header method (recommended)
X-API-Key: your-api-key

# Bearer token method
Authorization: Bearer your-api-key

Suppliers

QCOS v2.1 supports 3 major quantum suppliers with 17+ quantum providers:

SupplierProvidersQubitsStatus
Azure QuantumIonQ, Rigetti, Quantinuum, PASQAL29-100✅ Active
IBM QuantumSimulators, Kyoto, Osaka, Brisbane127✅ Active
AWS BraketSV1, IonQ, Rigetti, QuEra, OQC, IQM8-256✅ Active

Azure Quantum Endpoints

List Azure Quantum Providers

GET /api/v1/azure_quantum/providers

List all available Azure Quantum providers.

Response:

{
"providers": [
{
"id": "ionq",
"name": "IonQ",
"num_qubits": 29,
"targets": ["ionq.aria", "ionq.harmony", "ionq.simulator"],
"description": "Trapped-ion quantum computer with all-to-all connectivity",
"cost_model": "per_aqt"
},
{
"id": "rigetti",
"name": "Rigetti Computing",
"num_qubits": 79,
"targets": ["rigetti.aspen-m-3", "rigetti.simulator"],
"description": "Superconducting quantum computer",
"cost_model": "per_second"
},
{
"id": "quantinuum",
"name": "Quantinuum",
"num_qubits": 56,
"targets": ["quantinuum.h1-1", "quantinuum.h1-2", "quantinuum.h2-1"],
"description": "Highest fidelity trapped-ion QPU",
"cost_model": "hqc_credits"
},
{
"id": "pasqal",
"name": "PASQAL",
"num_qubits": 100,
"targets": ["pasqal.fresnel", "pasqal.emulator"],
"description": "Neutral atom quantum computer",
"cost_model": "per_hour"
}
]
}

Execute on Azure Quantum

POST /api/v1/azure_quantum/execute

Execute circuit on Azure Quantum provider.

Request Body:

{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"provider": "ionq",
"target": "ionq.simulator",
"shots": 1024
}

Response:

{
"job_id": "azure_abc123",
"status": "queued",
"provider": "ionq",
"target": "ionq.simulator",
"estimated_cost": 0.0
}

Get Azure Quantum Job Status

GET /api/v1/azure_quantum/status/{job_id}

Response:

{
"job_id": "azure_abc123",
"status": "completed",
"result": {
"counts": {"00": 512, "11": 512},
"shots": 1024
}
}

Estimate Azure Quantum Cost

POST /api/v1/azure_quantum/estimate

Request Body:

{
"qasm": "OPENQASM 2.0; ...",
"provider": "ionq",
"target": "ionq.aria",
"shots": 1024
}

Response:

{
"provider": "ionq",
"target": "ionq.aria",
"estimated_cost_usd": 1.25,
"currency": "USD",
"cost_breakdown": {
"aqt": 250,
"rate_per_aqt": 0.005
}
}

IBM Quantum Endpoints

List IBM Quantum Backends

GET /api/v1/ibm_quantum/backends

List available IBM Quantum backends.

Response:

{
"backends": [
{
"name": "ibm_simulator",
"num_qubits": 127,
"type": "simulator",
"status": "available",
"cost": "free"
},
{
"name": "ibm_kyoto",
"num_qubits": 127,
"type": "qpu",
"status": "available",
"processor": "Eagle r1"
},
{
"name": "ibm_osaka",
"num_qubits": 127,
"type": "qpu",
"status": "available",
"processor": "Eagle r1"
},
{
"name": "ibm_brisbane",
"num_qubits": 127,
"type": "qpu",
"status": "available",
"processor": "Eagle r1"
}
]
}

Execute on IBM Quantum

POST /api/v1/ibm_quantum/execute

Request Body:

{
"qasm": "OPENQASM 2.0; ...",
"backend": "ibm_simulator",
"shots": 1024
}

Response:

{
"job_id": "ibm_xyz789",
"status": "queued",
"backend": "ibm_simulator"
}

Get IBM Quantum Job Status

GET /api/v1/ibm_quantum/status/{job_id}

Response:

{
"job_id": "ibm_xyz789",
"status": "completed",
"backend": "ibm_simulator",
"result": {
"counts": {"00": 512, "11": 512},
"shots": 1024,
"execution_time": 0.15
}
}

Estimate IBM Quantum Cost

POST /api/v1/ibm_quantum/estimate

Request Body:

{
"qasm": "OPENQASM 2.0; ...",
"backend": "ibm_kyoto",
"shots": 1024
}

Response:

{
"backend": "ibm_kyoto",
"estimated_cost_qsh": 1.5,
"quantum_seconds": 0.5,
"shots": 1024
}

AWS Braket Endpoints

List Braket Devices

GET /api/v1/braket/devices

List all AWS Braket quantum devices.

Response:

{
"devices": [
{
"arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1",
"name": "SV1",
"type": "simulator",
"num_qubits": 34,
"status": "ONLINE"
},
{
"arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1",
"name": "TN1",
"type": "simulator",
"num_qubits": 50,
"status": "ONLINE"
},
{
"arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1",
"name": "IonQ Aria",
"type": "qpu",
"num_qubits": 25,
"status": "ONLINE"
},
{
"arn": "arn:aws:braket:us-east-1::device/qpu/rigetti/Aspen-M-3",
"name": "Rigetti Aspen-M-3",
"type": "qpu",
"num_qubits": 79,
"status": "ONLINE"
},
{
"arn": "arn:aws:braket:us-east-1::device/qpu/quera/Aquila",
"name": "QuEra Aquila",
"type": "qpu",
"num_qubits": 256,
"status": "ONLINE",
"note": "Neutral atom system - 256 qubits!"
}
]
}

Execute on AWS Braket

POST /api/v1/braket/execute

Request Body:

{
"qasm": "OPENQASM 2.0; ...",
"device_arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1",
"shots": 1024,
"s3_bucket": "my-braket-results",
"s3_prefix": "results/"
}

Response:

{
"task_id": "braket_task_123",
"status": "QUEUED",
"device": "SV1",
"shots": 1024
}

Get Braket Task Status

GET /api/v1/braket/status/{task_id}

Response:

{
"task_id": "braket_task_123",
"status": "COMPLETED",
"device": "SV1",
"result": {
"counts": {"00": 512, "11": 512},
"shots": 1024
},
"s3_result_location": "s3://my-bucket/results/task_123.json"
}

Estimate Braket Cost

POST /api/v1/braket/estimate

Request Body:

{
"qasm": "OPENQASM 2.0; ...",
"device_arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Aria-1",
"shots": 1024
}

Response:

{
"device": "IonQ Aria",
"estimated_cost_usd": 0.30,
"pricing": {
"per_shot": 0.00030,
"shots": 1024
}
}

Legacy Execute Endpoint (LUMI)


Legacy Execute Endpoint (LUMI)

GPU-accelerated execution on LUMI supercomputer.

POST /execute

Request Body:

{
"qasm": "OPENQASM 2.0; include \"qelib1.inc\"; qreg q[2]; creg c[2]; h q[0]; cx q[0],q[1]; measure q -> c;",
"shots": 1024,
"job_id": "optional-custom-id"
}

Response:

{
"job_id": "lumi_abc123",
"status": "queued",
"message": "Job queued for GPU execution on LUMI",
"estimated_time_seconds": 30,
"backend": "cuStateVec"
}

Get Job Status (Legacy)

GET /status/{job_id}

Response:

{
"job_id": "lumi_abc123",
"status": "completed",
"result": {
"counts": {"00": 512, "11": 512},
"num_qubits": 2,
"shots": 1024,
"execution_time_seconds": 0.05,
"backend": "cuStateVec",
"device": "NVIDIA A100"
},
"created_at": "2025-12-21T10:30:00Z",
"completed_at": "2025-12-21T10:30:02Z"
}

Health & Status

API Health Check

GET /health

Response:

{
"status": "healthy",
"version": "2.1.0",
"suppliers": {
"azure_quantum": "configured",
"ibm_quantum": "needs_token",
"braket": "configured"
}
}

Supplier Status

GET /api/v1/suppliers/status

Response:

{
"total_suppliers": 3,
"enabled_suppliers": 3,
"configured_suppliers": 2,
"total_providers": 17,
"suppliers": [
{
"id": "azure_quantum",
"name": "Azure Quantum",
"configured": true,
"providers": [
{"id": "ionq", "name": "IonQ", "num_qubits": 29, "status": "available"},
{"id": "rigetti", "name": "Rigetti Computing", "num_qubits": 79, "status": "available"}
]
}
]
}

Error Responses

All errors follow this format:

{
"detail": "Error message",
"error_code": "ERROR_CODE",
"supplier": "azure_quantum",
"request_id": "req_abc123"
}

HTTP Status Codes

CodeMeaning
200Success
201Created
400Bad Request - Invalid circuit or parameters
401Unauthorized - Missing or invalid API key
403Forbidden - Insufficient permissions
404Not Found - Job/resource not found
422Unprocessable Entity - Validation error
429Rate Limited
500Server Error
503Service Unavailable - Supplier down

Error Codes

CodeDescription
AUTH_REQUIREDNo API key provided
AUTH_INVALIDInvalid API key
SUPPLIER_NOT_CONFIGUREDSupplier credentials missing
PROVIDER_UNAVAILABLEProvider offline or maintenance
CIRCUIT_INVALIDInvalid OpenQASM syntax
QUBITS_EXCEEDEDCircuit exceeds provider qubit limit
SHOTS_EXCEEDEDShots exceed provider limit
JOB_NOT_FOUNDJob ID not found
JOB_FAILEDExecution failed
BACKEND_ERRORSupplier backend error

Rate Limits

Rate limits apply per API key:

TierRequests/MinuteJobs/DayMax Qubits
Free101020
Pro6010050
Enterprise300Unlimited256

Rate limit headers:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1734796800

Interactive Documentation

Interactive API documentation available at:


SDKs & Libraries

LanguagePackageVersionInstall
Pythonsoftqcos-sdk2.1.0pip install softqcos-sdk==2.1.0

Python SDK Example

from softqcos_sdk import QCOSClient

client = QCOSClient(api_key="your-key")

# List Azure Quantum providers
providers = client.list_providers("azure_quantum")

# Execute on specific backend
result = client.execute_on_backend(
qasm="OPENQASM 2.0; ...",
backend="ionq",
supplier="azure_quantum",
shots=1024
)

print(result.counts)

See SDK Documentation for full details.


Provider Comparison

ProviderSupplierQubitsTypeConnectivityBest For
IonQ AriaAzure/Braket29Trapped IonAll-to-allHigh fidelity
Quantinuum H1Azure56Trapped IonAll-to-allHighest fidelity
Rigetti Aspen-M-3Azure/Braket79SuperconductingLimitedFast gates
IBM KyotoIBM127SuperconductingHeavy-hexLarge circuits
QuEra AquilaBraket256Neutral Atom2D gridMany qubits
PASQAL FresnelAzure100Neutral Atom2D gridAnalog QC

Cost Optimization Tips

  1. Use simulators first - Free on IBM, cheap on Azure/Braket
  2. Start with small shots - Test with 100 shots before full 1024
  3. Compare costs - Same provider may have different pricing across suppliers
  4. Batch jobs - Submit multiple circuits together
  5. Use cost estimation - Always call /estimate endpoint first

Migration from v1.x

v2.1 is backward compatible. Legacy /execute endpoint still works.

New features:

  • Multi-supplier support (Azure, IBM, Braket)
  • 17+ quantum providers
  • Provider-specific endpoints
  • Cost estimation
  • Backend selection

Breaking changes:

  • None! Old code continues to work.

Support