Authentication
Create and use API keys to authenticate requests.
Dashboard Statistics
Query chat volume, revenue, conversion rates, and leaderboards.
Conversations
List conversations, fetch details, and inspect associated customer events.
Smart Tags
Aggregate smart tag counts across conversations.
Authentication
Creating an API Key
1
Navigate to API Keys
Go to Settings > Personal API keys (under Account) in the Remark dashboard.
2
Create a key
Click Create API key, enter a name, choose Expires on date or No expiry, and click Create key.
3
Copy the token
Copy the token immediately — it is only shown once. Token format:
rmrk_u_ followed by 64 hexadecimal characters.Using the API Key
All requests go to the GraphQL endpoint:Authorization header:
Invalid or expired API key.
Example Request
Dashboard Statistics
The main analytics entry point. All stats are nested undervendorById > conversationAggregateStatistics and support filtering by date range and optionally by channel.
Permission required: VIEW_CONVERSIONS (for revenue/conversion fields)
All-in-One Dashboard Query
Fetches the most commonly used KPIs in a single request:Variables
Example Response
Field Reference
Field Reference
Period-over-Period Comparison
Use GraphQL aliases to fetch current and previous periods in one request:Smart Tag Aggregation
Count how often each smart tag was applied to conversations in a time range. Useful for tracking trending topics, common customer issues, or product interest over time.Permission required: VIEW_CONVERSATIONS
Count Tags in a Period
Example Response
List Available Smart Tags
Conversation Listing
Paginated list of conversations with filtering and sorting. Uses cursor-based pagination.Permission required: VIEW_CONVERSATIONS
Variables
Filter Options
A conversation must match every key inside a singleConversationFilterInput. When you pass several filter objects, a conversation matches if it satisfies any one of them.
Sort Options
Only the first entry in
sort is used. Without sort, results come back in an arbitrary but stable order.
For exports, backfills, and other long pagination jobs, explicitly sort by
created. lastMessageDate changes when an older conversation receives a
new message, which can make cursor pagination less stable over time.Recommended Variables
Pagination
Use cursor-based pagination to iterate through results:Conversation Detail
Fetch a single conversation with its full message history.Permission required: VIEW_CONVERSATIONS
Conversation Customer Events
UsecustomerEvent to fetch the browsing and shopping events from the most
recent storefront session of the conversation’s shopper, newest first. Pass the
conversation ID as id. The session can be a later visit than the chat itself.
This is the right place to look for product views, category page views,
searches, cart activity, and purchases.
Permission required: VIEW_CONVERSATIONS
Event Types
Session & Order Data
Look up browsing sessions and conversion/order details for a customer. Pass the shopper’s tracker ID aslead. You can read it from a conversation as customerIdentity { lead }.
Permission required: VIEW_CONVERSIONS
Key Fields
Permissions Reference
Your API key inherits the permissions of the user who created it. Different data requires different permissions:
An admin or vendor owner will have all permissions for their vendor.
Rate Limits & Best Practices
- Rate limiting: Rate limits may be enforced to prevent abuse and maintain quality of service
- Request only what you need: GraphQL lets you select specific fields — smaller queries are faster
- Use pagination: Always paginate conversation and session lists rather than fetching everything at once
- Cache where appropriate: Dashboard statistics don’t change in real time; polling every few minutes is sufficient
- Time ranges: Always provide
start/endfor dashboard stats queries — omitting them returns lifetime data which is slower - Timezone: Pass your local IANA timezone (e.g.
America/New_York) for time series and histogram queries to get correctly bucketed data