NationGraph · Authentication Profile

Nationgraph Authentication

Authentication

NationGraph secures its APIs with oauth2, openIdConnect, and http across 3 declared security schemes, as derived from its OpenAPI definitions.

CompanySales IntelligencePublic SectorGovernmentSLEDGovTechProcurementRFPDataSales
Methods: oauth2, openIdConnect, http Schemes: 3 OAuth flows: API key in:

Security Schemes

NationGraphOIDC openIdConnect
NationGraphOAuth2 oauth2
· flows: ,
HTTPBearer http
scheme: bearer

Source

Authentication Profile

Raw ↑
generated: '2026-08-14'
method: probed
source: >-
  https://api.nationgraph.com/.well-known/openid-configuration +
  https://api.nationgraph.com/.well-known/oauth-protected-resource + live 401 challenges on
  api.nationgraph.com + openapi/_original/nationgraph-openapi-original.json
summary:
  types:
  - oauth2
  - openIdConnect
  - http
  note: >-
    UPGRADED 2026-07-20 (derived, http bearer only) -> 2026-08-14 (probed). The July round could
    only see what the OpenAPI declared: a single opaque `HTTPBearer` scheme. Probing the API host
    this round revealed a full OAuth 2.0 / OpenID Connect authorization server published at
    https://api.nationgraph.com/auth, which the OpenAPI never mentioned. Both are real and they
    cover DIFFERENT surfaces — see `surfaces` below. This is the single largest correction of
    this round.
surfaces:
- surface: REST API
  base: https://api.nationgraph.com/api/v3
  scheme: HTTPBearer
  observed_challenge: 'WWW-Authenticate: Bearer'
  observed_status: 401
  observed_body: '{"detail":"Not authenticated"}'
  scoped: false
  note: >-
    Opaque bearer token, no published scope model, no published key-issuance flow. The challenge
    is a bare `Bearer` with no realm, no scope and no resource_metadata parameter — it gives a
    client nothing to act on. Confirmed live on 2026-08-14 against /api/v3/lists,
    /api/v3/contacts, /api/v3/workspaces/institutions and POST /api/v3/signals/search.
- surface: MCP server
  base: https://api.nationgraph.com/internal/mcp
  scheme: OAuth2Bearer
  observed_challenge: >-
    Bearer resource_metadata="https://api.nationgraph.com/.well-known/oauth-protected-resource",
    scope="mcp:read"
  observed_status: 401
  observed_body: 'no bearer token'
  scoped: true
  note: >-
    A fully spec-compliant RFC 9728 challenge — it hands the client the discovery document and the
    required scope. An MCP client can bootstrap from a cold start with no human in the loop: read
    the resource metadata, register dynamically, run authorization_code + PKCE, get a token. This
    is markedly better authentication engineering than the REST surface receives.
schemes:
- name: NationGraphOIDC
  type: openIdConnect
  openIdConnectUrl: https://api.nationgraph.com/.well-known/openid-configuration
  issuer: https://api.nationgraph.com/auth
  method: probed
  sources:
  - https://api.nationgraph.com/.well-known/openid-configuration
- name: NationGraphOAuth2
  type: oauth2
  method: probed
  issuer: https://api.nationgraph.com/auth
  flows:
    authorizationCode:
      authorizationUrl: https://api.nationgraph.com/auth/oauth2/authorize
      tokenUrl: https://api.nationgraph.com/auth/oauth2/token
      refreshUrl: https://api.nationgraph.com/auth/oauth2/token
      scopes:
        openid: OIDC — request an ID token
        profile: OIDC — basic profile claims
        email: OIDC — email claim
        offline_access: Refresh token for unattended / long-running sessions
        mcp:read: Read access to the NationGraph MCP server
    clientCredentials:
      tokenUrl: https://api.nationgraph.com/auth/oauth2/token
      scopes:
        mcp:read: Read access to the NationGraph MCP server
  pkce:
    required: true
    code_challenge_methods: [S256]
  dynamic_client_registration:
    supported: true
    rfc: RFC 7591
    endpoint: https://api.nationgraph.com/auth/oauth2/register
    note: >-
      Open registration endpoint. Combined with `token_endpoint_auth_methods_supported: none`
      (public clients), this is what lets an MCP client onboard itself without a
      pre-provisioned client_id.
  token_endpoint_auth_methods: [none, client_secret_basic, client_secret_post]
  response_types: [code]
  response_modes: [query]
  grant_types: [authorization_code, client_credentials, refresh_token]
  id_token_signing_alg: [EdDSA]
  subject_types: [public]
  acr_values: ['urn:mace:incommon:iap:bronze']
  prompt_values: [login, consent, create, select_account, none]
  claims:
  - sub
  - iss
  - aud
  - exp
  - iat
  - sid
  - scope
  - azp
  - org_id
  - org_role
  - org_slug
  multi_tenancy:
    supported: true
    claims: [org_id, org_role, org_slug]
    note: >-
      Organization claims are carried in the token itself, so a NationGraph token is scoped to a
      customer org and a role within it — the tenancy boundary an agent operates inside.
  ref: scopes/nationgraph-scopes.yml
  sources:
  - https://api.nationgraph.com/.well-known/oauth-authorization-server
  - https://api.nationgraph.com/.well-known/openid-configuration
- name: HTTPBearer
  type: http
  scheme: bearer
  method: derived
  applies_to: REST /api/v3
  sources:
  - openapi/_original/nationgraph-openapi-original.json
identity_provider:
  vendor: Clerk (inferred)
  basis: >-
    Inferred, not asserted by NationGraph. Three independent signals point the same way: the
    org_id / org_role / org_slug / azp / sid claim shape is Clerk's, EdDSA id_token signing is a
    Clerk default, and NationGraph's own OpenAPI exposes an inbound
    `POST /api/v3/webhooks/clerk` receiver (openapi/nationgraph-webhooks-api-openapi.yml). The
    authorization server is fronted on NationGraph's own domain either way.
docs: null
docs_note: >-
  NationGraph publishes NO authentication documentation. There is no developer portal, no API
  key page, no OAuth guide, and no MCP connection instructions anywhere on nationgraph.com or in
  the GitBook help center. Every fact in this artifact was read from live machine-readable
  discovery documents and live 401 challenges. A developer or agent cannot learn how to
  authenticate from NationGraph's prose — only from its protocol.
cross_links:
  scopes: scopes/nationgraph-scopes.yml
  mcp: mcp/nationgraph-mcp.yml
  well_known: well-known/nationgraph-well-known.yml
  conventions: conventions/nationgraph-conventions.yml
  conformance: conformance/nationgraph-conformance.yml
x-evidence:
  fetched: '2026-08-14'
  probes:
  - {url: 'https://api.nationgraph.com/.well-known/openid-configuration', http_status: 200}
  - {url: 'https://api.nationgraph.com/.well-known/oauth-authorization-server', http_status: 200}
  - {url: 'https://api.nationgraph.com/.well-known/oauth-protected-resource', http_status: 200}
  - {url: 'https://api.nationgraph.com/internal/mcp', http_status: 401}
  - {url: 'https://api.nationgraph.com/api/v3/lists', http_status: 401}
  - {url: 'https://api.nationgraph.com/api/v3/contacts', http_status: 401}
  - {url: 'https://api.nationgraph.com/api/v3/workspaces/institutions', http_status: 401}