Hint Health · Authentication Profile

Hint Health Authentication

Authentication

Hint is a single-mechanism API: a bearer token in the Authorization header, on every operation, with no OAuth scopes and no OIDC. What varies is WHICH token, and getting that wrong is the highest-consequence mistake on this API — the partner key and the practice access token address different surfaces, and using the partner key against /api/provider/* crosses practice boundaries.

Hint Health secures its APIs with http and apiKey across 2 declared security schemes, as derived from its OpenAPI definitions.

Direct Primary CareDPCHealthcareMembership ManagementPatient EnrollmentMedical BillingEMRHealth Plans
Methods: http, apiKey Schemes: 2 OAuth flows: API key in: header

Security Schemes

BearerAuth http
scheme: bearer
hint_api_key apiKey
· in: header (AUTHORIZATION)

Source

Authentication Profile

Raw ↑
generated: '2026-08-15'
method: searched
source: https://developers.hint.com/reference/making-requests
docs:
  - https://developers.hint.com/reference/making-requests
  - https://developers.hint.com/docs/setting-up-your-sandbox-account-api-keys
  - https://developers.hint.com/docs/integration-activation
  - https://developers.hint.com/docs/roles-and-access-context
name: Hint Health Authentication
description: >-
  Hint is a single-mechanism API: a bearer token in the Authorization header, on
  every operation, with no OAuth scopes and no OIDC. What varies is WHICH token,
  and getting that wrong is the highest-consequence mistake on this API — the
  partner key and the practice access token address different surfaces, and using
  the partner key against /api/provider/* crosses practice boundaries.

summary:
  types: [http, apiKey]
  api_key_in: [header]
  oauth2_flows: []
  scopes_published: false
  openid_connect: false
  mtls: false

schemes:
  - name: BearerAuth
    type: http
    scheme: bearer
    header: 'Authorization: Bearer <token>'
    standard: RFC 6750
    description: >-
      The form documented on "Making Requests" and applied to every operation in
      the 49 refined specs in openapi/.
    sources: [openapi/*.yml]
  - name: hint_api_key
    type: apiKey
    in: header
    parameter: AUTHORIZATION
    description: >-
      The scheme Hint's OWN published OpenAPI declares — an apiKey in the
      AUTHORIZATION header whose description instructs callers to send
      "Bearer {your_api_key}". Functionally identical to the above; recorded
      separately because it is what the provider's document actually says.
    sources: [openapi/_original/hint-health-partner-endpoints-2026-07-01-openapi.yml]
    note: >-
      A tooling nit with a real cost: declaring RFC 6750 bearer auth as an apiKey
      scheme means generated clients and gateways will not recognise it as bearer
      auth, and no `bearerFormat` is advertised.

token_types:
  - name: Practice access token
    surface: /api/provider/*
    scope: one practice
    issued_by: >-
      POST /api/partner/installations/connect (or the older POST /oauth/tokens),
      exchanging the authorization code Hint hands over at install time. The
      credential is returned in api_keys[0].token.
    lifetime: >-
      No expiry is published — Hint's own connect example returns expires_in null
      and refresh_token null. Treat the token as long-lived and rotate it through
      the installation API keys endpoints rather than by refresh.
    guidance: >-
      This is the ONLY token that may touch practice data. Hint states plainly
      that using the partner key here leaks across practices.
  - name: Partner API key
    surface: /api/partner/*
    scope: the whole partner account
    issued_by: The Hint Partner Portal, and manageable via /partner/api_keys.
    env_var: HINT_API_KEY
    guidance: >-
      Marketplace, product listing, installation, backend and webhook-endpoint
      administration only.

environments:
  selector: key prefix, not host
  detail: >-
    A key prefixed `sbx-` returns sandbox data; an unprefixed key returns live
    data. api.hint.com serves BOTH, so promoting an integration from sandbox to
    live requires no host change. Partner identifiers carry the same prefix —
    ptr-... live, sbx-ptr-... sandbox.
  hosts:
    - {name: production, url: 'https://api.hint.com', key_prefix: none}
    - {name: sandbox, url: 'https://api.sandbox.hint.com', key_prefix: 'sbx-'}
    - {name: staging, url: 'https://api.staging.hint.com', key_prefix: 'sbx-'}

authorization_model:
  scopes: none
  detail: >-
    There is no scope parameter, no scope registry and no per-endpoint permission
    grant. Authorization is entirely a function of which token family you hold and
    which practice it was issued for. derive-oauth-scopes.py finds 0 oauth2
    schemes and 0 scopes across all 49 specs, so no scopes/ artifact is emitted.
  roles:
    docs: https://developers.hint.com/docs/roles-and-access-context
    detail: >-
      Roles apply to USERS inside an embedded marketplace app, not to API tokens.
      Hint passes a partner role and an access_context on the app handshake, and
      apps are expected to handle Hint platform-support sessions differently — a
      user-level authorization signal that has no API-token equivalent.

webhook_authentication:
  direction: hint-to-partner
  mechanism: HMAC-SHA256 signature
  header: X-Hint-Signature
  format: 'sha256=<hmac>'
  signed: raw request body
  key_source: Partner Portal → Webhooks Signature Key (HINT_WEBHOOK_SECRET on hosted deploys)
  see_also: asyncapi/hint-health-webhooks.yml

embedded_app_authentication:
  mechanism: signed handshake + server-minted session key
  detail: >-
    Marketplace apps receive a signed payload at POST /hint/handshake (same
    X-Hint-Signature HMAC), verify it, mint their own session key, and use it on
    subsequent surface renders. The Hint API token is never exposed to the browser.
  see_also: components/hint-health-components.yml

discovery:
  well_known: none
  detail: >-
    No /.well-known/openid-configuration, /.well-known/oauth-authorization-server
    or /.well-known/oauth-protected-resource is served on any Hint host — all 404.
    An agent cannot discover how to authenticate; it must read the docs.
  see_also: well-known/hint-health-well-known.yml

gaps:
  - No token expiry, refresh flow or rotation policy is documented.
  - No scopes, so an integration that needs read-only access cannot be granted it.
  - >-
    Bearer auth is declared as an apiKey scheme in the provider's own OpenAPI, so
    the machine-readable contract understates the auth model.