Skip to Content

Public links

A public link opens one published storyboard, read-only, for anyone who has the link. Readers need no Cardinal account. Use it to share a write-up with a vendor, a customer, or a team that isn’t in your Cardinal org. Members of your org don’t need one: they can open the storyboard’s view_url.

On a self-hosted Cardinal UI, where links point depends on your operator’s settings; see Self-hosted setup.

Reach out to support@cardinalhq.io for support or to ask questions not answered in our documentation.

Rules

  • Published storyboards only. A draft can never be shared publicly. A link shows only published acts, and published acts are immutable, so it always shows exactly what passed publish.
  • A link shows the acts it covers. Publishing a new act asks whether to extend existing links; links that include raw evidence need a separate confirmation. A new link covers every act published when it is created. See Links and new acts.
  • Your org must allow it. The org setting Public storyboard links decides whether members can create links. See Org policy.
  • The URL is the credential. Cardinal stores only a hash of it, so the URL is shown once, when the link is created. A lost URL can’t be recovered: revoke the link and create another.
  • Revocable. Revoking a link stops it working within a minute (a reader’s browser may keep showing a cached copy for up to 60 seconds). Deleting the storyboard ends its links too.
  • Optional expiry. An expired link behaves like a revoked one.
  • Raw evidence is chosen once. Whether readers can open raw results is fixed when the link is created. To change it, revoke the link and create a new one, so a URL you already sent never starts showing more.

On Cardinal Cloud, public links are served from share.cardinalhq.io, a separate host that sets no cookies, sends no referrer, and asks search engines not to index its pages.

For a live investigation draft, ask your agent to publish the storyboard. Its skill updates the scenes, renders and refines previews, then publishes. Draft-status storyboards remain author-only until publication. If you publish an already authored visualization through the UI instead, first choose Publish…. If the question or time window is not yet stated, review the publishing details, choose the period this version covers, and select Save publishing details. This saves the framing while keeping the Storyboard private. If scenes are missing or outdated, ask your investigating agent to update and preview the visualization in its session. Then choose Publish. Publishing freezes that act; it does not create an external link.

In Cardinal: open the published storyboard and choose Share in its header. In the Share publicly dialog:

  1. Leave Include raw evidence off unless readers need the raw results (see What readers see).
  2. Pick when the link Expires: never, or after 1, 7, 30 or 90 days.
  3. Choose Create public link, then Copy. The link is shown only once.

From Claude: ask it to share the storyboard publicly. Claude calls storyboard__share with action: "create" and hands you the public_url. It can set expires_in_days (1 to 365), and turns on include_raw_evidence only if you ask. After publishing, Claude’s publish result reminds it that storyboard__share exists.

The Share publicly dialog lists every link of the storyboard with its status (active, revoked or expired), whether it includes raw evidence, its expiry, how many times it was viewed, and which acts it shows, for example Shows acts 1–1 of 2. Choose Revoke, then Confirm revoke, to end one.

From Claude, storyboard__share with action: "list" returns the same metadata, including each link’s through_act, and action: "revoke" with a share_id (shr_…) ends a link. Revoking is safe to repeat. Neither the list nor anything else ever returns a link’s URL again.

Creating, listing, extending and revoking links needs the Member or Owner role.

A link records the last act it shows, its through_act. When Claude publishes a later act, existing links don’t show it until someone decides they should, so a URL you already sent never starts showing content you haven’t seen.

act 1 published ── link created (shows act 1) act 2 published ── public_links: "keep" → the link still shows act 1 └─ public_links: "extend" → the link shows acts 1–2 (raw-evidence link over raw bindings: also confirm_raw_evidence, after the person says yes)
  • Publishing asks. Publishing act 2 or later onto a storyboard with live links is refused with public_links_decision_required, which lists the links, until the publish says public_links: "extend" (show the new act) or "keep" (links keep showing the acts they show now). The Cardinal plugin asks you, unless you already told Claude to update what you shared. A storyboard with no live links publishes without the question.
  • Extending is sharing. extend needs permission to share storyboards publicly, as creating a link does; without it the publish is refused with share_permission_required, and keep still works.
  • Raw evidence needs its own yes. When a link includes raw evidence and the acts it would newly show bind whole results or every row of a dataset, extending it is refused with raw_evidence_confirmation_required, which lists those bindings, until the call adds confirm_raw_evidence: true. The plugin always asks you before confirming raw evidence on an extended link, even when you asked it to update what you shared, and only your yes sends it.
  • Links without raw evidence stay without it. On a link without raw evidence, a newly shown scene that binds a whole result or every row of a dataset is listed, but its Canvas isn’t served to readers. The publish result names those scenes in raw_scenes_hidden.
  • Extend later. In the Share publicly dialog, choose Extend to act n on a link (a raw-evidence link over raw bindings shows them first, with Confirm raw evidence and extend to act n). From Claude, storyboard__share with action: "extend", the link’s share_id and optionally through_act. A link can’t be narrowed: to show fewer acts, revoke it and create another.
  • No notice of later acts. A reader of a link sees the acts it shows, and nothing says that later acts exist. A draft act is never shown.

