Public API

API overview

GET-only, read-only, workspace-scoped Public API for reports, Signals, accounts, stakeholders, website activity and targeting summaries. Get the server URL when creating an access token in Settings > API Tokens. Replace the non-working server placeholder with the origin of that URL (scheme and host, without /api/v1/public); the specification already includes /api/v1/public in each route path. Configure the generated token as the bearer credential. The token determines workspace scope.

Base URL: https://server-url-from-token-page.endpoint

Version: 1.2.0. Published endpoints: 11.

DOE API Token User Guide

Use a DOE API token to read reports, signals, accounts, stakeholders, website activity and targeting summaries from one workspace. The token determines which workspace you can access. Send it in the Authorization header; the Public API does not create, update or delete data.

Before you create a token

  • Know which client or workflow will use the token.
  • Know who owns that client or workflow.
  • Choose an expiry that fits the task: one month by default, with a maximum of one year.
  • Decide where the token will be stored after creation.
  • Each workspace can have up to two unexpired API tokens. Use separate tokens for unrelated clients where possible, and revoke unused ones before creating replacements.
  • Do not reuse one token across unrelated consumers.
  • Store the token in a password manager or secret manager immediately.

Quick start

  1. Open the workspace that owns the API data.
  2. Go to Settings.
  3. Open API Tokens.
  4. Click Generate token.
  5. Confirm the Space ID.
  6. Select API Space Read Only.
  7. Copy the Public API server URL shown when creating the access token. Use this URL to configure your client.
  8. Choose an expiry date. If you leave it unset, the token expires after one month; the maximum lifetime is one year.
  9. Click Generate.
  10. Copy the token immediately from the success dialog and store it safely.

Safety checklist

  • Use separate tokens for unrelated clients where possible, within the workspace's two-token limit.
  • Choose the shortest practical expiry and plan renewal before it is reached.
  • Save the token immediately because the secret is shown only once.
  • Store tokens in a secure secret manager or password manager.
  • Rotate tokens after suspected exposure. If the owner changes, have the new owner issue a new token.
  • Revoke tokens you no longer need.
  • Periodically review active tokens in the API Tokens table.

Reports

Read-only workspace reports.

GET /api/v1/public/reports — Run one report

