RenderIO
Api referenceCommands

Run Multiple Commands

Submit up to 10 independent FFmpeg commands that execute in parallel. Returns an array of command IDs.

Run Multiple Commands

POST /api/v1/run-multiple-ffmpeg-commands

Submit multiple independent FFmpeg commands that execute in parallel. Each command runs in its own sandbox with its own input and output files. This is useful for batch processing -- for example, generating multiple renditions of the same source, or processing unrelated files at once.

Authentication

Requires API key via X-API-KEY header.

Request

Headers

HeaderTypeRequiredDescription
Content-TypestringYesMust be application/json
X-API-KEYstringYesYour API key with ffsk_ prefix

Body

interface RunMultipleCommandsRequest {
  commands: RunFFmpegCommandRequest[];   // Max 10 commands, executed in parallel
}

Each element in the commands array follows the same shape as the Run FFmpeg Command request body:

interface RunFFmpegCommandRequest {
  input_files: Record<string, string>;
  output_files: Record<string, string>;
  ffmpeg_command: string;
  metadata?: Record<string, string | number | boolean>;
  webhook_url?: string;
}
FieldTypeRequiredDescription
commandsRunFFmpegCommandRequest[]YesArray of command objects to execute in parallel. Maximum 10 commands.

Response

200 OK

{
  command_ids: string[];
}
FieldTypeDescription
command_idsstring[]Array of unique identifiers, one per submitted command, in the same order as the input array.

Error responses

StatusErrorDescription
400INVALID_REQUESTMissing required fields, invalid aliases, or malformed FFmpeg commands.
401UNAUTHORIZEDMissing or invalid API key.
422VALIDATION_ERRORValidation failed (e.g., more than 10 commands, invalid command structure).
429RATE_LIMITEDToo many requests. Retry after the period indicated in the Retry-After header.

Examples

curl -X POST https://renderio.dev/api/v1/run-multiple-ffmpeg-commands \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: ffsk_your_api_key_here" \
  -d '{
    "commands": [
      {
        "input_files": { "in_video": "https://example.com/sample.mp4" },
        "output_files": { "out_video": "720p.mp4" },
        "ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}"
      },
      {
        "input_files": { "in_video": "https://example.com/sample.mp4" },
        "output_files": { "out_video": "480p.mp4" },
        "ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}"
      },
      {
        "input_files": { "in_video": "https://example.com/sample.mp4" },
        "output_files": { "out_thumb": "thumbnail.jpg" },
        "ffmpeg_command": "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}"
      }
    ]
  }'
import requests

response = requests.post(
    "https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
    headers={
        "Content-Type": "application/json",
        "X-API-KEY": "ffsk_your_api_key_here",
    },
    json={
        "commands": [
            {
                "input_files": {"in_video": "https://example.com/sample.mp4"},
                "output_files": {"out_video": "720p.mp4"},
                "ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
            },
            {
                "input_files": {"in_video": "https://example.com/sample.mp4"},
                "output_files": {"out_video": "480p.mp4"},
                "ffmpeg_command": "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
            },
            {
                "input_files": {"in_video": "https://example.com/sample.mp4"},
                "output_files": {"out_thumb": "thumbnail.jpg"},
                "ffmpeg_command": "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
            },
        ],
    },
)

data = response.json()
print("Command IDs:", data["command_ids"])
interface RunCommandRequest {
  input_files: Record<string, string>;
  output_files: Record<string, string>;
  ffmpeg_command: string;
}

interface MultipleCommandsResponse {
  command_ids: string[];
}

const commands: RunCommandRequest[] = [
  {
    input_files: { in_video: "https://example.com/sample.mp4" },
    output_files: { out_video: "720p.mp4" },
    ffmpeg_command:
      "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
  },
  {
    input_files: { in_video: "https://example.com/sample.mp4" },
    output_files: { out_video: "480p.mp4" },
    ffmpeg_command:
      "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
  },
  {
    input_files: { in_video: "https://example.com/sample.mp4" },
    output_files: { out_thumb: "thumbnail.jpg" },
    ffmpeg_command:
      "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
  },
];

const response = await fetch(
  "https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-KEY": "ffsk_your_api_key_here",
    },
    body: JSON.stringify({ commands }),
  },
);

const { command_ids } = (await response.json()) as MultipleCommandsResponse;
console.log("Command IDs:", command_ids);
const response = await fetch(
  "https://renderio.dev/api/v1/run-multiple-ffmpeg-commands",
  {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-API-KEY": "ffsk_your_api_key_here",
    },
    body: JSON.stringify({
      commands: [
        {
          input_files: { in_video: "https://example.com/sample.mp4" },
          output_files: { out_video: "720p.mp4" },
          ffmpeg_command:
            "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
        },
        {
          input_files: { in_video: "https://example.com/sample.mp4" },
          output_files: { out_video: "480p.mp4" },
          ffmpeg_command:
            "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
        },
        {
          input_files: { in_video: "https://example.com/sample.mp4" },
          output_files: { out_thumb: "thumbnail.jpg" },
          ffmpeg_command:
            "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
        },
      ],
    }),
  },
);

const { command_ids } = await response.json();
console.log("Command IDs:", command_ids);
<?php
$ch = curl_init("https://renderio.dev/api/v1/run-multiple-ffmpeg-commands");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-API-KEY: ffsk_your_api_key_here",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    "commands" => [
        [
            "input_files" => ["in_video" => "https://example.com/sample.mp4"],
            "output_files" => ["out_video" => "720p.mp4"],
            "ffmpeg_command" => "ffmpeg -i {{in_video}} -vf scale=1280:720 -c:v libx264 {{out_video}}",
        ],
        [
            "input_files" => ["in_video" => "https://example.com/sample.mp4"],
            "output_files" => ["out_video" => "480p.mp4"],
            "ffmpeg_command" => "ffmpeg -i {{in_video}} -vf scale=854:480 -c:v libx264 {{out_video}}",
        ],
        [
            "input_files" => ["in_video" => "https://example.com/sample.mp4"],
            "output_files" => ["out_thumb" => "thumbnail.jpg"],
            "ffmpeg_command" => "ffmpeg -i {{in_video}} -ss 00:00:05 -frames:v 1 {{out_thumb}}",
        ],
    ],
]));

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo "Command IDs: " . implode(", ", $data["command_ids"]) . "\n";

On this page