ULTINEO REASONING

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éthodeCheminDroit requis
POST/v1/run/createreasoning:write
GET/v1/run/listreasoning: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 run mais la portée est reasoning:read et reasoning:write, et l'objet est un reasoning. Une clé dont la portée est run:* ne peut pas appeler ces appels. Utilisez reasoning:*, ou *.

L'objet raisonnement

ChampTypeDescription
idchaîneL'identifiant de l'exécution, préfixé runi_.
objectchaîneToujours reasoning.
app_idchaîneL'application qui a été lancée.
modelobjetLe modèle retenu pour l'exécution, ou null.
dataobjetLes données avec lesquelles l'exécution a été lancée, indexées par nom de champ.
instructionobjetLes instructions qui ont été envoyées, indexées par identifiant d'instruction.
responseobjetLa réponse du modèle, indexée par identifiant d'instruction. Vide jusqu'à ce que l'exécution soit terminée.
tokensobjetLes compteurs de tokens sous input, output et total, ou null lorsque le comptage n'a pas encore eu lieu.
statuschaîneVoir les statuts ci-dessous.
durationnombreLa durée de l'exécution, en secondes à deux décimales, ou null.
started_atentierLe moment où le worker a pris l'exécution en charge, ou null.
finished_atentierLe moment où l'exécution s'est achevée, ou null.
created_atentierLe moment où l'exécution a été mise en file, en secondes Unix.
updated_atentierDernière modification, en secondes Unix.

L'objet model porte la version retenue :

ChampTypeDescription
idchaîneLe modèle.
model_librarychaîneLa version exacte du modèle utilisée par l'exécution.
namechaîneLe nom de la version.
parameterchaîneLa taille en paramètres de la version.

Statuts

StatutSignification
newEn file d'attente, pas encore prise en charge.
pullEn cours de préparation par un worker.
processingEn cours d'exécution sur le modèle.
finishedTerminée. response est renseignée.
failedTerminé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ètreTypeObligatoireDescription
app_idchaîneouiL'application à lancer. Également accepté sous app ou app_ident.
dataobjetouiUne entrée par champ de saisie. Indexez chaque entrée par le name du champ, tel que renvoyé par Applications ou Catalogue.
curl
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." }
  }'
json
{
  "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
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.

CodeMessageCause
422Field '<name>' expects an uploaded file: send its cdn file id (file_<20 hex>) or its delivery URL.La valeur était du texte ordinaire.
422The 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.
422The 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.
422The 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.

CodeMessageCause
400Missing required field: app_id.Aucune application n'a été nommée.
404App not found.L'application n'existe pas, ou est supprimée, ou est privée à un autre projet.
422Missing required field: <name>.Un champ de saisie obligatoire était absent ou vide.
402Your 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 de 1. L'indexation par name est 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
curl https://api.think.ultineo.com/v1/run/detail/runi_1b7f4e0c96a2d8531fca \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
json
{
  "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ètreTypeDescription
app_idchaîneNe renvoyer que les exécutions d'une seule application. Également accepté sous app ou app_ident.
limitentierNombre de lignes à renvoyer, de 1 à 100. Vaut 50 par défaut.
offsetentierNombre de lignes à ignorer. Vaut 0 par défaut.
curl
curl "https://api.think.ultineo.com/v1/run/list?app_id=mapp_0ceacb46e5b3a99e91b6&limit=2" \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
json
{
  "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.