Analytics

Export analytics report HTML

Creates a standalone downloadable HTML analytics report from the same body as createAnalyticsReport, and validates it identically: from and to are YYYY-MM-DD (a full ISO timestamp is truncated to its date, anything else is refused with INVALID_FIELD rather than treated as no filter), an inverted window is refused, template is the published enum (executive, agency, creator, minimal, growth, board) and an unknown value is refused instead of becoming executive, and brandAccent must be #rrggbb or #rgb. The body of the response is the HTML document itself, so what was applied travels in headers: X-TokPortal-Report-Template, X-TokPortal-Report-Can-Brand, X-TokPortal-Report-Brand-Name, X-TokPortal-Report-From, X-TokPortal-Report-To, alongside X-TokPortal-Export-Rows and X-TokPortal-Export-Accounts. Read those headers to confirm the window and the branding actually used.

post/analytics/export/reports/html

Request

  • Base URL: https://app.tokportal.com/api/ext
  • URL: https://app.tokportal.com/api/ext/analytics/export/reports/html
  • Auth: API key in header X-API-Key

Headers

X-TokPortal-Dry-Run'true' | '1' | 'yes'

Send true (or 1/yes) to SIMULATE this call instead of executing it. A dry run performs the full validation and pricing path of the real operation and stops before the first write: no credits are debited, no rows are created, no webhooks fire, and no operator ever sees it. The response has the same shape and status as the real call and adds dry_run: true, dry_run_notice, and — on credit-spending operations — credits_would_charge carrying the real price. Errors are identical to the real call, which is the point: this is how you learn what an operation will do before paying for it. Rate limits are consumed normally, a supplied Idempotency-Key is ignored rather than burned, and identifiers returned by a dry run are synthetic (see DRY_RUN_ID_IN_LIVE_REQUEST).

Request body

titlestring nullable

Report title. 120 characters, the real stored limit.

template'executive' | 'agency' | 'creator' | 'minimal' | 'growth' | 'board' | 'null' nullable

Report layout. Any other value is rejected with INVALID_FIELD rather than silently becoming executive. The applied template is echoed as applied.template on the JSON response and as X-TokPortal-Report-Template on the HTML export.

brandNamestring nullable

White-label brand name (80 characters, the real stored limit). Applied only on the full analytics tier with a Farmer plan; on every other plan it is reset to TokPortal, and the response says so through applied.brand_name and canBrand — check them before promising a client a white-labelled document.

brandAccentstring nullable

White-label accent colour, #rrggbb (a #rgb short form is expanded). Named colours, rgb() and 8-digit hex are rejected with INVALID_FIELD instead of silently becoming the TokPortal default. Like brandName it only applies on a Farmer plan at the full tier; read applied.brand_accent back.

accountIdsstring[]
workspaceIdstring uuid nullable
platformsstring[]
countriesstring[]
querystring nullable

Free-text filter. 120 characters, the real stored limit.

fromstring date nullable

Inclusive start date, YYYY-MM-DD. A full ISO timestamp is accepted and truncated to its date; anything else is rejected with INVALID_FIELD rather than silently treated as no filter (which used to widen the report to the account's entire history). Must not be after to. The window actually applied comes back as applied.filters.from.

tostring date nullable

Inclusive end date, YYYY-MM-DD, same parsing as from. Echoed as applied.filters.to.

Response

Standalone analytics report HTML.

Changes

No recorded changes to this operation across all 1 revision of this API.