Dynamo Developer DocsDynamo Developer Docs
External APIVIPVIP Users

Export VIP users to CSV

Export all matched VIP users to a CSV and return `{ totalCount, csvUrl }`. Same filters as the list route, but returns every matched row rather than a page. `scope=all` widens the export to **every conversation on the channel** (the whole audience), not only marked VIPs. Each scope exports to its own deterministic filename (`vip_users_…` / `all_users_…`), so re-exports overwrite within a scope but a VIP export never clobbers an all-audience one.

get/vip-users/export

Beta

The External API is in beta. Endpoints, parameters, and response shapes may change — including breaking changes — in future releases. Pin to documented behavior before relying on it in production.

Authorization

x-api-key x-date x-signature x-api-version
x-api-key<token>

Your API key (the ApiKeys document id).

In: header

x-date<token>

Current timestamp as an IMF-fixdate string (GMT, US locale) "EEE, dd MMM yyyy HH:mm:ss z", e.g. "Sun, 06 Dec 2020 12:59:11 GMT". 30-second TTL.

In: header

x-signature<token>

HMAC-SHA256 of the x-date string keyed by your secret, lowercase hex.

In: header

x-api-version<token>

API version you're coding against — currently 1. Required; a missing or unsupported value returns 400 with Missing or unsupported x-api-version header. Supported versions: 1.

In: header

Query Parameters

workspaceId*string

The VIP workspace id (from GET /workspaces).

mediumId*string

The channel id (from GET /channels).

scope?string

Which users to read: vip (default) — only users marked VIP for the workspace; all — every conversation on the channel (the whole audience).

hasBirthday?string

When true, only users with a known birthday.

birthdayMonth?integer

Only users whose birthday is in this calendar month.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

Try it

read-only

Kept in this tab only and signed in your browser — your secret never leaves your device.

Query

Enter your key and secret to send.

curl -X GET "https://example.com/vip-users/export?workspaceId=AbC123XyZ&mediumId=FB_PAGE_123456789012345"
{  "totalCount": 0,  "csvUrl": "string"}
{  "message": "string"}
{  "message": "string"}
{  "message": "string"}
{  "message": "string"}
{  "error": [    {      "message": "string",      "path": [        "string"      ],      "type": "string",      "context": {}    }  ]}
{  "message": "string"}

List VIP users

The VIP users (players marked VIP for the workspace) on one channel, highest-LTV first, with their profile and personal info (including birthday). Paginated via `limit` + `offset` (`total`, `nextOffset`). VIP workspaces only. `scope=all` widens the read from the workspace's VIP set to **every conversation on the channel** (the whole audience) — same field set, filters, sort, and pagination. A channel bigger than the 25k scan guardrail comes back with `scanCapped: true` (then `total` is a floor). `compact=true` is a bulk projection: each row is trimmed to `conversationId` + `cuid` + `birthday`, and `limit` caps — and defaults — at 5000, so a whole audience fits in one response (CUID joins, birthday sweeps). Same envelope, scan, filters, sort, and pagination; the response stays plain JSON.

List VIP user messages

VIP user messages in a window, newest first. With `label` set, only messages carrying that built-in label value or custom AI label id — the drill-down behind a label-overview count; without it, every message in the window. Paged with a `before` timestamp cursor (echo a response's `nextCursor` back). Window capped at 31 days; VIP workspaces only. `scope=all` widens the scan from the workspace's VIP set to **every conversation active in the window** (the channel's whole audience) — same filters, text derivation, and pagination. A very large channel can hit the 25k-conversation scan guardrail; the response then carries `scanCapped: true` and the window's coverage is partial.