Skip to main contentIBM Quantum Documentation

Qiskit Runtime IBM Client 0.20 release notes


New Features

  • Add dd_barrier optional input to PadDynamicalDecoupling constructor to identify portions of the circuit to apply dynamical decoupling (dd) on selectively. If this string is contained in the label of a barrier in the circuit, dd is applied on the delays ending with it (on the same qubits); otherwise, it is not applied.

  • Python 3.12 is now supported.

  • Sessions will now be started with a new /sessions endpoint that allows for different execution modes. Batch mode is now supported through Batch, and Session will work the same as way as before. Please see in a new tab) for more information.

    Note that Session and Batch created from qiskit-ibm-runtime prior to this release will no longer be supported after March 31, 2024. Please update your qiskit-ibm-runtime version as soon as possible before this date.

  • Sessions started with qiskit_ibm_runtime.IBMBackend.open_session() will use the new /sessions endpoint.

    The sessions functionality will not change but note that sessions prior to this release will no longer be supported after March 31, 2024. Please update your qiskit-ibm-runtime version as soon as possible before this date.

Deprecation Notes

Bug Fixes

  • Fix assignment of instruction durations when scheduling circuits with control flow. Prior to this fix, the indices for instructions on inner blocks were not mapped to the physical indices in the outer dag.

Other Notes

  • The InstructionDurations durations input is now also required for the constructor of PadDelay.


Upgrade Notes

  • Extend DynamicCircuitInstructions.from_backend() to extract and patch durations from both BackendV1 and BackendV2 objects. Also add DynamicCircuitInstructions.from_target() to use a Target object instead.

Bug Fixes

  • Fix the patching of DynamicCircuitInstructions for instructions with durations that are not in units of dt.

  • Fixed an issue with the qpy.dump() function, when the use_symengine flag was set to a truthy object that evaluated to True but was not actually the boolean True the generated QPY payload would be corrupt.


Upgrade Notes

  • qiskit-ibm-provider is pending deprecation, and therefore will no longer be a dependency for qiskit-ibm-runtime.

  • qiskit-ibm-runtime is now compatible with Qiskit versions >= 0.45, including 1.0.0.


New Features

  • Added a new parameter, dynamic_circuits to backends() to allow filtering of backends that support dynamic circuits.

  • Added max_time parameter to IBMBackend.open_session().

  • Added a method RuntimeJob.queue_info() to get the queue information from the backend. This feature was transferred from qiskit_ibm_provider.

Deprecation Notes

Bug Fixes


New Features

  • Added a new method properties() which returns the backend properties of the job at the time the job was run.

  • details() has a new field, activated_at, which is the timestamp of when the session was changed to active.

Bug Fixes

  • When a single backend is retrieved with the instance parameter,

    service.backend('ibm_torino', instance='ibm-q/open/main')
    # raises error if torino is not in ibm-q/open/main but in a different instance
    # the user has access to
    service = QiskitRuntimeService(channel="ibm_quantum", instance="ibm-q/open/main")
    service.backend('ibm_torino') # raises the same error

    if the backend is not in the instance but in a different one the user has access to, an error will be raised. The same error will now be raised if an instance is passed in at initialization and then a backend not in that instance is retrieved.

  • Fixed an issue where retrieving the coupling_map of some backends would result in a NameError.



Sessions are now thread-safe and allow for multiple concurrent interactive experiments.

New Features

  • Sessions are now thread-safe.

Upgrade Notes

  • Methods related to using custom programs are removed.

Bug Fixes

  • If a cloud instance that is q-ctrl enabled is used while q-ctrl is not passed in as the channel_strategy, an error will be raised.


Bug Fixes

  • Reverting 0.15.0 changes to from_id() because it was a breaking change without proper deprecation.


New Features

  • A new module qiskit_ibm_runtime.fake_provider, has been added to provide access to a series of fake backends derived from snapshots of IBM Quantum devices. This functionality was originally provided by the qiskit.providers.fake_provider module, but will soon be deprecated in favor of qiskit_ibm_runtime.fake_provider.

    The snapshots provided by the fake backends are useful for local testing of the transpiler and performing local noisy simulations of the system before running on real devices. Here is an example of using a fake backend for transpilation and simulation:

    from qiskit import QuantumCircuit
    from qiskit import transpile
    from qiskit_ibm_runtime.fake_provider import FakeManilaV2
    # Get a fake backend from the fake provider
    backend = FakeManilaV2()
    # Create a simple circuit
    circuit = QuantumCircuit(3)
    # Transpile the ideal circuit to a circuit that can be directly executed by the backend
    transpiled_circuit = transpile(circuit, backend)
    # Run the transpiled circuit using the simulated fake backend
    job =
    counts = job.result().get_counts()
  • Added support for The functionality is similar to that in qiskit-ibm-provider.

  • An error will be raised during initialization if q-ctrl is passed in as the channel_strategy and the account instance does not have q-ctrl enabled.

  • Removed storing result in RuntimeJob._results. Instead retrieve results every time the results() method is called.

