Slack link unfurling for a page that shows a Sume render

A Slack app can unfurl your own link with a Sume render preview using link_shared and chat.unfurl. Learn the 5-domain limit and the reinstall rule first.

5 min readSume
All posts

To show a preview of a Sume render when someone pastes your link into Slack, build a Slack app that subscribes to the link_shared event for your domain, looks up the render for the link, and calls chat.unfurl with the preview. An app can register up to 5 domains, and adding or removing one requires reinstalling the app.

The Slack facts are from Unfurling links in messages, read 2026-10-10. The Sume facts are from Runs and results and Jobs and results. The link points to your own page, not to Sume's.

What does Slack require?

The page lists the link_shared event, the links:read and links:write scopes, and the chat.unfurl method. You register the domains your app handles, up to 5, and a change to that list needs a reinstall of the app in each workspace. An unfurl may use blocks, so the preview can have an image and text.

Pick the domain before you build. A short, stable domain such as a share subdomain is easier to keep inside the limit of 5 than one domain per campaign, and it saves you the reinstall that Slack requires for every change to the list.

Unfurl pieces (Slack docs, read 2026-10-10)
PieceSlack saysUse for a render link
link_sharedEvent sent when a registered domain is postedTrigger to look up the render
DomainsUp to 5; change needs a reinstallUse one stable domain for share pages
links:read, links:writeRequired scopesRequest both
chat.unfurlMethod that supplies the previewSend the image and a one-line caption
BlocksSupported in the unfurlImage block plus a context line

What is the link?

Do not point Slack at an API URL. Use a share page you control, such as https://share.example.com/r/ab12, where ab12 is a short id in your own database mapping to a Sume run id. The link_shared handler splits the path, finds the run id and reads the stored result.

This keeps the API key server-side. Nobody pastes a Sume key into a link, and the page you share can enforce your own access rules.

Keep the unfurl small. One image, a title that names what was rendered and a short caption are enough. The preview is a teaser, and the full file belongs on your page, where you can add download links and permissions.

How do I fetch the preview?

Read the run once, store what you need, and unfurl from your store. The result endpoint answers 409 run_not_completed until a run is terminal, so a link pasted while a render is still going should unfurl a plain "still rendering" card and leave the media out. When the run is terminal, the receipt holds the media in artifacts[] and a primary output URL.

Media URLs from a finished Format run are durable media.sume.com HTTPS URLs that do not expire, per the runs page, so a cached unfurl will not break later. Only successful, completed runs belong in a preview; a failed run should show a short message, not a half-made file.

A small caution on private content: an unfurl exposes the preview to everyone who can see the Slack message. If the render is not meant for the whole channel, unfurl only a generic card and let the share page check the viewer.

What can go wrong?

Reinstall is the surprise. If you add a second domain next month, every workspace has to reinstall the app before it sees links on the new domain. Plan the domain up front.

The other trap is repeated work. Slack may send the same link several times. Look up by run id, cache the unfurl payload and answer from the cache. You never need to call Sume again for a finished run, and a finished run costs nothing to re-read.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume