Sharing a private link

One link per viewer: make it, send it, expire it, revoke it.

On this page

A private link is one viewer's way into your room. It carries the name of the person you made it for, can expire on a date you choose, and can be revoked at any moment. Everything that person does in the room is recorded against it, which is what the app's Activity, Analytics and Pipeline are built from. This page covers making a link from the terminal, the app or Claude, what the viewer sees when they open it, and how links end.

Before you start

A link belongs to a project, so the project has to exist: the first pitch deploy --commit creates it. A link to a project with no live build opens a room that says nothing has been published yet, so deploy first.

From the terminal

In the demo's folder:

pitch link "Priya Shah" --email priya@example.com --expires 14
  A link for Priya Shah, until 2026-10-13:
  https://ledgerline.getroomi.app/l/3q2Vx8kLpZ0aN4rT7yWbEg
  Send it to them. If it is lost, `pitch link copy "Priya Shah"` shows it again.

Copy the address and send it to Priya yourself, by email or however you usually reach her. Roomi sends nothing.

Argument What it does
<name> The viewer's name, up to 80 characters. Required. The room greets them by it, and it is how the app lists them. Quotes are optional: every word after link is the name.
--email <address> The viewer's email, for your own records in the app. Optional.
--expires <days> Close the link this many days from now: a whole number from 1 to 365. Without it, the link never expires.
--project <slug> The project to make it for. Without it, the project named in pitch.json in this folder.

pitch link acts at once: there is no rehearsal, because making a link changes nothing anyone can see until you send it.

It stops, and makes nothing, when:

  • you are not signed in: run pitch login;
  • there is no project of that name yet: pitch deploy --commit creates it;
  • --expires is not a whole number from 1 to 365;
  • the workspace's plan has no private links, or has used this month's viewer-hours. The platform's reason is printed, naming what it allows.

From the app

Open the project at app.getroomi.com, choose New link at the top, or go to the Links tab. Give the viewer's name, an email if you like, and when it should expire: in a week, in two weeks (the default), in a month, in three months, or never. Choose + New link.

The app shows the address once, with a Copy button. Once you choose Done or leave the tab, it is gone.

The Links tab lists every link on the project, with its viewer, their email, when it expires, and its state: Active, Expired or Revoked. An active link also shows where its viewer is in the pipeline: sent, opened, engaged, said yes, later, or not now.

From Claude

With the connector added (Deploying from Claude), ask:

Make a viewer link for Priya Shah on Ledgerline, expiring in two weeks.

Claude calls create_link with arguments like these:

{
  "projectId": "c1f4e2a8-0b6d-4f3e-9a71-5d2c8e4b6f90",
  "viewerName": "Priya Shah",
  "viewerEmail": "priya@example.com",
  "expiresInDays": 14
}

The tool returns the address once, and Claude hands it to you in that reply. If it is lost, revoke the link and make another.

What the viewer sees

The link takes them straight into the room, with nothing to sign up for. The room removes the link from the address bar as it lets them in: the link is their key, not a bookmark.

They see the room in your name, or your brand's on a paid plan: the demo on a stage in its device frame, a tab for each app, the tour offered if the build has a story, your pages under Read more, and What happens next?. A notice on every room says the demo runs on mock data. On a container demo the stage says Starting the demo… for the few seconds their copy takes to start.

Who is looking

Every browser that opens a link is asked first, including the first one, so a link forwarded before Priya opens it is not filed under her:

Are you Priya Shah?

Yes, I'm Priya Shah carries on as her. No, I'm someone else asks for a name and an email, and adds that person under the same link, so you can see the pitch was passed on. Someone who said yes can pick Not Priya Shah? beside the name in the room later; what that browser did as her moves to the name they give. The room cannot tell who is at the keyboard; it asks, and records what it is told.

Emails

No email is ever sent to a viewer, so none is checked. An email in the app is only what someone typed, and the app marks it unverified.

  • A viewer is asked for an email once, the first time they comment or react, so you know who a comment is from.
  • A project can ask for one before the room shows anything: Require an email to view, under Room access in the project's Settings.
  • The email you give when making a link is the named person's once they answer Yes, so they are not asked for it again. Someone who says they are someone else gives their own.

Coming back

The room remembers a browser for up to 12 hours. After that, or in another browser, the viewer opens their link again. Because the address bar no longer holds the link, tell them to keep the message you sent it in.

On their phone

On your phone, under the stage, shows a QR code. The phone that scans it joins the same copy of the demo, as the same person, so an order placed on the phone shows up on the laptop. A code works for 10 minutes.

Expiry

A link with an expiry closes at that moment: exactly the number of days you chose after you made it. It is checked on every request, not only when the room is first opened, so a viewer already in the room is stopped at their next request, in the room or in the demo. An expiry cannot be changed afterwards; make the viewer a new link.

Revoking

Revoke a link from the Links tab (Revoke, then Revoke Priya Shah's link to confirm) or from Claude with revoke_link. It stops working at once, on every request, and cannot be undone. What the viewer already did stays on record.

Revoke a link whenever it might have gone somewhere it should not, and make the viewer a new one.

When they lose it

Copy link, beside the viewer on the Links tab, on their pipeline card or on their journey, copies the same address again for you to resend. From the terminal, pitch link copy "Priya Shah" prints it (and, at a terminal on a Mac, copies it), and pitch links --show prints every live one; from Claude, get_link. Each time is recorded in the project's history, with who asked.

A link made before 1 October 2026 cannot be shown again: the platform kept only a hash of its key then. Its button says Reissue link instead. Reissuing gives the same viewer a new address, copied for you to send, and keeps everything they did; the address you sent before stops opening the room at once. Someone already in the room through the old address keeps that visit until it closes, at most 12 hours.

A revoked or expired link answers with a plain Not found, the same as a link that never existed. It says nothing about the room, the project or you, so a link that has leaked tells whoever holds it nothing.

The same Not found answers every link to a project that has been deleted or paused: a project is paused when the workspace has more projects than its plan allows, and while Roomi has it taken down.

If your workspace has used its month's viewer-hours, a link still works, but the room shows This room is not taking visits right now and asks the viewer to contact you directly. It names no plan and no figure. Anyone already in the room is not cut off. Plans and limits covers viewer-hours.

A forwarded link opens as the original viewer's does, and the newcomer is asked who they are. Whoever says they are someone else appears under the link:

  • on the link's card in the pipeline, as Forwarded, with the names and emails they gave;
  • in Activity, under Who has opened this link.

Their visits count on the same link, and they share its copy of a container demo. If you would rather each person had their own link, make them one. If you offer the Bring in a colleague next step, a viewer can ask you to.

  • The platform keeps a hash of each link's key, which is how the room finds the link, and the key itself encrypted with a secret that is never in its database. Someone who read the database alone could open no room; showing an address again needs that secret as well, and only a signed-in member of your workspace can ask for it (a connection to Claude that may only read cannot).
  • Anyone who has the address can open the room. Send it only to the person it is for.
  • There is no limit on how many links a project has on a paid plan. One per person makes the Activity and the pipeline mean something.

On Free

Free has no private links. A project is either:

  • unlisted, a draft only members of your workspace can open, with Preview as viewer in the app; or
  • listed on the community, once its card and build pass the checks, at one public address anyone can open, https://<project>.getroomi.app, with five people in it at once and total views as its only analytics.

pitch link and the app's Links tab both refuse on Free, and say so. A link made while the workspace was on a paid plan is kept, shown as Closed on Free, and opens again if the workspace moves back to a paid plan.

The community covers listing a project.

Next