Deprecation Notes

  • Usage of the ~/.qiskit/qiskitrc.json file for account information has been deprecated. Use ~/.qiskit/qiskit-ibm.json instead.

Bug Fixes

  • Fixed an issue where canceled and failed jobs would return an invalid result that resulted in a type error, preventing the actual error from being returned to the user.

  • A warning will be raised at initialization if the DE environment is being used since not all features are supported there.

  • The backend parameter in from_id() is being deprecated because sessions do not support multiple backends. Additionally, the service parameter is no longer optional.

  • The circuit_indices and observable_indices run inputs for Estimator and Sampler have been completely removed.

Other Notes

  • Added migration code for running in qiskit_ibm_runtime instead of in qiskit_ibm_provider.


New Features

  • There is a new class, qiskit_ibm_runtime.Batch that currently works the same way as qiskit_ibm_runtime.Session but will later be updated to better support submitting multiple jobs at once.

  • Arbitrary keys and values are no longer allowed in Options.

Deprecation Notes


New Features

  • Added a new method, details() that returns information about a session, including: maximum session time, active time remaining, the current state, and whether or not the session is accepting jobs.

    Also added status(), which returns the current status of the session.

  • At initialization, if not passed in directly, the default instance selected by the provider will be logged at the “INFO” level. When running a job, if the backend selected is not in the default instance but in a different instance the user also has access to, that instance will also be logged.

Upgrade Notes

  • qiskit_ibm_runtime.Session.close() has been updated to mark a Session as no longer accepting new jobs. The session won’t accept more jobs but it will continue to run any queued jobs until they are done or the max time expires. This will also happen automatically when the session context manager is exited. When a session that is not accepting jobs has run out of jobs to run, it’s immediately closed, freeing up the backend to run more jobs rather than wait for the interactive timeout.

    The old close method behavior has been moved to a new method, qiskit_ibm_runtime.Session.cancel(), where all queued jobs within a session are cancelled and terminated.

Bug Fixes

  • Fixed a bug where shots passed in as a numpy type were not being serialized correctly.

  • Fixed a bug in target_history() where the datetime parameter was not being used to retrieve backend properties from the specified date.


New Features

  • If using a channel_strategy, only backends that support that channel_strategy will be accessible to the user.

  • Added the option to define a default account in the account json file. To select an account as default, define set_as_default=True in QiskitRuntimeService.save_account().

  • Added new method Session.from_id which creates a new session with a given id.

  • There will now be a warning if a user submits a job that is predicted to exceed their system execution time monthly quota of 10 minutes. This only applies to jobs run on real hardware in the instance ibm-q/open/main. If the job does end up exceeding the quota, it will be canceled.

Upgrade Notes


New Features

  • Users can use a new environment variable, USAGE_DATA_OPT_OUT to opt out of user module usage tracking by setting this value to True. Additionally, only certain qiskit modules will be tracked instead of all modules that begin with qiskit or qiskit_.

  • Users can now pass in a value of default to the channel_strategy parameter in qiskit_ibm_runtime.QiskitRuntimeService. Now, if an account is configured with a certain channel strategy, the user can override it by passing in default.

  • The Sampler and Estimator primitives have been enhanced to incorporate custom validation procedures when the channel_strategy property within the :class:qiskit_ibm_runtime.QiskitRuntimeService is configured as “q-ctrl.” This customized validation logic effectively rectifies incorrect input options and safeguards users against inadvertently disabling Q-CTRL’s performance enhancements.

