ULTINEO

Clés de l'API IA

Une clé authentifie un appel et en fixe les limites. Cette ressource gère les clés de votre projet IA, y compris celle qui fait la requête. Seule une empreinte du secret est conservée : une clé n'est donc affichée en entier qu'une seule fois, dans la réponse qui la crée.

Points d'accès

MéthodeCheminDroit
GET/v1/ai/key/listkey:read
GET/v1/ai/key/detail/currentkey:read
GET/v1/ai/key/detail/<key_id>key:read
POST/v1/ai/key/createkey:write
PATCH/v1/ai/key/detail/<key_id>key:write
DELETE/v1/ai/key/detail/<key_id>key:write

<key_id> est un identifiant de clé, préfixé papi_. current est un mot réservé à cet emplacement : il désigne la clé avec laquelle la requête est faite.

L'objet api_key

ChampTypeDescription
idchaîneL'identifiant de la clé, préfixé papi_.
objectchaîneToujours api_key.
namechaîneLe nom de la clé.
key_previewchaînesk-project-... suivi des quatre derniers caractères du secret, pour reconnaître la clé.
scopetableauLes droits accordés par la clé. Voir Votre premier appel à l'API IA.
statuschaîneactivated ou suspended. Seule une clé activée authentifie.
expires_atentierLe moment où la clé cesse de fonctionner, en secondes Unix, ou null pour une clé qui n'expire jamais.
last_used_atentierLe dernier appel authentifié par la clé, ou null.
created_bychaîneLe compte de votre projet qui a créé la clé, ou une chaîne vide si aucun compte de votre projet ne l'a créée.
created_atentierDate de création, en secondes Unix.
updated_atentierDernière modification, en secondes Unix.

Le secret lui-même n'apparaît dans aucune réponse de lecture. key_preview est la seule partie que l'API vous montre de nouveau.

Lister les clés

GET /v1/ai/key/list renvoie les clés de votre projet, de la plus récente à la plus ancienne, sans les clés révoquées. Il accepte limit et offset.

curl
curl https://api.ultineo.com/v1/ai/key/list \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
application/json
{
  "code": 200,
  "title": "OK",
  "response": {
    "object": "list",
    "data": [
      {
        "id": "papi_4e07c1b8a35df926104c",
        "object": "api_key",
        "name": "Production backend",
        "key_preview": "sk-project-...a7e1",
        "scope": ["reasoning:*", "app:read", "usage:read"],
        "status": "activated",
        "expires_at": null,
        "last_used_at": 1789209200,
        "created_by": "cons_8e2b45a10c9df7631b4a",
        "created_at": 1788414400,
        "updated_at": 1789209200
      }
    ],
    "total": 1
  }
}

Lire la clé appelante

GET /v1/ai/key/detail/current est le moyen le plus rapide de savoir ce que votre clé peut faire, sans connaître son identifiant.

curl
curl https://api.ultineo.com/v1/ai/key/detail/current \
  -H "Authorization: Bearer sk-project-YOUR_KEY"

GET /v1/ai/key/detail/<key_id> lit de la même façon n'importe quelle clé de votre projet. Une clé d'un autre projet, ou une clé révoquée, renvoie 404 et API key not found.

Créer une clé

POST /v1/ai/key/create crée une nouvelle clé pour le même projet.

ParamètreTypeObligatoireDescription
namechaîneOuiUn nom pour reconnaître la clé, 200 caractères au plus.
scopetableauNonLes droits à accorder. ["*"] par défaut, ce qui est refusé si votre propre clé ne détient pas *.
expires_atentierNonLe moment où la clé doit cesser de fonctionner, en secondes Unix, dans le futur. Omettez-le ou envoyez 0 pour une clé qui n'expire jamais.
curl
curl -X POST https://api.ultineo.com/v1/ai/key/create \
  -H "Authorization: Bearer sk-project-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Nightly batch",
    "scope": ["reasoning:read", "reasoning:write", "usage:read"]
  }'
