n8n HTTP Request File Upload: Send Binary Data and Get a Public URL

· · 7 min read

n8n keeps binary data inside an execution, but that data does not become a durable public file by itself. The practical step is to upload the binary property to a file host and pass the returned URL to the next node.

n8n keeps files as binary data inside an execution. That is enough to pass a file between nodes, but it does not create a durable public address. If a later system needs a link, upload the binary property before the execution ends.

This guide covers the FilePost node and the built-in HTTP Request node, including the binary field settings and two workflows you can adapt.

HTTP Request node setup

  • Method: POST
  • URL: https://upload.filepost.dev/v1/upload
  • Send body: enabled; choose Form-Data
  • Parameter type: n8n Binary File
  • Name: file (the FilePost form field)
  • Input data field name: usually data, or the binary field from the previous node
  • Response field to use later: $json.url

What success looks like

A working automation should produce three things: a successful upload response, a URL that resolves outside n8n, and a downstream record that stores or sends that URL. Test all three before adding loops or more processing nodes.

Why Upload Files in n8n Workflows?

File handling comes up in n8n workflows more often than you might expect. Here are the most common scenarios:

Each example starts with binary data in n8n and ends with a URL that another step can use. A file upload API handles that handoff.

This page is the manual HTTP Request reference. If you prefer the shortest guided setup, use the FilePost node guide for n8n binary data.

Method 1: Using the FilePost n8n Node

FilePost has a dedicated community node for n8n called n8n-nodes-filepost. It handles the upload request and exposes the returned URL as regular workflow data.

Using Airtable in your workflow? Airtable attachment URLs expire every ~2 hours. Chain the Airtable trigger + FilePost node to get a CDN URL with no automatic expiry by default. See Keep Airtable attachments available →

Step 1: Install the Community Node

In your n8n instance, go to Settings → Community Nodes and install n8n-nodes-filepost. If you're running n8n via Docker or npm, you can also install it from the command line:

# For npm installations
cd ~/.n8n
npm install n8n-nodes-filepost

# Then restart n8n

After installation, the FilePost node will appear in your node panel when you search for "FilePost."

Step 2: Configure API Key Credentials

Before using the node, you need to set up your FilePost API key as a credential in n8n:

  1. Open the FilePost node and click on Credential for FilePost API
  2. Click Create New
  3. Enter your FilePost API key in the API Key field
  4. Save the credential

If you don't have an API key yet, sign up at FilePost:

curl -X POST https://filepost.dev/v1/signup \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'

Step 3: Use the Node in Your Workflow

The FilePost node supports four operations:

For uploading, connect the FilePost node after any node that outputs binary data (like a form trigger, email trigger, or HTTP Request node that downloads a file). Select the Upload File operation and choose the binary property that contains your file. The node outputs the CDN URL, file ID, and file size, which you can use in subsequent nodes.

The output looks like this:

{
  "url": "https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.png",
  "file_id": "a1b2c3d4e5f6",
  "size": 84210
}

Method 2: Using the HTTP Request Node

If you prefer not to install community nodes, or you need more control over the request, you can use n8n's built-in HTTP Request node to call the FilePost API directly.

Configuration

  1. Add an HTTP Request node to your workflow
  2. Set the method to POST
  3. Set the URL to https://upload.filepost.dev/v1/upload
  4. Under Headers, add: X-API-Key = your API key
  5. Enable Send Body and set Body Content Type to Form-Data
  6. Add a body parameter with type n8n Binary File
  7. Set Name to file
  8. Set Input Data Field Name to the binary field from the previous node, usually data

The HTTP Request node will send the binary data as a multipart file upload, and the response will contain the CDN URL in $json.url. These labels follow n8n's current HTTP Request node documentation.

Accessing the Response

In subsequent nodes, you can reference the uploaded file URL using:

{{ $json.url }}
// Returns: https://cdn.filepost.dev/file/filepost/uploads/a1/a1b2c3.png

{{ $json.file_id }}
// Returns: a1b2c3d4e5f6

{{ $json.size }}
// Returns: 84210

Build your first automated upload

Test the request with a small file from your own workflow. If the returned URL works in the next step, the basic integration is working.