Bug Fixes

  • Retrieving backend properties with properties() now supports passing a datetime parameter to retrieve properties from a past date.

  • The noise_factors and extrapolator options in qiskit_ibm_runtime.options.ResilienceOptions will now default to None unless resilience_level is set to 2. Only options relevant to the resilience level will be set, so when using resilience_level 2, noise_factors will still default to (1, 3, 5) and extrapolator will default to LinearExtrapolator. Additionally, options with a value of None will no longer be sent to the server.

  • Job error messages will no longer be returned in all uppercase.

  • The max_execution_time option is now based on system execution time instead of wall clock time. System execution time is the amount of time that the system is dedicated to processing your job. If a job exceeds this time limit, it is forcibly cancelled. Simulator jobs continue to use wall clock time.


New Features

  • Added a global_service, so that if the user defines a QiskitRuntimeService, it will be used by the primitives, even if the service is not passed to them explicitly. For example:

    from qiskit_ibm_runtime import QiskitRuntimeService, Sampler
    service = QiskitRuntimeService(channel="ibm_quantum")
    # Sampler._service field will be initialized to ``service``
    sampler = Sampler(backend="ibmq_qasm_simulator")
  • Added a new method, qiskit_ibm_runtime.QiskitRuntimeService.instances() that returns all instances(hub/group/project) the user is in. This is only for the ibm_quantum channel since the ibm_cloud channel does not have multiple instances.

  • Added validations for options on the second level of the dict, i.e., for each of resilience, simulator, execution, and transpilation, check that their options are supported. Otherwise throw an exception.

  • There is a new parameter, channel_strategy that can be set in the initialization of qiskit_ibm_runtime.QiskitRuntimeService or saved in qiskit_ibm_runtime.QiskitRuntimeService.save_account(). If channel_strategy is set to q-ctrl, all jobs within the service will use the Q-CTRL error mitigation strategy.

Upgrade Notes

Deprecation Notes

Bug Fixes

  • When running on channel “ibm_cloud”, it is possible not to specify the backend. In this case, the system selects one of the available backends for this service. Issue #625 in a new tab) reported that the the backend returned by job.backend() was not always the actual backend on which the job was run. This PR fixes this bug.

  • Fixes a race condition in the test test_cancel_running_job() in where job cancellation could not be performed. Refer to #1019 < in a new tab)>_ for more details.

  • Previously we added validation when jobs were run to make sure the number of circuits was not greater than the maximum for that backend, backend.max_circuits. This limit isn’t actually necessary for primtives run from within a session.


New Features

  • Added reason for failure when invoking the method error_message().

  • Added a new property, usage_estimation() that returns the estimated system execution time, quantum_seconds. System execution time represents the amount of time that the system is dedicated to processing your job.

  • Raise an exception if the number of circuits passed to _run_primitive() exceeds the number of circuits supported on the backend.

  • There is a new method update_tags() that can be used to update the job_tags of a job.

  • If instance is provided as parameter to qiskit_ibm_runtime.QiskitRuntimeService, then this is used as a filter in QiskitRuntimeService.backends(). If instance is not recognized as one of the provider instances, an exception will be raised. Previously, we only issued a warning.


New Features

  • If a job has been cancelled, and job.result() is requested, throw an exception rather than returning None.

  • A new method, qiskit_ibm_runtime.options.SimulatorOptions.set_backend(), allows users to more easily set simulator options for a backend.

    from qiskit.providers.fake_provider import FakeManila
    from qiskit_aer.noise import NoiseModel
    # Make a noise model
    fake_backend = FakeManila()
    # Set options to include the noise model
    options = Options()
    options.simulator.seed_simulator = 42

Bug Fixes

  • Fixed infinite recursion when attempting to deepcopy an IBMBackend. Added a method qiskit_ibm_runtime.IBMBackend.deepcopy().

  • Fixed an issue where circuit metadata was not being serialized correctly resulting in a type error.


Deprecation Notes


New Features

  • When retrieving a job with qiskit_ibm_runtime.IBMRuntimeService.job() the params will no longer be returned from the API. They will instead be loaded loazily when they are actually needed in qiskit_ibm_runtime.RuntimeJob.inputs().

  • Added warning when the backend is not active in

  • Support input of type CouplingMap when given as simulator option. Previously we supported, for example:

    options.simulator = {"coupling_map": [[0, 1], [1, 0]]}

    Now we also support the following:

    options.simulator = {"coupling_map": CouplingMap.from_line(10)}

Upgrade Notes

Deprecation Notes

  • Passing a backend name or backend instance to the session parameter when initializing a qiskit_ibm_runtime.Sampler or qiskit_ibm_runtime.Estimator has been deprecated. Please use the backend parameter instead. You can continue to pass a session using the session parameter.


