Documentation de l'API

Apprenez à intégrer l'API Sora2 pour générer de superbes vidéos par programmation

Démarrage rapide
Commencez avec l'API Sora2 en seulement 3 étapes

💡 Copiez et collez dans ChatGPT, Claude ou d'autres assistants IA pour implémenter

1. Obtenez votre clé API

Créez un compte et générez votre clé API depuis le tableau de bord

Obtenir la clé API

2. Effectuez votre première requête

Utilisez votre clé API pour vous authentifier et commencer à générer des vidéos

// Make your first video generation request
async function generateVideo() {
  const response = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A beautiful sunset over the ocean with gentle waves',
      aspectRatio: '16:9',
      duration: 10,
      type: 'text2video'
    })
  });
  
  const result = await response.json();
  console.log('Task ID:', result.data.taskId);
  console.log('Credits used:', result.data.creditsUsed);
  
  return result.data.taskId; // Save this for status checking
}

generateVideo();

3. Interrogez les résultats

Vérifiez l'état de votre tâche de génération de vidéo et récupérez l'URL de la vidéo

// Complete example: Generate and poll for video
async function generateAndWaitForVideo() {
  // Step 1: Start video generation
  const generateResponse = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A beautiful sunset over the ocean with gentle waves',
      aspectRatio: '16:9',
      duration: 10,
      type: 'text2video'
    })
  });
  
  const generateResult = await generateResponse.json();
  const taskId = generateResult.data.taskId;
  console.log('Video generation started, Task ID:', taskId);
  
  // Step 2: Poll for completion
  return new Promise((resolve, reject) => {
    const checkStatus = async () => {
      const statusResponse = await fetch('https://sora2api.org/api/check-video-status', {
        method: 'POST',
        headers: {
          'Authorization': 'Bearer YOUR_API_KEY',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ taskId })
      });
      
      const statusResult = await statusResponse.json();
      const { status, progress, videoUrl } = statusResult.data;
      
      console.log(`Status: ${status}, Progress: ${progress}%`);
      
      if (status === 'succeeded') {
        console.log('Video ready! URL:', videoUrl);
        resolve(videoUrl);
      } else if (status === 'failed') {
        reject(new Error('Video generation failed'));
      } else {
        // Still processing, check again in 5 seconds
        setTimeout(checkStatus, 5000);
      }
    };
    
    checkStatus();
  });
}

// Usage
generateAndWaitForVideo()
  .then(videoUrl => console.log('Final video URL:', videoUrl))
  .catch(error => console.error('Error:', error));
Authentification
Toutes les requêtes API doivent inclure votre clé API dans l'en-tête d'autorisation

Incluez votre clé API dans l'en-tête d'autorisation :

Authorization: Bearer YOUR_API_KEY

Exemple d'authentification

curl -X POST https://sora2api.org/api/generate-video \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "A cat playing", "aspectRatio": "16:9", "duration": 10, "type": "text2video"}'
Points de terminaison de l'API
POST/api/generate-video

Initie une tâche de génération de vidéo et renvoie un ID de tâche

Paramètres

promptrequired

La description textuelle ou l'invite d'action pour la vidéo (chaîne, obligatoire)

aspectRatiorequired

Rapport d'aspect de la vidéo : "16:9" (paysage) ou "9:16" (portrait) (chaîne, obligatoire)

durationoptional

Video duration in seconds: 10 or 15 (number, optional, default: 10). Cost depends on resolution: 480p 10s = 95 credits, 480p 15s = 143 credits, 720p 10s = 205 credits, 720p 15s = 308 credits

imageUrloptional

URL publique de l'image téléchargée (chaîne, facultatif, obligatoire pour image vers vidéo)

Exemple de requête

{
  "prompt": "A beautiful sunset over the ocean",
  "aspectRatio": "16:9",
  "resolution": "480p",
  "duration": 10, // optional, default 10, can be 10 or 15 seconds
  "type": "text2video",
  "imageUrl": "https://yourdomain.com/image.jpg" // optional, for image2video
}

Exemple de réponse

{
  "code": 0,
  "data": {
    "success": true,
    "taskId": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx",
    "creditsUsed": 95,
    "message": "Video generation started"
  }
}
POST/api/check-video-status

Vérifiez l'état et la progression d'une tâche de génération de vidéo

Paramètres

taskIdrequired

L'ID de tâche renvoyé par le point de terminaison de génération de vidéo (chaîne, obligatoire)

Exemple de requête

{
  "taskId": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx"
}

Exemple de réponse

{
  "code": 0,
  "data": {
    "status": "succeeded",
    "progress": 100,
    "videoUrl": "https://example.com/video.mp4",
    "id": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx"
  },
  "msg": "success"
}

Codes d'état

runningGénération de vidéo en cours
succeededGénération de vidéo terminée avec succès
failedÉchec de la génération de vidéo (les crédits seront remboursés)
Exemples de code
Exemples complets pour la génération de texte vers vidéo et d'image vers vidéo

Générez une vidéo uniquement à partir d'une description textuelle :

async function generateTextToVideo() {
  // Step 1: Generate video
  const generateResponse = await fetch('https://sora2api.org/api/generate-video', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      prompt: 'A serene mountain landscape at sunrise',
      aspectRatio: '16:9',
      resolution: '480p', // optional: 480p or 720p, default 480p
      duration: 10, // optional: 10 or 15 seconds
      type: 'text2video'
    })
  });
  
  const { data } = await generateResponse.json();
  const taskId = data.taskId;
  
  // Step 2: Poll for status
  const pollStatus = async () => {
    const statusResponse = await fetch('https://sora2api.org/api/check-video-status', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ taskId })
    });
    
    const statusData = await statusResponse.json();
    
    if (statusData.data.status === 'succeeded') {
      console.log('Video URL:', statusData.data.videoUrl);
      return statusData.data.videoUrl;
    } else if (statusData.data.status === 'running') {
      // Poll again after 3 seconds
      setTimeout(pollStatus, 3000);
    } else {
      console.error('Generation failed');
    }
  };
  
  pollStatus();
}
Gestion des erreurs
Erreurs courantes que vous pourriez rencontrer et comment les gérer

Codes d'erreur courants

401 Unauthorized

Clé API invalide ou manquante. Vérifiez votre en-tête d'autorisation.

402 Payment Required

Crédits insuffisants. Veuillez acheter plus de crédits pour continuer.

400 Bad Request

Paramètres de requête invalides. Vérifiez le corps de votre requête.

Limites et tarification

Coût par vidéo

95-308 Crédits

480p: 95 credits for 10s, 143 credits for 15s. 720p: 205 credits for 10s, 308 credits for 15s

Durée de la vidéo

10s / 15s

Choisir entre 10s ou 15s

Taille maximale de l'image

5MB

Pour la génération d'image vers vidéo

Validité de l'URL de la vidéo

2 Heures

Téléchargez dans cette période