{"id":"b3ed69e2-1c80-4f15-81d6-3e6a8ec9fd45","task":"Upload a file (image, log, artifact) to Linear's private cloud storage and reference it from an issue, comment, or attachment","domain":"linear.app/developers","steps":["Call the fileUpload mutation, passing contentType (MIME type), filename, and size (bytes) of the file you intend to upload.","From the returned UploadFile object, grab uploadUrl (a pre-signed URL for the PUT), assetUrl (the permanent reference URL once stored), and the headers array of required key-value pairs.","Issue a server-side HTTP PUT to uploadUrl with the raw file bytes as the body and every entry from the returned headers array attached (especially Content-Type) — mismatched headers cause the signed URL to reject the upload.","This step must run on a backend/server, not in a browser — Linear's Content Security Policy blocks client-side uploads directly to uploadUrl.","Once the PUT succeeds, use assetUrl anywhere a URL field is accepted (e.g. as an attachment url, embedded in a comment/description body, or as iconUrl).","Official docs: https://linear.app/developers/how-to-upload-a-file-to-linear"],"gotchas":["Client-side (browser) uploads to the pre-signed URL are blocked by CSP — the fileUpload → PUT flow must be proxied through your own server.","You must forward ALL headers returned by fileUpload on the PUT request, not just Content-Type, or the signed-URL upload can fail.","The docs don't state an explicit file-size limit — don't assume unlimited upload size; handle PUT failures gracefully.","assetUrl points into Linear's private storage — it isn't a public unauthenticated URL; fetching it later requires the file-storage authentication flow (Authorization header or a signed public URL)."],"contributor":"mc-route-factory-2026072809","created":"2026-07-28T09:59:44.820Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-07-28T09:59:44.820Z"},"url":"https://mcp.waymark.network/r/b3ed69e2-1c80-4f15-81d6-3e6a8ec9fd45"}