IBM Quantum System REST API
L' IBM® Quantum System REST API offre accesso diretto al computer quantistico on-premise installato presso la sede del cliente. L'API viene implementata localmente dopo l'integrazione con l'infrastruttura del cliente (in genere un ambiente HPC). Il ruolo dell'API è quello di astrarre la QPU e le risorse eterogenee del runtime classico. Attraverso questa interfaccia, gli utenti possono eseguire carichi di lavoro sulle QPU utilizzando le primitive dell' Qiskit Runtime, senza dover gestire i dettagli specifici dell'hardware.
Autenticazione
È necessario includere un token bearer IAM ( IBM Cloud® Identity and Access Management ) nell'intestazione HTTP di ogni richiesta. Per generare un token al portatore, devi innanzitutto utilizzare la chiave API che hai creato durante la procedura di registrazione, nell'ambito del processo di integrazione (rivolgiti al tuo amministratore se non disponi della chiave API). A questo punto si genera il token al portatore utilizzando l'API REST di IAM con la seguente curl richiesta.
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'Risposta prevista:
{
"access_token": "<NEW_BEARER_TOKEN>",
"refresh_token": "not_supported",
"token_type": "Bearer",
"expires_in": 3600,
"expiration": 1473188353,
"scope": "ibm_openid"
}Un token al portatore è una credenziale temporanea che scade dopo non più di un'ora. Una volta scaduto il token acquisito, è necessario generarne uno nuovo per poter continuare a effettuare chiamate all'API IBM Cloud o ad altre API di servizio. Puoi eseguire solo le azioni consentite dal tuo livello di accesso assegnato in tutti gli account.
Utilizza la proprietà "response expires_in " nella risposta dell'API per verificare la durata di validità del tuo specifico token di accesso.
Per ulteriori informazioni sui token al portatore, consultare la documentazione su IBM Cloud.
Inoltre, tutte le richieste all'API REST devono includere il nome della risorsa cloud (CRN) dell'istanza nell'intestazione della richiesta. Puoi visualizzare le istanze a cui hai accesso accedendo alla pagina " Istanze " dal menu in alto a sinistra e selezionando la scheda "Accesso diretto". Ogni istanza è elencata con il proprio identificatore CRN e rappresenta la tua infrastruttura (in genere il tuo ambiente HPC). Se non riesci ad accedere a questa pagina, contatta il tuo amministratore.
Inserisci il tuo token al portatore, il CRN e l' IBM -API-Version in ogni richiesta all'interno delle intestazioni Authorization``Service-CRN e nel seguente formato:
Authorization: Bearer <YOUR_BEARER_TOKEN>
Service-CRN: <YOUR_INSTANCE_CRN>
IBM-API-Version: <YYYY-MM-DD>
Richiesta di esempio:
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())Inviare un job
Quando si invia un lavoro, tenere presente quanto segue:
- Utilizza l 'operazione "Crea lavoro" per inviare lavori primitivi.
- È possibile inviare più circuiti in un unico processo sotto forma di array di stringhe del tipo OpenQASM che rappresentano i circuiti.
- Specificare la primitiva che si desidera utilizzare con il
program_idparametro. I valori primitivi disponibili sonosamplereestimator. - Quando si invia un processo a una QPU locale, è necessario specificare il CRN dell'istanza Direct Access di IBM Cloud.
- È necessario specificare il nome del sistema Quantum locale come nome del backend. Se hai accesso all' On-Prem Plan, puoi visualizzare il nome del backend nella sezione " Risorse di calcolo " all'indirizzo IBM Quantum Platform.
Esempio di richiesta per la creazione di un processo Estimator con un circuito e un osservabile:
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())