KKreatoAI/Documentation API

Créations

Décrivez ce que vous voulez voir, récupérez le fichier. Deux types : une image, ou une vidéo de 5, 10 ou 15 secondes avec sa bande son. Le fichier est hébergé sur media.kreatoai.com et se publie directement avec POST /v1/posts, sans passer par /v1/media.

La création est asynchrone : l'appel répond 202 immédiatement, puis vous interrogez son état — ou vous laissez un webhook vous prévenir. Comptez quelques secondes pour une image, une à deux minutes pour une vidéo.

Endpoints

POST
/v1/generations

Lancer une création

GET
/v1/generations/:id

État et résultat

GET
/v1/generations

Créations récentes + solde

DELETE
/v1/generations/:id

Retirer une création de la liste

Scope requis : generations:write pour créer et supprimer, generations:write ou videos:read pour lire. Un abonnement en cours est nécessaire.

Lancer une création

ChampObligatoireDescription
typeouiimage ou video
promptouiCe que doit montrer la création. 3 à 1800 caractères
aspectRationon9:16 (défaut), 1:1 ou 16:9
durationSecnonVidéo seulement. 5, 10 ou 15, facturées à la seconde ; 5 par défaut
sourceUrlsnonVidéo seulement. Une image de départ, ou deux pour fixer la première et la dernière
curl -X POST https://api.kreatoai.com/v1/generations \
  -H "x-api-key: sk-kre-v1-votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "video",
    "prompt": "Un plat qui sort du four, vapeur, lumière chaude, gros plan",
    "aspectRatio": "9:16"
  }'
// 202 Accepted
{
  "id": "9f1c8b2e-4a7d-4c31-9e05-6b2f8a1d3c47",
  "type": "video",
  "status": "pending",
  "prompt": "Un plat qui sort du four, vapeur, lumière chaude, gros plan",
  "aspectRatio": "9:16",
  "durationSec": 5,
  "sourceUrls": [],
  "mediaUrl": null,
  "mimeType": null,
  "error": null,
  "creditsCost": 15,
  "createdAt": "2026-09-05T14:22:10.000Z",
  "completedAt": null
}

Suivre son avancement

Deux façons, au choix. La plus économique : abonnez un endpoint webhook et attendez generation.completed ou generation.failed — le corps de l'événement est exactement l'objet ci-dessous. Sinon, interrogez l'état toutes les dix secondes :

GET /v1/generations/9f1c8b2e-4a7d-4c31-9e05-6b2f8a1d3c47

// 200 OK
{
  "id": "9f1c8b2e-4a7d-4c31-9e05-6b2f8a1d3c47",
  "type": "video",
  "status": "completed",
  "mediaUrl": "https://media.kreatoai.com/generation-video-1788….mp4",
  "mimeType": "video/mp4",
  "error": null,
  "creditsCost": 15,
  "completedAt": "2026-09-05T14:23:47.000Z"
}
statusSignification
pendingAcceptée, pas encore commencée
processingEn cours de production
completedmediaUrl est prêt à être utilisé
failederror porte un texte affichable tel quel. Les crédits ont été rendus

Publier le résultat

mediaUrl se passe directement dans mediaUrls — inutile de l'ingérer avec /v1/media, le fichier est déjà chez nous.

curl -X POST https://api.kreatoai.com/v1/posts \
  -H "x-api-key: sk-kre-v1-votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "targets": ["tiktok", "youtube"],
    "content": "Trois dîners prêts en 10 minutes",
    "mediaUrls": ["https://media.kreatoai.com/generation-video-1788….mp4"]
  }'

Sur YouTube, déclarez le contenu généré : options.youtube.containsSyntheticMedia = true.

Crédits

TypeCoûtCe que vous obtenez
image2 créditsUne image au format demandé
video, 5 s15 créditsUn clip de 5 secondes, bande son comprise
video, 10 s30 créditsUn clip de 10 secondes, bande son comprise
video, 15 s45 créditsUn clip de 15 secondes, bande son comprise

Le solde vit sur l'espace, pas sur la clé : GET /v1/workspace et GET /v1/generations le renvoient tous les deux dans credits. Un appel refusé pour solde insuffisant ne débite rien, et une création qui échoue est intégralement remboursée — y compris lorsqu'une mise à jour de nos serveurs l'interrompt.

Champs de la réponse

ChampDescription
mediaUrlURL du fichier produit. null tant que la création n’est pas terminée
errorTexte destiné à être montré tel quel à un utilisateur. null tant que rien n’a échoué
creditsCostCe que cette création a coûté, en crédits
sourceUrlsLes images de départ que vous aviez fournies
completedAtFin de la production, en succès comme en échec

Les fichiers produits vous appartiennent : contrairement aux médias ingérés via /v1/media, ils ne sont soumis à aucune durée de conservation tant que vous ne supprimez pas la création.

Erreurs

StatutCodeCause
400validation zodPrompt trop court, type inconnu, durée hors de 4/6/8, plus de deux images source
402insufficient_creditsSolde insuffisant. Rien n’a été débité
402subscription_requiredL’espace n’a pas d’abonnement en cours
403insufficient_scopeLa clé ne porte pas generations:write
404generation_not_foundIdentifiant inconnu dans cet espace, ou création supprimée
429rate_limit_exceededTrop de requêtes — attendez 60 secondes

Une création peut aussi aboutir en failed après avoir été acceptée : une demande refusée par nos garde-fous de contenu, ou une indisponibilité passagère. Dans les deux cas, error dit quoi faire et les crédits reviennent.