rw-api-reference

Par runwayml · skills

Référence complète de l'API publique de Runway : modèles, endpoints, coûts, limites et types

npx skills add https://github.com/runwayml/skills --skill rw-api-reference

Référence API Runway Public

PRÉREQUIS : Exécutez d'abord +rw-check-compatibility pour vérifier que le projet dispose de capacités côté serveur.

URL de base : https://api.dev.runwayml.com

Toutes les requêtes requièrent ces en-têtes :

Authorization: Bearer <RUNWAYML_API_SECRET>
X-Runway-Version: 2024-11-06

Modèles et endpoints

Génération vidéo

Modèle Endpoint Entrée Coût (crédits/sec)
gen4.5 POST /v1/image_to_video ou POST /v1/text_to_video Texte et/ou image 12
gen4_turbo POST /v1/image_to_video Image requise 5
gen4_aleph POST /v1/video_to_video Vidéo + Texte/Image 15
act_two POST /v1/character_performance Image/Vidéo 5
veo3 POST /v1/image_to_video ou POST /v1/text_to_video Texte/Image 40
veo3.1 POST /v1/image_to_video ou POST /v1/text_to_video Texte/Image 20-40
veo3.1_fast POST /v1/image_to_video ou POST /v1/text_to_video Texte/Image 10-15
seedance2 POST /v1/text_to_video, POST /v1/image_to_video, ou POST /v1/video_to_video Texte, image et/ou vidéo 36

Durée vidéo : 2 à 15 secondes (dépend du modèle). Les rapports d'aspect sont basés sur les pixels : 1280:720, 720:1280, 1104:832, 960:960, 832:1104, 1584:672, etc.

