{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Authentication","siteUrl":"https://docs.api.dentally.com"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"authentication","__idx":0},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Dentally NexGen API authenticates requests using ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["OAuth 2.0 bearer tokens"]},"."," ","Integrations call the API from a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["server"]}," (backend jobs, services, middleware) —"," ","there is no browser-based or end-user login flow for API access."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This page applies whether you are an approved partner, a practice connecting your"," ","own systems, or evaluating an integration before you apply."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"getting-access","__idx":1},"children":["Getting access"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["API credentials are not self-service. How you obtain them depends on who you are:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Who you are"},"children":["Who you are"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"How to get credentials"},"children":["How to get credentials"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Partner"]}," (building a product for multiple practices)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Apply through the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://dentally.com/en-gb/integrations/become-a-partner","target":"_blank","rel":"noopener noreferrer"},"children":["Dentally partnership program"]},". After approval and onboarding, Dentally issues a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]}," for your integration."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Practice"]}," (connecting Dentally to systems you operate)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Enrol in the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Practice Integration Program (PIP)"]},". Dentally issues credentials scoped to your practice as part of that process."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Store ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]}," as secrets. Do not embed them in client-side"," ","code, mobile apps, or public repositories."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"partner-products-and-subscriptions","__idx":2},"children":["Partner products and subscriptions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A product is a single service or product managed by a partner. Partners may have multiple products. When a partner is onboarded,"," ","client credentials are issued which are used to access the NexGen APIs. Each product has a single set of these credentials,"," ","consisting of a client id and secret. Each Partner product can have a different set of API scopes and permissions."," ","This is to govern data access ensuring only necessary data is shared."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subscriptions are what authorizes a partner to access a practice's data, and are managed per practice."," ","The practice grants permission for a partner to access their data. Access is then provisioned by the Dentally Partnerships team."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"obtaining-a-token","__idx":3},"children":["Obtaining a token"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Request an access token with the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["OAuth 2.0 client credentials"]}," grant. POST"," ","to the token endpoint on the same API host you call for data:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"POST {api_base}/v2/oauth/token\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For UK sandbox, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{api_base}"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.sandbox.dentally.co"]},", so the token"," ","URL is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.sandbox.dentally.co/v2/oauth/token"]},". Use the base URL for"," ","the environment and region you will call (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#audience"},"children":["Audience"]},")."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["audience"]}," must match the API identifier for that environment and region:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Example request (UK sandbox):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  --url 'https://api.sandbox.dentally.co/v2/oauth/token' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"grant_type\": \"client_credentials\",\n    \"client_id\": \"<client_id>\",\n    \"client_secret\": \"<client_secret>\",\n    \"audience\": \"https://api.sandbox.dentally.co\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["grant_type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Must be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_credentials"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Issued during onboarding."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client_secret"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Issued during onboarding."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["audience"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Matches the API identifier for the environment and region you will call. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#audience"},"children":["Audience"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"audience","__idx":4},"children":["Audience"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Environment"},"children":["Environment"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Region"},"children":["Region"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Audience"},"children":["Audience"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sandbox"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["APAC"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.apac-sandbox.apac.dentally.com"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sandbox"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["UK"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.sandbox.dentally.co"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Production"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["APAC"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.apac.dentally.com"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Production"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["UK"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://api.dentally.co"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A token issued for one audience is not accepted by another. Call the API host"," ","that matches the audience you requested."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"jwt-issuer","__idx":5},"children":["JWT issuer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Access tokens are JWTs. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]}," (issuer) claim identifies Dentally's"," ","authorization service. The token endpoint lives into each API host, but the"," ","issuer values do not:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"API environments"},"children":["API environments"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Issuer ( iss )"},"children":["Issuer (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]},")"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Sandbox and Production"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://auth.api.dentally.com"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you validate JWTs locally (signature, issuer, or audience), keep using these"," ","issuer URLs. Do not derive ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["iss"]}," from the host you POST to for"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/oauth/token"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"successful-response","__idx":6},"children":["Successful response"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A successful response includes a short-lived JWT access token and the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["scopes"]}," ","granted to that token:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"access_token\": \"<jwt>\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 86400,\n  \"scope\": \"appointment:read patient:write\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["access_token"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JWT to send as the bearer token on API requests."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["token_type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Always ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Bearer"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_in"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Lifetime of the access token in seconds."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scope"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Space-separated list of scopes granted to this token."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Access tokens are valid for ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["24 hours"]}," (86,400 seconds). The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["expires_in"]}," ","field in the response reflects this lifetime. Request a new token before the"," ","current one expires — expired tokens are rejected with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401 Unauthorized"]}," (see"," ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"#failure-modes"},"children":["Failure modes"]},")."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Cache the token"]}," until it expires (or until shortly before expiry) and reuse"," ","it across requests. Requesting a new token on every API call is unnecessary and"," ","may hit rate limits. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/pages/rate-limiting"},"children":["Rate limiting"]}," for API request"," ","limits and how to handle ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["429"]}," responses."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"request-headers","__idx":7},"children":["Request headers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Send the access token on every API call:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"Authorization: Bearer <jwt>\nDentally-API-Version: 2026-01-01\nX-Practice-Id: <practice-uuid>\n"},"children":[]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Header"},"children":["Header"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Required"},"children":["Required"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Bearer"]}," scheme. Value is the JWT from the token endpoint."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Dentally-API-Version"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["recommended"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Pin a dated revision. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/pages/versioning"},"children":["Versioning"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Practice-Id"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["yes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["UUID of the practice the request acts on."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"scopes","__idx":8},"children":["Scopes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The token response includes a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scope"]}," field listing the permissions granted to"," ","your credentials. Each operation in the API reference also lists the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["scopes"]}," ","required to call it. Scopes reflect what your integration is approved to do (for"," ","example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["appointment:read"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["patient:write"]},"). If your token lacks the scope"," ","required by an operation, the API responds with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403 Forbidden"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The set of scopes available to you is fixed at onboarding. If you need additional"," ","access, contact the APIs & Partnerships team."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"practice-context","__idx":9},"children":["Practice context"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Dentally is multi-tenant: every API request is scoped to a single practice via"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Practice-Id"]},". Send the UUID of the practice you are acting on. Each request"," ","targets ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["one practice at a time"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your integration must only call the API for practices you are authorised to access"," ","(for example practices that have subscribed to your product, or your own practice"," ","under PIP). A valid token alone is not enough — the gateway also checks that your"," ","integration may access the practice named in the header."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"failure-modes","__idx":10},"children":["Failure modes"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"401-unauthorized","__idx":11},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401 Unauthorized"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returned when credentials are missing, malformed, or expired — for example no"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Authorization"]}," header, an invalid JWT, or an expired access token."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"type\": \"https://httpstatuses.io/401\",\n  \"title\": \"Unauthorized\",\n  \"status\": 401,\n  \"detail\": \"Missing or invalid bearer token.\",\n  \"instance\": \"/v2/sites\",\n  \"traceId\": \"00-84c1fd4063c38d9f3900d06e56542d48-85d1d4-00\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Obtain a fresh token from the token endpoint and retry."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"403-forbidden","__idx":12},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403 Forbidden"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returned when the token is valid but the request is not permitted — for example"," ","your integration lacks the required scope, or you are not authorised to access"," ","the practice given in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-Practice-Id"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not retry blindly. Confirm the practice ID, your approved scopes, and that the"," ","practice has granted your integration access."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/pages/errors"},"children":["Errors"]}," for the full list of error responses and handling"," ","guidance."]}]},"headings":[{"value":"Authentication","id":"authentication","depth":1},{"value":"Getting access","id":"getting-access","depth":2},{"value":"Partner products and subscriptions","id":"partner-products-and-subscriptions","depth":3},{"value":"Obtaining a token","id":"obtaining-a-token","depth":2},{"value":"Audience","id":"audience","depth":3},{"value":"JWT issuer","id":"jwt-issuer","depth":3},{"value":"Successful response","id":"successful-response","depth":3},{"value":"Request headers","id":"request-headers","depth":2},{"value":"Scopes","id":"scopes","depth":2},{"value":"Practice context","id":"practice-context","depth":2},{"value":"Failure modes","id":"failure-modes","depth":2},{"value":"401 Unauthorized","id":"401-unauthorized","depth":3},{"value":"403 Forbidden","id":"403-forbidden","depth":3}],"frontmatter":{"seo":{"title":"Authentication"}},"lastModified":"2026-09-18T01:10:59.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/pages/authentication","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}