Escapez à contenir

Développeur API

Version 1 Utilisez les mêmes modèles, actifs, récupération de tâches et comptabilité de crédit que Studio.

Gestion API Les clés

Envoyer Autorisation: Portez YOUR_API_KEY. Les cookies du site Web ne sont pas acceptés comme API Une adhésion payante active et la permission clé requise sont vérifiées sur chaque demande.

Lire les modèles, télécharger une référence si nécessaire, demander une citation, reconnaître explicitement cette citation, puis soumettre avec une clé stable de l'Idempotency.

Seule la présentation de génération consomme des crédits de compte. Les citations et les créations clés ne consomment pas des crédits. Les échecs du fournisseur utilisent le processus existant de remboursement et de réconciliation. Ne soumettez pas une nouvelle clé d'identité alors que le résultat initial est inconnu.

Chaque clé permet 60 Les demandes authentifiées par minute. a 429 La réponse inclut Retry-After. les clés expirent dans 1–365 des jours et peut être révoqué immédiatement.

HTTPURLLes autorisations
GET/api/v1/modelsmodels:read
GET/api/v1/assetsassets:read
GET/api/v1/assets/{id}/downloadassets:read
POST/api/v1/uploadsassets:write
PUT/api/v1/uploads/{id}assets:write
POST/api/v1/uploads/{id}/completeassets:write
POST/api/v1/quotesgenerations:write
POST/api/v1/generationsgenerations:write
GET/api/v1/generations/{kind}/{id}generations:read
GET/api/v1/generations/{kind}/{id}/outputs/{index}generations:read

Les références utilisent un upload de trois étapes: déclarer la taille MIME et le byte, PUT les bytes, puis compléter. JPEG, PNG et WebP Au-dessus 10 Utilisez l'ID d'actif retourné ; les URL de référence externes et les actifs d'autres utilisateurs ne sont pas acceptés.

// Node.js 22+; keep API_KEY on your server.
const base = process.env.API_BASE_URL;
const headers = {
  Authorization: `Bearer ${process.env.API_KEY}`,
  'Content-Type': 'application/json',
};
const modelsResponse = await fetch(base + '/api/v1/models', { headers });
if (!modelsResponse.ok) throw new Error('Read models failed');
const models = await modelsResponse.json();

const draft = {
  "kind": "image",
  "modelPreset": "gpt-image-2",
  "mode": "text-to-image",
  "prompt": "A yellow ceramic mug on a pale blue background",
  "aspectRatio": "1:1",
  "resolution": "1k",
  "outputCount": 1
};
const quoteResponse = await fetch(base + '/api/v1/quotes', {
  method: 'POST', headers, body: JSON.stringify({ draft }),
});
if (!quoteResponse.ok) throw new Error('Quote failed');
const quote = await quoteResponse.json();

// Review quote.quote before submitting. Persist this operation ID first.
const operationId = process.env.OPERATION_ID;
if (!operationId) throw new Error('A stable operation ID is required');
const submitted = await fetch(base + '/api/v1/generations', {
  method: 'POST',
  headers: { ...headers, 'Idempotency-Key': operationId },
  body: JSON.stringify({
    draft: quote.normalizedDraft,
    quoteAcknowledgement: quote.quote,
  }),
});
if (!submitted.ok) throw new Error('Check response before retrying');
const { task } = await submitted.json();
const taskResponse = await fetch(
  base + '/api/v1/generations/' + task.kind + '/' + task.id, { headers },
);
if (!taskResponse.ok) throw new Error('Read task failed');
const detail = await taskResponse.json();
// Poll at two-second intervals until terminal. Download detail.outputs[].downloadUrl
// with the same Authorization header. Never change the ID to retry an unknown outcome.

401: clé invalide, expiré ou révoqué. 403• L’absence de permis ou d’adhésion payée. 409: conflit d’identité ou changement de quota ; demande et confirme une nouvelle quota. 422• Entrée invalide. 429La limite de taux. 503Lire le code d'erreur de réponse ; ne retire jamais une subvention payée avec une nouvelle clé automatiquement.