Documentación de la API

Aprende cómo integrar la API de Sora2 para generar videos impresionantes programáticamente

Inicio rápido
Comienza con la API de Sora2 en solo 3 pasos

💡 Copia y pega en ChatGPT, Claude u otros asistentes de IA para implementar

1. Obtén tu clave API

Crea una cuenta y genera tu clave API desde el panel de control

Obtener clave API

2. Realiza tu primera solicitud

Usa tu clave API para autenticarte y comenzar a generar videos

// 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. Consulta los resultados

Verifica el estado de tu tarea de generación de video y obtén la URL del video

// 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));
Autenticación
Todas las solicitudes de API deben incluir tu clave API en el encabezado de autorización

Incluye tu clave API en el encabezado de autorización:

Authorization: Bearer YOUR_API_KEY

Ejemplo de autenticación

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"}'
Puntos finales de la API
POST/api/generate-video

Inicia una tarea de generación de video y devuelve un ID de tarea

Parámetros

promptrequired

La descripción de texto o indicación de acción para el video (cadena, obligatorio)

aspectRatiorequired

Relación de aspecto del video: "16:9" (horizontal) o "9:16" (vertical) (cadena, obligatorio)

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 pública de la imagen cargada (cadena, opcional, obligatorio para imagen a video)

Ejemplo de solicitud

{
  "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
}

Ejemplo de respuesta

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

Verifica el estado y progreso de una tarea de generación de video

Parámetros

taskIdrequired

El ID de tarea devuelto por el punto final de generar video (cadena, obligatorio)

Ejemplo de solicitud

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

Ejemplo de respuesta

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

Códigos de estado

runningGeneración de video en progreso
succeededGeneración de video completada exitosamente
failedGeneración de video fallida (los créditos serán reembolsados)
Ejemplos de código
Ejemplos completos para generación de texto a video e imagen a video

Genera un video solo a partir de una descripción de texto:

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();
}
Manejo de errores
Errores comunes que podrías encontrar y cómo manejarlos

Códigos de error comunes

401 Unauthorized

Clave API inválida o faltante. Verifica tu encabezado de autorización.

402 Payment Required

Créditos insuficientes. Por favor, compra más créditos para continuar.

400 Bad Request

Parámetros de solicitud inválidos. Verifica el cuerpo de tu solicitud.

Límites y precios

Costo por video

95-308 Créditos

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

Duración del video

10s / 15s

Elegir entre 10s o 15s

Tamaño máximo de imagen

5MB

Para generación de imagen a video

Validez de la URL del video

2 Horas

Descarga dentro de este período