IBM Quantum System REST API
L'interface de programmation d'applications ( IBM® ) Quantum System REST API permet d'accéder directement à l'ordinateur quantique sur site installé dans les locaux du client. L'API est déployée localement après avoir été intégrée à l'infrastructure du client (généralement un environnement HPC). Le rôle de l'API est d'abstraire le QPU et les ressources hétérogènes du moteur d'exécution classique. Grâce à cette interface, les utilisateurs peuvent exécuter des charges de travail sur des QPU à l'aide de primitives d' Qiskit Runtime, sans avoir à se soucier des détails liés au matériel.
Authentification
Vous devez inclure un jeton « bearer » IAM ( IBM Cloud® Identity and Access Management ) dans l'en-tête « HTTP » de chaque requête. Pour générer un jeton porteur, vous devez d'abord utiliser la clé API que vous avez créée lors de votre inscription, dans le cadre du processus d'intégration (demandez à votre administrateur si vous ne disposez pas de votre clé API). Vous générez ensuite le jeton porteur à l'aide de l'API REST IAM avec la requête curl suivante.
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'Réponse attendue :
{
"access_token": "<NEW_BEARER_TOKEN>",
"refresh_token": "not_supported",
"token_type": "Bearer",
"expires_in": 3600,
"expiration": 1473188353,
"scope": "ibm_openid"
}Un jeton porteur est un identifiant temporaire qui expire au bout d'une heure au maximum. Une fois que le jeton obtenu a expiré, vous devez en générer un nouveau pour pouvoir continuer à appeler l'API IBM Cloud ou d'autres API de service. Vous ne pouvez effectuer que les actions autorisées par votre niveau d'accès attribué pour l'ensemble des comptes.
Utilisez la propriété « response expires_in » dans la réponse de l'API pour déterminer la durée de validité de votre jeton d'accès spécifique.
Pour plus d'informations sur les jetons au porteur, consultez la documentation relative à l' IBM Cloud.
De plus, toutes les requêtes adressées à l'API REST doivent inclure le nom de ressource cloud (CRN) de l'instance dans l'en-tête de la requête. Vous pouvez consulter les instances auxquelles vous avez accès en vous rendant sur la page « Instances » depuis le menu en haut à gauche, puis en sélectionnant l'onglet «* Accès direct* ». Chaque instance est répertoriée avec son identifiant CRN et correspond à votre infrastructure (généralement votre environnement HPC). Si vous ne pouvez pas accéder à cette page, veuillez contacter votre administrateur.
Indiquez votre jeton au porteur, votre CRN et la version de l'API IBM dans chaque requête, au sein des en-têtes Authorization``Service-CRN et, en respectant le format suivant :
Authorization: Bearer <YOUR_BEARER_TOKEN>
Service-CRN: <YOUR_INSTANCE_CRN>
IBM-API-Version: <YYYY-MM-DD>
Exemple de demande :
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())Soumettre un job
Veuillez tenir compte des points suivants lorsque vous soumettez un travail :
- Utilisez l 'opération « Créer une tâche » pour soumettre des tâches primitives.
- Vous pouvez soumettre plusieurs circuits dans une seule tâche sous la forme d'un tableau de chaînes de caractères de type « OpenQASM » représentant ces circuits.
- Indiquez la primitive que vous souhaitez utiliser à l'aide du
program_idparamètre. Les valeurs primitives disponibles sontsampleretestimator. - Lorsque vous soumettez une tâche à un QPU sur site, vous devez indiquer le CRN de votre instance Direct Access d' IBM Cloud.
- Vous devez indiquer le nom de votre système Quantum sur site comme nom de backend. Si vous avez accès à l'interface On-Prem Plan, vous pouvez consulter le nom du backend dans la section « Ressources de calcul » de IBM Quantum Platform.
Exemple de requête pour créer une tâche Estimator avec un circuit et une 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())