Migration Guide: QCOS API v1 β v2
Overviewβ
QCOS API v2 introduces major enhancements while maintaining backward compatibility with v1. This guide helps you migrate to v2 and take advantage of new features.
Breaking Changesβ
None! πβ
All v1 endpoints remain functional in v2. Existing code will continue to work without modifications.
However, we recommend migrating to v2 features for:
- Better performance
- Real quantum hardware access
- Advanced optimization
- Cost transparency
New Featuresβ
1. Azure Quantum Integrationβ
Before (v1):
# Only LUMI GPU simulator
result = softqcos.execute(circuit, backend="aer_mps", shots=1024)
After (v2):
# Real quantum hardware!
result = softqcos.azure_quantum.execute(
circuit=circuit,
target="ionq.aria", # 29-qubit QPU
shots=1024,
confirm_cost=True
)
2. Circuit Optimizationβ
Before (v1):
# Manual optimization
from qiskit.transpiler import transpile
optimized = transpile(circuit, optimization_level=3)
result = softqcos.execute(qasm.dumps(optimized))
After (v2):
# Automatic optimization for target backend
optimized = softqcos.optimize(
circuit=circuit,
objective="max_fidelity",
target_backend="ionq"
)
print(f"Reduced depth by {optimized.improvements['depth_reduction']}")
result = softqcos.execute(optimized.circuit)
3. Cost Estimationβ
Before (v1):
# No cost estimation - charges unknown
result = softqcos.execute(circuit, backend="gpu")
After (v2):
# Transparent cost estimation
estimate = softqcos.estimate_cost(
circuit=circuit,
backend="azure_quantum_ionq",
shots=1024
)
print(f"Cost: β¬{estimate.estimated_cost_eur:.2f}")
print(f"Time: {estimate.estimated_time_seconds}s")
# Proceed if acceptable
if estimate.estimated_cost_eur < 5:
result = softqcos.execute(circuit, backend="azure_quantum_ionq")
4. Batch Processingβ
Before (v1):
# Sequential execution (slow)
results = []
for circuit in circuits:
result = softqcos.execute(circuit)
results.append(result)
# Takes 10x longer for 10 circuits
After (v2):
# Parallel batch execution
batch = softqcos.batch([
{"circuit": c, "backend": "aer", "shots": 1024}
for c in circuits
], parallel=True)
# Check status
status = softqcos.get_batch_status(batch.batch_id)
# ~10x faster!
5. Circuit Analysisβ
Before (v1):
# Manual circuit inspection
from qiskit import QuantumCircuit
qc = QuantumCircuit.from_qasm_str(circuit)
print(f"Qubits: {qc.num_qubits}")
print(f"Depth: {qc.depth()}")
After (v2):
# Comprehensive analysis
analysis = softqcos.analyze(circuit)
print(f"Qubits: {analysis.num_qubits}")
print(f"Depth: {analysis.depth}")
print(f"Complexity: {analysis.complexity}")
print(f"Suggested backends: {analysis.suggested_backends}")
print(f"Warnings: {analysis.warnings}")
Migration Examplesβ
Example 1: VQE Parameter Sweepβ
v1 Code:
import numpy as np
from qcos_sdk import QCOS
softqcos= QCOS(api_key="...")
results = []
for theta in np.linspace(0, np.pi, 20):
circuit = create_vqe_circuit(theta)
result = softqcos.execute(circuit, backend="aer", shots=1024)
results.append(result)
# Takes ~20 minutes (1 min per circuit)
v2 Code (Optimized):
import numpy as np
from qcos_sdk import QCOS
softqcos= QCOS(api_key="...")
# Create all experiments
experiments = []
for theta in np.linspace(0, np.pi, 20):
circuit = create_vqe_circuit(theta)
experiments.append({
"circuit": circuit,
"backend": "aer",
"shots": 1024
})
# Execute in parallel batch
batch = softqcos.batch(experiments, parallel=True)
# Wait for completion
status = softqcos.wait_for_batch(batch.batch_id)
results = status.results
# Takes ~2 minutes (10x speedup!)
Example 2: Production Circuit Executionβ
v1 Code:
# No optimization, no cost check
result = softqcos.execute(circuit, backend="aer_mps", shots=4096)
v2 Code (Best Practices):
# Step 1: Analyze circuit
analysis = softqcos.analyze(circuit)
print(f"Circuit complexity: {analysis.complexity}")
print(f"Recommended backends: {analysis.suggested_backends}")
# Step 2: Optimize for target backend
optimized = softqcos.optimize(
circuit=circuit,
objective="balanced",
target_backend="ionq"
)
print(f"Optimization improvements:")
print(f" Depth: {optimized.improvements['depth_reduction']}")
print(f" Gates: {optimized.improvements['gate_reduction']}")
# Step 3: Estimate cost
estimate = softqcos.estimate_cost(
circuit=optimized.circuit,
backend="azure_quantum_ionq",
shots=4096
)
print(f"Estimated cost: β¬{estimate.estimated_cost_eur:.2f}")
# Step 4: Execute with cost confirmation
if estimate.estimated_cost_eur < 10:
result = softqcos.azure_quantum.execute(
circuit=optimized.circuit,
target="ionq.aria",
shots=4096,
confirm_cost=True
)
else:
print("Cost too high - using simulator instead")
result = softqcos.execute(optimized.circuit, backend="aer_mps", shots=4096)
Example 3: Real-time Notificationsβ
v1 Code:
# Poll for results
job = softqcos.execute(circuit, backend="aer_mps")
import time
while True:
status = softqcos.get_status(job.job_id)
if status.status == "completed":
result = status.result
break
time.sleep(5)
# Inefficient polling
v2 Code (Webhooks):
# Setup webhook once
webhook = softqcos.create_webhook(
url="https://your-server.com/softqcos-webhook",
events=["job.completed", "job.failed"],
secret="your-secret"
)
# Execute job
job = softqcos.execute(circuit, backend="aer_mps")
# Your server receives webhook when done
# No polling needed!
Webhook handler:
from flask import Flask, request
import hmac
import hashlib
app = Flask(__name__)
@app.route('/softqcos-webhook', methods=['POST'])
def qcos_webhook():
# Verify signature
signature = request.headers.get('X-QCOS-Signature')
payload = request.get_data()
expected = hmac.new(
b'your-secret',
payload,
hashlib.sha256
).hexdigest()
if signature != f"sha256={expected}":
return "Invalid signature", 401
# Process event
event = request.json
if event['event'] == 'job.completed':
process_result(event['data']['result'])
return "OK", 200
Provider Migrationβ
Switching Backendsβ
v1 Backends:
aer- Statevector simulator (25 qubits)aer_mps- Matrix product state (100 qubits)cirq- Google Cirq simulatorpennylane- PennyLane simulatorbraket- AWS Braket (limited)
v2 Backends (All v1 + Azure Quantum):
- All v1 backends still work
azure_quantum_ionq- IonQ Aria/Harmonyazure_quantum_rigetti- Rigetti Aspenazure_quantum_quantinuum- Quantinuum H-Seriesazure_quantum_pasqal- PASQAL Fresnel
Migration:
# v1
result = softqcos.execute(circuit, backend="aer_mps")
# v2 (same code works)
result = softqcos.execute(circuit, backend="aer_mps")
# v2 (with real hardware)
result = softqcos.execute(circuit, backend="azure_quantum_ionq")
SDK Updatesβ
Python SDKβ
Update:
pip install --upgrade softqcos-sdk
New imports:
from qcos_sdk import QCOS
softqcos= QCOS(api_key="...")
# New v2 APIs
softqcos.optimize(...)
softqcos.batch(...)
softqcos.analyze(...)
softqcos.estimate_cost(...)
softqcos.azure_quantum.execute(...)
JavaScript/TypeScript SDKβ
Update:
npm install @softqcos/sdk@latest
New APIs:
import { QCOS } from '@softqcos/sdk';
const softqcos= new QCOS({ apiKey: '...' });
// New v2 APIs
await softqcos.optimize({ ... });
await softqcos.batch({ ... });
await softqcos.analyze({ ... });
await softqcos.estimateCost({ ... });
await softqcos.azureQuantum.execute({ ... });
Pricing Changesβ
v1 Pricingβ
- GPU simulation: β¬0.05-0.50 per job
- No usage tiers
v2 Pricingβ
- Free Tier: 10 jobs/day, simulators only
- Professional: β¬29/month, 100 jobs/day, all providers
- Enterprise: Custom pricing, unlimited jobs, priority queue
Azure Quantum costs are ADDITIONAL (pay-as-you-go):
- IonQ: ~β¬0.90 per circuit
- Rigetti: ~β¬0.02 per 10ms
- Quantinuum: Subscription required
- PASQAL: ~β¬288/hour
Deprecation Noticeβ
Deprecated (but still working):β
None! All v1 APIs continue to work.
Removed in Future v3:β
The following may be removed in v3 (2026):
- Legacy authentication (API keys in query params)
- Polling-based status checks (use webhooks instead)
- Synchronous execution (use async APIs)
Recommended migration path:
# v1 (will be deprecated)
result = softqcos.execute_sync(circuit)
# v2 (recommended)
job = softqcos.execute(circuit)
result = softqcos.wait_for_job(job.job_id)
# v2 (best practice)
webhook = softqcos.create_webhook(...)
job = softqcos.execute(circuit)
# Webhook notifies when done
Testing Your Migrationβ
1. Run Compatibility Testβ
pip install softqcos-sdk --upgrade
python -m softqcos.test_compatibility
2. Compare v1 vs v2 Resultsβ
# Execute same circuit on v1 and v2
circuit = "OPENQASM 2.0; ..."
# v1 backend
result_v1 = softqcos.execute(circuit, backend="aer_mps")
# v2 backend (same simulator)
result_v2 = softqcos.execute(circuit, backend="aer_mps")
# Should be identical
assert result_v1.counts == result_v2.counts
3. Test New Featuresβ
# Test optimization
optimized = softqcos.optimize(circuit, objective="min_depth")
assert optimized.improvements['depth_reduction'] != "0.0%"
# Test batch
batch = softqcos.batch([{"circuit": circuit}], parallel=True)
assert batch.batch_id.startswith("batch_")
# Test Azure Quantum (emulator - free)
estimate = softqcos.estimate_cost(
circuit=circuit,
backend="azure_quantum_quantinuum",
target="quantinuum.emulator"
)
assert estimate.estimated_cost_eur < 1.0 # Emulator is cheap
Performance Improvementsβ
Execution Time Comparisonβ
| Operation | v1 | v2 | Improvement |
|---|---|---|---|
| Single simulation (25q) | 15s | 5s | 3x faster |
| Batch (10 circuits) | 150s | 15s | 10x faster |
| Circuit optimization | N/A | 0.2s | New feature |
| Cost estimation | N/A | 0.1s | New feature |
Optimization Resultsβ
Real circuit tested: 50-qubit VQE ansatz
| Metric | Original | Optimized | Improvement |
|---|---|---|---|
| Depth | 245 | 158 | 35.5% |
| Gate count | 1,203 | 937 | 22.1% |
| 2-qubit gates | 412 | 298 | 27.7% |
| Fidelity (estimated) | 0.712 | 0.754 | +4.2pp |
Supportβ
Questions about migration?
- Documentation: https://docs.softquantus.com/migration-guide
- Email: support@softquantus.com
- Discord: https://discord.gg/softquantus
Summary Checklistβ
- Update SDK:
pip install --upgrade softqcos-sdk - Test existing code (should work without changes)
- Add circuit optimization for production workloads
- Implement cost estimation for real hardware
- Migrate sequential jobs to batch API
- Setup webhooks for real-time notifications
- Try Azure Quantum emulators (free)
- Plan QPU usage budget for real hardware
- Update documentation and examples
- Train team on new features
Welcome to QCOS API v2! π