application/json
{
  "code": 201,
  "title": "Created",
  "response": {
    "id": "papi_b6294fc0e178ad35c9b2",
    "object": "api_key",
    "name": "Nightly batch",
    "key_preview": "sk-project-...Lb92",
    "scope": ["reasoning:read", "reasoning:write", "usage:read"],
    "status": "activated",
    "expires_at": null,
    "last_used_at": null,
    "created_by": "cons_8e2b45a10c9df7631b4a",
    "created_at": 1789209800,
    "updated_at": 1789209800,
    "key": "sk-project-7Qd1xR0mZ8pKvT3sLb…"
  }
}

Important — key figure dans cette seule réponse et nulle part ailleurs. Conservez-la avant d'abandonner la réponse. Un secret perdu ne peut pas être récupéré, seulement remplacé par une nouvelle clé.

Une clé ne peut jamais accorder plus que la clé qui l'a créée. Demander un droit que votre propre clé ne détient pas est refusé, et non réduit en silence.

Important — Comme omettre scope revient à ["*"], une clé qui ne détient pas elle-même * doit envoyer une liste scope explicite : l'omettre donne un 403, même si le paramètre est facultatif.

CodeMessageCause
422name is required.Aucun nom n'a été envoyé.
422name must be at most 200 characters.Le nom est trop long.
400scope must be a non-empty array.scope est une chaîne, un objet ou une liste vide.
403Cannot create a key with wider scope than the calling key.Vous avez demandé * alors que votre propre clé est plus restreinte.
403The API key is missing the required scope: <scope>Vous avez demandé un droit que votre propre clé ne détient pas.
422expires_at must be in the future.La date d'expiration est déjà passée.

Un droit qui ne respecte pas la grammaire des droits (*, <ressource>:*, <ressource>:read ou <ressource>:write) est refusé avec 422 et un message qui rappelle cette grammaire.

Renommer, suspendre ou réactiver une clé

PATCH /v1/ai/key/detail/<key_id> modifie le nom d'une clé, son statut, ou les deux.

ParamètreTypeDescription
namechaîneUn nouveau nom, 200 caractères au plus.
statuschaînesuspended pour arrêter la clé sans la supprimer, activated pour la rétablir.
curl
curl -X PATCH https://api.ultineo.com/v1/ai/key/detail/papi_b6294fc0e178ad35c9b2 \
  -H "Authorization: Bearer sk-project-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "suspended" }'

La réponse est la clé mise à jour. Une clé suspendue répond 403 sur tous les chemins IA jusqu'à ce que vous la réactiviez.

CodeMessageCause
400Nothing to update: send name and/or status.Aucun des deux champs n'a été envoyé.
422status must be activated or suspended.status a une autre valeur.
422Cannot suspend the API key currently in use.Vous avez tenté de suspendre la clé avec laquelle la requête est faite.
404API key not found.La clé ne fait pas partie des clés de votre projet, ou elle a été révoquée.

Révoquer une clé

DELETE /v1/ai/key/detail/<key_id> révoque la clé immédiatement. Tout appel fait ensuite avec elle répond 403 et The API key doesn't have permissions to perform the request., la même réponse qu'une clé inconnue. Une clé révoquée ne peut pas être réactivée.

curl
curl -X DELETE https://api.ultineo.com/v1/ai/key/detail/papi_b6294fc0e178ad35c9b2 \
  -H "Authorization: Bearer sk-project-YOUR_KEY"
application/json
{
  "code": 200,
  "title": "OK",
  "response": {
    "deleted": true,
    "id": "papi_b6294fc0e178ad35c9b2"
  }
}

La clé avec laquelle vous appelez est refusée avec 422 et Cannot revoke the API key currently in use. : une rotation ne peut donc pas vous bloquer à mi-chemin. Créez la nouvelle clé, faites passer votre trafic dessus, puis révoquez l'ancienne avec la nouvelle.