PapermarkDocs

datarooms

List, create, configure, and read analytics for datarooms.

A dataroom groups documents under one access boundary. The CLI now covers the full lifecycle: create, configure, audit, read analytics, and inspect contents.

$ papermark datarooms create --name "Acme Series B" --description "Q2 2026 raise"
ID:    dr_K8mN2pQr
NAME:  Acme Series B

list

papermark datarooms list [--limit <n>] [--cursor <id>] [--query <substring>]
FlagDefaultEffect
-l, --limit <n>25Page size, 1–100
-c, --cursor <id>noneContinuation cursor from a previous response's meta.next_cursor
-q, --query <substring>noneFilter by name substring
--jsonauto when pipedMachine-readable output
$ papermark datarooms list
ID                  NAME                       UPDATED
dr_K8mN2pQr         Acme Series B              2 days ago
dr_aBc456           Brand-X DD                 1 month ago

get

papermark datarooms get <id>

Fetches one dataroom by ID. Includes settings (conversations, agents, bulkDownload) plus document and link counts.

create

papermark datarooms create \
  --name <name> \
  [--internal-name <slug>] \
  [--description <text>]
FlagDefaultEffect
-n, --name <name>requiredDisplay name shown to viewers
--internal-name <slug>autoInternal slug for the dashboard URL; lowercase, hyphenated
-d, --description <text>noneFree-text description shown on the dataroom landing
papermark datarooms create \
  --name "Acme Series B" \
  --internal-name "acme-series-b" \
  --description "Q2 2026 fundraise materials"

The dataroom starts empty. Add documents next; see attach.

update

papermark datarooms update <id> \
  [--name <name>] \
  [--internal-name <slug>] \
  [--description <text>] \
  [--conversations on|off] \
  [--agents on|off] \
  [--bulk-download on|off]

Patches dataroom settings. Pass only the flags you want to change; everything else stays as it was.

FlagEffect
--conversations on|offEnable in-dataroom conversations between you and viewers
--agents on|offEnable AI agents that can answer viewer questions about the documents
--bulk-download on|offAllow viewers to download every document as a zip
# Open up bulk download for the partner round
papermark datarooms update dr_K8mN2pQr --bulk-download on
papermark datarooms links <id> [--limit <n>] [--cursor <id>]

Lists every share link pointing at this dataroom. Equivalent to papermark links list --dataroom <id>, kept under datarooms for ergonomic grouping.

papermark datarooms links dr_K8mN2pQr --json | jq '.data[] | {name, viewCount}'

Mint a new dataroom-bound link with papermark links create --dataroom <id>.

viewers

papermark datarooms viewers <id> [--limit <n>] [--cursor <id>] [--email <email>]

Lists persistent visitors (one row per email) tied to this dataroom. Different from per-link views: a viewer who hits two links in the same dataroom shows up once here, but twice in papermark views list.

FlagEffect
--email <email>Filter to one email address
$ papermark datarooms viewers dr_K8mN2pQr --email alice@acme.com
ID                  EMAIL                  FIRST SEEN          LAST SEEN
viewer_qRsT01       alice@acme.com         3 days ago          2 hours ago

stats

Aliases: analytics.

papermark datarooms stats <id> [--since <unix-ms>] [--until <unix-ms>]

Aggregate analytics for the dataroom: total views, unique visitors, time spent, page-level engagement across every document inside.

FlagDefaultEffect
--since <unix-ms>dataroom creationLower bound, Unix timestamp in milliseconds
--until <unix-ms>nowUpper bound, Unix timestamp in milliseconds

The unusual unix-ms format is because stats is backed by a Tinybird query and uses the wire format the analytics service prefers; the rest of the API takes ISO 8601.

stats is rate-limited more strictly than the rest of the surface (per-token cap is lower than the default 60 RPM). Cache the response if you're polling.

# Last 7 days
SINCE=$(node -e "console.log(Date.now() - 7*24*60*60*1000)")
papermark datarooms stats dr_K8mN2pQr --since "$SINCE"

documents

papermark datarooms documents <id> [--limit <n>] [--cursor <id>] [--folder <id>]

Lists documents inside the dataroom, with folder filter.

FlagEffect
--folder <id>Limit to one folder (datarooms have an internal folder tree)
papermark datarooms documents dr_K8mN2pQr --json \
  | jq '.data[] | {name, folder: .folderId}'

attach

papermark datarooms attach <id> --document <doc-id> [--folder-id <fid>]

Attaches an existing team-library document to the dataroom. The document stays in the library; this only adds it to the dataroom's contents. Pass --folder-id to place it inside a dataroom folder.

# Upload to your team, then attach to the dataroom
DOC_ID=$(papermark documents upload ./term-sheet.pdf --json | jq -r '.data.id')
papermark datarooms attach dr_K8mN2pQr --document "$DOC_ID"

Bulk variant:

for f in ~/acme/*.pdf; do
  DOC_ID=$(papermark documents upload "$f" --json | jq -r '.data.id')
  papermark datarooms attach dr_K8mN2pQr --document "$DOC_ID"
done

The attach response carries the dataroom-document id as id (the attachment, distinct from the underlying document_id). You need that id to move or detach the document later — datarooms documents lists it too.

move

papermark datarooms move <id> <ddId> --folder-id <fid>
papermark datarooms move <id> <ddId> --root

Moves a document to a different folder within the dataroom, keyed by its dataroom-document id (ddId).

FlagEffect
--folder-id <fid>Move into the folder fid
--rootMove to the dataroom root (alias for --folder-id root)
--folder-id "" / --folder-id rootAlso move to the dataroom root

One of --folder-id or --root is required; passing --root together with a specific --folder-id is rejected.

# Into a folder…
papermark datarooms move dr_K8mN2pQr ddoc_3f9 --folder-id fld_legal
# …and back to the root (these are equivalent)
papermark datarooms move dr_K8mN2pQr ddoc_3f9 --root
papermark datarooms move dr_K8mN2pQr ddoc_3f9 --folder-id ""

detach

papermark datarooms detach <id> <ddId>

Removes one document's attachment to the dataroom, keyed by its dataroom-document id (ddId). The document stays in the team library and remains attached to any other datarooms — only this attachment is removed. Use this instead of deleting and recreating a folder when you just need to pull one file.

papermark datarooms detach dr_K8mN2pQr ddoc_3f9

Deleting

There's no papermark datarooms delete either, by design, since deletion cascades to every link and is unrecoverable. Use the API directly when you really mean it:

curl -X DELETE "https://api.papermark.com/v1/datarooms/$DR_ID" \
  -H "Authorization: Bearer $PAPERMARK_TOKEN"

Required scopes

OperationScope
list, get, documents, viewersdatarooms.read
create, updatedatarooms.write
linksdatarooms.read + links.read
statsdatarooms.read + analytics.read
attachdatarooms.write + documents.read
move, detachdatarooms.write

On this page