Spécificités de Seedance 2 :

  • Modes : text-to-video, image-to-video (première/dernière image ou référence d'image), video-to-video
  • Durée : requise pour TTV et ITV (en secondes)
  • Rapports d'aspect (basés sur pixels) : 1280:720, 720:1280, 960:960, 1112:834, 834:1112, 1470:630, 992:432, 864:496, 752:560, 640:640, 560:752, 496:864
  • ITV supporte deux modes mutuellement exclusifs : première/dernière image (tableau promptImage avec position) ou référence d'image (tableau references)
  • Exigences d'entrée VTV : max 15 secondes, max 32 Mo, min 720p, MP4 recommandé

Génération d'images

Modèle Endpoint Coût (crédits)
gen4_image POST /v1/text_to_image 5 (720p), 8 (1080p)
gen4_image_turbo POST /v1/text_to_image 2
gemini_2.5_flash POST /v1/text_to_image 5

Génération audio

Modèle Endpoint Cas d'usage Coût
eleven_multilingual_v2 POST /v1/text_to_speech Synthèse vocale 1 crédit/50 caractères
eleven_text_to_sound_v2 POST /v1/sound_effect Effets sonores 1-2 crédits
eleven_voice_isolation POST /v1/voice_isolation Isoler la voix de l'audio 1 crédit/6 sec
eleven_voice_dubbing POST /v1/voice_dubbing Doubler l'audio vers d'autres langues 1 crédit/2 sec
eleven_multilingual_sts_v2 POST /v1/speech_to_speech Conversion vocale 1 crédit/3 sec

Personnages (Avatars en temps réel)

Modèle Description Durée max de session
gwm1_avatars Avatars conversationnels en temps réel alimentés par GWM-1 5 minutes

Endpoints :

Méthode Endpoint Description
POST /v1/avatars Créer un nouvel avatar
GET /v1/avatars/{id} Récupérer un avatar
PATCH /v1/avatars/{id} Mettre à jour un avatar (nom, voix, personnalité, documentIds)
DELETE /v1/avatars/{id} Supprimer un avatar
POST /v1/realtime_sessions Créer une nouvelle session en temps réel
GET /v1/realtime_sessions/{id} Récupérer le statut de la session (faire un polling jusqu'à READY)
POST /v1/realtime_sessions/{id}/consume Consommer les identifiants de session pour WebRTC (usage unique)

Paramètres de création d'avatar :

Paramètre Type Description
name string Nom d'affichage de l'avatar
referenceImage string URL ou URI runway:// de l'image du personnage
voice object { type: 'runway-live-preset', presetId: 'clara' }
personality string Prompt système / instructions de personnalité
documentIds string[] Optionnel. ID des documents de la base de connaissances à joindre

Présets vocaux : clara (doux), victoria (ferme), vincent (autoritaire). Prévisualisez tous les présets sur dev.runwayml.com.

Statuts de session : NOT_READYREADYRUNNINGCOMPLETED (ou FAILED / CANCELLED)

Documents (Base de connaissances)

Méthode Endpoint Description
POST /v1/documents Créer un document (texte brut ou Markdown)
GET /v1/documents/{id} Récupérer un document
DELETE /v1/documents/{id} Supprimer un document

Chaque avatar supporte jusqu'à 50 000 tokens de connaissances. Liez des documents à un avatar via client.avatars.update(id, { documentIds: [...] }).


Référence du corps de requête (JSON brut)

À utiliser lors d'appels directs à l'API (par ex. via la commande request de use-runway-api) plutôt que via un SDK. Seuls les champs requis et courants sont affichés — consultez +rw-fetch-api-reference pour le schéma complet.

POST /v1/text_to_image

{
  "model": "gen4_image",
  "promptText": "A serene Japanese garden with cherry blossoms",
  "ratio": "1920:1080"
}
  • model : gen4_image | gen4_image_turbo | gemini_2.5_flash (requis)
  • promptText : chaîne, jusqu'à ~1 000 caractères (requis)
  • ratio : l'un de 1920:1080, 1080:1920, 1024:1024, 1360:768, 1080:1080, 1168:880, 1440:1080, 1080:1440, 1808:768, 2112:912 (requis ; variantes 720p ou 1080p selon le modèle)
  • referenceImages : optionnel [{ "uri": "https://...", "tag": "MyTag" }] — référencer par @MyTag dans promptText
  • seed : entier optionnel pour la reproductibilité

POST /v1/text_to_video

{
  "model": "gen4.5",
  "promptText": "A golden retriever running through wildflowers at sunset",
  "ratio": "1280:720",
  "duration": 5
}
  • model : gen4.5 | veo3 | veo3.1 | veo3.1_fast | seedance2 (requis)
  • duration : entier en secondes, 2–10 (requis ; valeurs valides spécifiques au modèle — par ex. veo3 accepte uniquement 8)
  • ratio : par ex. 1280:720, 720:1280, 1104:832, 832:1104, 960:960 (requis)

POST /v1/image_to_video

{
  "model": "gen4.5",
  "promptImage": "https://example.com/cover.jpg",
  "promptText": "A slow dolly-in shot",
  "ratio": "1280:720",
  "duration": 5
}
  • model : gen4.5 | gen4_turbo | veo3 | veo3.1 | veo3.1_fast | seedance2 (requis)
  • promptImage : URL HTTPS, URI de données, ou URI runway:// (requis). Peut aussi être [{ "uri": "...", "position": "first" | "last" }] pour des keyframes.
  • promptText : optionnel pour la plupart des modèles, requis pour gen4_turbo quand aucun mouvement d'image n'est évident

POST /v1/video_to_video

{
  "model": "gen4_aleph",
  "videoUri": "https://example.com/source.mp4",
  "promptText": "Change the season to winter with snowfall",
  "ratio": "1280:720"
}

POST /v1/text_to_speech

{
  "model": "eleven_multilingual_v2",
  "text": "Hello, welcome to Runway.",
  "voice": { "type": "runway-preset", "presetId": "clara" }
}
  • voice : { type: "runway-preset", presetId: "clara" | "victoria" | "vincent" | ... } ou objet de voix spécifique au fournisseur
  • languageCode : code ISO optionnel (auto-détecté par défaut)

POST /v1/sound_effect

{
  "model": "eleven_text_to_sound_v2",
  "promptText": "Thunderclap followed by heavy rain",
  "duration": 5
}

POST /v1/voice_isolation

{
  "model": "eleven_voice_isolation",
  "audioUri": "https://example.com/noisy.mp3"
}

POST /v1/voice_dubbing

{
  "model": "eleven_voice_dubbing",
  "audioUri": "https://example.com/english.mp3",
  "targetLanguage": "es"
}

POST /v1/speech_to_speech

{
  "model": "eleven_multilingual_sts_v2",
  "audioUri": "https://example.com/source.mp3",
  "voice": { "type": "runway-preset", "presetId": "victoria" }
}

POST /v1/avatars

{
  "name": "Support Agent",
  "referenceImage": "https://example.com/portrait.jpg",
  "voice": { "type": "runway-live-preset", "presetId": "clara" },
  "personality": "You are a friendly support agent.",
  "documentIds": []
}

POST /v1/documents

{
  "avatarId": "<avatar-id>",
  "name": "FAQ",
  "content": "Q: What is your return policy?\nA: 30 days, no questions asked."
}

POST /v1/realtime_sessions

{
  "avatarId": "<avatar-id>"
}

Endpoints de gestion

Méthode Endpoint Description
GET /v1/tasks/{id} Obtenir le statut et la sortie de la tâche
DELETE /v1/tasks/{id} Annuler/supprimer une tâche
POST /v1/uploads Créer un upload éphémère
GET /v1/organization Infos organisation et solde de crédits
POST /v1/organization/usage Historique d'utilisation des crédits (jusqu'à 90 jours)

Cycle de vie des tâches

Tous les endpoints de génération renvoient un objet tâche. Le flux est :

  1. SoumettrePOST /v1/<endpoint> → retourne { "id": "task_xxx" }
  2. Faire un pollingGET /v1/tasks/{id} → retourne la tâche avec son status
  3. Récupérer la sortie — Quand status === "SUCCEEDED", le tableau output contient des URLs signées

Statuts de tâche

Statut Sens
PENDING En file d'attente, en attente de démarrage
RUNNING Génération en cours
SUCCEEDED Terminé — URLs de sortie disponibles
FAILED Génération échouée — vérifier le champ failure
THROTTLED Limite de concurrence atteinte — mis en file d'attente automatiquement

Polling SDK (recommandé)

Les SDKs fournissent une méthode waitForTaskOutput() qui gère le polling automatiquement :

// Node.js — fait un polling jusqu'au terme (délai d'expiration par défaut 10 min)
const task = await client.imageToVideo.create({
  model: 'gen4.5',
  promptImage: 'https://example.com/image.jpg',
  promptText: 'A sunset timelapse',
  ratio: '1280:720',
  duration: 5
}).waitForTaskOutput();

console.log(task.output); // Tableau d'URLs signées
# Python
task = client.image_to_video.create(
    model='gen4.5',
    prompt_image='https://example.com/image.jpg',
    prompt_text='A sunset timelapse',
    ratio='1280:720',
    duration=5
).wait_for_task_output()

print(task.output)

Polling manuel (REST)

async function pollTask(taskId) {
  while (true) {
    const response = await fetch(`https://api.dev.runwayml.com/v1/tasks/${taskId}`, {
      headers: {
        'Authorization': `Bearer ${process.env.RUNWAYML_API_SECRET}`,
        'X-Runway-Version': '2024-11-06'
      }
    });
    const task = await response.json();

    if (task.status === 'SUCCEEDED') return task;
    if (task.status === 'FAILED') throw new Error(task.failure);

    await new Promise(r => setTimeout(r, 5000)); // polling chaque 5 secondes
  }
}

Gestion de la sortie

  • Les tâches réussies retournent un tableau output avec des URLs signées vers le contenu généré
  • Les URLs de sortie expirent dans 24-48 heures
  • Téléchargez et stockez les sorties dans votre propre stockage — ne servez pas les URLs signées aux utilisateurs finaux
  • Les sorties vidéo sont en MP4, les sorties images en PNG/JPEG

Exigences d'entrée

Limites de taille

Type Via URL Via URI de données Via Upload
Image 16 Mo 5 Mo 200 Mo
Vidéo 32 Mo 16 Mo 200 Mo
Audio 32 Mo 16 Mo 200 Mo

Formats supportés

  • Images : JPEG, PNG, WebP (pas de GIF)
  • Codecs vidéo : H.264, H.265/HEVC, AV1, VP8/VP9, Apple ProRes, Theora
  • Audio : MP3, AAC, FLAC, PCM, ALAC

Exigences pour les URLs

Si vous fournissez des ressources via URL :

  • HTTPS uniquement (pas de HTTP)
  • Noms de domaine uniquement (pas d'adresses IP)
  • Pas de redirections
  • Doit supporter les requêtes HTTP HEAD
  • Doit retourner des en-têtes Content-Type et Content-Length valides
  • Longueur max d'URL : 2 048 caractères

Limites de débit et tiers

Tier Concurrence Générations/jour Cap mensuel Déblocage
1 (défaut) 1-2 50-200 100 $
2 3 500-1 000 500 $ 1 jour + 50 $
3 5 1 000-2 000 2 000 $ 7 jours + 100 $
4 10 5 000-10 000 20 000 $ 14 jours + 1 000 $
5 20 25 000-30 000 100 000 $ 7 jours + 5 000 $
  • Pas de limite de requêtes par minute — uniquement des quotas de génération quotidiens
  • Dépasser la concurrence → statut THROTTLED (mise en file d'attente automatique, pas de rejet)
  • Dépasser la limite quotidienne → 429 Too Many Requests
  • Les limites quotidiennes utilisent une fenêtre mobile de 24 heures

Gestion des erreurs

Erreurs HTTP

Code Sens Action
400 Échec de validation d'entrée Corriger l'entrée, ne pas réessayer
401 Clé API invalide Vérifier la clé, ne pas réessayer
429 Limite de débit atteinte Réessayer avec backoff exponentiel + jitter
502/503/504 Surcharge du serveur Réessayer avec backoff exponentiel + jitter

Codes d'échec de tâche

Code Sens Réessayer ?
SAFETY.INPUT.* Modération du contenu d'entrée Non — non remboursable
SAFETY.OUTPUT.* Modération du contenu de sortie Oui — essayer un prompt différent
INTERNAL.BAD_OUTPUT Problème de qualité Oui
ASSET.INVALID Format d'entrée mauvais Corriger l'entrée
INTERNAL Erreur serveur Oui

Les SDKs gèrent automatiquement les tentatives pour les erreurs transitoires.


Support des URI de données

Les images encodées en base64 peuvent être passées à la place des URLs :

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

Utile pour les petites images ou quand vous ne voulez pas héberger le fichier. Soumis aux limites de taille des URI de données ci-dessus.

Skills similaires