> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vein.finance/llms.txt
> Use this file to discover all available pages before exploring further.

# Share a data room

> Publish a password-protected link to a report you have already sent.

export const Diagram = ({kind = "chain", steps = [], feedback = null, sources = [], decision = null, result = null, source = null, hub = null, branches = [], pairs = []}) => {
  const glyph = k => <svg viewBox="0 0 20 12" fill="none" aria-hidden="true" key={k}>
      <path d="M1 6h15.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" />
      <path d="M13.5 1.5 18.5 6l-5 4.5" stroke="currentColor" strokeWidth="1.75" strokeLinecap="round" strokeLinejoin="round" />
    </svg>;
  const arrow = k => <span className="vein-flow__chevron" key={`a${k}`}>
      {glyph(k)}
    </span>;
  const box = (n, k, variant) => n ? <div key={`n${k}`} className={variant ? `vein-flow__node vein-flow__node--${variant}` : "vein-flow__node"}>
        <span className="vein-flow__label">{n.label}</span>
        {n.note ? <span className="vein-flow__note">{n.note}</span> : null}
      </div> : null;
  const spine = paths => <div className="vein-flow__spine">
      <svg viewBox="0 0 100 100" preserveAspectRatio="none" fill="none">
        {paths.map(d => <path key={d} d={d} stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" vectorEffect="non-scaling-stroke" />)}
      </svg>
    </div>;
  if (kind === "merge") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          <div className="vein-flow__stack">
            {sources.map((s, i) => <div className="vein-flow__row" key={s.label}>
                {box(s, i)}
              </div>)}
          </div>
          {}
          {spine(["M0 25C55 25 45 50 100 50", "M0 75C55 75 45 50 100 50"])}
          {arrow("d")}
          {box(decision, "d", "decision")}
          {arrow("r")}
          {box(result, "r", "strong")}
        </div>
      </div>;
  }
  if (kind === "fan") {
    return <div className="vein-flow">
        <div className="vein-flow__branching">
          {box(source, "s")}
          {arrow("s")}
          {box(hub, "h")}
          {}
          {spine(["M0 50C55 50 45 16.667 100 16.667", "M0 50H100", "M0 50C55 50 45 83.333 100 83.333"])}
          <div className="vein-flow__stack">
            {branches.map((b, i) => <div className="vein-flow__row" key={b.label}>
                {arrow(`b${i}`)}
                {box(b, `b${i}`)}
              </div>)}
          </div>
        </div>
      </div>;
  }
  if (kind === "compare") {
    return <div className="vein-flow">
        <div className="vein-flow__compare">
          {pairs.map((p, i) => <div className="vein-flow__pair" key={p.from.label}>
              {box(p.from, `f${i}`)}
              {arrow(`p${i}`)}
              {box(p.to, `t${i}`, "strong")}
            </div>)}
        </div>
      </div>;
  }
  const n = steps.length;
  const centre = i => `${((i + 0.5) / n * 100).toFixed(3)}%`;
  return <div className="vein-flow">
      <div className="vein-flow__track" style={{
    "--vein-flow-n": n
  }}>
        {steps.map((step, i) => <div className="vein-flow__cell" key={step.label}>
            {box(step, i, step.strong ? "strong" : null)}
            {i < n - 1 ? arrow(i) : null}
          </div>)}
      </div>

      {feedback ? <div className="vein-flow__loop">
          <div className="vein-flow__loop-path" style={{
    left: centre(feedback.to),
    right: `calc(100% - ${centre(feedback.from)})`
  }} />
          <span className="vein-flow__loop-chevron" style={{
    left: centre(feedback.to)
  }}>
            {glyph("loop")}
          </span>
          {feedback.label ? <span className="vein-flow__loop-label" style={{
    left: `calc((${centre(feedback.to)} + ${centre(feedback.from)}) / 2)`
  }}>
              {feedback.label}
            </span> : null}
        </div> : null}
    </div>;
};

A data room is a link rather than a delivery. It wraps a report you have
**already sent** in access controls (a password, an optional email prompt, an
expiry date) so you can hand the same numbers to someone outside your investor
list without emailing them a file.

The important consequence of that design: a data room does not have its own
content. You do not assemble one from blocks. You pick a sent report, and the
data room is a controlled way of reaching it.

<Diagram
  kind="chain"
  steps={[
{ label: "A report you already sent" },
{ label: "Data room", note: "access controls" },
{ label: "A link you can share", strong: true },
]}
/>

## Publish one

<Steps>
  <Step title="Open the Data Rooms tab">
    Data rooms live on the Reporting page, alongside your reports and requests.
    Existing rooms are counted by state: active, expired, revoked.

    <Frame caption="On the Data Rooms tab, press New Data Room.">
      <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/dataroom-1-new.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=3380f765a7371580e769fea10a0f9797" alt="The Vein Reporting page on the Data Rooms tab with the New Data Room button highlighted" width="2880" height="1800" data-path="images/guides/dataroom-1-new.png" />
    </Frame>
  </Step>

  <Step title="Link a sent report">
    The dialog opens on the report picker. Only reports you have already sent
    appear here, so if the one you want is missing, send it first.

    <Frame caption="Create data room: pick the sent report, then set how it can be reached.">
      <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/dataroom-2-configure.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=d1608b58d3d12a8f6bd27fd647de0e92" alt="The Vein create data room dialog, showing the linked report picker and access settings" width="2880" height="1800" data-path="images/guides/dataroom-2-configure.png" />
    </Frame>
  </Step>

  <Step title="Set the access controls">
    Name the room something that will make sense to the person opening it; they
    see it. Then decide how tightly to hold it:

    | Control            | Default    | What it does                                           |
    | ------------------ | ---------- | ------------------------------------------------------ |
    | Password           | Required   | Every data room has one. There is no unprotected link. |
    | Require email      | Off        | Visitors identify themselves before entering           |
    | Allow PDF download | On         | Lets a visitor export the report                       |
    | Allow printing     | On         | Lets a visitor print from the browser                  |
    | Expiration         | Set a date | The link stops working after it                        |
    | Watermark          | Empty      | Prints text across every page of the report            |

    Leaving the watermark blank shows none. Filling it in (`STRICTLY
            CONFIDENTIAL`, or the name of the person you are sending it to) lays that
    text faintly behind the whole report, so a screenshot carries it too.

    <Tip>
      Turn off PDF download and printing for a room you are handing to someone
      early in a conversation. It does not make the numbers unreachable, since a
      screenshot always works, but it keeps your report from being forwarded as
      an attachment.
    </Tip>
  </Step>

  <Step title="Share the link">
    Send the link to the person who needs it, and send the password through a
    different channel. A link and its password in the same email is one forward
    away from being public.
  </Step>
</Steps>

## What a visitor sees

Opening the link puts them through a confidentiality notice first, then the
password, and then the email prompt if you required one. Only after that does
the report appear.

<Diagram
  kind="chain"
  steps={[
{ label: "Opens your link" },
{ label: "Confidentiality notice" },
{ label: "Password" },
{ label: "Email, if required" },
{ label: "The report", strong: true },
]}
/>

<Warning>
  The link works for anyone holding it and the password. If either may have
  spread beyond who you intended, revoke the room and create a new one. The
  email prompt records who visited; it does not restrict who can.
</Warning>

## Track who opened it

Publishing a room hands out a link; opening that room's detail view tells you
what happened to it. During a raise this is the most useful screen in the
product, because it is the only place Vein tells you something you did not
already know.

Every visit is recorded as a row:

| Column   | Shows                                             |
| -------- | ------------------------------------------------- |
| Visitor  | Their name and email, with the IP address beneath |
| Date     | When they opened the room                         |
| Duration | Roughly how long they stayed, in minutes          |

The list is paginated, newest first, and a room nobody has opened says so rather
than showing an empty table. The same view repeats the room's current settings
above the history, so you can see what a visitor was permitted to do without
opening the configuration again.

Two limits are worth holding in mind. A visitor row is only as identifiable as
the room let it be. If you did not require an email address, visitors appear as
**Anonymous** with only an IP and a timestamp, and that cannot be applied
retroactively to visits that already happened. And duration is time the room was
open, not time spent reading; a tab left open over lunch produces a long session.
Treat these as a signal of interest across several visitors rather than a
measurement of any one of them.

<Tip>
  Turn on the **Data Room Activity** email in
  [notification settings](/guides/notifications) to hear about visits as they
  happen rather than checking this screen. It is the one notification that
  defaults to off, because it is noisy unless you are actively sharing something.
</Tip>

## Revoking

An active room can be revoked from the same detail view. The link stops working
immediately for everyone holding it, and the room stays in your list marked
revoked rather than vanishing, so the record of who visited survives the
revocation.

<Warning>
  Revoking stops future visits. It does nothing about what an earlier visitor
  already saw, downloaded, or screenshotted. If a room reached someone it should
  not have, revoke it and assume the contents travelled; then send a new report
  and publish a fresh room against that one for the people who should still have
  it.
</Warning>

## Keeping it current

Because a data room points at a sent report, it shows what that report showed
when you sent it. It does not quietly update as your metrics move. To share
newer numbers, send a new report and create a room against that one, which is
the same guarantee your investors get, and for the same reason.