What readers see

A public link opens the same viewer your org uses: every scene of the acts the link shows, with a divider for each act, its statement, state, claims and open questions, its Canvas, and the storyboard’s evidence tally with a tier badge on every receipt. It has no way into the rest of Cardinal and no Open in Explore. Nothing is re-queried when a reader opens it.

What the evidence drawer shows depends on Include raw evidence:

Raw evidence off (default)Raw evidence on
Receipt summary: tool, source server, evidence tier, arguments including the query text (credentials redacted), time range, row count, whether the result was truncatedYesYes
The full result the investigation saw (credentials redacted), including a failed call’s error textNoYes
Rows of frozen datasetsNoYes
Receipts the storyboard doesn’t citeNeverNever
Who wrote it: session id, API key, client, uploaderNeverNever
Where each act was written: repository, branch, pull request, commit, directory id, emailNeverNever
Which folder the storyboard is in, its metadata badges, and who created itNeverNever

Public links never show folders, repository/branch/PR badges or who created the storyboard. Moving a storyboard between folders doesn’t change its links.

The query and its arguments are always visible on a public link, raw evidence or not. Only credentials are redacted: literals in a SQL, LogQL or PromQL query, such as customer ids, emails or hostnames, are shown to anyone with the link, so check every cited query before you share.

The Canvas always receives the values its scenes bind, because it can’t draw without them, and the page shows what the Canvas draws. So a link without raw evidence can’t be created for a storyboard with a scene that binds a whole result or every row of a dataset: Cardinal refuses with raw_evidence_required and lists those scenes. Either create the link with Include raw evidence on, or publish a new storyboard whose scenes bind only what they draw (a selected field, a reduced value, a series). Scenes that bind narrower values still show those values to every reader, so read through a storyboard before you share it.

Below the storyboard, a footer line reads Made with Cardinal Storyboards., with a Make your own with Claude link, and Report this page.

A revoked, expired or unknown link, and a link whose org has turned public links off, all show the same “not found” page.

When a storyboard’s link is posted in Slack, Teams, a social network or another app that unfurls links, the app shows a small preview card instead of a bare URL. Cardinal serves that card for two kinds of link:

LinkLooks likePreview
A public linkhttps://share.cardinalhq.io/s/<token>Always, while the link is live.
A member linkhttps://app.cardinalhq.io/storyboards/sb_… (the view_url)On by default, including storyboards published before previews existed. You can turn it off.

Previews use the standard Open Graph and Twitter card tags in the page, so they work in any app that reads them. Cardinal doesn’t run a Slack app for this and asks for no Slack permissions.

What a preview shows

  • The question the storyboard asks, as the title.
  • The finding. The headline Claude wrote for the act (see Link previews: headline and cover), or, without one, the statement of the scene that reaches a verdict, picked by Cardinal.
  • The counts and verdict, for example 3 established · 1 ruled out · 2 open.
  • An image: the cover render (see What the image is) or a summary card Cardinal draws from the text above.

The description reads <finding> · <counts>, cut to 200 characters. When it is too long, the finding is shortened and the counts always stay.

What it never shows

Scenes other than the one finding, evidence and receipts, drafts, the context the storyboard was written from, its associations, who wrote it, and which folder it is in. A member link’s preview uses only the latest published act, never a draft act.

A public link’s preview is pinned to the acts the link shows, up to its through_act. Publishing a later act changes nothing about it until the link is extended, and then it describes the extended link.

What the image is

AudienceThe image
Member linkThe act’s designated cover (the scene the author chose with cover_scene), and only when that scene binds no raw evidence. Otherwise a summary card.
Public linkThe act’s cover (or, with none designated, its hero scene), when the link includes raw evidence or that scene binds none. Otherwise a summary card.