Test a small upload

Example Workflow: Automatically Host Form Attachments

The example workflow takes a form attachment, uploads it, and passes the returned URL to the next node.

The Scenario

You have a Typeform (or any form tool with a webhook) that accepts file uploads. When someone submits the form, you want the attached files uploaded to FilePost and the URLs saved to a Google Sheet.

Form attachment steps

  1. Webhook Trigger. Set up a Webhook node to receive the form submission. Typeform (and most form tools) will send the file URL in the payload.
  2. HTTP Request (Download). Use an HTTP Request node to download the file from the URL provided by the form tool. Set the response to File so n8n stores it as binary data.
  3. FilePost Upload. Connect the FilePost node (or HTTP Request node configured for FilePost) to upload the downloaded file. This converts the temporary form file into a CDN URL with no automatic expiry by default.
  4. Google Sheets. Use a Google Sheets node to append a row with the submitter's name, email, and the FilePost URL from the previous step.

This example uses four nodes. Run one submission end to end and confirm that the stored URL resolves before adding more processing or error handling.

Example Workflow: Process and Upload Images

This workflow resizes images and uploads the results to FilePost, then logs the URLs to a spreadsheet.

Image-processing steps

  1. Schedule Trigger or Webhook. Start with whatever trigger makes sense, a schedule that runs daily, a webhook that receives image URLs, or a manual trigger for testing.
  2. HTTP Request (Download Image). Download the source image as binary data.
  3. Edit Image Node. Use n8n's Edit Image node to resize, crop, or convert the image. For example, resize to a maximum width of 800px for web use.
  4. FilePost Upload. Upload the processed image to FilePost. The CDN URL you get back serves the optimized image globally.
  5. Google Sheets / Airtable / Database. Store the original URL and the new FilePost URL together so you have a mapping of source images to their processed versions.

This is particularly useful for e-commerce workflows where product images need to be resized and hosted, or for content workflows where user-submitted images need to be standardized.

Troubleshooting Common Issues

Binary Data Not Detected

If the FilePost node or HTTP Request node says there's no binary data, make sure the preceding node is outputting the file as binary. In HTTP Request nodes that download files, set the Response Format to File. Check the node output, you should see a binary section with the file name and MIME type.

File Size Limits

FilePost has per-plan file size limits: 50MB on Free, 100MB on Lite ($4/mo), 200MB on Starter ($9/mo), and 500MB on Pro ($29/mo). If your upload fails with a size error, check your plan limits. Also be aware that n8n itself has memory limits, very large files may cause out-of-memory errors in n8n before they even reach the upload step. For files over 100MB, consider increasing n8n's memory allocation.

Rate Limiting

If a loop hits a rate limit, add a Wait node or batch the items. Check the current FilePost limits before choosing a plan for bulk uploads.

Wrong File Name in Upload

If the uploaded file has a generic name like data instead of the original filename, check how the binary data is being created. When using the HTTP Request node to download files, the filename is usually preserved. If you're creating binary data programmatically (e.g., from a Function node), make sure to set the fileName property on the binary object.

Getting Started with FilePost and n8n

A practical starting path for working file uploads in n8n is:

  1. Get a FilePost API key. Sign up at https://filepost.dev/v1/signup with your email. The free plan starts with one provisional upload before verification and unlocks 15 per month after email verification, enough to build and test your workflows.
  2. Install the community node. Search for n8n-nodes-filepost in Settings → Community Nodes. This gives you a native FilePost node with all four operations.
  3. Build your first workflow. Start simple: Webhook trigger → FilePost Upload → Respond to Webhook. Send a test file to the webhook URL and verify you get a CDN URL back.
  4. Expand from there. Add file processing, database storage, notifications, or whatever your workflow needs. The FilePost URL is just a string, so it works anywhere in n8n that accepts text.

Files uploaded through n8n have no automatic expiry by default and are served from the same global CDN as files uploaded through any other method. If you outgrow the free plan, the Lite plan ($4/month, 300 uploads, 100MB max file size), Starter plan ($9/month, 1,500 uploads, 200MB max), and Pro plan ($29/month, 7,500 uploads, 500MB max) scale with your workflow volume.