PapermarkDocs

views

Read view analytics for a share link.

papermark views list returns the raw view events for a single share link — one row per view, with viewer info, time spent, and per-page breakdown.

list

papermark views list --link <id> [--limit <n>] [--cursor <id>]
FlagDefaultEffect
--link <id>requiredThe link whose views you want
-l, --limit <n>25Page size, 1–100
-c, --cursor <id>Continuation cursor
$ papermark views list --link link_abcd1234
ID                EMAIL                  VIEWED                DURATION
view_qRsT01       alice@acme.com         2 hours ago           4m 12s
view_uVwX02       bob@acme.com           yesterday             1m 03s

JSON output includes per-page durations and viewer location:

papermark views list --link link_abcd1234 --json | jq '.data[0]'
{
  "id": "view_qRsT01",
  "linkId": "link_abcd1234",
  "viewer": {
    "email": "alice@acme.com",
    "country": "US"
  },
  "viewedAt": "2026-04-25T13:21:08.000Z",
  "duration": 252,
  "pages": [
    { "page": 1, "duration": 18 },
    { "page": 2, "duration": 142 },
    { "page": 3, "duration": 92 }
  ]
}

"Who viewed my pitch deck this week?"

A common one-liner. Find the link, then list views and filter by date:

LINK=$(papermark links list --document doc_aBc123 --json | jq -r '.data[0].id')
papermark views list --link "$LINK" --json \
  | jq '.data[] | select(.viewedAt > "2026-04-18") | {email: .viewer.email, duration}'

For aggregate stats (totals, unique viewers, average read time) without per-view detail, use the API's analytics endpoints directly. The CLI doesn't wrap those yet.

Required scopes

analytics.read plus links.read (to validate the link first).

On this page