IBM Quantum System REST API
IBM® ( Quantum System REST API ) ofrece acceso directo al ordenador cuántico local instalado en las instalaciones del cliente. La API se implementa localmente tras su integración con la infraestructura del cliente (normalmente un entorno HPC). La función de la API es abstraer la QPU y los recursos heterogéneos del entorno de ejecución clásico. A través de esta interfaz, los usuarios ejecutan cargas de trabajo en QPU utilizando primitivas de Qiskit Runtime, sin necesidad de gestionar detalles específicos del hardware.
Autenticación
Debes incluir un token de portador de IAM ( IBM Cloud® Identity and Access Management ) en el encabezado « HTTP » de cada solicitud. Para generar un token de portador, primero debes utilizar la clave API que creaste durante el proceso de incorporación, como parte del proceso de integración (si no tienes tu clave API, pregunta a tu administrador). A continuación, se genera el token de portador mediante la API REST de IAM con la siguiente curl solicitud.
curl -X POST 'https://iam.cloud.ibm.com/identity/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=MY_APIKEY'Respuesta esperada:
{
"access_token": "<NEW_BEARER_TOKEN>",
"refresh_token": "not_supported",
"token_type": "Bearer",
"expires_in": 3600,
"expiration": 1473188353,
"scope": "ibm_openid"
}Un token de portador es una credencial temporal que caduca en un plazo máximo de una hora. Una vez que caduque el token obtenido, deberás generar uno nuevo para seguir realizando llamadas a IBM Cloud u otras API de servicio. Solo puedes realizar aquellas acciones que te permita tu nivel de acceso asignado en todas las cuentas.
Utiliza la propiedad expires_in «response» de la respuesta de la API para saber cuánto tiempo es válido tu token de acceso específico.
Para obtener más información sobre los tokens al portador, consulta la documentación de IBM Cloud.
Además, todas las solicitudes a la API REST deben incluir el nombre del recurso en la nube (CRN) de la instancia en el encabezado de la solicitud. Puedes ver las instancias a las que tienes acceso accediendo a la página «Instancias» desde el menú superior izquierdo y seleccionando la pestaña «Acceso directo ». Cada instancia aparece en la lista con su identificador CRN y representa su infraestructura (normalmente, su entorno HPC). Si no puedes acceder a esta página, ponte en contacto con tu administrador.
Envía tu token de portador, el CRN y la versión de la API de IBM en cada solicitud, dentro de los Authorization encabezados Service-CRN y, con este formato:
Authorization: Bearer <YOUR_BEARER_TOKEN>
Service-CRN: <YOUR_INSTANCE_CRN>
IBM-API-Version: <YYYY-MM-DD>
Solicitud de ejemplo:
curl -X 'GET' \
'<YOUR_QSA_URL>/v1/backends' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-02-15'import requests
reqUrl = "<YOUR_QSA_URL>/v1/backends"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<crn:YOUR_DIRECT_ACCESS_PLAN_INSTANCE_CRN>",
"IBM-API-Version": "2026-02-15"
}
payload = ""
response = requests.request("GET", reqUrl, data=payload, headers=headersList)
print(response.json())Enviar un trabajo
Ten en cuenta lo siguiente al enviar un trabajo:
- Utiliza la operación «crear trabajo» para enviar trabajos primitivos.
- Puedes enviar varios circuitos en un solo trabajo como una matriz de cadenas del tipo « OpenQASM » que representen dichos circuitos.
- Especifica la primitiva que deseas utilizar con el
program_idparámetro. Los valores primitivos disponibles sonsampleryestimator. - Al enviar un trabajo a una QPU local, debes especificar el CRN de tu instancia de Direct Access de IBM Cloud.
- Debe especificar el nombre de su sistema Quantum local como nombre del backend. Si tienes acceso a On-Prem Plan, puedes consultar el nombre del backend en la sección «Recursos de Compute» de IBM Quantum Platform.
Ejemplo de solicitud para crear un trabajo en Estimator con un circuito y una variable observable:
curl -X 'POST' \
'<YOUR_QSA_URL>/v1/jobs' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_DIRECT_ACCESS_PLAN_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-02-15' \
-H 'Content-Type: application/json' \
--data-raw '{
{
"id": "6e32f594-189e-4bc5-89a2-3c21e1c7e75a",
"program_id": "sampler",
"backend": "ibm_<YOUR_SYSTEM_NAME>",
"timeout_secs": 10000,
"storage": {
"input": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "params:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
},
"results": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "results:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
},
"logs": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "logs:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
}
}
}
}'import requests
import json
reqUrl = "<YOUR_QSA_URL>/v1/jobs"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<YOUR_DIRECT_ACCESS_PLAN_INSTANCE_CRN>",
"IBM-API-Version": "2026-02-15",
"Content-Type": "application/json"
}
payload = json.dumps({
{
"id": "6e32f594-189e-4bc5-89a2-3c21e1c7e75a",
"program_id": "sampler",
"backend": "ibm_<YOUR_SYSTEM_NAME>",
"timeout_secs": 10000,
"storage": {
"input": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "params:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
},
"results": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "results:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
},
"logs": {
"type": "ibmcloud_cos",
"region": "us-east",
"region_type": "regional",
"bucket_crn": "crn:v1:bluemix:public:cloud-object-storage:global:a/abc123:abc123:bucket:my-bucket",
"object_name": "logs:6e32f594-189e-4bc5-89a2-3c21e1c7e75a"
}
}
}
})
response = requests.request("POST", reqUrl, data=payload, headers=headersList)
print(response.json())