> ## 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.

# Approve or deny data access

> Decide whether an investor gets ongoing access to your data, and to which parts.

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 access request is different from a report request. A report is a
point-in-time answer you assemble and send; data access is a standing
permission that lets an investor read specified data as it changes.

<Diagram
  kind="compare"
  pairs={[
{
  from: { label: "Report request" },
  to: { label: "One report", note: "frozen when sent" },
},
{
  from: { label: "Data access request" },
  to: { label: "Ongoing read", note: "current as it changes" },
},
]}
/>

Because it persists, it deserves a slower decision than a report request does.

## Review a request

<Steps>
  <Step title="Open Data Access">
    Pending requests are listed with who asked and what they asked for. Nothing
    is granted until you act; a request sitting unanswered gives no access.

    <Frame caption="The Data Access page, where investor requests wait for your decision.">
      <img src="https://mintcdn.com/vein/7QlBMDMiW_wcqW8D/images/guides/access-1-review.png?fit=max&auto=format&n=7QlBMDMiW_wcqW8D&q=85&s=6908bcb01bc80490403f6f2f023927a6" alt="The Vein Data Access page, listing investor requests for ongoing data access" width="2880" height="1800" data-path="images/guides/access-1-review.png" />
    </Frame>
  </Step>

  <Step title="Read the scope, not just the name">
    The request names specific data rather than asking for everything. Check
    what is actually being requested against what that investor needs; the two
    are not always the same, and narrowing is a normal response rather than an
    unfriendly one.
  </Step>

  <Step title="Approve or deny">
    Approving grants access to the named scope. Denying closes the request. In
    either case the investor sees the outcome in their own view.

    <Tip>
      If a request is broader than you want but the relationship is one you
      value, deny it and ask them to request a narrower scope. That is a cleaner
      outcome than approving something you will want to revoke later.
    </Tip>
  </Step>
</Steps>

## Revoking access

Approval is not permanent. Access granted through this flow can be withdrawn,
and doing so stops future reads, but it does not retract data the investor has
already seen or reports they already hold. Treat the decision as one about what
they see from now on rather than one you can fully undo.

## What investors cannot do

Access is read-only in every case. An investor with data access cannot change
your metrics, edit your reports, alter your connections, or see anything outside
the scope you approved.
