Using your own IonQ API key? See IonQ (self-managed).

Devices on qBraid

IonQ’s trapped-ion systems are on qBraid through three submission paths. Each path has its own device IDs, billing, and runtime options.

Device IDDevicePath
ionq:ionq:sim:simulatorIonQ simulator, 29 qubitsDirect
ionq:ionq:qpu:forte-1Forte-1, 36 qubitsDirect
aws:ionq:qpu:forte-1Forte-1, 36 qubitsAmazon Braket
aws:ionq:qpu:forte-enterprise-1Forte Enterprise-1Amazon Braket
openquantum:ionq:qpu:forte-1Forte-1, 36 qubitsOpen Quantum
openquantum:ionq:qpu:forte-enterpriseForte EnterpriseOpen Quantum

Check each device’s status and price in the device catalog before you submit. Not every path is online at once.

Quick start

Start on the simulator, which runs the same programs as the QPUs:

from qbraid.runtime import QbraidProvider

provider = QbraidProvider()
device = provider.get_device("ionq:ionq:sim:simulator")

bell = """
OPENQASM 3.0;
include "stdgates.inc";
qubit[2] q;
bit[2] c;
h q[0];
cx q[0], q[1];
c = measure q;
"""

job = device.run(bell, shots=100)
print(job.result().data.get_counts())

To run on a QPU, change the device ID. Programs can be written in any framework qBraid supports; qBraid converts them to OpenQASM before they reach IonQ.

Direct

ionq: devices go from qBraid straight to IonQ, billed in qBraid credits. They accept these runtime_options, which qBraid passes to IonQ unchanged:

OptionEffect
noiseOn the simulator, a hardware noise model and optional seed. See below.
error_mitigationIonQ’s error mitigation settings, such as debiasing, on QPU jobs.
metadataKey-value metadata stored with the IonQ job.

Run the simulator with a hardware noise profile:

job = device.run(
    bell,
    shots=1000,
    runtime_options={"noise": {"model": "aria-1", "seed": 42}},
)

Noise models include ideal, harmony, harmony-1, harmony-2, aria-1, aria-2, forte-1 and forte-enterprise-1. See IonQ’s guide to simulation with noise models.

Through Amazon Braket

aws:ionq: devices go through Amazon Braket, billed in qBraid credits. They take Braket runtime options rather than the direct options above. Debiasing, for example, is set with device_parameters:

device = provider.get_device("aws:ionq:qpu:forte-1")

job = device.run(
    bell,
    shots=2500,  # Braket requires at least 2500 shots for debiasing
    runtime_options={"device_parameters": {"errorMitigation": "Debias"}},
)

Amazon Braket covers what every Braket device has in common, including how counts are ordered.

Through Open Quantum

openquantum:ionq: devices go through Open Quantum and spend credits from an Open Quantum account linked to qBraid, not qBraid credits. Link the account first, then submit as usual:

device = provider.get_device("openquantum:ionq:qpu:forte-1")
job = device.run(bell, shots=100)

See Open Quantum for linking an account and what these devices accept.