Before you start
Each portal stores its own data. There is no combined endpoint across portals, so a multi-portal deployment calls each portal in turn and combines the results downstream. The set of readable tables is assembled from the plugins installed on a portal, so it varies by Curator version. Ask a portal what it supports rather than assuming:Content views
interworks_usermgmt_content_view is the table behind the Activity page. One row is written each time a
user opens a piece of content.
viewable_content_type and viewable_content_id together identify the content. Read the matching
content table, such as interworks_tableauviz_dashboards or interworks_content_pages, to turn that
pair into a title.
Summary table
interworks_usermgmt_content_view_summary holds one row per user and content item, with a
last_visited timestamp instead of individual views. Use it when you want current totals rather than a
full event history, since it is much smaller than the view table.
Favorites
interworks_usermgmt_favorite records which content users have marked as a favorite. It pairs well with
content views when you are measuring engagement rather than traffic.
Users
Content view rows identify a user by ID and username. Pull the rest from the User API:analytics_id. That analytics_id is the same
non-personal identifier Curator sends to your analytics platform, so it is the key that lets you combine
API exports with the analytics approach described below.
See User API for the full endpoint.
listUsers covers frontend users and their groups. Backend administrator accounts are not exposed
by any API endpoint. If you need an inventory of backend administrators, read it from
Backend Administrators in the portal
backend.Administrator activity
Content views cover what your frontend users opened. To see what administrators did in the backend, read the usage log:is_frontend = 0 for actions taken in the portal backend. Each row records the action type,
the username behind it, and a details payload describing what changed.
Secrets are masked before they reach this table. An API key appears only as its last four characters,
which is enough to tell two keys apart, and passwords are removed entirely. Older portals stored some
of these values in full, and the upgrade that introduced the masking also rewrites those earlier rows.
Paging
The default page size is 1000 rows, and requests carrying anapikey are rate limited. Page through a
busy portal rather than requesting everything at once, and sort on created_at so paging stays stable
while new rows arrive:
offset by limit on each call until a request returns fewer rows than the limit.
Reporting across several portals
Curator has no cross-portal roll-up. Two approaches work, and they combine well:- Call each portal and union the results. Add a portal identifier as you load each response, since IDs are only unique within a portal. This gives you the same detail the Activity page shows.
- Point every portal at one analytics property. Configure the same Google Analytics 4, Google Tag Manager, or Matomo property on each portal so page views and Dashboard events land in a single place already combined. See Analytics Tracking.
analytics_id with each analytics event, and listUsers returns that
same ID, you can map analytics activity back to a named Curator user when you need to.