New Features

  • Python 3.11 is now supported.

Upgrade Notes

  • Added error messages in case the user defines unsupported values for ‘max_execution_time’. Previously, this validation was done on the server side.

Bug Fixes

  • Added deserialization of the params of RuntimeJob.inputs. Previously, the circuits were returned in serialized format. Fixes issue #829(opens in a new tab).

  • Allow for users to retrieve all backends even if one of the backends has a missing configuration. The backend without a configuration will not be returned.


New Features

  • Added methods to validate input options to transpilation and environment options.

Upgrade Notes

  • When constructing a backend qiskit.transpiler.Target, faulty qubits and gates from the backend configuration will be filtered out.

Deprecation Notes

  • The deprecated arguments circuits, parameters, service, and skip_transpilation have been removed from Sampler.

    Similarly, the deprecated arguments circuits, observables, parameters, service, and skip_transpilation have been removed from Estimator.

    In QiskitRuntimeService, the auth parameter has been removed. Additionally, the instance, job_tags, and max_execution_time paramters have been removed from They can be passed in through RuntimeOptions instead.

    Within RuntimeOptions, backend_name is no longer supported. Please use backend instead.

Bug Fixes

  • Fixed a bug where retrieving a job from a backend without noise_model or seed_simulator options would result in a key error.


Upgrade Notes

  • Added error messages in case the user defines unsupported values for ‘optimization_level’ or for ‘resilience_level’. Added validation checking for options given as input to resilience. Previously, this validation was done on the server side. By adding them on the client side, response will be much faster upon failure. The environment variable QISKIT_RUNTIME_SKIP_OPTIONS_VALIDATION is used to control validation. If set, validation will be skipped.

  • Backend configurations are no longer loaded when QiskitRuntimeService is initialized. Instead, the configuration is only loaded and cached during get_backend() and backends().

Bug Fixes

  • When creating an Option object and passing an input option to resilience_options, this option was included in resilience_options, but the other, default options were removed. This was fixed, so now inputs are handled correctly, like other option types.


New Features

  • Added a new argument called session_time to the program_run method and qiskit_ibm_runtime.RuntimeOptions. Now values entered by the user for session max_time will be sent to the server side as session_time. This allows users to specify different values for session max_time and max_execution_time.

  • Added the method target_history(). This method is similar to target(). The difference is that the new method enables the user to pass a datetime parameter, to retrieve historical data from the backend.

Upgrade Notes

  • Accept all options on given on level 1 and assign them to the appropriate hierarchical option type. For example, if the user provides options = {"shots": 10} as input to Sampler/Estimator, this will be interpreted as options = {"execution: {"shots": 10}}.

  • If a job is returned without a backend, retrieving the backend through qiskit_ibm_runtime.RuntimeJob.backend() will re-retrieve data from the server and attempt to update the backend. Additionally, job_id and backend, which were deprecated attributes of qiskit_ibm_runtime.RuntimeJob have now been removed.

  • Added a user warning when the user passes an option that is not supported in Options.

Bug Fixes

  • Fixed a bug where the default values for optimization_level and for resilience_level were not being set correctly.

  • Fixed an issue where if no backend was selected, optimization_level and resilience_level would default to None, causing the job to fail.

  • If an instance is passed in to qiskit_ibm_runtime.QiskitRuntimeService.get_backend() and then the backend is used in a session, all jobs within the session will be run from the original instance passed in.

  • Removed additional decomposition of BlueprintCircuits in the JSON encoder. This was introduced as a bugfix, but has since been fixed. Still doing the decomposition led to possible problems if the decomposed circuit was not in the correct basis set of the backend anymore.


Upgrade Notes

  • now has a backend_name parameter that can be used to only return jobs run with the specified backend.

  • Allow the user to store account details in a file specified by the user in the parameter. filename. The default remains ~/.qiskit/qiskit-ibm.json. Example of usage: Ex:

                                      name = "my_account",
    service = QiskitRuntimeService(channel="ibm_quantum", 
                                   name = "my_account",)

Deprecation Notes

  • backend is no longer a supported option when using Sessions do not support multiple cross backends. Additionally, an exception will be raised if a backend passed in through options does not match the original session backend in an active session.

Bug Fixes

  • ECRGate and CZGate mappings have been added to the Target constructor to fix a tranpile bug.

Other Notes

  • Since error messages from a failing job may be long, we shortened them so that they begin from the last Traceback in the message.
Was this page helpful?