Runs one read-only workspace report and returns the report result directly. The request is safe to retry. This endpoint supports GET only. It does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`. Query parameters, cookies, and custom API-key headers are not authentication sources. The bearer token determines the workspace. The query contract is intentionally limited to the parameters documented below. Unknown, nested, object-valued, or otherwise repeated scalar parameters are rejected. Multi-value parameters use one comma-separated query value. `mediaMarketing` is required for ITMIM and filters movement rows. Supply multiple movement values as `mediaMarketing=REACHED,AWARE`. SMP and SMPC accept comma-separated `technique` values. STAM requires exactly one `technique` plus `metric`, and optionally accepts `direction` and `minimumActivity`. SMP, SMPC, and STAM accept singular `ownerId`, `program`, `accountStatus`, `industry`, and `marketSegment` current account-cohort filters. Here `program` resolves case-insensitively to an exact workspace account type; it is not a deal program. GET URLs can appear in browser history and client or intermediary logs. Never place credentials, secrets, or confidential free text in query parameters. Responses are marked `Cache-Control: private, no-store`. ITMP and ITMIM return repeated account context once under `references.accountsById`; join each stakeholder row through `stakeholder.accountId`. Successful responses omit every null-valued property and null array entry. Report queries use half-open explicit windows: `from` is inclusive and `to` is exclusive. In response metadata, named durations expose the first and final included UTC instants so direct date display does not show the next day. Explicit ranges echo the exact supplied timestamps. ## Supported report catalog ### AMPS — Account media summary Returns the cross-channel media summary for accounts, including overall, Individual Targeting, LinkedIn, IP, geo, and website metrics. - Result row type: `account_media_performance_summary` - Output: When account is present it contains only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default. Account project options are crm and targetingActivated; for example, project=crm,targetingActivated adds provider-neutral CRM identity and individual, LinkedIn, IP, and geo activation states when available. owners contains compact account-owner id and name references when available. The pif object contains only score, band, and trend. Individual Targeting stakeholders are returned as it.count. For bounded AMPS, it.reached is the number reached in the selected Individual Targeting window while it.count remains the current stakeholder count. - Window: ALL_TIME returns latest cumulative metrics. For bounded named durations or custom from/to windows, LinkedIn and Individual Targeting use the selected UTC/provider-day window. Website uses the selected activity window: named durations follow the viewer-local calendar and custom from/to remains absolute UTC. IP and geo remain latest cumulative. overall therefore intentionally mixes bounded LinkedIn/Individual Targeting with cumulative IP/geo. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: overall.clicks descending - Sort keys: account.name, overall.clicks, overall.impressions, overall.visits, overall.pageViews, overall.count, overall.reached, overall.reach, overall.ctr, overall.uniqueCtr, it.clicks, it.impressions, li.clicks, li.impressions, ip.clicks, ip.impressions, geo.clicks, geo.impressions, website.visits, website.pageViews - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=AMPS&duration=ALL_TIME&take=10&skip=0&sortKey=overall.clicks&sortOrder=-1 ### SMP — Space media performance Returns aggregate clicks and impressions per selected technique for the whole space or one current account cohort. Cohort filters include owner, account type (program alias), account status, industry, and market segment. - Result row type: `space_media_performance` - Output: Rows contain one technique aggregate plus explicit metric basis, window applicability, comparison safety, source timestamp, availability, and current-cohort semantics. SMP never returns a cross-technique grand total. - Window: LinkedIn and Individual Targeting return bounded-window deltas for named durations or custom from/to. IP and geo remain latest cumulative and set requestedWindowApplied=false and comparableAcrossPeriods=false. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: window-dependent; see the report notes - Sort keys: - Search keys: none - Example query: type=SMP&duration=ALL_TIME&take=10&skip=0&technique=LINKEDIN%2CINDIVIDUAL_TARGETING ### SMPC — Space media period comparison Compares a bounded period with the immediately preceding equal-length period per media technique for the whole space or one current account cohort. - Result row type: `space_media_period_comparison` - Output: Rows compare the selected period with the immediately preceding equal-length period per technique. IP and geo rows explicitly report historical comparison as unavailable. - Window: Requires a bounded named duration or custom from/to. LinkedIn and Individual Targeting are comparable; IP and geo are latest-only and return UNAVAILABLE for historical comparison. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: window-dependent; see the report notes - Sort keys: - Search keys: none - Example query: type=SMPC&duration=LAST_30_DAYS&take=10&skip=0&technique=LINKEDIN%2CINDIVIDUAL_TARGETING ### STAM — Space top account movers Ranks account click or impression movement for one LinkedIn or Individual Targeting technique, with optional current account-cohort filters. - Result row type: `space_top_account_mover` - Output: Rows contain compact account context plus current, previous, and changed metrics for the selected LinkedIn or Individual Targeting movement ranking. - Window: Requires a bounded named duration or custom from/to and compares it with the immediately preceding equal-length period. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: window-dependent; see the report notes - Sort keys: - Search keys: none - Example query: type=STAM&duration=LAST_30_DAYS&take=10&skip=0&technique=LINKEDIN&metric=CLICKS&direction=GAINERS ### ALIP — Account LinkedIn performance Returns LinkedIn advertising clicks, impressions, and click-through rate for account-linked organizations. - Result row type: `account_media_technique_performance` - Output: When account is present it contains only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default. Account project options are crm and targetingActivated; for example, project=crm,targetingActivated adds provider-neutral CRM identity and individual, LinkedIn, IP, and geo activation states when available. owners contains compact account-owner id and name references when available. The pif object contains only score, band, and trend. - Window: Supports named durations and custom from/to windows. Bounded results use per-account/provider snapshot deltas within the selected half-open window. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: metrics.clicks descending - Sort keys: account.name, metrics.clicks, metrics.impressions, metrics.ctr - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=ALIP&duration=ALL_TIME&take=10&skip=0&sortKey=metrics.clicks&sortOrder=-1 ### AIPP — Account IP-targeting performance Returns the latest cumulative IP-targeting clicks, impressions, and click-through rate for accounts. - Result row type: `account_media_technique_performance` - Output: When account is present it contains only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default. Account project options are crm and targetingActivated; for example, project=crm,targetingActivated adds provider-neutral CRM identity and individual, LinkedIn, IP, and geo activation states when available. owners contains compact account-owner id and name references when available. The pif object contains only score, band, and trend. - Window: Use ALL_TIME. Bounded durations and custom from/to windows do not produce a bounded IP-targeting result. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: metrics.clicks descending - Sort keys: account.name, metrics.clicks, metrics.impressions, metrics.ctr - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=AIPP&duration=ALL_TIME&take=10&skip=0&sortKey=metrics.clicks&sortOrder=-1 ### AGEOP — Account geo-targeting performance Returns the latest cumulative geo-targeting clicks, impressions, and click-through rate for accounts. - Result row type: `account_media_technique_performance` - Output: When account is present it contains only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default. Account project options are crm and targetingActivated; for example, project=crm,targetingActivated adds provider-neutral CRM identity and individual, LinkedIn, IP, and geo activation states when available. owners contains compact account-owner id and name references when available. The pif object contains only score, band, and trend. - Window: Use ALL_TIME. Bounded durations and custom from/to windows do not produce a bounded geo-targeting result. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: metrics.clicks descending - Sort keys: account.name, metrics.clicks, metrics.impressions, metrics.ctr - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=AGEOP&duration=ALL_TIME&take=10&skip=0&sortKey=metrics.clicks&sortOrder=-1 ### AITP — Account Individual Targeting performance Returns account-level Individual Targeting clicks, impressions, and click-through rate. - Result row type: `account_media_technique_performance` - Output: When account is present it contains only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default. Account project options are crm and targetingActivated; for example, project=crm,targetingActivated adds provider-neutral CRM identity and individual, LinkedIn, IP, and geo activation states when available. owners contains compact account-owner id and name references when available. The pif object contains only score, band, and trend. - Window: ALL_TIME returns cumulative metrics. Named durations and custom from/to windows return deltas for the selected window. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: metrics.clicks descending - Sort keys: account.name, metrics.clicks, metrics.impressions, metrics.ctr - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=AITP&duration=ALL_TIME&take=10&skip=0&sortKey=metrics.clicks&sortOrder=-1 ### ITMP — Stakeholder Individual Targeting performance Returns stakeholder-level Individual Targeting performance. The base cohort contains stakeholders with clicks or impressions for the selected report window. - Result row type: `stakeholder_individual_targeting_performance` - Output: Rows contain stakeholder id, accountId, firstName, lastName, position, email, and linkedIn by default. Stakeholder project options are crm, type, and trafficLight; account references support crm and targetingActivated. For example, project=crm,targetingActivated,type,trafficLight adds every available detail-only field to its matching entity type. Repeated account objects are omitted from rows and returned once in references.accountsById, keyed by stakeholder.accountId. Account references contain only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default; owners contain id and name, and pif contains score, band, and trend. - Window: For bounded windows, use inTimeSpan.* metrics for window-specific sorting and thresholds. overall.* remains cumulative. For ALL_TIME, both groups represent cumulative performance. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: inTimeSpan.clicks descending - Sort keys: stakeholder.firstName, stakeholder.lastName, stakeholder.position, account.name, overall.clicks, overall.impressions, overall.reach, overall.ctr, inTimeSpan.clicks, inTimeSpan.impressions, inTimeSpan.reach, inTimeSpan.ctr, firstClickDate, lastClickDate, lastClickTitle, lastClickPage, lastClickedCampaign - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=ITMP&duration=ALL_TIME&take=10&skip=0&sortKey=inTimeSpan.clicks&sortOrder=-1 ### ITMIM — Stakeholder media-impact movement Returns stakeholder transitions into REACHED, AWARE, or ENGAGED during the selected period. It is a movement history, not a current-state population. - Result row type: `stakeholder_individual_targeting_performance` - Output: Rows contain stakeholder id, accountId, firstName, lastName, position, email, and linkedIn by default. Stakeholder project options are crm, type, and trafficLight; account references support crm and targetingActivated. For example, project=crm,targetingActivated,type,trafficLight adds every available detail-only field to its matching entity type. Repeated account objects are omitted from rows and returned once in references.accountsById, keyed by stakeholder.accountId. Account references contain only id, name, status, website, linkedIn, industry, hqCountry, employees, owners, and pif by default; owners contain id and name, and pif contains score, band, and trend. - Window: Use a bounded named duration or custom from/to window and explicitly supply mediaMarketing. Separate movement-state counts can overlap. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: overall.clicks descending - Sort keys: stakeholder.firstName, stakeholder.lastName, account.name, overall.clicks, overall.impressions, overall.reach, overall.ctr - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=ITMIM&duration=LAST_30_DAYS&take=10&skip=0&sortKey=overall.clicks&sortOrder=-1&mediaMarketing=ENGAGED%2CAWARE ### AWP — Account website performance Returns website visits and page views for website companies linked to accounts. - Result row type: `website_tracking_account` - Output: Rows contain only id, name, websiteUrl, industry, lastVisitDate, countries, visits, pageViews, linkedinUrl, and compact owner id/name references. lastVisitDate is always the latest known visit across all time, independent of the selected window. - Window: ALL_TIME uses cumulative visits and pageViews. For bounded windows, visits and pageViews contain the selected-window values. lastVisitDate always remains the latest known visit across all time, and lastVisitDate sorting uses that all-time value within the window-eligible cohort. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: window-dependent; see the report notes - Sort keys: name, websiteUrl, linkedinUrl, industry, visits, pageViews, spanVisits.visits, spanVisits.pageViews, lastVisitDate, countryCode, country, region, city, employeeCount - Search keys: name, website, linkedIn, industry, hqCountry, marketSegment, type - Example query: type=AWP&duration=ALL_TIME&take=10&skip=0&sortKey=visits&sortOrder=-1 ### NTAWP — Unmatched website company performance Returns website visits and page views for website companies that are not linked to an account. - Result row type: `website_tracking_account` - Output: Rows contain only the documented compact unmatched website-company fields. lastVisitDate is always the latest known visit across all time, independent of the selected window. - Window: ALL_TIME uses cumulative visits and pageViews. Bounded durations and custom from/to windows use spanVisits.visits and spanVisits.pageViews. lastVisitDate always remains the latest known visit across all time, and lastVisitDate sorting uses that all-time value within the window-eligible cohort. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: window-dependent; see the report notes - Sort keys: name, websiteUrl, linkedinUrl, industry, visits, pageViews, spanVisits.visits, spanVisits.pageViews, lastVisitDate, countryCode, country, region, city, employeeCount - Search keys: name, websiteUrl, linkedinUrl, industry, countryCode, country, region, city - Example query: type=NTAWP&duration=ALL_TIME&take=10&skip=0&sortKey=visits&sortOrder=-1 ### NTAAR — Unmatched LinkedIn organization performance Returns LinkedIn advertising clicks and impressions for organizations that are not linked to an account. - Result row type: `non_targeted_account_linkedin` - Output: Rows contain the unmatched organization identity and LinkedIn performance fields documented by the response schema. - Window: Supports named durations and custom from/to windows. Bounded results use per-organization/provider snapshot deltas within the selected half-open window. - Pagination: take accepts 1..50 and defaults to 10. skip accepts 0..1000 and defaults to 0. - Default sort: adClicks descending - Sort keys: name, adClicks, adImpressions, linkedIn, website, hqCountry - Search keys: none - Example query: type=NTAAR&duration=ALL_TIME&take=10&skip=0&sortKey=adClicks&sortOrder=-1

Parameters

NameLocationTypeRequiredDescription
typequeryReportTypeYesReport to run. AMPS: Account media summary — Returns the cross-channel media summary for accounts, including overall, Individual Targeting, LinkedIn, IP, geo, and website metrics. SMP: Space media performance — Returns aggregate clicks and impressions per selected technique for the whole space or one current account cohort. Cohort filters include owner, account type (program alias), account status, industry, and market segment. SMPC: Space media period comparison — Compares a bounded period with the immediately preceding equal-length period per media technique for the whole space or one current account cohort. STAM: Space top account movers — Ranks account click or impression movement for one LinkedIn or Individual Targeting technique, with optional current account-cohort filters. ALIP: Account LinkedIn performance — Returns LinkedIn advertising clicks, impressions, and click-through rate for account-linked organizations. AIPP: Account IP-targeting performance — Returns the latest cumulative IP-targeting clicks, impressions, and click-through rate for accounts. AGEOP: Account geo-targeting performance — Returns the latest cumulative geo-targeting clicks, impressions, and click-through rate for accounts. AITP: Account Individual Targeting performance — Returns account-level Individual Targeting clicks, impressions, and click-through rate. ITMP: Stakeholder Individual Targeting performance — Returns stakeholder-level Individual Targeting performance. The base cohort contains stakeholders with clicks or impressions for the selected report window. ITMIM: Stakeholder media-impact movement — Returns stakeholder transitions into REACHED, AWARE, or ENGAGED during the selected period. It is a movement history, not a current-state population. AWP: Account website performance — Returns website visits and page views for website companies linked to accounts. NTAWP: Unmatched website company performance — Returns website visits and page views for website companies that are not linked to an account. NTAAR: Unmatched LinkedIn organization performance — Returns LinkedIn advertising clicks and impressions for organizations that are not linked to an account.
durationqueryDOReportDurationNoOptional named report window. Required only when from is omitted. Custom from/to values take precedence for report types that support them. TODAY: Current calendar day in the credential issuer's viewer timezone. YESTERDAY: Previous calendar day in the credential issuer's viewer timezone. THIS_WEEK: Current ISO week in the credential issuer's viewer timezone. LAST_WEEK: Previous ISO week in the credential issuer's viewer timezone. THIS_MONTH: Current calendar month in the credential issuer's viewer timezone. LAST_MONTH: Previous calendar month in the credential issuer's viewer timezone. LAST_7_DAYS: From the start of the calendar day seven days ago through the end of the current day in the credential issuer's viewer timezone. LAST_30_DAYS: From the start of the calendar day thirty days ago through the end of the current day in the credential issuer's viewer timezone. LAST_3_MONTHS: From the start of the calendar day three months ago through the end of the current day in the credential issuer's viewer timezone. ALL_TIME: All available matching Signals, without a date filter.
fromquerystring:date-timeNoInclusive custom-window start in RFC 3339 date-time form, including seconds and a UTC offset, for example 2026-06-01T00:00:00Z. When supplied, duration becomes optional and this custom window takes precedence for reports that support custom windows.
toquerystring:date-timeNoOptional exclusive custom-window end in RFC 3339 date-time form. An event exactly at to is excluded. Requires from and must be later than from. When omitted, the custom window has no explicit end.
takequeryintegerNoMaximum rows returned in this page. Allowed values are integers from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of eligible rows skipped before the page. Allowed values are integers from 0 through 1000. Defaults to 0.
sortKeyqueryaccount.name | adClicks | adImpressions | city | country | countryCode | employeeCount | firstClickDate | geo.clicks | geo.impressions | hqCountry | inTimeSpan.clicks | inTimeSpan.ctr | inTimeSpan.impressions | inTimeSpan.reach | industry | ip.clicks | ip.impressions | it.clicks | it.impressions | lastClickDate | lastClickPage | lastClickTitle | lastClickedCampaign | lastVisitDate | li.clicks | li.impressions | linkedIn | linkedinUrl | metrics.clicks | metrics.ctr | metrics.impressions | name | overall.clicks | overall.count | overall.ctr | overall.impressions | overall.pageViews | overall.reach | overall.reached | overall.uniqueCtr | overall.visits | pageViews | region | spanVisits.pageViews | spanVisits.visits | stakeholder.firstName | stakeholder.lastName | stakeholder.position | visits | website | website.pageViews | website.visits | websiteUrlNoReport-specific returned field used for ordering. Supply sortKey and sortOrder together. Allowed values by report: AMPS: account.name, overall.clicks, overall.impressions, overall.visits, overall.pageViews, overall.count, overall.reached, overall.reach, overall.ctr, overall.uniqueCtr, it.clicks, it.impressions, li.clicks, li.impressions, ip.clicks, ip.impressions, geo.clicks, geo.impressions, website.visits, website.pageViews; SMP: not supported; SMPC: not supported; STAM: not supported; ALIP: account.name, metrics.clicks, metrics.impressions, metrics.ctr; AIPP: account.name, metrics.clicks, metrics.impressions, metrics.ctr; AGEOP: account.name, metrics.clicks, metrics.impressions, metrics.ctr; AITP: account.name, metrics.clicks, metrics.impressions, metrics.ctr; ITMP: stakeholder.firstName, stakeholder.lastName, stakeholder.position, account.name, overall.clicks, overall.impressions, overall.reach, overall.ctr, inTimeSpan.clicks, inTimeSpan.impressions, inTimeSpan.reach, inTimeSpan.ctr, firstClickDate, lastClickDate, lastClickTitle, lastClickPage, lastClickedCampaign; ITMIM: stakeholder.firstName, stakeholder.lastName, account.name, overall.clicks, overall.impressions, overall.reach, overall.ctr; AWP: name, websiteUrl, linkedinUrl, industry, visits, pageViews, spanVisits.visits, spanVisits.pageViews, lastVisitDate, countryCode, country, region, city, employeeCount; NTAWP: name, websiteUrl, linkedinUrl, industry, visits, pageViews, spanVisits.visits, spanVisits.pageViews, lastVisitDate, countryCode, country, region, city, employeeCount; NTAAR: name, adClicks, adImpressions, linkedIn, website, hqCountry. Omit both parameters to use the selected report's default ordering.
sortOrderquery-1 | 1NoSort direction. Allowed values: -1 for descending and 1 for ascending. Supply sortKey and sortOrder together.
searchKeyquerycity | country | countryCode | hqCountry | industry | linkedIn | linkedinUrl | marketSegment | name | region | type | website | websiteUrlNoReport-specific field searched using searchPhrase. Supply searchKey and searchPhrase together. Allowed values by report: AMPS: name, website, linkedIn, industry, hqCountry, marketSegment, type; SMP: not supported; SMPC: not supported; STAM: not supported; ALIP: name, website, linkedIn, industry, hqCountry, marketSegment, type; AIPP: name, website, linkedIn, industry, hqCountry, marketSegment, type; AGEOP: name, website, linkedIn, industry, hqCountry, marketSegment, type; AITP: name, website, linkedIn, industry, hqCountry, marketSegment, type; ITMP: name, website, linkedIn, industry, hqCountry, marketSegment, type; ITMIM: name, website, linkedIn, industry, hqCountry, marketSegment, type; AWP: name, website, linkedIn, industry, hqCountry, marketSegment, type; NTAWP: name, websiteUrl, linkedinUrl, industry, countryCode, country, region, city; NTAAR: not supported.
searchPhrasequerystringNoCase-insensitive literal text matched against searchKey. Allowed length: 1 through 200 characters. Supply searchKey and searchPhrase together. Do not place secrets or confidential text in a URL.
accountIdquerystringNoRestricts the report to one account in the authenticated workspace. Supply the account's 24-character hexadecimal id.
mediaMarketingqueryMediaMarketing[]NoRequired when type=ITMIM and rejected for every other report. Filters the movement rows returned by ITMIM. Supply multiple values as one comma-separated query value, for example `mediaMarketing=ENGAGED,AWARE`. REACHED: The stakeholder received their first Individual Targeting impressions and remained below 10 impressions in the selected window. AWARE: The stakeholder crossed from fewer than 10 to at least 10 Individual Targeting impressions in the selected window. ENGAGED: The stakeholder's first known Individual Targeting click occurred in the selected window.
techniquequerySpaceMediaTechnique[]NoSMP and SMPC select one or more media technique rows; omit to return all techniques. STAM requires exactly one technique and accepts only LINKEDIN or INDIVIDUAL_TARGETING. Supply values as one comma-separated query value.
ownerIdquerystringNoSMP, SMPC, or STAM only. Restricts metrics to accounts currently owned by this workspace user. Supply one 24-character hexadecimal user id.
programquerystringNoSMP, SMPC, or STAM only. Resolves this value case-insensitively against the workspace's distinct current account types, then restricts metrics to exact workspace account-type values. Not a deal program.
accountStatusqueryDOAccountStatusNoSMP, SMPC, or STAM only. Restricts metrics to accounts with this current account status.
industryquerystringNoSMP, SMPC, or STAM only. Case-insensitive literal current account industry filter.
marketSegmentquerystringNoSMP, SMPC, or STAM only. Case-insensitive literal current account market-segment filter.
metricquerySpaceMediaMetricNoSTAM only and required for STAM. Selects the movement metric.
directionquerySpaceAccountMoverDirectionNoSTAM only. Selects gainers, decliners, or all non-zero movers. Defaults to ALL.
minimumActivityquerynumberNoSTAM only. Minimum current-or-previous activity for the selected metric.
projectquerycrm | targetingActivated | type | trafficLight[]NoOptional output fields supplied once as a comma-separated list. Account options: crm, targetingActivated. Stakeholder options: crm, type, trafficLight. crm: Adds provider-neutral CRM mapping identities to account and stakeholder entities when available. targetingActivated: Adds targetingActivated to account entities with individual, linkedIn, ip, and geo activation states when available. type: Adds type to stakeholder entities as a list of stakeholder classification labels when available. trafficLight: Adds trafficLight to stakeholder entities as the current relationship indicator when available. Each value applies only to matching entity types and is omitted when unavailable. Omitting project preserves the compact default response and does not change filtering, sorting, or pagination.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Report payload. ITMP and ITMIM deduplicate account context under references.accountsById. Null-valued properties are omitted recursively.
  • 400: Invalid report input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated tenant scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: Reports API is temporarily unavailable.
  • 504: Report execution exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/reports?type=AMPS&duration=ALL_TIME&take=10&skip=0&sortKey=overall.clicks&sortOrder=-1" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-reports"

Response example

{
  "data": [],
  "metadata": {
    "count": 0
  }
}

Signals

Read-only paginated workspace Signals with exact counts and compact references.

GET /api/v1/public/signals — List Signals

Lists read-only workspace Signals in deterministic timeline order. The request is safe to retry. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Use at most one entity scope: accountId, stakeholderId, or dealId. Supply ownerId and type as comma-separated values when selecting multiple account owners or Signal types. Use either duration or an explicit half-open from/to range. Named durations use the credential issuer's workspace-viewer timezone. Explicit ranges are absolute RFC 3339 date-times: from is inclusive, to is exclusive, and an event exactly at to is excluded. to requires from and must be later. metadata.count is the exact number of matching Signal rows before pagination. metadata.insights is returned only on the first page (skip=0) and describes the complete filtered cohort; it is omitted on later pages. In typeDistribution, VISIT count sums each matching website Signal's visits field while other types count matching Signal rows. Distribution percentages use those activity units rather than metadata.count. Rows reference accountId, stakeholderId, and leadId. Join them to references.accountsById, references.stakeholdersById, and references.leadsById. Account references may include linkedIn, website, and compact owners; stakeholder references may include position, linkedIn, and email; lead references contain id and name. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
takequeryintegerNoMaximum Signal rows returned in this page. Allowed values are integers from 1 through 100. Defaults to 10.
skipqueryintegerNoNumber of matching Signal rows skipped before this page. Allowed values are integers from 0 through 1000. Defaults to 0.
accountIdquerystringNoRestricts Signals directly to one account. Use at most one of accountId, stakeholderId, or dealId.
stakeholderIdquerystringNoRestricts person-based Signals to one stakeholder. Use at most one of accountId, stakeholderId, or dealId.
dealIdquerystringNoRestricts Signals to stakeholders linked to one deal plus website activity for that deal's account. Use at most one of accountId, stakeholderId, or dealId.
ownerIdquerystring[]NoRestricts Signals to accounts assigned to one or more owners. Supply multiple ids as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439021,507f1f77bcf86cd799439022`. At most 100 unique 24-character hexadecimal ids are accepted.
typequeryPublicSignalType[]NoRestricts the timeline to one or more Signal categories. Supply multiple categories as one comma-separated query value, for example `type=ENGAGED,VISIT`. REACHED: Person-based Signal indicating that advertising reached the stakeholder. AWARE: Person-based Signal indicating a stronger observed advertising interaction. ENGAGED: Person-based Signal indicating recorded stakeholder advertising engagement. VISIT: Website-visit Signal for an identified website company.
durationqueryPublicSignalDurationNoOptional named time window resolved in the credential issuer's viewer timezone. Do not combine duration with from or to. Omitting all date parameters returns all available matching Signals. TODAY: Current report day. Calendar-boundary timezone behavior follows the selected report family. YESTERDAY: Previous report day. Calendar-boundary timezone behavior follows the selected report family. THIS_WEEK: Current report week. LAST_WEEK: Previous report week. THIS_MONTH: Current report month. LAST_MONTH: Previous report month. LAST_7_DAYS: Rolling last seven days. LAST_30_DAYS: Rolling last thirty days. LAST_3_MONTHS: Rolling last three months. ALL_TIME: All available history or the latest cumulative snapshot, depending on report type.
fromquerystring:date-timeNoInclusive explicit range start in RFC 3339 date-time form, including a UTC offset. Do not combine with duration.
toquerystring:date-timeNoOptional exclusive explicit range end in RFC 3339 date-time form. An event exactly at to is excluded. Requires from, must be later than from, and cannot be combined with duration.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Paginated Signals with exact count metadata and deduplicated minimal entity references. Null-valued properties are omitted recursively.
  • 400: Invalid Signal input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: Signals API is temporarily unavailable.
  • 504: Signal execution exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/signals?take=10&skip=0&type=ENGAGED%2CVISIT&duration=LAST_30_DAYS" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "id": "507f1f77bcf86cd799439041",
      "createdAt": "2026-07-30T10:15:00.000Z",
      "type": "ENGAGED",
      "accountId": "507f1f77bcf86cd799439011",
      "stakeholderId": "507f1f77bcf86cd799439031",
      "lastClickDate": "2026-07-30T10:10:00.000Z",
      "lastClickTitle": "Product overview",
      "clicks": 3,
      "impressions": 18
    },
    {
      "id": "507f1f77bcf86cd799439042",
      "createdAt": "2026-07-29T08:00:00.000Z",
      "type": "VISIT",
      "accountId": "507f1f77bcf86cd799439011",
      "leadId": "507f1f77bcf86cd799439051",
      "lastVisitDate": "2026-07-29T07:55:00.000Z",
      "visits": 2,
      "locations": [
        "Stockholm, Sweden"
      ],
      "newLead": true
    }
  ],
  "references": {
    "accountsById": {
      "507f1f77bcf86cd799439011": {
        "id": "507f1f77bcf86cd799439011",
        "name": "Example account",
        "linkedIn": "https://www.linkedin.com/company/example",
        "website": "https://www.example.com",
        "owners": [
          {
            "id": "507f1f77bcf86cd799439061",
            "name": "Example owner"
          }
        ]
      }
    },
    "stakeholdersById": {
      "507f1f77bcf86cd799439031": {
        "id": "507f1f77bcf86cd799439031",
        "name": "Ada Lovelace",
        "position": "Chief Scientist",
        "linkedIn": "https://www.linkedin.com/in/ada-lovelace",
        "email": "ada@example.com"
      }
    },
    "leadsById": {
      "507f1f77bcf86cd799439051": {
        "id": "507f1f77bcf86cd799439051",
        "name": "Visitor company"
      }
    }
  },
  "metadata": {
    "count": 2,
    "insights": {
      "typeDistribution": [
        {
          "type": "ENGAGED",
          "label": "Engaged",
          "count": 1,
          "percentage": 33.3
        },
        {
          "type": "VISIT",
          "label": "Website visit",
          "count": 2,
          "percentage": 66.7
        }
      ],
      "uniqueAccounts": 1,
      "uniqueStakeholders": 1,
      "engagedStakeholders": 1,
      "accountsWithEngagedStakeholders": 1,
      "visitedAccounts": 1,
      "newLeadSignals": 1,
      "latestSignalAt": "2026-07-30T10:10:00.000Z",
      "topAccounts": [
        {
          "accountId": "507f1f77bcf86cd799439011",
          "signalCount": 2,
          "latestSignalAt": "2026-07-30T10:10:00.000Z"
        }
      ]
    }
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 2,
    "hasMore": false
  }
}

