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