ClickUp integration

Turn ClickUp file outputs into direct URLs

Use GetFileURL when ClickUp has a file and the next step needs a direct public URL, not a private object, attachment wrapper, or redirecting share link.

Reviewed by
GetFileURL technical team
Last updated
ClickUp attachment URLtask filesclient portalOCRCRM
Short answer

What this page answers

Turn ClickUp task attachments into direct public file URLs for OCR, AI, CRM, client portals, and webhook workflows.

Use this page when the workflow needs file bytes available at a direct URL with predictable metadata, lifecycle controls, and a cleanup path.

Updated

Problem

ClickUp files need a fetchable handoff.

ClickUp task attachments are useful inside a workspace, but external APIs often need a direct public URL instead of an authenticated app attachment.

01

Upload the actual file

Send the file bytes or exported file to GetFileURL rather than passing a private platform object onward.

02

Map the URL field

Use the returned `url` as the value for the next API, webhook, OCR service, AI step, or publishing action.

03

Keep the cleanup handle

Store `file_id` when the workflow should delete public access after the downstream step finishes.

Setup

Keep the integration thin and readable.

Download the ClickUp attachment in a trusted automation step, upload the file to GetFileURL, then store the returned `url` and `file_id` on the task or next workflow step.

01

Multipart upload

Use multipart form data for files already present in the workflow runtime.

02

Short expiry

Set an expiry window that survives queue delays and retries without creating permanent public storage by default.

03

Structured response

Map `url`, `content_type`, `size`, and `expires_at` into logs or later workflow steps.

Debug

Most failures are URL shape failures.

If the destination cannot fetch the file, confirm it received the GetFileURL CDN URL rather than the original ClickUp attachment URL or a signed workspace link.

01

No preview pages

The destination API should receive a URL that resolves to file bytes, not an HTML page.

02

Header visibility

Check content type and size when OCR, AI, social, or document APIs reject a file.

03

Expiry timing

Do not expire the URL before delayed branches, retries, or async destination fetches complete.

Examples

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 example
curl -X POST https://api.getfileurl.com/v1/files \
  -H 'Authorization: Bearer $GETFILEURL_KEY' \
  -F 'file=@clickup-task-attachment.pdf' \
  -F 'expires_in=24h'

JavaScript

upload example
const 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 };
FAQ

Answers before the workflow breaks

How do I turn a ClickUp file into a URL?

Upload the ClickUp file to GetFileURL, parse the JSON response, and pass the returned direct URL to the next step.

Why not pass the original ClickUp file link?

Original platform links can be private, temporary, or redirecting. External APIs usually need a URL that returns the file bytes directly.

What should I store from the response?

Store `url` for the next API call and `file_id` if the workflow should delete or inspect the file later.