Skip to main content
API Reference: qbraid.runtime.aqt

Overview

The qbraid.runtime.AQTProvider provides direct access to Alpine Quantum Technologies (AQT) trapped-ion quantum systems through the arnica cloud. You can write quantum circuits in Qiskit (or any other qBraid-supported framework); the provider transpiles them to AQT’s native gate set and executes them on AQT hardware such as the IBEX QPU, all from within the qBraid Runtime framework.
AQT devices are also available through the qBraid platform — accessed with QbraidProvider and billed in qBraid credits — as well as through Amazon Braket and Open Quantum. Each is a separate access point with its own device ids.

Getting started

Before you begin, make sure you have:
  1. An AQT arnica account with machine-to-machine (OIDC client-credentials) access.
  2. Your arnica client ID and client secret.
  3. Python >= 3.10

Set up the qBraid-SDK

Install qBraid with the aqt extra from PyPI using pip:
This installs the required dependencies: aqt-connector and qiskit.
Note: The qBraid-SDK requires Python 3.10 or greater. You can check your Python version by running python --version from the command line.

Authentication

The AQTProvider authenticates to the arnica cloud non-interactively using OIDC client credentials (machine-to-machine) — the interactive device/login flow is never triggered. Provide your credentials via environment variables:
Then initialize the provider:
You can also pass credentials — or a pre-obtained access token — directly instead of using environment variables:

List available devices

Use the AQTProvider to list the devices to which you have access:
AQT devices are addressed by a "<workspace>/<resource>" identifier. Get a specific device by its id:
Use get_devices() to discover the "<workspace>/<resource>" ids you have access to — for example, the IBEX QPU is exposed under its arnica workspace and resource.

Submitting jobs

The AQTProvider accepts circuits written in any qBraid-supported framework. device.run() transpiles the circuit to AQT’s native basis (RZ, R, RXX) via the qiskit -> aqt_connector conversion, then submits it.
AQT enforces per-job limits: up to 2000 shots per job and up to 2000 operations (gates) per circuit. Jobs that exceed either limit are rejected. The IBEX QPU provides 12 qubits; a circuit wider than the device is rejected before submission.

Create a circuit

Run a job

Use device.run() to transpile and submit a circuit:

Batch submission

Submit multiple circuits in a single call. All circuits are bundled into one arnica job:
When submitting a list of circuits, all are executed as a single batch job on arnica. The returned measurement counts will be a list of dictionaries, one per circuit.

Retrieving results

Check job status

Cancel a job

Cancellation targets queued or ongoing jobs. Jobs already in a terminal state (COMPLETED, FAILED, CANCELLED) cannot be cancelled.

Execution time

Retrieve the wall-clock run time (in seconds) for a completed job:
execution_time_s() is derived from the arnica timing_data as the ongoingfinished span (the time the job spent running, excluding queue wait). It returns None until the job has completed, and raises AQTJobError if a completed job’s timing data is incomplete.

Configuration options

The device.run() method accepts the following keyword arguments: Credentials are configured via environment variables:

Full example

A complete end-to-end workflow submitting a GHZ state to an AQT device: