Public API

API overview

GET-only, read-only, workspace-scoped Public API for reports, Signals, accounts, stakeholders, website activity, and targeting summaries. Import this specification into an OpenAPI-compatible client, set the bearer API token supplied to your organization, and call the production HTTPS endpoint. The bearer token determines workspace scope.

Base URL: {See endpoint from your workspace}

Version: 1.2.0. Published endpoints: 11.

DOE API Token User Guide

DOE API tokens let approved clients access supported read-only Public API routes for a workspace. The token decides the workspace scope and must be sent as a standard bearer token.

Before you create a token

  • Know which client or workflow will use the token.
  • Know who owns that client or workflow.
  • Decide whether the token should expire automatically.
  • Decide where the token will be stored after creation.
  • Create a separate token for each client or workflow.
  • 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. Review and copy the Public API endpoint shown in the dialog.
  8. Choose an expiry date when the token should stop working automatically.
  9. Click Generate.
  10. Copy the token immediately from the success dialog and store it safely.

Safety checklist

  • Create one token per client or workflow.
  • Prefer expiring tokens unless there is a clear long-term need.
  • Save the token immediately because the secret is shown only once.
  • Store tokens in a secure secret manager or password manager.
  • Rotate tokens when ownership changes or exposure is suspected.
  • 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`. 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 ### 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. - Window: ALL_TIME uses visits and pageViews. For bounded windows, visits and pageViews contain the selected-window values. - 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. - Window: ALL_TIME uses visits and pageViews. Bounded durations and custom from/to windows use spanVisits.visits and spanVisits.pageViews. - 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. 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. SMP: Space Media Performance — Returns one aggregate row per selected media technique with clicks, impressions, CTR, basis, reporting date, and availability. SMPC: Space Media Period Comparison — Returns current and previous period clicks, impressions, absolute change, percentage change, and availability by technique. STAM: Space Top Account Movers — Returns accounts ranked by media movement for the selected period, including current value, previous value, change, movement direction, technique, and availability. 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 | asOf | availability | basis | change.clicks | change.impressions | changePercent | changePercent.clicks | changePercent.impressions | city | clicks | country | countryCode | ctr | current.clicks | current.impressions | employeeCount | firstClickDate | geo.clicks | geo.impressions | hqCountry | impressions | 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 | movement | name | overall.clicks | overall.count | overall.ctr | overall.impressions | overall.pageViews | overall.reach | overall.reached | overall.uniqueCtr | overall.visits | pageViews | previous.clicks | previous.impressions | region | spanVisits.pageViews | spanVisits.visits | stakeholder.firstName | stakeholder.lastName | stakeholder.position | technique | 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; 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; SMP: technique, clicks, impressions, ctr, basis, asOf, availability; SMPC: technique, current.clicks, current.impressions, previous.clicks, previous.impressions, change.clicks, change.impressions, changePercent.clicks, changePercent.impressions, availability; STAM: account.name, current.clicks, previous.clicks, change.clicks, changePercent, movement, technique, availability; 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.
searchKeyqueryaccount.name | availability | basis | city | country | countryCode | hqCountry | industry | linkedIn | linkedinUrl | marketSegment | movement | name | region | technique | 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; 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; SMP: technique, basis, availability; SMPC: technique, availability; STAM: name, account.name, technique, movement, availability; 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.
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 "{See endpoint from your workspace}/api/v1/public/reports" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/signals" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/accounts" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/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 "{See endpoint from your workspace}/api/v1/public/stakeholders" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/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 "{See endpoint from your workspace}/api/v1/public/website/visits" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/website/accounts" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/website/top-pages" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/website/insights" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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 "{See endpoint from your workspace}/api/v1/public/targeting-summary" \
  -H "Authorization: Bearer $DOE_API_TOKEN" \
  -H "Accept: application/json"

Response example

{
  "message": "Successful response"
}

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?

The generate dialog shows this URL when the API profile is selected.

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. Those carriers are not supported for the API Space Read Only profile. Use the standard Authorization bearer header instead.

Can one token be shared by multiple tools?

Avoid sharing one token across unrelated tools. Create one token per client or workflow so ownership, rotation, expiry, and troubleshooting stay clear.

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 should no longer authenticate. If the client still needs access, create a new token or rotate the existing one with a new expiry.

When should I leave expiry empty?

Only for a stable long-term workflow with known ownership, secure storage, and a real review process. If you are unsure, do not leave it empty.

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.