Signal AI · Authentication Profile

Signal Ai Authentication

Authentication

Signal AI secures its APIs with oauth2 across 1 declared security scheme, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the clientCredentials flow(s).

CompanyMedia IntelligenceReputation ManagementRisk IntelligenceNewsContent SearchKnowledge GraphESGArtificial IntelligenceAnalytics
Methods: oauth2 Schemes: 1 OAuth flows: clientCredentials API key in:

Security Schemes

OAuth2 oauth2
· flows: clientCredentials

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
docs: https://api.signal-ai.com/docs
source: https://api.signal-ai.com/openapi.json (live, fetched 2026-08-13, HTTP 200) + openapi/signal-ai-affinity-api-openapi.yml, openapi/signal-ai-categories-api-openapi.yml,
  openapi/signal-ai-content-metrics-api-openapi.yml, openapi/signal-ai-content-search-api-openapi.yml,
  openapi/signal-ai-entities-api-openapi.yml, openapi/signal-ai-events-api-openapi.yml, openapi/signal-ai-openapi-json-api-openapi.yml,
  openapi/signal-ai-organisation-api-openapi.yml, openapi/signal-ai-publication-sources-api-openapi.yml,
  openapi/signal-ai-risk-events-api-openapi.yml, openapi/signal-ai-topics-api-openapi.yml
summary:
  types:
  - oauth2
  oauth2_flows:
  - clientCredentials
schemes:
- name: OAuth2
  type: oauth2
  flows:
  - flow: clientCredentials
    tokenUrl: https://api.signal-ai.com/auth/token
    scopes: 6
  description: "To obtain the Bearer Token using the Client ID / Secret pair provided to you:\n\
    \n```bash\ncurl -X POST \\\n  -d 'grant_type=client_credentials' \\\n  -d 'client_id=YOUR_CLIENT_ID'\
    \ \\\n  -d 'client_secret=YOUR_CLIENT_SECRET' \\\n  https://api.signal-ai.com/auth/token\n\
    ```\n\nThis will return the following JSON response:\n\n```json\n{\n    \"access_token\"\
    : \"eyJhbGciOi…\",\n    \"expires_in\": 86400,\n    …\n}\n```\n\nYou must "
  sources:
  - openapi/signal-ai-affinity-api-openapi.yml
  - openapi/signal-ai-categories-api-openapi.yml
  - openapi/signal-ai-content-metrics-api-openapi.yml
  - openapi/signal-ai-content-search-api-openapi.yml
  - openapi/signal-ai-entities-api-openapi.yml
  - openapi/signal-ai-events-api-openapi.yml
  - openapi/signal-ai-openapi-json-api-openapi.yml
  - openapi/signal-ai-organisation-api-openapi.yml
  - openapi/signal-ai-publication-sources-api-openapi.yml
  - openapi/signal-ai-risk-events-api-openapi.yml
  - openapi/signal-ai-topics-api-openapi.yml

enrichment:
  generated: '2026-08-13'
  method: searched
  docs: https://api.signal-ai.com/docs
  summary: >-
    One authentication style across the whole REST surface: OAuth2
    client-credentials. There is no API key, no basic auth, no mTLS and no
    user-facing authorization-code flow on the REST API. Credentials are a Client
    ID / Client Secret pair issued by Signal AI to contracted customers, not
    self-issued through a developer portal.
  token:
    endpoint: https://api.signal-ai.com/auth/token
    grant_type: client_credentials
    request: 'POST form-encoded: grant_type=client_credentials, client_id, client_secret'
    response_fields: [access_token, expires_in]
    ttl_seconds: 86400
    usage: 'Authorization: Bearer <access_token>'
    failure_status: 401
  identity_provider:
    product: Keycloak
    issuer: https://login.signal-ai.com/auth/realms/signal
    discovery: well-known/signal-ai-openid-configuration.json
    grant_types_supported: [authorization_code, implicit, refresh_token, password, client_credentials,
      'urn:ietf:params:oauth:grant-type:device_code', 'urn:openid:params:grant-type:ciba']
  agent_surface:
    endpoint: https://mcp.signal-ai.com/mcp
    style: oauth2-bearer
    challenge: RFC 6750 WWW-Authenticate with RFC 9728 resource_metadata pointer
    scopes: [openid, 'mcp:tools', offline_access]
    pkce: S256
    note: >-
      The MCP surface authenticates against the same Keycloak realm but through a
      browser authorization-code + PKCE flow (observed on the 302 from
      https://mcp.signal-ai.com/docs), not the REST client-credentials grant.
  probes:
  - url: https://api.signal-ai.com/topics
    status: 401
    note: 'Unauthenticated GET; response carries signal-version: 1 and no auth challenge
      header.'
  - url: https://mcp.signal-ai.com/mcp
    status: 401
    note: Unauthenticated tools/list; returns a correct Bearer challenge with resource_metadata.