Accounts

Read-only account listing and detail operations.

GET /api/v1/public/accounts — List accounts

Lists account rows with bounded pagination, primary classification, Product Interest Fit, targeting, ownership, Listing-state filters, and documented sorting. archived=true selects Archived accounts; archived=false selects Active accounts; includeArchived=true includes both states. Optional account project values are crm and targetingActivated. crm adds provider-neutral CRM mapping identity; targetingActivated adds individual, LinkedIn, IP, and geo activation states. Supply one comma-separated value, for example project=crm,targetingActivated, or omit project for the compact default row. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
takequeryintegerNoMaximum rows returned in this page. Integer from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of matching rows skipped before this page. Integer from 0 through 1000. Defaults to 0.
namequerystringNoCase-insensitive account name search. Maximum length is 200 characters.
statusqueryEXISTING_CUSTOMERS | PREVIOUS_CUSTOMERS | PROSPECTS | SUSPECTS | INFLUENCER | PARTNERS | EXISTING_INVESTORS | PROSPECT_INVESTORS | SUSPECT_INVESTORS | INACTIVE[]NoAccount status filter. Allowed values: EXISTING_CUSTOMERS, PREVIOUS_CUSTOMERS, PROSPECTS, SUSPECTS, INFLUENCER, PARTNERS, EXISTING_INVESTORS, PROSPECT_INVESTORS, SUSPECT_INVESTORS, INACTIVE. Supply multiple values as one comma-separated query value, for example `status=PROSPECTS,EXISTING_CUSTOMERS`.
industryquerystringNoCase-insensitive industry search. Maximum length is 200 characters.
hqCountryquerystring[]NoHeadquarters-country filter using ISO 3166-1 alpha-2 codes. At most 25 unique values are accepted. Supply multiple values as one comma-separated query value, for example `hqCountry=SE,US`.
typequerystringNoCase-insensitive search over the client-defined account type value. Maximum length is 200 characters.
rmfqueryHIGH | MEDIUM | LOW[]NoReference Market Fit filter. Allowed values: HIGH, MEDIUM, LOW. Supply multiple values as one comma-separated query value, for example `rmf=HIGH,MEDIUM`.
healthqueryEXPAND | STABILIZE | RESCUE[]NoCustomer health filter. Allowed values: EXPAND, STABILIZE, RESCUE. Supply multiple values as one comma-separated query value, for example `health=EXPAND,STABILIZE`.
pifScoreMinquerynumber:doubleNoInclusive minimum Product Interest Fit score.
pifScoreMaxquerynumber:doubleNoInclusive maximum Product Interest Fit score. Must not be lower than pifScoreMin.
pifBandqueryHOT | WARMING | EARLY_INTEREST | TRACE | NO_SIGNAL[]NoProduct Interest Fit engagement-band filter. Allowed values: HOT, WARMING, EARLY_INTEREST, TRACE, NO_SIGNAL. Supply multiple values as one comma-separated query value, for example `pifBand=HOT,WARMING`.
pifTrendqueryTRENDING | HOLDING | COOLING | RE_AWAKENING | LOW_VOLUME[]NoProduct Interest Fit trend filter. Allowed values: TRENDING, HOLDING, COOLING, RE_AWAKENING, LOW_VOLUME. Supply multiple values as one comma-separated query value, for example `pifTrend=TRENDING,HOLDING`.
targetingqueryALL | IN_TARGETING | NOT_IN_TARGETINGNoTargeting membership filter. ALL applies no targeting constraint. Allowed values: ALL, IN_TARGETING, NOT_IN_TARGETING.
ownerIdquerystring[]NoRestricts results to one or more account-owner ids. At most 25 unique ids are accepted. Supply multiple values as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012`.
archivedquerybooleanNoListing-state filter. true returns Archived accounts; false returns Active accounts. Do not combine with includeArchived.
includeArchivedquerybooleanNoWhen true, includes both Active and Archived accounts. Do not combine with archived.
sortKeyqueryname | archived | status | website | linkedIn | type | industry | hqCountry | employees | targeting | rmf | pif.score | pif.trend | pif.last30Days.score | pif.last7Days.score | adImpressions | adClicksNoAccount field used for ordering. Allowed values: name, archived, status, website, linkedIn, type, industry, hqCountry, employees, targeting, rmf, pif.score, pif.trend, pif.last30Days.score, pif.last7Days.score, adImpressions, adClicks. Supply sortKey and sortOrder together.
sortOrderquery-1 | 1NoSort direction. Use 1 for ascending or -1 for descending. Supply sortKey and sortOrder together.
projectquerycrm | targetingActivated[]NoOptional account output fields beyond the compact default. crm: Adds provider-neutral CRM mapping identities to account and stakeholder entities when available. targetingActivated: Adds targetingActivated to account entities with individual, linkedIn, ip, and geo activation states when available. Allowed values for account entities: crm, targetingActivated. Values are omitted when unavailable. Omitting project preserves the compact default response. Supply multiple values as one comma-separated query value, for example `project=crm,targetingActivated`.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid accounts input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/accounts?take=10&skip=0&project=crm%2CtargetingActivated" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "id": "507f1f77bcf86cd799439011",
      "name": "Example account",
      "status": "Prospects",
      "industry": "Software",
      "marketSegment": "Enterprise",
      "targeting": "IN_TARGETING",
      "owners": [
        {
          "id": "507f1f77bcf86cd799439021",
          "name": "Example owner"
        }
      ],
      "targetingActivated": {
        "individual": "YES",
        "linkedIn": "NO",
        "ip": "YES",
        "geo": "NONE"
      },
      "crm": [
        {
          "provider": "hubspot",
          "objectId": "123456789",
          "objectUrl": "https://app.hubspot.com/contacts/123/company/123456789",
          "mappedAt": "2026-08-10T09:00:00Z"
        }
      ]
    }
  ],
  "metadata": {
    "count": 1,
    "industries": [
      "Software"
    ]
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 1,
    "hasMore": false
  }
}

GET /api/v1/public/accounts/{accountId} — Get one account

Returns one account by id. health is available for Existing Customers; rmf is available for other account statuses. targetingActivated contains individual, LinkedIn, IP, and geographic activation states when available; each value is YES, NO, or NONE. crm contains provider-neutral CRM mapping identity/link attributes when available. Archived accounts include archived=true; Active accounts omit archived. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
accountIdpathstringYesAccount id.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid accounts input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/accounts/507f1f77bcf86cd799439011" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

Stakeholders

Read-only stakeholder listing and detail operations.

GET /api/v1/public/stakeholders — List stakeholders

Lists compact stakeholder rows with primary account, deal, identity, role, media-impact, targeting, ownership, pagination, and sort filters. Optional stakeholder project values are crm, type, and trafficLight. crm adds provider-neutral CRM mapping identity; type adds stakeholder classification labels; trafficLight adds the current relationship indicator. Supply one comma-separated value, for example project=crm,type,trafficLight, or omit project for the compact default row. Repeated account context is returned once under references.accountsById. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
takequeryintegerNoMaximum rows returned in this page. Integer from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of matching rows skipped before this page. Integer from 0 through 1000. Defaults to 0.
accountIdquerystringNoRestricts results to one account id.
dealIdquerystringNoRestricts results to one deal id.
namequerystringNoCase-insensitive full-name search. Maximum length is 200 characters.
emailquerystringNoCase-insensitive email search. Maximum length is 200 characters.
firstNamequerystringNoCase-insensitive first-name search. Maximum length is 200 characters.
lastNamequerystringNoCase-insensitive last-name search. Maximum length is 200 characters.
positionquerystring[]NoStakeholder position/title filter. At most 25 unique values are accepted. Supply multiple values as one comma-separated query value, for example `position=Chief Financial Officer,VP Finance`.
typequeryCONSENSUS | ENTRY | SIGN_OFF | RISK_BEARING | TROJAN_HORSE | GATE_KEEPER | CHAMPION[]NoStakeholder role-type filter. Allowed values: CONSENSUS, ENTRY, SIGN_OFF, RISK_BEARING, TROJAN_HORSE, GATE_KEEPER, CHAMPION. Supply multiple values as one comma-separated query value, for example `type=CHAMPION,CONSENSUS`.
marketingImpactqueryENGAGED | AWARE | REACHED | NOT_VERIFIED[]NoCurrent stakeholder media-impact filter. Allowed values: ENGAGED, AWARE, REACHED, NOT_VERIFIED. Supply multiple values as one comma-separated query value, for example `marketingImpact=ENGAGED,AWARE`.
trafficLightqueryCOLD | NEUTRAL | AGAINST | FOR[]NoStakeholder relationship indicator filter. Allowed values: COLD, NEUTRAL, AGAINST, FOR. Supply multiple values as one comma-separated query value, for example `trafficLight=FOR,COLD`.
targetingqueryALL | IN_TARGETING | NOT_IN_TARGETINGNoTargeting membership filter. ALL applies no targeting constraint. Allowed values: ALL, IN_TARGETING, NOT_IN_TARGETING.
ownerIdquerystring[]NoRestricts results to one or more account-owner ids. At most 25 unique ids are accepted. Supply multiple values as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012`.
sortKeyqueryaccount.name | firstName | lastName | position | linkedIn | email | trafficLight | isKeyStakeholder | adClicks | adImpressions | lastDateAdClickedNoStakeholder field used for ordering. Allowed values: account.name, firstName, lastName, position, linkedIn, email, trafficLight, isKeyStakeholder, adClicks, adImpressions, lastDateAdClicked. Supply sortKey and sortOrder together.
sortOrderquery-1 | 1NoSort direction. Use 1 for ascending or -1 for descending. Supply sortKey and sortOrder together.
projectquerycrm | type | trafficLight[]NoOptional stakeholder output fields beyond the compact default. crm: Adds provider-neutral CRM mapping identities to account and stakeholder entities when available. type: Adds type to stakeholder entities as a list of stakeholder classification labels when available. trafficLight: Adds trafficLight to stakeholder entities as the current relationship indicator when available. Allowed values for stakeholder entities: crm, type, trafficLight. Values are omitted when unavailable. Omitting project preserves the compact default response. Supply multiple values as one comma-separated query value, for example `project=crm,type,trafficLight`.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid stakeholders input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/stakeholders?take=10&skip=0&project=crm%2Ctype%2CtrafficLight" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "id": "507f1f77bcf86cd799439012",
      "name": "Ada Lovelace",
      "accountId": "507f1f77bcf86cd799439011",
      "firstName": "Ada",
      "lastName": "Lovelace",
      "position": "Chief Scientist",
      "email": "ada@example.com",
      "linkedIn": "https://www.linkedin.com/in/ada-lovelace",
      "targeting": "IN_TARGETING",
      "type": [
        "Decision Maker"
      ],
      "trafficLight": "GREEN",
      "crm": [
        {
          "provider": "salesforce",
          "objectId": "003000000000001AAA",
          "objectUrl": "https://example.my.salesforce.com/lightning/r/Contact/003000000000001AAA/view",
          "mappedAt": "2026-08-11T10:00:00Z"
        }
      ]
    }
  ],
  "references": {
    "accountsById": {
      "507f1f77bcf86cd799439011": {
        "id": "507f1f77bcf86cd799439011",
        "name": "Example account",
        "status": "Prospects",
        "industry": "Software",
        "marketSegment": "Enterprise",
        "targeting": "IN_TARGETING",
        "owners": [
          {
            "id": "507f1f77bcf86cd799439021",
            "name": "Example owner"
          }
        ]
      }
    }
  },
  "metadata": {
    "count": 1
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 1,
    "hasMore": false
  }
}

GET /api/v1/public/stakeholders/{stakeholderId} — Get one stakeholder

Returns one stakeholder by id, including type, trafficLight, and provider-neutral CRM mapping identity/link attributes when available, with parent-account context deduplicated under references.accountsById. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
stakeholderIdpathstringYesStakeholder id.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid stakeholders input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/stakeholders/507f1f77bcf86cd799439011" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

Website

Read-only website visits, journeys, top pages, and aggregate insights.

GET /api/v1/public/website/visits — List website visits

Lists the complete captured visit timeline for one website company. Account and website-company context is deduplicated under references. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
leadIdquerystringYesRestricts results to one website company id.
takequeryintegerNoMaximum rows returned in this page. Integer from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of matching rows skipped before this page. Integer from 0 through 1000. Defaults to 0.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid website input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/website/visits?leadId=507f1f77bcf86cd799439013&take=10&skip=0" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "id": "visit-1",
      "startedAt": "2026-07-30T10:15:00Z",
      "visitLength": 240,
      "leadId": "507f1f77bcf86cd799439013",
      "accountId": "507f1f77bcf86cd799439011",
      "visitRoute": [
        {
          "pagePath": "/pricing",
          "timeOnPage": 120
        }
      ]
    }
  ],
  "references": {
    "accountsById": {
      "507f1f77bcf86cd799439011": {
        "id": "507f1f77bcf86cd799439011",
        "name": "Example account",
        "status": "Prospects",
        "industry": "Software",
        "marketSegment": "Enterprise",
        "targeting": "IN_TARGETING",
        "owners": [
          {
            "id": "507f1f77bcf86cd799439021",
            "name": "Example owner"
          }
        ]
      }
    },
    "leadsById": {
      "507f1f77bcf86cd799439013": {
        "id": "507f1f77bcf86cd799439013",
        "name": "Example visitor"
      }
    }
  },
  "metadata": {
    "count": 1
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 1,
    "hasMore": false
  }
}

GET /api/v1/public/website/accounts — List website tracking accounts

Lists website-tracked companies across all, targeted, or non-targeted scope. Supports a named duration or explicit from/to range, optional mapped-account and owner filters, company-name search, bounded pagination, and visit or last-seen ordering. When no window is supplied, LAST_3_MONTHS is used. Company and mapped-account names are deduplicated under references. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
typequeryALL_ACCOUNTS | TARGETED_ACCOUNTS | NON_TARGETED_ACCOUNTSNoWebsite-company scope. Allowed values: ALL_ACCOUNTS, TARGETED_ACCOUNTS, NON_TARGETED_ACCOUNTS. Defaults to ALL_ACCOUNTS.
durationqueryTODAY | YESTERDAY | THIS_WEEK | LAST_WEEK | THIS_MONTH | LAST_MONTH | LAST_7_DAYS | LAST_30_DAYS | LAST_3_MONTHS | ALL_TIMENoNamed time window. Do not combine duration with from or to. When no duration or explicit range is supplied, the endpoint defaults to LAST_3_MONTHS. Allowed values: TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH, LAST_MONTH, LAST_7_DAYS, LAST_30_DAYS, LAST_3_MONTHS, ALL_TIME.
fromquerystring:date-timeNoInclusive explicit range start in RFC 3339 date-time form. Do not combine with duration.
toquerystring:date-timeNoOptional exclusive range end in RFC 3339 date-time form. An event exactly at to is excluded. Requires from and must be later than from.
accountIdquerystringNoRestricts results to one mapped account id.
ownerIdquerystring[]NoRestricts results to one or more account-owner ids. At most 25 unique ids are accepted. Supply multiple values as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012`.
searchNamequerystringNoCase-insensitive website-company name search. Maximum length is 200 characters.
sortqueryVISITS | LAST_SEENNoWebsite-company row ordering. Allowed values: VISITS, LAST_SEEN. VISITS ranks by visit activity; LAST_SEEN ranks by most recent visit.
takequeryintegerNoMaximum rows returned in this page. Integer from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of matching rows skipped before this page. Integer from 0 through 1000. Defaults to 0.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid website input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/website/accounts?type=ALL_ACCOUNTS&duration=LAST_3_MONTHS&sort=VISITS&take=10&skip=0" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "leadId": "507f1f77bcf86cd799439013",
      "accountId": "507f1f77bcf86cd799439011",
      "lastVisitAt": "2026-07-30T10:15:00Z",
      "visits": 4,
      "pageViews": 9,
      "targeting": "IN_TARGETING"
    }
  ],
  "references": {
    "accountsById": {
      "507f1f77bcf86cd799439011": {
        "id": "507f1f77bcf86cd799439011",
        "name": "Example account",
        "status": "Prospects",
        "industry": "Software",
        "marketSegment": "Enterprise",
        "targeting": "IN_TARGETING",
        "owners": [
          {
            "id": "507f1f77bcf86cd799439021",
            "name": "Example owner"
          }
        ]
      }
    },
    "leadsById": {
      "507f1f77bcf86cd799439013": {
        "id": "507f1f77bcf86cd799439013",
        "name": "Example account"
      }
    }
  },
  "metadata": {
    "count": 1,
    "accounts": 1,
    "type": "ALL_ACCOUNTS"
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 1,
    "hasMore": false
  }
}

GET /api/v1/public/website/top-pages — List top website pages

Ranks the most-visited pages for one account when accountId is supplied, or across the authenticated workspace when it is omitted. Select either a named duration or an explicit from/to range. When no window is supplied, a bounded default window is used. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
accountIdquerystringNoOptional account id. When supplied, ranks pages for that account. When omitted, ranks pages across the authenticated workspace.
durationqueryTODAY | YESTERDAY | THIS_WEEK | LAST_WEEK | THIS_MONTH | LAST_MONTH | LAST_7_DAYS | LAST_30_DAYS | LAST_3_MONTHS | ALL_TIMENoNamed time window. Do not combine duration with from or to. When no duration or explicit range is supplied, the endpoint defaults to LAST_3_MONTHS. Allowed values: TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH, LAST_MONTH, LAST_7_DAYS, LAST_30_DAYS, LAST_3_MONTHS, ALL_TIME.
fromquerystring:date-timeNoInclusive explicit range start in RFC 3339 date-time form. Do not combine with duration.
toquerystring:date-timeNoOptional exclusive range end in RFC 3339 date-time form. An event exactly at to is excluded. Requires from and must be later than from.
takequeryintegerNoMaximum rows returned in this page. Integer from 1 through 50. Defaults to 10.
skipqueryintegerNoNumber of matching rows skipped before this page. Integer from 0 through 1000. Defaults to 0.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid website input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/website/top-pages?accountId=507f1f77bcf86cd799439011&duration=LAST_30_DAYS&take=10&skip=0" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": [
    {
      "pageKey": "/pricing",
      "pagePath": "/pricing",
      "pageViews": 10,
      "sessions": 7,
      "totalTimeOnPage": 800,
      "avgTimeOnPage": 80,
      "totalVisitLength": 900,
      "avgVisitLength": 90
    }
  ],
  "metadata": {
    "count": 1,
    "timezone": "Europe/Stockholm",
    "duration": "LAST_30_DAYS"
  },
  "pagination": {
    "skip": 0,
    "take": 10,
    "returned": 1,
    "hasMore": false
  }
}

GET /api/v1/public/website/insights — Get website insights

Returns aggregate website traffic, account coverage, visit duration, country, industry, source, and daily activity insights for the selected company scope and time window. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
typequeryALL_ACCOUNTS | TARGETED_ACCOUNTS | NON_TARGETED_ACCOUNTSNoWebsite-company scope. Allowed values: ALL_ACCOUNTS, TARGETED_ACCOUNTS, NON_TARGETED_ACCOUNTS. Defaults to TARGETED_ACCOUNTS.
durationqueryTODAY | YESTERDAY | THIS_WEEK | LAST_WEEK | THIS_MONTH | LAST_MONTH | LAST_7_DAYS | LAST_30_DAYS | LAST_3_MONTHS | ALL_TIMENoNamed time window. Do not combine duration with from or to. When no duration or explicit range is supplied, the endpoint defaults to LAST_3_MONTHS. Allowed values: TODAY, YESTERDAY, THIS_WEEK, LAST_WEEK, THIS_MONTH, LAST_MONTH, LAST_7_DAYS, LAST_30_DAYS, LAST_3_MONTHS, ALL_TIME.
fromquerystring:date-timeNoInclusive explicit range start in RFC 3339 date-time form. Do not combine with duration.
toquerystring:date-timeNoOptional exclusive range end in RFC 3339 date-time form. An event exactly at to is excluded. Requires from and must be later than from.
ownerIdquerystring[]NoRestricts results to one or more account-owner ids. At most 25 unique ids are accepted. Supply multiple values as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012`.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid website input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/website/insights?type=TARGETED_ACCOUNTS&duration=LAST_30_DAYS" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": {
    "targetingScope": "TARGETED_ACCOUNTS",
    "targetedCount": 2,
    "nonTargetedCount": 0,
    "accounts": 2,
    "uniqueAccounts": 2,
    "uniqueLeads": 2,
    "visits": 12,
    "pageViews": 30,
    "averageVisitDuration": 180,
    "countries": [
      {
        "group": "SE",
        "count": 2
      }
    ],
    "dailyTrackingRecords": [
      {
        "date": "2026-07-30",
        "visits": 12,
        "pageViews": 30
      }
    ],
    "industries": [
      {
        "group": "Software",
        "count": 2
      }
    ],
    "sources": [
      {
        "group": "direct",
        "count": 8
      }
    ]
  }
}

Targeting

Read-only workspace targeting summary.

GET /api/v1/public/targeting-summary — Get targeting summary

Returns workspace targeting cohort sizes, media reach summaries, status buckets, and account/stakeholder distributions. Supply ownerId as one comma-separated value to limit the summary to accounts assigned to selected owners. This endpoint supports GET only and does not accept a request body. Authentication is accepted only through `Authorization: Bearer <token>`; the bearer token determines the workspace. Unknown, nested, object-valued, or unexpectedly repeated scalar query parameters are rejected. Successful responses omit null-valued properties and null array entries. GET URLs can appear in client and intermediary logs. Never place credentials or secrets in query parameters. Responses are marked `Cache-Control: private, no-store`.

Parameters

NameLocationTypeRequiredDescription
ownerIdquerystring[]NoRestricts results to one or more account-owner ids. At most 25 unique ids are accepted. Supply multiple values as one comma-separated query value, for example `ownerId=507f1f77bcf86cd799439011,507f1f77bcf86cd799439012`.
X-Request-IdheaderstringNoOptional caller correlation id. The server generates one when omitted and always returns the resolved value.
X-Trace-IdheaderstringNoOptional distributed trace id for cross-system request correlation.
X-Client-NameheaderstringNoOptional caller-defined client label for request diagnostics.

