Datorama · Authentication Profile

Datorama Authentication

Authentication

Datorama secures its APIs with apiKey and oauth2 across 3 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the client-credentials-service-account flow(s).

CompanyAnalyticsMarketingMarketing IntelligenceAdvertisingDataBusiness IntelligenceReportingSalesforceMarketing AnalyticsData HarmonizationDashboardsMCP
Methods: apiKey, oauth2 Schemes: 3 OAuth flows: client-credentials-service-account API key in: header

Security Schemes

IntelligenceApiToken apiKey
· in: header ()
MciServiceAccountOAuth2 oauth2
AppSignatureJWT http
scheme: bearer

Source

Authentication Profile

datorama-authentication.yml Raw ↑
generated: '2026-08-12'
method: searched
source: https://developers.datorama.com/docs/manage/introduction/
docs:
- https://developers.datorama.com/docs/manage/introduction/
- https://developers.datorama.com/docs/query/introduction/
- https://developers.datorama.com/docs/query/migration-guide/
- https://help.salesforce.com/s/articleView?id=sf.dato_getstarted_token_api.htm&type=5
note: >-
  Derived from the provider's own documentation, not from a spec — Datorama publishes no OpenAPI,
  so there are no securitySchemes to aggregate. The Platform API and the Query API share one auth
  model: a personal API access token sent in a bare `Authorization` header (no `Bearer` prefix in
  the documented example). The newer MCI MCP server uses a different, stronger model — OAuth2
  service-account key exchange — which is recorded separately below.
summary:
  types: [apiKey, oauth2]
  api_key_in: [header]
  oauth2_flows: [client-credentials-service-account]
  token_scoping: per-user (rate limits and permissions are enforced at the user level)
  gated: true
  gate_note: >-
    API access is a PAID feature that depends on the account's plan and requires user-level
    activation by the account manager / client success manager. A user without API access sees no
    access token on their profile page.
schemes:
- name: IntelligenceApiToken
  type: apiKey
  in: header
  parameter_name: Authorization
  format: >-
    A UUID-shaped personal access token. The migration guide shows a `dato-api-` prefixed form
    (`dato-api-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`); the current platform/query docs show the
    bare UUID form.
  bearer_prefix: false
  applies_to: [Intelligence Platform API, Intelligence Query API, Reporting API]
  generation: >-
    Generated inside the Intelligence platform under "My Profile" (top-right menu > your name, or
    Ctrl+K / Cmd+K then "My Profile"). Also surfaced at the top right of the developer portal under
    the profile initials.
  rotation: Reset from the "My Profile" page.
  guidance_verbatim: >-
    "Keep your access tokens private. Access tokens should never be exposed in untrusted contexts.
    Never put an access token in client-side Javascript, or send it by email, instant messaging
    apps etc."
  source: https://developers.datorama.com/docs/manage/introduction/
- name: MciServiceAccountOAuth2
  type: oauth2
  flow: service-account (private-key assertion against an IdP discovered from the key file)
  applies_to: [MCI MCP server]
  description: >-
    The @datorama/mci-mcp-sdk MCP server mints and refreshes a short-lived bearer from a
    service-account artifact JSON containing serviceAccountId, discoveryEndpoint and privateKey.
    The token URL is derived from the key file; there is no separately configured IdP URL. The
    bearer is injected into every proxied MCP message as `Authorization: Bearer ...`.
  token_storage: >-
    Short-lived bearer only, written atomically at mode 0600 in a 0700 state dir. The private key
    is held in memory only — never logged, never on argv, never persisted.
  source: https://www.npmjs.com/package/@datorama/mci-mcp-sdk
- name: AppSignatureJWT
  type: http
  scheme: bearer
  bearer_format: JWT
  applies_to: [Marketplace app -> third-party server calls]
  description: >-
    A Marketplace app calls `POST /v1/signatures` to have Intelligence issue a signed JWT, sends it
    to its own third-party backend as `Authorization: Bearer <jwt>`, and that backend calls
    `POST https://api.datorama.com/v1/signatures/verify` to confirm the request really originated
    from Intelligence. A verified response returns globalId, appInstanceId, env and userId — the
    tuple that uniquely identifies app + installation + user + environment. Unverified returns HTTP
    403 and the third-party server must halt.
  source: https://developers.datorama.com/docs/build/apps/making-api-calls/
connector_authentication:
  note: >-
    Separate from API consumer auth — this is how a CUSTOM CONNECTOR authenticates to the data
    source it pulls from. Exactly one method must be implemented per connector.
  methods:
  - id: user-password
    description: >-
      Intelligence POSTs {"username","password"} as application/json to the connector's configured
      loginUrl; the connector returns {"success": bool, "token": string} and the token is put on
      the headers of every subsequent data request in that data-stream run.
    config_shape: '{"userPassDetails": {"loginUrl": String}}'
  source: https://developers.datorama.com/docs/build/connectors/authentication/
permissions:
  model: role-based, enforced server-side on the token's user
  description: >-
    Platform and Query endpoints serve all user roles; responses are FILTERED by role. For lower
    roles (viewer, analyst, editor) some attributes are omitted or returned as null. Endpoints
    restricted to specific roles say so in their own documentation.
  roles_reference: https://help.salesforce.com/s/articleView?id=sf.dato_getstarted_roles.htm&type=5
  app_note: >-
    Apps are typically installed by an Admin and then shared with non-admin users; calls that
    require admin rights should be made during the INSTALL phase and their results persisted with
    saveConfig.