Share a saved canvas by link
well_share_canvasFreeze one of the workspace's saved canvases WITH its figures and return a link that opens it outside Well, with no Well account.
Use it when someone asks to send a board to an investor, an accountant, a bank or anyone else who cannot sign in. The link is the whole credential: whoever holds it can read those figures until it is stopped.
WORKFLOW — the same measuring as well_render_canvas, then BOTH calls:
well_show_canvas({ canvas_view_id }) → the board's version, and its blocks, each with the feed it reads and the window it asks for.
For EVERY block that names a feed, run that feed's own skill over that block's window, and call its render tool (well_render_cash_position, well_render_burn, well_render_mrr, well_render_runway, well_render_cost_structure, well_render_cash_forecast, well_render_cash_flow_bridge).
well_render_canvas({ canvas_view_id, version, blocks }) → the board, drawn for the person you are talking to.
well_share_canvas({ canvas_view_id, version, blocks }) → the link, from the same readings.
Both, and in that order. The person who asked to send a board wants to see what they are sending; a link on its own asks them to open it themselves to find out.
Forward each reading as it came back, and send nothing beside it. A reading that is not its block's own render tool output, that covers a different window than its block asks for, or whose figure cannot be drawn is refused, and every feed block needs an entry: a board shared with one block missing reads as a board whose missing figure is zero. A board that holds one widget is shared with well_share_widget, not this tool.
What the reader sees is frozen at the moment you share it, and dated with that moment, private data included. It does not follow the board afterwards: editing the canvas, or measuring it again, changes nothing on a link already sent. To send newer figures on the SAME link, measure the board again and call well_refresh_share_link; to send a separate link, share again.
THE LIFETIME: the link has no expiry, whatever the size of the board. It opens until the person stops it with well_revoke_share_links, and a refresh does not change that. When the person wants the link to stop at a date, say it opens until they stop it, and offer to stop it when they ask.
Give the link to the person who asked in the same reply. Say with it that it opens until they stop it, that anyone holding the link can open the board, so it should go to the people they meant and no further, and that you can stop it at any time with well_revoke_share_links.
What the reader sees is each block's figure, its currency and the words that block draws. Not the accounts behind a cash position, not the bank or the account number, not the feed each block reads or the window it asked for. A slice of a cost structure is named the way the board names it, which on a chart of accounts can be a person, so say what the board is about rather than promising it names nobody.
Do NOT use it in place of well_render_canvas. That one draws and stores nothing, and it is what answers "show me the board". This one is only for the reader who cannot sign in.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| blocks | Yes | One entry per block on the canvas that names a feed. A note takes none. | |
| version | Yes | The canvas version well_show_canvas returned. The readings were measured against that version's blocks. | |
| workspace_id | No | Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which. | |
| canvas_view_id | Yes | The canvas to share. Read it first with well_show_canvas. | |
| conversation_id | No | The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation. | |
| idempotency_key | No | Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation. | |
| workspace_scope | No | Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | The link to give the person who asked. Later, well_list_share_links gives it back to them only. | |
| name | No | ||
| error | No | ||
| success | Yes | ||
| expires_at | No | Null: the link opens until it is stopped. | |
| resolved_at | No | ||
| share_link_id | No | Names this link for well_refresh_share_link and well_revoke_share_links. Not something to give the reader. | |
| conversation_id | No | The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation. | |
| newly_connected | No | Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later. | |
| resolved_workspace | No | The workspace that answered, when the caller named none and the token authorizes several. | |
| conversation_id_note | No | Present only when the server opened a fresh lane, stating that no choice recorded earlier was read. | |
| conversation_id_source | No | Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened. |