The specs are thin — every FHIR document declares only a bare `bearerAuth` (http/bearer/JWT) scheme and says nothing about how that JWT is obtained. The real model is SMART-on-FHIR OAuth 2.0: three-legged authorization_code (with PKCE) for patient and practitioner apps, and SMART Backend Services client_credentials with an RS384 private_key_jwt assertion for Bulk Data. The legacy Application Access APIs use a separate api-key + session-token model.
AdvancedMD secures its APIs with oauth2, openIdConnect, apiKey, and http across 7 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode and clientCredentials flow(s).
HealthcareUnited StatesEHREMRPractice ManagementMedical BillingFHIRHL7SMART on FHIRUS CoreInteroperabilityRevenue Cycle ManagementScheduling
generated: '2026-07-27'
method: searched
source: >-
Derived from the securityDefinitions/securitySchemes in
openapi/advancedmd-application-access-apis-swagger.json,
openapi/advancedmd-fhir-bulk-api-openapi.json and
openapi/advancedmd-fhir-single-api-openapi.json, then upgraded from the provider's own
documentation: https://fhir.advancedmd.com/fhir/launch-and-authorization,
https://fhir.advancedmd.com/getting-started, https://fhir.advancedmd.com/fhir/bulk-api,
and the live discovery documents at /v1/r4/.well-known/smart-configuration and
/v1/r4/.well-known/openid-configuration.
docs: https://fhir.advancedmd.com/fhir/launch-and-authorization
description: >-
The specs are thin — every FHIR document declares only a bare `bearerAuth` (http/bearer/JWT)
scheme and says nothing about how that JWT is obtained. The real model is SMART-on-FHIR
OAuth 2.0: three-legged authorization_code (with PKCE) for patient and practitioner apps,
and SMART Backend Services client_credentials with an RS384 private_key_jwt assertion for
Bulk Data. The legacy Application Access APIs use a separate api-key + session-token model.
summary:
types: [oauth2, openIdConnect, apiKey, http]
api_key_in: [header]
oauth2_flows: [authorizationCode, clientCredentials]
mtls: false
two_legged_oauth_for_general_access: false
schemes:
- name: SMART-on-FHIR OAuth 2.0 (three-legged)
type: oauth2
flow: authorizationCode
authorizationUrl: https://providerapi.advancedmd.com/v1/oauth2/authorize
tokenUrl: https://providerapi.advancedmd.com/v1/oauth2/token
pkce: S256
client_authentication: [client_secret_basic, private_key_jwt]
token_lifetime_seconds: 3599
refresh_token_lifetime_seconds: 7775999
authorization_code_lifetime: about one minute
context_returned: [patient, fhirUser, userId, aud, scope, need_patient_banner, smart_style_url]
applies_to:
- advancedmd:advancedmd-fhir-single-api
sources:
- fhir/advancedmd-smart-configuration.json
- https://fhir.advancedmd.com/fhir/launch-and-authorization
note: >-
Used for patient- and provider-facing apps. Both standalone launch and EHR launch are
supported (capabilities launch-standalone, launch-ehr, context-ehr-patient,
context-ehr-encounter, authorize-post).
- name: SMART Backend Services (two-legged, Bulk only)
type: oauth2
flow: clientCredentials
tokenUrl: https://providerapi.advancedmd.com/v1/oauth2/token
client_authentication: private_key_jwt
assertion:
client_assertion_type: urn:ietf:params:oauth:client-assertion-type:jwt-bearer
signing_alg: RS384
header_claims: [alg, kid, typ, jku]
body_claims: [iss, sub, aud, exp, jti]
one_time_use: true
additional_parameters: [username, password, officekey]
scope: system/*.read
token_lifetime: one hour
applies_to:
- advancedmd:advancedmd-fhir-bulk-api
sources:
- https://fhir.advancedmd.com/fhir/launch-and-authorization
note: >-
AdvancedMD states it does "not support two-legged OAuth for system-to-system
interactions" generally — this flow exists only for FHIR Bulk Data Access.
- name: OpenID Connect
type: openIdConnect
openIdConnectUrl: https://providerapi.advancedmd.com/v1/r4/.well-known/openid-configuration
issuer: https://providerapi.advancedmd.com/v1/r4
id_token_signing_alg_values_supported: [RS384, RS256]
scopes: [openid, fhirUser]
sources:
- fhir/advancedmd-openid-configuration.json
- name: bearerAuth
type: http
scheme: bearer
bearerFormat: JWT
sources:
- openapi/advancedmd-fhir-bulk-api-openapi.json
- openapi/advancedmd-fhir-single-api-openapi.json
note: How the specs model the SMART access token. It is the transport, not the grant.
- name: API Key
type: apiKey
in: header
parameter: apikey
applies_to:
- advancedmd:advancedmd-application-access-apis
sources:
- openapi/advancedmd-application-access-apis-swagger.json
- name: Bearer Token
type: apiKey
in: header
parameter: Authorization
applies_to:
- advancedmd:advancedmd-application-access-apis
sources:
- openapi/advancedmd-application-access-apis-swagger.json
note: >-
Session token minted by POST /authenticate from a Patient Portal username, password
and practice office key. Modelled as an apiKey rather than http/bearer in the Swagger.
- name: HTTP Basic (Bulk JWKS helper)
type: http
scheme: basic
applies_to:
- advancedmd:advancedmd-fhir-bulk-jwks-api
sources:
- https://fhir.advancedmd.com/fhir/bulk-api
note: Bulk application Key as username and Secret as password, for the test-only POST /v1/fhir-jwks/token endpoint.
endpoints:
authorization: https://providerapi.advancedmd.com/v1/oauth2/authorize
token: https://providerapi.advancedmd.com/v1/oauth2/token
introspection: https://providerapi.advancedmd.com/v1/oauth2/introspect
revocation: https://providerapi.advancedmd.com/v1/oauth2/revoke
management: https://providerapi.advancedmd.com/v1/oauth2/manage
jwks: https://providerapi.advancedmd.com/v1/oauth2/.well-known/jwks.json
smart_configuration: https://providerapi.advancedmd.com/v1/r4/.well-known/smart-configuration
openid_configuration: https://providerapi.advancedmd.com/v1/r4/.well-known/openid-configuration
onboarding:
registration: Self-service developer + app registration at https://fhir.advancedmd.com
approval: >-
Manual — email InterOps@advancedmd.com with subject "FHIR App Approval Request for
Appname: [Your Appname]" and your redirect URL. "It can take a few days."
constraint: One product per application — a Single-patient app must not also request the Bulk or non-FHIR products.
credentials: The app's Key is the client_id and its Secret is the client_secret.
cost: Free for the certified FHIR APIs (Developer Terms of Service, last updated 2022-11-28).
scopes: scopes/advancedmd-scopes.yml
gated_surfaces:
- name: Connect APIs (REST + XML-RPC) and ODBC driver
auth: Not publicly documented — credentials issued under a signed Certified API Developer Agreement with licensing and support fees.
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.