IRONSCALES · Authentication Profile

Ironscales Authentication

Authentication

IRONSCALES secures its APIs with apiKey and oauth2 across 2 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode flow(s).

email-securitycybersecurityphishinganti-phishingbusiness-email-compromiseaccount-takeoverthreat-intelligenceincident-responsesecurity-awareness-trainingphishing-simulationmicrosoft-365google-workspacesoc-automationdeepfake-detectionmcp
Methods: apiKey, oauth2 Schemes: 2 OAuth flows: authorizationCode API key in: header

Security Schemes

JWT apiKey
· in: header (Authorization)
OAuth2 oauth2
· flows: authorizationCode

Source

Authentication Profile

Raw ↑
generated: '2026-08-04'
method: searched
source: https://appapi.ironscales.com/appapi/docs/?format=openapi
docs: https://ironscales.com/platform/api
summary:
  types:
  - apiKey
  - oauth2
  api_key_in:
  - header
  oauth2_flows:
  - authorizationCode
  surfaces:
  - IRONSCALES Management API (REST) — JWT bearer token in the Authorization header
  - IRONSCALES MCP Server — OAuth 2.0 authorization code + PKCE
schemes:
- name: JWT
  type: apiKey
  in: header
  parameter: Authorization
  applies_to: IRONSCALES Management API
  declared_as: apikey
  note: >-
    The provider spec declares this scheme with `"type": "apikey"` (lowercase k), which is not a valid
    Swagger 2.0 securityDefinitions type — the specification requires `apiKey`. Tooling that validates
    strictly will reject the securityDefinitions block. Captured here and in
    overlays/ironscales-management-api-overlay.yaml rather than mutating the harvested original.
  sources:
  - openapi/_original/ironscales-management-api-openapi.json
  - openapi/ironscales-authorization-openapi.yml
  - openapi/ironscales-campaigns-openapi.yml
  - openapi/ironscales-deepfake-openapi.yml
  - openapi/ironscales-emails-openapi.yml
  - openapi/ironscales-incident-openapi.yml
  - openapi/ironscales-mailboxes-openapi.yml
  - openapi/ironscales-mitigation-openapi.yml
  - openapi/ironscales-sat-openapi.yml
  - openapi/ironscales-settings-openapi.yml
- name: OAuth2
  type: oauth2
  applies_to: IRONSCALES MCP Server (https://mcp.ironscales.com/mcp/)
  flows:
  - flow: authorizationCode
    authorizationUrl: https://members.ironscales.com/o/authorize/
    tokenUrl: https://members.ironscales.com/o/token/
    pkce: S256
    refresh_token: true
  issuer: https://members.ironscales.com
  registration_endpoint: https://members.ironscales.com/o/register/
  revocation_endpoint: https://members.ironscales.com/o/revoke_token/
  introspection_endpoint: https://members.ironscales.com/o/introspect/
  token_endpoint_auth_methods:
  - client_secret_post
  dynamic_client_registration: true
  scopes_published: false
  scopes_note: >-
    The RFC 8414 authorization-server metadata document does not advertise `scopes_supported`, and no
    scope reference is published in the public docs, so no scopes/ artifact is emitted rather than
    guess a scope vocabulary.
  sources:
  - well-known/ironscales-oauth-authorization-server.json
  - well-known/ironscales-oauth-protected-resource.json
credential_flow:
  rest:
    step_1: >-
      An IRONSCALES dashboard user with an ADMIN or OWNER role generates an APP API Token under
      Settings > Account Settings > General & Security, alongside the tenant Company ID.
    step_2: >-
      POST /appapi/get-token/ (operationId "get JWT token") exchanges the APP API token for a JWT.
    step_3: >-
      The JWT is presented on every subsequent call in the Authorization request header. Nearly every
      operation is additionally scoped by a company_id path parameter, so the token and the tenant id
      are both required.
    token_lifetime: not published
  mcp:
    step_1: >-
      The MCP client discovers https://mcp.ironscales.com/.well-known/oauth-protected-resource from the
      401 WWW-Authenticate challenge, which names https://members.ironscales.com/ as the authorization server.
    step_2: >-
      The client may self-register at the RFC 7591 registration endpoint, then runs an authorization
      code + PKCE (S256) flow against members.ironscales.com.
    step_3: >-
      The resulting bearer token is sent in the Authorization header to https://mcp.ironscales.com/mcp/.
x-evidence:
  fetched: '2026-08-04'
  openapi_url: https://appapi.ironscales.com/appapi/docs/?format=openapi
  openapi_http_status: 200
  oauth_metadata_http_status: 200