Channel99 · Authentication Profile

Channel99 Authentication

Authentication

Channel99 secures its APIs with apiKey, http, oauth2, and openIdConnect across 4 declared security schemes, as derived from its OpenAPI definitions.

CompanyMarketingAnalyticsAttributionB2BAdvertisingMarketing TechnologyArtificial IntelligenceAccount-Based MarketingReportingMCPAgent ReadyIntent DataAccount IdentificationData Export
Methods: apiKey, http, oauth2, openIdConnect Schemes: 4 OAuth flows: API key in: header

Security Schemes

bearerAuth http
scheme: bearer
clientId apiKey
· in: header (x-client-id)
mcpOAuth oauth2
· flows:
stytchOIDC openIdConnect

Source

Authentication Profile

Raw ↑
generated: '2026-08-12'
method: searched
source: https://support.channel99.com/hc/en-us/articles/49766041989787-Channel99-Reporting-API-Developer-Guide
docs:
- https://support.channel99.com/hc/en-us/articles/49766041989787-Channel99-Reporting-API-Developer-Guide
- https://pulsar.channel99.com/docs/#/
- https://mcp.channel99.com/.well-known/oauth-authorization-server
derived_from:
- openapi/channel99-pulsar-openapi.json
- well-known/channel99-mcp-oauth-authorization-server.json
- well-known/channel99-mcp-oauth-protected-resource.json

note: >-
  Channel99 runs two distinct authentication models. The Pulsar Reporting API uses a
  machine-to-machine client_credentials exchange against its own /auth/token endpoint, returning
  a short-lived Stytch-issued JWT that must be paired with a matching x-client-id header on
  every request. The MCP server and the web application use interactive OAuth 2.1 /
  OpenID Connect against a Stytch authorization server hosted on a Channel99 subdomain.

summary:
  types:
  - apiKey
  - http
  - oauth2
  - openIdConnect
  api_key_in:
  - header
  credential_issuance: >-
    Channel99 issues the M2M client_id and client_secret per customer instance; there is no
    self-service key page. Credentials are bound to a single Channel99 instance, so a token can
    only read data belonging to that tenant.

schemes:
- name: bearerAuth
  type: http
  scheme: bearer
  bearerFormat: JWT
  api: Pulsar Reporting API
  description: |-
    M2M Bearer token issued by Stytch. Pass as `Authorization: Bearer <token>`.
  token_endpoint: https://pulsar.channel99.com/auth/token
  token_request:
    method: POST
    content_type: application/json
    body_fields:
    - client_id
    - client_secret
  token_response_fields:
  - access_token
  - token_type
  - expires_in
  token_lifetime_seconds: 3600
  refresh: >-
    No refresh token. Re-POST /auth/token to mint a new access token after expiry. The
    developer guide instructs callers to cache the token securely only for its stated lifetime.
  rate_limit: 20 requests/minute per client_id on POST /auth/token (plus a WAF per-IP limit)
  sources:
  - openapi/channel99-pulsar-openapi.json
  - https://support.channel99.com/hc/en-us/articles/49766041989787-Channel99-Reporting-API-Developer-Guide

- name: clientId
  type: apiKey
  in: header
  parameter: x-client-id
  api: Pulsar Reporting API
  required: true
  description: |-
    Client identifier that must match the `client_id` claim in the Bearer token. Required on
    EVERY route including /openapi.json - omitting it returns HTTP 401
    err:pulsar.core.missing-header. A mismatch between the header and the token returns HTTP 403.
  example_shape: m2m-client-00000000-0000-0000-0000-000000000000
  sources:
  - openapi/channel99-pulsar-openapi.json
  - https://support.channel99.com/hc/en-us/articles/49766041989787-Channel99-Reporting-API-Developer-Guide

- name: mcpOAuth
  type: oauth2
  api: Channel99 MCP Server
  standard: OAuth 2.1
  flows:
    authorizationCode:
      authorizationUrl: https://app.channel99.com/oauth/authorize
      tokenUrl: https://api.stytch.app.channel99.com/v1/oauth2/token
      scopes:
        openid: Authenticate the user and issue an ID token
        email: Read the authenticated user's email address
        profile: Read the authenticated user's basic profile
  pkce_required: true
  code_challenge_methods:
  - S256
  grant_types:
  - authorization_code
  - refresh_token
  token_endpoint_auth_methods:
  - none
  dynamic_client_registration: false
  client_id_metadata_document_supported: true
  protected_resource: https://mcp.channel99.com
  sources:
  - well-known/channel99-mcp-oauth-authorization-server.json
  - well-known/channel99-mcp-oauth-protected-resource.json
  - https://support.channel99.com/hc/en-us/articles/47105598392475-MCP-Server-General-FAQ

- name: stytchOIDC
  type: openIdConnect
  api: Channel99 web application
  openIdConnectUrl: https://api.stytch.app.channel99.com/.well-known/openid-configuration
  issuer: https://api.stytch.app.channel99.com
  jwks_uri: https://api.stytch.app.channel99.com/.well-known/jwks.json
  userinfo_endpoint: https://api.stytch.app.channel99.com/v1/oauth2/userinfo
  id_token_signing_alg_values_supported:
  - RS256
  scopes_supported:
  - openid
  - profile
  - email
  - phone
  - offline_access
  - full_access
  subject_types_supported:
  - public
  sso: >-
    The app publishes /sign-in/sso and per-organization sign-in routes
    (/sign-in/inst/:orgSlug), so enterprise SSO is supported through Stytch B2B organizations.
  sources:
  - well-known/channel99-stytch-openid-configuration.json

secrets_handling:
  guidance_published: true
  guidance: >-
    "Store the client secret securely. Do not include client secrets or access tokens in emails,
    support tickets, browser screenshots, logs, source control, or client-side code." Support
    tickets must exclude tokens and secrets.
  source: https://support.channel99.com/hc/en-us/articles/49766041989787-Channel99-Reporting-API-Developer-Guide

separately_permissioned:
- surface: Channel99 IP API (GET /ip/{ipAddress})
  note: >-
    "Access to separately permissioned services, including the Channel99 IP API, is not enabled
    unless explicitly granted." A valid token for the Reporting API does not imply access.