Responses

  • 200: Successful response. Repeated entity context is returned through reference maps where applicable.
  • 400: Invalid targeting input.
  • 401: Missing, invalid, expired, or unauthorized credential.
  • 403: Authenticated workspace scope mismatch.
  • 405: Only GET is supported for this endpoint.
  • 429: Rate limit exceeded.
  • 500: Unexpected server failure.
  • 503: The Public API is temporarily unavailable.
  • 504: The request exceeded the time limit.

Request example

curl "https://server-url-from-token-page.endpoint/api/v1/public/targeting-summary" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json" \
  -H "X-Request-Id: postman-{{$guid}}" \
  -H "X-Client-Name: postman-public-api"

Response example

{
  "data": {
    "accountsInTargetingCount": 10,
    "stakeholdersInTargetingCount": 25,
    "accountsHQCountryMap": [
      {
        "group": "SE",
        "count": 6
      }
    ],
    "accountsTypeMap": [
      {
        "group": "Prospect",
        "count": 10
      }
    ]
  }
}

Frequently asked questions

I closed the success dialog without copying the token. Can I get it back?

No. The secret token value is shown only once. Create a new token or rotate the existing one if you still need access.

Which endpoint should I use?

Get the Public API server URL when creating an access token in Settings > API Tokens. Copy the URL shown for your workspace and append the route you need, such as /reports. Do not add /api/v1/public a second time.

