"Best analytics tool I've used in 14 years"

OAuth reference

Setting up a connection? Start with Get started. It explains the two connection methods and includes complete setup instructions for both OAuth and API tokens.

This reference covers OAuth permissions, shared data, token handling, and client implementation. MCP uses Streamable HTTP to carry requests; OAuth controls how a client obtains permission to make them.

How OAuth requests are authorized

  1. You approve a connection. Sign in to DataFast and select websites and permissions. DataFast saves that approval against your account and the OAuth client.
  2. The client receives a token. The token identifies that saved connection. It does not contain your password or give the client your existing API keys.
  3. MCP verifies each request. DataFast checks the token's expiry, its intended MCP endpoint, whether the connection is still active, the requested permission, and your current membership of the approved websites.
  4. The existing API handler checks access too. The MCP tool calls the same handler used by the corresponding REST endpoint, with the identity and permissions verified by DataFast. The handler still enforces its authorization, validation, rate limits, and applicable plan restrictions before returning data.

For example, a connection approved to read Website A cannot fetch Website B by changing a website ID, or write to Website A without write permission and a suitable current role. Removing your membership of Website A also removes that connection's access to it.

DataFast does not exchange OAuth tokens for a master API key. The verified identity is passed inside the server for that request. OAuth tokens cannot authenticate directly to the public REST API or sign in to the dashboard.

Manage a connection

Only selected websites are included. Adding a website to DataFast later does not add it to existing connections. Your active API access, website membership, team role, and each feature's plan restrictions still apply. For example, Starter social mention limits and owner-only Bot traffic controls also apply through OAuth.

If a client asks for more permissions later, review a new consent request. It cannot widen its own connection. To stop access, open Connected apps from Settings → API / MCP and choose Revoke access. Subsequent requests and token refreshes are rejected; a request already running may finish. Revocation does not delete data already received by the other application.

Permissions and shared data

ScopeAccess
websites:readList selected websites with their names, domains, and your team role.
analytics:readRead traffic, revenue, custom goal parameters, and stored social mentions. Recorded URLs and custom parameters may contain personal data.
visitors:readRead visitor journeys with direct identifiers removed. This includes individual activity and purchases. Also requires analytics:read.
notes:readRead manual chart notes, including their text and timestamps.
notes:writeCreate, edit, and delete manual chart notes.
goals:readRead goals and goal display settings.
goals:writeRecord or delete goal events and change goal display settings.
funnels:readRead funnel definitions.
funnels:writeCreate, edit, and delete funnels.
alerts:readRead alerts and their delivery history.
alerts:writeCreate, edit, and delete alerts, including notification recipients.
settings:readRead website display settings, integration status and bot traffic settings.
settings:writeEdit website names, domains, timezones, display settings, and bot traffic settings.
team:readRead team membership, including member names, emails, and roles.
team:writeInvite or remove team members. Only website owners can do this.
Visitor tools require both analytics:read and visitors:read. They return pseudonymous visitor IDs so you can request one visitor's activity, while excluding names, emails, IP addresses, fingerprints, profiles, arbitrary metadata, acquisition parameters, and payment provider identifiers. Query strings and fragments are removed from visitor URLs. Recorded paths and goal names can still contain personal data if your site put it there.

The realtime widget groups visitors by coordinates rounded to 0.1 degrees and country. It excludes visitor IDs, paths, conversion predictions, names, and profiles. Geographic accuracy depends on the location data available to DataFast.

The ChatGPT app adds interactive charts to authorized tool results. Its widgets do not receive access tokens, API keys, or integration credentials. Refreshes and drilldowns call MCP again and repeat authorization.

Custom goal parameters, chart notes, recorded paths, and alert recipients can contain information your site or team deliberately recorded. Grant access only to applications you trust to receive it. Team tools include member names, emails and roles, and require the explicit team scope.

OAuth does not expose API-key management, account-token management, Bot traffic credentials, account profiles/settings, account-wide billing usage, or website creation. No OAuth permission is a wildcard. Use the API-token setup for workflows that need its broader administration tools.

Writes and retries

Write tools require the appropriate :write permission, a role that permits the operation, confirm: true, and an idempotencyKey of 8–128 characters. The agent should explain the exact target and change and obtain your confirmation first. A confirmation argument does not prove a person clicked a button: use a client you trust to ask before making changes. Enabled alerts can send email notifications. Creating a team invitation stores a pending invitation; it does not send email or immediately add a member.

Reuse the same key and identical arguments to retry a write. Completed results are retained for 24 hours within that specific OAuth connection. Changed arguments are rejected. If an attempt's outcome is unknown, DataFast will not execute it again automatically; inspect the website before deliberately issuing a new operation. Revoked or removed website access is checked before a cached result can be returned.

OAuth client implementation

ItemValue
Issuerhttps://datafa.st
Authorization metadatahttps://datafa.st/.well-known/oauth-authorization-server
Authorization endpointhttps://datafa.st/oauth/authorize
Token endpointhttps://datafa.st/oauth/token
Client registrationhttps://datafa.st/oauth/register
Revocation endpointhttps://datafa.st/oauth/revoke
General MCP resourcehttps://datafa.st/api/mcp
ChatGPT MCP resourcehttps://datafa.st/api/chatgpt/mcp
GrantsAuthorization code with PKCE S256; rotating refresh tokens
Access token lifetime1 hour
Refresh token lifetimeUp to 30 days from issuance
Connection lifetimeUp to 90 days from consent; reconnect afterward
Use the exact MCP URL as resource in authorization, code exchange, and refresh requests. A token for one MCP resource does not work at the other. Token requests use application/x-www-form-urlencoded. Send the resulting token only in Authorization: Bearer …, never in a URL. OAuth tokens are accepted at MCP endpoints; they are not general REST API credentials.

These are Bearer tokens, so possession of a valid token permits its approved access. Binding a token to a client and resource does not bind it to one device or prove which application is presenting it. Store tokens securely and revoke the connection if a token is exposed.

The authorization response includes iss=https://datafa.st and echoes the client's state. Redirect URIs must match registration exactly. Public clients use none with PKCE; confidential clients use client_secret_basic or client_secret_post in addition to PKCE. Implicit and password grants and plain PKCE are unsupported.
ChatGPT's official client metadata documents are supported, including https://chatgpt.com/oauth/client.json and its callback-specific variants. Other clients use dynamic registration with exact HTTPS or loopback redirect URIs. Registration names are developer-supplied and shown as unverified during consent. Registration records expire after one year.
Unauthenticated MCP requests return a WWW-Authenticate header pointing to the resource metadata. Tools advertise their exact OAuth scopes. Insufficient-scope tool responses include mcp/www_authenticate to let the client start another authorization request.

Access tokens, refresh tokens, authorization codes, and client secrets are stored as hashes. Codes expire after two minutes and are consumed once. Reusing a consumed code or rotated refresh token revokes the connection. Consent requests expire after ten minutes and are bound to the browser and the signed-in account. Consent pages contain no analytics or third-party scripts.

MCP keeps the standard 60-requests-per-minute credential budget, plus the normal backing API limits and an authentication limit per IP. Authorization, registration and token endpoints are also rate limited. A 429 response means to back off and retry; reconnect after invalid or expired authorization.

OAuth tool reference

New tools are excluded until explicitly assigned a permission. The following tools are available, subject to your consent and current website access.

The ChatGPT app's chart tools — render_timeseries_chart, render_breakdown_chart, render_funnel_chart, and render_realtime_map — each require analytics:read and an approved website.
ToolRequired scopes
datafast_analytics_overviewanalytics:read
datafast_analytics_timeseriesanalytics:read
datafast_analytics_realtimeanalytics:read
datafast_analytics_metadataanalytics:read
datafast_analytics_pagesanalytics:read
datafast_analytics_exit_clicksanalytics:read
datafast_analytics_referrersanalytics:read
datafast_analytics_countriesanalytics:read
datafast_analytics_regionsanalytics:read
datafast_analytics_citiesanalytics:read
datafast_analytics_browsersanalytics:read
datafast_analytics_devicesanalytics:read
datafast_analytics_operating_systemsanalytics:read
datafast_analytics_campaignsanalytics:read
datafast_analytics_goals_breakdownanalytics:read
datafast_analytics_goal_propertiesanalytics:read
datafast_analytics_hostnamesanalytics:read
datafast_analytics_funnelanalytics:read
datafast_mentions_listanalytics:read
datafast_bot_traffic_summaryanalytics:read
datafast_bot_traffic_pagesanalytics:read
datafast_websites_listwebsites:read
datafast_websites_getsettings:read
datafast_integrations_statussettings:read
datafast_bot_traffic_settings_getsettings:read
datafast_websites_updatesettings:write
datafast_bot_traffic_settings_updatesettings:write
datafast_notes_listnotes:read
datafast_notes_createnotes:write
datafast_notes_updatenotes:write
datafast_notes_deletenotes:write
datafast_goals_listgoals:read
datafast_goals_customizations_listgoals:read
datafast_goals_trackgoals:write
datafast_goals_delete_eventsgoals:write
datafast_goals_customizations_updategoals:write
datafast_goals_customizations_resetgoals:write
datafast_funnels_listfunnels:read
datafast_funnels_createfunnels:write
datafast_funnels_updatefunnels:write
datafast_funnels_deletefunnels:write
datafast_alerts_listalerts:read
datafast_alerts_historyalerts:read
datafast_alerts_createalerts:write
datafast_alerts_updatealerts:write
datafast_alerts_deletealerts:write
datafast_team_listteam:read
datafast_team_inviteteam:write
datafast_team_removeteam:write
datafast_visitors_searchanalytics:read + visitors:read
datafast_visitors_getanalytics:read + visitors:read
For each tool's arguments and underlying response contract, see the MCP tool reference, REST API reference, and custom goal property endpoint.

✍️ Something missing? Suggest features.

🤖 AI agent or LLM? Read this page as markdown