The cover is a render Claude Code made on the author’s machine and uploaded after publishing, because Cardinal never renders a Canvas itself. A summary card is drawn by Cardinal from the question, the finding, the counts and the figure, with no scene content. A member preview therefore never shows more than a summary-only public link would.

  • On by default. Posting a member link unfurls it unless you turn that off, for the whole org or for one storyboard.
  • Independent of public links. A member link preview doesn’t need the Public storyboard links setting, and turning that setting off doesn’t remove it.
  • Anyone with the link sees the card. The preview’s text and image are served without signing in, to whoever has the member link, not only to the chat app. That is the question, the finding, the counts and verdict, and the image; nothing more.
  • The same card for everyone. The app that fetches the link isn’t signed in as anyone, so the preview contains only the items above, and everyone who sees the post sees the same card.
  • No way to find out what exists. A link to an unknown storyboard, a deleted one, a draft, one whose preview is off, one whose org is disabled, and one in an org that has previews off all look the same to the app that fetches the link: Cardinal’s ordinary page with no storyboard details, and the same generic image. A ?org= in the URL is ignored: a storyboard that previews unfurls the same way whichever org or person posts the link. An app that asks for many previews of the page in a short time (more than 60 a minute from one address) gets the generic one too, and one that asks for many images (more than 120 a minute) is refused (429). So a preview can’t be used to tell an unknown storyboard from one that doesn’t preview.
  • The page itself is unchanged. Opening a member link still needs you to sign in and be a member.

Turning previews off

Three switches, from broad to narrow. The org switch and a storyboard’s switch each turn off member previews only.

WhereWhoHow
OrgAn organization ownerSettings → About → Storyboard link previews: the Show link previews for storyboards switch. Plugin keys can’t change it.
One storyboardA memberOpen the published storyboard, choose Share, and use the Link preview section’s switch, Show a preview when this storyboard’s link is posted. Or ask Claude: it publishes with link_preview: false, or calls storyboard__share with action: "link_preview" and enabled: false.
One public linkSomeone who can shareRevoke the link. A public link always shows its own preview while it is live.

The Link preview section is the first thing in the Share dialog, above the public-links controls, and is there even when public links are off. It shows the exact card a posted link shows now (image, title and description) and this note: Anyone who sees a posted link sees this card: the question, headline, counts and verdict. Scenes, evidence, drafts and who wrote it are never included. With the org switch off, the storyboard switch is disabled and says Link previews are turned off for this organization. An organization owner can turn them on in Settings → About. A draft has no preview section.

Turning previews off doesn’t change what the storyboard’s members can open, and it revokes no links. A storyboard’s switch keeps its value when the org switch is turned off and on again.

Previews that were already posted stay. Turning a preview off stops Cardinal serving it to apps that ask afterwards. A message that already unfurled keeps its card, and apps may cache the image. Deleting the storyboard or revoking a link ends what Cardinal serves, but it can’t recall a copy that an app has stored.

Self-hosted

Where previews and their images are served from, and what the chat app must be able to reach, is in Self-hosted setup.

Org policy

The Public storyboard links card in Settings → About shows whether members can create public links. Only an organization owner can change it, with Allow public storyboard links.

OrgDefault
Team orgs, including every org that existed before public links shippedOff
Personal workspacesOn
  • Turning it off revokes every public link in the org immediately. Turning it back on later does not bring those links back.
  • While it’s off, members can still list and revoke links, and share storyboards inside the org with their view_url.
ErrorWhyWhat to do
public_links_disabledThe org’s Public storyboard links setting is off.Ask an organization owner to turn it on in Settings → About.
storyboard_not_publishedThe storyboard is a draft.Publish it first.
raw_evidence_requiredThe link has raw evidence off, but a scene binds a whole result or every row of a dataset. The error lists those scenes.Turn on Include raw evidence, or publish a narrower storyboard.
storyboard_changedThe storyboard changed while the link was being created.Try again.
share_host_not_configuredThis Cardinal has no public address for links.Self-hosted only: your operator sets SHARE_HOST or MAESTRO_BASE_URL. See Self-hosted setup.
quota_exceededA personal workspace’s links used up today’s views.Readers see a plain message; views resume at 00:00 UTC.
public_links_decision_requiredAn act is being published onto a storyboard with live links.Publish again with public_links: "extend" or "keep". Claude asks you which.
raw_evidence_confirmation_requiredA link with raw evidence would newly show acts that bind whole results or every row of a dataset. The error lists the bindings.Review them. Only if you agree, extend with confirm_raw_evidence: true; otherwise keep the link as it is.
share_permission_requiredThe caller may publish but not share publicly.Publish with public_links: "keep"; someone who can share extends the links later.
invalid_through_actThe act asked for is not published, or is before what the link shows now.Extend to a published act at or after the link’s current through_act.
share_not_activeThe link was revoked or has expired.Create a new link.

Report abuse

Anyone viewing a public link can choose Report this page and pick a reason: it exposes private or confidential data, it is malicious, it is spam, or something else, with optional details. Reports are anonymous and go to Cardinal for review. Cardinal can revoke any public link.

Reach out to support@cardinalhq.io for support or to ask questions not answered in our documentation.

Last updated on