Where can I review the available APIs?

Use the API guide on this page. It groups supported Public API endpoints by product area and shows parameters, request examples, and response shapes without needing separate files.

Which header should I send?

Use Authorization: Bearer <token>. This is the supported authentication header for API tokens.

What can the read-only API token access?

It can call supported routes under /api/v1/public for the workspace that issued the token. It does not create, edit, delete, or approve workspace data.

How should I page through long result sets?

Use the documented take and skip query parameters where they are available. Keep pages small, process one page at a time, and avoid running large reporting jobs in a tight loop.

How do I handle a 429 rate-limit response?

Read the Retry-After header, wait for that duration, and retry with lower request volume. For scheduled jobs, spread calls over time instead of starting every report at once.

Can I use X-MCP-Token or ?token= with an API token?

No. The Public API accepts only Authorization: Bearer <token> with an API Space Read Only token. The header and URL alternatives described in the MCP guide apply only to MCP.

Can one token be shared by multiple tools?

Prefer separate tokens for unrelated clients so you can manage access independently. Each workspace can have at most two unexpired API tokens; expired tokens do not use a slot. Revoke unused tokens when you need room for a new integration.

What is the difference between rotate and revoke?

Rotate replaces the secret with a new one so the client can continue after you update it. Revoke disables the token completely.

What happens when a token expires?

An expired token cannot authenticate. The owner can rotate it with a new expiry, or create a new token, if a workspace token slot is available. A token also stops working if its owner loses access to the workspace.

What happens if I leave expiry empty?

The token expires after one month. Every new or rotated token has an expiry, and you cannot request more than one year.

What should I include when asking for support?

Share the route, method, approximate time, response code, and X-Request-Id if available. Do not send the full bearer token, screenshots containing secrets, or copied Authorization headers.

Do the new MCP write tools also work through the Public API?

No. The Public API remains read-only and uses API Space Read Only tokens. MCP's account/stakeholder write tools require a separate MCP Space Read Write token and the /mcp endpoint. The two types of token are not interchangeable.

How do I supply filters and request extra fields?

Use each endpoint's documented URL query parameters, not MCP's JSON arguments. Send supported multi-value filters once as comma-separated values. On supported endpoints, project requests optional fields such as CRM references without changing which rows match.

How should I choose a report or comparison period?

Read the report's supported parameters and date rules before calling /reports. SMP summarizes activity by media technique, SMPC compares adjacent equal-length periods, and STAM ranks account gains or declines. IP and GEO values may remain cumulative or be unavailable for period comparisons; do not treat them as period totals.