RenderIO
Integrations

n8n Integration

Connect RenderIO to n8n workflows for automated video processing.

n8n Integration

RenderIO integrates with n8n so you can automate video processing as part of larger workflows. For an overview of what you can build, see our FFmpeg n8n integration page. There are two approaches: use the native n8n-nodes-renderio community node, or call the RenderIO API directly with the built-in HTTP Request node.

You can also configure RenderIO webhooks to trigger n8n workflows automatically when commands complete.

Using the native node

RenderIO has a community node package (n8n-nodes-renderio) that provides pre-built triggers and actions for n8n. Install it from your n8n instance:

  1. Go to Settings > Community Nodes
  2. Search for n8n-nodes-renderio
  3. Click Install

Once installed, the RenderIO node appears in the node panel with actions for submitting commands, polling status, and a trigger for webhook events.

Using the HTTP Request node

If you prefer not to install the community node, you can call the RenderIO API directly using n8n's built-in HTTP Request node.

Step 1: Add an HTTP Request node

In your n8n workflow, add an HTTP Request node from the node panel.

Step 2: Configure the request

Set the following properties:

PropertyValue
MethodPOST
URLhttps://renderio.dev/api/v1/run-ffmpeg-command
AuthenticationNone (we use a header instead)

Step 3: Add the API key header

Under Headers, add:

NameValue
X-API-KEYffsk_your_api_key_here
Content-Typeapplication/json

Step 4: Set the JSON body

Switch the body content type to JSON and provide the request body:

{
  "input_files": {
    "in_video": "https://example.com/sample.mp4"
  },
  "output_files": {
    "out_video": "converted.mp4"
  },
  "ffmpeg_command": "ffmpeg -i {{in_video}} -c:v libx264 -preset fast {{out_video}}"
}

The node returns a command_id that you use to poll for results.

Step 5: Poll for the result

RenderIO processes commands asynchronously. To get the result, add a polling loop after the HTTP Request node:

  1. Add a Wait node set to 3 seconds
  2. Add another HTTP Request node configured as:
PropertyValue
MethodGET
URLhttps://renderio.dev/api/v1/commands/{{ $json.command_id }}
  1. Add the X-API-KEY header with your API key
  2. Add an IF node to check if {{ $json.status }} equals SUCCESS or FAILED
  3. If neither, loop back to the Wait node to continue polling

Full HTTP Request node configuration

Here is the complete JSON configuration for the submit node:

{
  "nodes": [
    {
      "parameters": {
        "method": "POST",
        "url": "https://renderio.dev/api/v1/run-ffmpeg-command",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{ $env.RENDERIO_API_KEY }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "input_files",
              "value": "={{ JSON.stringify({ in_video: $json.file_url }) }}"
            },
            {
              "name": "output_files",
              "value": "={{ JSON.stringify({ out_video: 'converted.mp4' }) }}"
            },
            {
              "name": "ffmpeg_command",
              "value": "ffmpeg -i {{in_video}} -c:v libx264 -preset fast {{out_video}}"
            }
          ]
        },
        "options": {}
      },
      "name": "Submit FFmpeg Command",
      "type": "n8n-nodes-base.httpRequest",
      "position": [460, 300]
    }
  ]
}

And the polling node:

{
  "nodes": [
    {
      "parameters": {
        "method": "GET",
        "url": "=https://renderio.dev/api/v1/commands/{{ $json.command_id }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{ $env.RENDERIO_API_KEY }}"
            }
          ]
        },
        "options": {}
      },
      "name": "Poll Command Status",
      "type": "n8n-nodes-base.httpRequest",
      "position": [860, 300]
    }
  ]
}

Webhook trigger

Instead of polling, you can configure RenderIO to send a webhook to your n8n instance when a command completes. This gives you real-time notifications without any polling loop.

Step 1: Add a Webhook trigger node in n8n

  1. In your n8n workflow, add a Webhook trigger node
  2. Set the HTTP method to POST
  3. Copy the Production URL displayed in the node (it looks like https://your-n8n-instance.com/webhook/abc123)

Step 2: Register the webhook URL with RenderIO

Call the RenderIO webhook configuration endpoint to register your n8n webhook URL:

curl -X PUT https://renderio.dev/api/v1/webhook-config \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: ffsk_your_api_key_here" \
  -d '{
    "url": "https://your-n8n-instance.com/webhook/abc123"
  }'

Or configure it as an HTTP Request node in n8n:

{
  "nodes": [
    {
      "parameters": {
        "method": "PUT",
        "url": "https://renderio.dev/api/v1/webhook-config",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{ $env.RENDERIO_API_KEY }}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"url\": \"https://your-n8n-instance.com/webhook/abc123\" }",
        "options": {}
      },
      "name": "Register Webhook",
      "type": "n8n-nodes-base.httpRequest",
      "position": [460, 300]
    }
  ]
}

Step 3: Receive webhook payloads

When a command completes, RenderIO sends a POST request to your n8n webhook URL with the full command data, including status, output files, and metadata. Your n8n workflow triggers automatically.

The webhook payload contains the same data as the poll response, including command_id, status, output_files with storage_url values, and any metadata you attached to the command.

You can also set a per-command webhook URL by including webhook_url in the request body when submitting a command. This overrides the account-level webhook configuration for that specific command.

Example workflow: convert and notify

This workflow downloads a file, converts it to MP4 using RenderIO, and sends a Slack notification with the result.

Workflow steps:

  1. Trigger -- Manual trigger, schedule, or webhook from another service
  2. HTTP Request -- POST to /api/v1/run-ffmpeg-command with the source file URL
  3. Wait -- Pause for 5 seconds
  4. HTTP Request -- GET /api/v1/commands/:commandId to poll for status
  5. IF -- Check if status is SUCCESS or FAILED
    • If still processing, loop back to the Wait node
  6. Slack -- Send a message with the download URL from output_files.out_video.storage_url

Alternatively, replace steps 3-5 with a Webhook trigger workflow:

  1. Webhook trigger -- Receives the RenderIO webhook payload
  2. IF -- Check status equals SUCCESS
  3. Slack -- Post the storage_url to your channel

This eliminates polling entirely and gives you instant notifications.

Other integration platforms

RenderIO also works with Zapier, Pipedream, and Make.

Further reading

On this page