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 Adding documents.

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}'

Adding documents

There's no papermark datarooms add-document yet. Today's pattern is two steps: upload, then attach via the API.

# Upload to your team
DOC_ID=$(papermark documents upload ./term-sheet.pdf --json | jq -r '.data.id')

# Attach to the dataroom
curl -sX POST "https://api.papermark.com/v1/datarooms/$DR_ID/documents" \
  -H "Authorization: Bearer $PAPERMARK_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"documentId\":\"$DOC_ID\"}"

Bulk variant:

for f in ~/acme/*.pdf; do
  DOC_ID=$(papermark documents upload "$f" --json | jq -r '.data.id')
  curl -sX POST "https://api.papermark.com/v1/datarooms/$DR_ID/documents" \
    -H "Authorization: Bearer $PAPERMARK_TOKEN" \
    -H "Content-Type: application/json" \
    -d "{\"documentId\":\"$DOC_ID\"}"
done

A papermark datarooms add-document (and bulk-add) wrapper is on the roadmap.

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
Attach a document (API)datarooms.write + documents.read

On this page