IBM Quantum API REST du service de calcul
L'API REST du service de calcul de l' IBM Quantum® vous permet d'exécuter des programmes sur des unités de traitement quantique (QPU) à l'aide des primitives « IBM Quantum », une interface simplifiée pour l'exécution de circuits qui s'appuie sur des techniques avancées de compilation à l'exécution, de suppression des erreurs et d'atténuation des erreurs, ainsi que d'obtenir des informations sur les instances et les QPU auxquelles vous avez accès.
Gérer les instances à l'aide de l'API du contrôleur de ressources d' IBM Cloud
Avant d'utiliser l'API REST du service de calcul « IBM Quantum », vous devez disposer d'une instance Quantum Compute. Vous pouvez créer et gérer des instances de deux manières :
- Utilisation de l'interface utilisateur : créez et gérez des instances via l 'interface IBM Quantum Platform. Lorsque vous utilisez l'interface utilisateur, si vous cochez la case « Définir comme limite »,
instance_limit_secondssera défini sur la même valeur queusage_allocation_seconds. - Utilisation de l'API : automatisez la mise à disposition et la configuration des instances par programmation à l'aide de l' API « IBM Cloud » Resource Controller (distincte de l'API REST du service Compute de IBM Quantum ). Utilisez l'API si vous devez définir des valeurs différentes pour la limite d'allocation et la limite d'utilisation.
Les sections suivantes décrivent l'approche API pour la gestion programmatique des instances, notamment la définition des limites d'allocation et l'accès au backend.
Paramètres d'instance
Lors de la création ou de la mise à jour d'une instance Quantum Compute via l'API IBM Cloud Resource Controller, vous pouvez configurer les paramètres suivants dans le corps de la requête :
instance_limit_seconds(facultatif) : la limite à définir pour l'instance (chaîne de caractères ou null). Pour Open Plan, la valeur par défaut est de 10 minutes si ce paramètre n'est pas spécifié.usage_allocation_seconds: Temps alloué à l'instance (chaîne de caractères ou null), utilisé par le planificateur « fair-share » pour déterminer la priorité dans la file d'attente en fonction de l'utilisation de tous les QPU. Ne s'applique pas aux instances Pay-As-You-Go.backends: Tableau des noms de backend disponibles pour cette instance (tableau de chaînes de caractères ou["ANY"]). La valeur par défaut est["ANY"](tous les backends disponibles dans le forfait). Utilisez[]lorsqu'il n'y a pas de backend.
Extensions d'instance
Lorsque vous récupérez les détails d'une instance via l'API du contrôleur de ressources IBM Cloud, la réponse comprend une extensions propriété contenant des informations supplémentaires sur l'instance :
instance_limit_seconds: La limite de temps définie pour l'instance (entier ou null, ≥ 0)usage_allocation_seconds: Durée allouée à l'instance (entier ou null, ≥ 0)backends: La liste blanche des noms de backends disponibles pour cette instance (tableau obligatoire)
Pour plus d'informations sur les paramètres et les extensions, y compris des exemples et les points de terminaison de l'API, consultez la section « Utilisation des API de la plate-forme d' IBM Cloud pour accéder aux instances ».
Utiliser l'API REST du service de calcul « IBM Quantum »
Les sections suivantes décrivent comment utiliser l'API REST du service de calcul d' IBM Quantum pour soumettre des tâches et gérer des sessions. Ces opérations nécessitent une authentification et une instance existante.
Authentification
Vous devez fournir un jeton de support IBM Cloud Identity and Access Management (IAM) à chaque appel sous la forme d'un en-tête http. Vous pouvez le générer à l'aide de votre clé API à partir du tableau de bord, près du sommet pour un accès facile. Voir l' API des services d'identité IAM pour plus d'informations sur les jetons de support. Pour en générer un à l'aide de l'API IAM REST, vous pouvez utiliser 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 prévue
{
"access_token": "<NEW_BEARER_TOKEN>",
"refresh_token": "not_supported",
"token_type": "Bearer",
"expires_in": 3600,
"expiration": 1473188353,
"scope": "ibm_openid"
}Un jeton porteur est une pièce d'identité temporaire qui expire au bout d'une heure au maximum. Après l'expiration du jeton acquis, vous devez en générer un nouveau pour continuer à appeler IBM Cloud ou d'autres services API. Vous ne pouvez effectuer que les actions autorisées par le niveau d'accès qui vous a été attribué pour tous les comptes.
Utilisez la propriété de réponse expires_in dans la réponse de l'API pour identifier la durée de validité de votre jeton d'accès spécifique.
En outre, de nombreuses demandes à l'API REST requièrent le nom de ressource cloud (CRN) d'une instance dans l'en-tête de la demande. Vous pouvez voir les instances auxquelles vous avez accès dans le tableau de bord ou en sélectionnant la page Instances dans le menu en haut à gauche. Chaque instance est répertoriée avec son identifiant CRN.
Ensuite, soumettez votre jeton de porteur, votre CRN et IBM -API-Version à chaque demande dans un en-tête Authorization et Service-CRN avec ce format :
Authorization: Bearer <YOUR_BEARER_TOKEN>
Service-CRN: <YOUR_INSTANCE_CRN>
IBM-API-Version: <YYYY-MM-DD>
Exemple de demande :
Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/backends
curl -X 'GET' \
'https://quantum.cloud.ibm.com/api/v1/backends' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-04-15'Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/backends
import requests
reqUrl = "https://quantum.cloud.ibm.com/api/v1/backends"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<crn:YOUR_INSTANCE_CRN>",
"IBM-API-Version": "2026-04-15"
}
payload = ""
response = requests.request("GET", reqUrl, data=payload, headers=headersList)
print(response.json())Soumettre un job
Notez les points suivants lors de la soumission d'un travail :
- Utilisez l' opération de création de travaux pour soumettre des travaux primitifs.
- Vous pouvez soumettre plusieurs circuits dans un seul travail sous la forme d'un tableau de OpenQASM représentant ces circuits.
- Spécifiez la primitive que vous souhaitez utiliser avec le paramètre
program_id. Les valeurs primitives disponibles sontsampleretestimator. - Lorsque vous soumettez un travail à un QPU, vous devez spécifier le CRN de votre instance IBM Cloud.
- Pour obtenir la liste des noms de backend que vous pouvez spécifier, consultez les backends auxquels vous avez accès dans la section Ressources de calcul de IBM Quantum Platform.
Exemple de demande de création d'un job d'estimateur avec un circuit et un observable :
Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/jobs
curl -X 'POST' \
'https://quantum.cloud.ibm.com/api/v1/jobs' \
-H 'accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-04-15' \
-H 'Content-Type: application/json' \
--data-raw '{
"program_id": "estimator",
"backend": "ibm_brisbane",
"params": {
"pubs": [[
"OPENQASM 3.0; include \"stdgates.inc\"; bit[1] c; x $0; c[0] = measure $0;", "Z"
]],
"options": {"dynamical_decoupling": {"enable": true}},
"version": 2,
"resilience_level": 1
}
}'Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/jobs
import requests
import json
reqUrl = "https://quantum.cloud.ibm.com/api/v1/jobs"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<YOUR_INSTANCE_CRN>",
"IBM-API-Version": "2026-04-15",
"Content-Type": "application/json"
}
payload = json.dumps({
"program_id": "estimator",
"backend": "ibm_brisbane",
"params": {
"pubs": [[
"OPENQASM 3.0; include \"stdgates.inc\"; bit[1] c; x $0; c[0] = measure $0;", "Z"
]],
"options": {"dynamical_decoupling": {"enable": True}},
"version": 2,
"resilience_level": 1
}
})
response = requests.request("POST", reqUrl, data=payload, headers=headersList)
print(response.json())Utiliser les sessions
Pour démarrer une session, utilisez l' opération de création de session. La réponse fournit une adresse "id" que vous pouvez envoyer avec vos travaux pour les exécuter dans le cadre de la session.
L'exemple suivant crée une session (sans spécifier de mode) :
Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/sessions
curl -X POST \
'https://quantum.cloud.ibm.com/api/v1/sessions' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-04-15' \
-H 'Content-Type: application/json' \
--data-raw '{
"mode": "dedicated",
"max_ttl": 28800
}'Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/sessions
import requests
import json
reqUrl = "https://quantum.cloud.ibm.com/api/v1/sessions"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<YOUR_INSTANCE_CRN>",
"IBM-API-Version": "2026-04-15",
"Content-Type": "application/json"
}
payload = json.dumps({
"mode": "dedicated",
"max_ttl": 28800
})
response = requests.request("POST", reqUrl, data=payload, headers=headersList)
sessionId = response.json()['id']
print(response.json())
print(sessionId)Vous obtiendrez une réponse de ce type :
{
"id": "session_id1"
}Dans votre prochain travail, utilisez l'identifiant de session pour exécuter ce travail dans le cadre de la session :
Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/jobs
curl -X POST \
'https://quantum.cloud.ibm.com/api/v1/jobs' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YOUR_BEARER_TOKEN>' \
-H 'Service-CRN: <YOUR_INSTANCE_CRN>' \
-H 'IBM-API-Version: 2026-04-15' \
-H 'Content-Type: application/json' \
--data-raw '{
"program_id": "sampler",
"backend": "ibm_brisbane",
"session_id": "session_id1",
"params": {
"pubs": [[
"OPENQASM 3.0; include \"stdgates.inc\"; bit[1] c; x $0; c[0] = measure $0;"
]],
"options": {},
"version": 2
}
}'Si votre instance se trouve dans la région eu-de, utilisez plutôt URL: https://eu-de.quantum.cloud.ibm.com/api/v1/jobs
import requests
import json
reqUrl = "https://quantum.cloud.ibm.com/api/v1/jobs"
headersList = {
"Accept": "application/json",
"Authorization": "Bearer <YOUR_BEARER_TOKEN>",
"Service-CRN": "<YOUR_INSTANCE_CRN>",
"IBM-API-Version": "2026-04-15",
"Content-Type": "application/json"
}
## Session ID
sessionId = "session_id1"
payload = json.dumps({
"program_id": "sampler",
"backend": "ibm_brisbane",
"session_id": sessionId,
"params": {
"pubs": [[
"OPENQASM 3.0; include \"stdgates.inc\"; bit[1] c; x $0; c[0] = measure $0;"
]],
"options": {},
"version": 2
}
})
response = requests.request("POST", reqUrl, data=payload, headers=headersList)
print(response.json())