Turn webhook files into direct URLs
Use GetFileURL when an incoming webhook carries a file, attachment link, or Base64 payload and the next system needs a public URL it can fetch.
Webhook files arrive in several forms, but the next API still wants one URL.
Some webhooks include a temporary attachment link, some include Base64 content, and some require you to download the file first.
Attachment link
Fetch or download the file from the source system, upload it, then pass the returned URL onward.
Base64 payload
Send the encoded content with filename and content type when multipart is not available.
Multipart handoff
If your webhook processor has file bytes, upload them directly as multipart form data.
Turn inbound files into fields that workflow tools can map.
The returned JSON response gives the next step stable fields: `url`, `file_id`, content type, size, and expiry.
OCR and AI
Pass the returned URL to extraction, vision, summarization, or classification APIs.
CRM and support
Attach files to tickets or records with a direct URL instead of a private source link.
Cleanup branches
Store `file_id` and delete after all webhook retry branches have finished.
Webhook retries make expiry timing more important.
A webhook may retry minutes later or branch into delayed processing. The URL must survive the actual fetch window, not only the first request.
Wrong field
Map the actual returned `url`, not an attachment object, source preview link, or full JSON blob.
Source link expired
Upload the file while the source webhook attachment is still reachable.
Retry delay
Set `expires_in` long enough for retry and dead-letter handling.
Copy the same upload shape into code or workflow steps
Use the same endpoint from a shell, backend route, worker, or automation code step. Upload the file, set expiry, then map the returned URL.
cURL
upload examplecurl -X POST https://api.getfileurl.com/v1/files \
-H 'Authorization: Bearer $GETFILEURL_KEY' \
-F 'file=@webhook-attachment.pdf' \
-F 'expires_in=24h'JavaScript
upload exampleconst form = new FormData();
form.append("file", file);
form.append("expires_in", "24h");
const res = await fetch("https://api.getfileurl.com/v1/files", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.GETFILEURL_KEY}` },
body: form,
});
const { url, file_id } = await res.json();
return { url, file_id };Answers before the workflow breaks
Can a webhook attachment become a public URL?
Yes. Download or read the webhook file, upload it to GetFileURL, then map the returned `url` into the next API call.
What if the webhook sends Base64 instead of a file?
Send the Base64 content with filename, content type, and expiry so the decoded file can be hosted and returned as a URL.
How should webhook retries affect expiry?
Choose an expiry window that survives retries, delayed branches, and async destination fetches, then delete when processing finishes.