We ran into an API that requires multipart POST requests having a part with headers like these: Content-Disposition: form-data; name="file"; filename="file.csv" Content-Type: text/csv The "files" option in Mechanic's HTTP action uses hash keys as both name and filename for each file. There's no way direct way to use file generators and end up with distinct name vs filename values. This future is about a direct path forward there. In the meantime, something like this should work, as an indirect path: {% assign boundary = "MechanicMultipartBoundary" %} {% capture multipart_body %} --{{ boundary }} Content-Disposition: form-data; name="hello" world --{{ boundary }} Content-Disposition: form-data; name="file"; filename="robots.csv" Content-Type: text/csv Sku Code,MRP,Cost Price SKU1,0.00,0.00 SKU2,0.00,0.00 --{{ boundary }}-- {% endcapture %} {% action "http" %} { "method": "post", "url": "https://webhook.site/your-webhook-url", "headers": { "Content-Type": "multipart/form-data; boundary={{ boundary }}" }, "body": {{ multipart_body | json }} } {% endaction %}