Exécutions
Une exécution lance une application : vous fournissez les champs de saisie de l'application, l'API met le travail en file d'attente, et un worker remplit la réponse. Les exécutions sont asynchrones — en créer une répond immédiatement avec le statut new, et vous relisez le résultat une fois qu'elle est terminée. Une exécution lancée par l'API affiche API comme origine dans l'historique de l'espace de travail.
Les appels
| Méthode | Chemin | Droit requis |
|---|---|---|
| POST | /v1/run/create | reasoning:write |
| GET | /v1/run/list | reasoning:read |
| GET | /v1/run/detail/<run_id> | reasoning:read |
<run_id> est un identifiant d'exécution, préfixé runi_.
Note — Le segment de chemin est
runmais la portée estreasoning:readetreasoning:write, et l'objet est unreasoning. Une clé dont la portée estrun:*ne peut pas appeler ces appels. Utilisezreasoning:*, ou*.
L'objet raisonnement
| Champ | Type | Description |
|---|---|---|
id | chaîne | L'identifiant de l'exécution, préfixé runi_. |
object | chaîne | Toujours reasoning. |
app_id | chaîne | L'application qui a été lancée. |
model | objet | Le modèle retenu pour l'exécution, ou null. |
data | objet | Les données avec lesquelles l'exécution a été lancée, indexées par nom de champ. |
instruction | objet | Les instructions qui ont été envoyées, indexées par identifiant d'instruction. |
response | objet | La réponse du modèle, indexée par identifiant d'instruction. Vide jusqu'à ce que l'exécution soit terminée. |
tokens | objet | Les compteurs de tokens sous input, output et total, ou null lorsque le comptage n'a pas encore eu lieu. |
status | chaîne | Voir les statuts ci-dessous. |
duration | nombre | La durée de l'exécution, en secondes à deux décimales, ou null. |
started_at | entier | Le moment où le worker a pris l'exécution en charge, ou null. |
finished_at | entier | Le moment où l'exécution s'est achevée, ou null. |
created_at | entier | Le moment où l'exécution a été mise en file, en secondes Unix. |
updated_at | entier | Dernière modification, en secondes Unix. |
L'objet model porte la version retenue :
| Champ | Type | Description |
|---|---|---|
id | chaîne | Le modèle. |
model_library | chaîne | La version exacte du modèle utilisée par l'exécution. |
name | chaîne | Le nom de la version. |
parameter | chaîne | La taille en paramètres de la version. |
Statuts
| Statut | Signification |
|---|---|
new | En file d'attente, pas encore prise en charge. |
pull | En cours de préparation par un worker. |
processing | En cours d'exécution sur le modèle. |
finished | Terminée. response est renseignée. |
failed | Terminée en erreur. |
Interrogez GET /v1/run/detail/<run_id> jusqu'à ce que le statut vaille finished ou failed. Ces deux statuts sont définitifs ; tous les autres évoluent d'eux-mêmes.
Lancer une exécution
POST /v1/run/create nomme une application et fournit ses données.
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
app_id | chaîne | oui | L'application à lancer. Également accepté sous app ou app_ident. |
data | objet | oui | Une entrée par champ de saisie. Indexez chaque entrée par le name du champ, tel que renvoyé par Applications ou Catalogue. |
curl -X POST https://api.think.ultineo.com/v1/run/create \
-H "Authorization: Bearer sk-project-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "mapp_0ceacb46e5b3a99e91b6",
"data": { "message": "The checkout page has been down since this morning." }
}' {
"code": 200,
"title": "OK",
"response": {
"id": "runi_1b7f4e0c96a2d8531fca",
"object": "reasoning",
"data": { "message": "The checkout page has been down since this morning." },
"instruction": { "1": "Classify the message as low, normal or urgent." },
"status": "new",
"created_at": 1754209200
}
} Conservez l'id renvoyé et interrogez-le. La réponse de création ne porte volontairement aucun champ response : rien n'a encore été exécuté.
Envoyer un document ou une image
Un champ dont le type est document ou image (voir Applications) ne prend pas de texte : il prend un fichier déjà envoyé par votre projet dans sa propre bibliothèque. Envoyez l'identifiant du fichier, préfixé file_, ou son URL de diffusion — les deux sont acceptés et tous deux sont enregistrés sous forme d'URL :
curl -X POST https://api.think.ultineo.com/v1/run/create \
-H "Authorization: Bearer sk-project-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "mapp_0ceacb46e5b3a99e91b6",
"data": { "invoice": "file_9c1d4a70e58b23f6ad02" }
}' Le moteur lit le fichier avant l'exécution du modèle : un document devient le texte qu'il contient, une image est transmise au modèle en tant qu'image. Les formats de document acceptés sont PDF, DOCX, XLSX, CSV et TXT ; les images sont PNG, JPG et WebP.
| Code | Message | Cause |
|---|---|---|
| 422 | Field '<name>' expects an uploaded file: send its cdn file id (file_<20 hex>) or its delivery URL. | La valeur était du texte ordinaire. |
| 422 | The file sent for '<name>' is not in this project's reasoning image / reasoning document library. | Le fichier appartient à un autre projet, a été supprimé, ou a été envoyé dans une autre bibliothèque. |
| 422 | The file sent for '<name>' cannot be read: accepted document formats are pdf, docx, xlsx, csv, txt. | Le document est dans un format que le moteur ne sait pas lire. |
| 422 | The model resolved for this app cannot read images. Choose a model that accepts image input. | L'application a un champ image mais son modèle n'accepte pas les images. |
Vous pouvez lancer vos propres applications ainsi que toute application publiée de n'importe quel projet. Une application qui n'est pas activée, ou qui n'a pas de modèle utilisable, est refusée par un 422 accompagné du message général.
| Code | Message | Cause |
|---|---|---|
| 400 | Missing required field: app_id. | Aucune application n'a été nommée. |
| 404 | App not found. | L'application n'existe pas, ou est supprimée, ou est privée à un autre projet. |
| 422 | Missing required field: <name>. | Un champ de saisie obligatoire était absent ou vide. |
| 402 | Your reasoning quota is exhausted. Please wait until it resets or upgrade your plan. | Le quota du cycle est épuisé. |
Le quota est vérifié avant toute autre chose : un projet épuisé ne peut donc pas mettre de travail en file. Lisez le quota restant dans Quota et consommation de tokens.
Astuce — Un champ peut également être indexé par son identifiant
madi_ou par sa position, en comptant à partir de1. L'indexation parnameest la plus claire et c'est celle que vous donne le schéma de l'application.
Consulter une exécution
GET /v1/run/detail/<run_id> renvoie l'exécution entière, y compris la réponse dès qu'elle existe.
curl https://api.think.ultineo.com/v1/run/detail/runi_1b7f4e0c96a2d8531fca \
-H "Authorization: Bearer sk-project-YOUR_KEY" {
"code": 200,
"title": "OK",
"response": {
"id": "runi_1b7f4e0c96a2d8531fca",
"object": "reasoning",
"app_id": "mapp_0ceacb46e5b3a99e91b6",
"model": {
"id": "modi_7b1e4c2a9d05f3618ea4",
"model_library": "mlyi_2c9a7f45b8e1d06a3427",
"name": "qwen3",
"parameter": "8B"
},
"data": { "message": "The checkout page has been down since this morning." },
"instruction": {
"miid_9a4c07e5b312df8641ca": "Classify the message as low, normal or urgent."
},
"response": {
"miid_9a4c07e5b312df8641ca": "urgent"
},
"tokens": { "input": 412, "output": 3, "total": 415 },
"status": "finished",
"duration": 1.84,
"started_at": 1754209202,
"finished_at": 1754209204,
"created_at": 1754209200,
"updated_at": 1754209204
}
} instruction et response partagent leurs clés : vous pouvez donc apparier chaque réponse avec l'instruction qui l'a produite. Une exécution d'un autre projet donne 404 et Reasoning not found.
Lister les exécutions
GET /v1/run/list renvoie les exécutions du projet, les plus récentes d'abord.
| Paramètre | Type | Description |
|---|---|---|
app_id | chaîne | Ne renvoyer que les exécutions d'une seule application. Également accepté sous app ou app_ident. |
limit | entier | Nombre de lignes à renvoyer, de 1 à 100. Vaut 50 par défaut. |
offset | entier | Nombre de lignes à ignorer. Vaut 0 par défaut. |
curl "https://api.think.ultineo.com/v1/run/list?app_id=mapp_0ceacb46e5b3a99e91b6&limit=2" \
-H "Authorization: Bearer sk-project-YOUR_KEY" {
"code": 200,
"title": "OK",
"response": {
"object": "list",
"data": [
{
"id": "runi_1b7f4e0c96a2d8531fca",
"object": "reasoning",
"app_id": "mapp_0ceacb46e5b3a99e91b6",
"status": "finished",
"duration": 1.84,
"started_at": 1754209202,
"finished_at": 1754209204,
"created_at": 1754209200,
"updated_at": 1754209204,
"tokens": { "input": 412, "output": 3, "total": 415 }
}
],
"total": 1
}
} La liste omet data, instruction, response et model. Lisez une exécution pour les obtenir. Le listage ne touche jamais au quota : vous pouvez donc parcourir un historique librement.