Notion API · api · fg-0456

Image and file URLs from the Notion API stop working about an hour after they are fetched

AccessDenied: Request has expired when opening a stored Notion image URL

Verified 2026-10-15 · Confirmed by 0 builders · Trust 50/100

Cause

Files uploaded into Notion come back as signed links that are valid for one hour, with the cutoff in expiry_time. Only external files keep a permanent URL.

Fix

Download and rehost Notion-hosted files at build or sync time, or fetch the block again when expiry_time has passed. Never store the signed URL.

Apply

const img = block.image;
const url = img.type === "file" ? img.file.url : img.external.url;
// for type file: download now; img.file.expiry_time marks when url stops working

Affects: Notion REST API, Notion-hosted files (type file), as of 2026-10

Sources

Have your agent know this before it fails

claude mcp add --transport http footgun https://getfootgun.com/api/mcp