{"openapi":"3.0.3","info":{"version":"1.0.0","title":"Authentication Server","description":"The authentication server\n"},"servers":[{"url":"https://auth.truelayer.com"},{"url":"https://auth.truelayer-sandbox.com"}],"paths":{"/connect/token":{"post":{"tags":["Access tokens"],"summary":"Generate or refresh an access token","operationId":"GenerateAccessToken","description":"Generate an `access_token`you can use to make requests to our APIs. Choose:\n\n* Option 1 to generate an `access_token` and `refresh_token` for the Data API.\n* Option 2 to generate a new `access_token` for the Data API using a `refresh_token`.\n* Option 3 to generate an `access_token` for the Payments API v3.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/TokenExchangeRequest"},{"$ref":"#/components/schemas/TokenRefreshRequest"},{"$ref":"#/components/schemas/ClientCredentialsGrantRequest"}]}}}},"responses":{"200":{"description":"Successful response returns `access_token` and optionally `refresh_token`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenExchangeResponse"},"examples":{"accessTokenExample":{"$ref":"#/components/examples/tokenExchange200Response"}}}}},"400":{"$ref":"#/components/responses/400"},"500":{"$ref":"#/components/responses/500"}},"security":[]}},"/v1/authuri":{"post":{"tags":["Auth link"],"summary":"Generate a direct bank authentication link","operationId":"GenerateDirectBankAuthLink","description":"Direct bank authentication allows you to generate a link directly to the bank.You can direct your user to this link where they can authorise access to their bank account.\n\nAnyone can test direct bank authentication in our sandbox environment. To use it in production, we must first approve your consent screens. [Learn more about consent screen requirements here](https://docs.truelayer.com/docs/ais-collecting-user-consent).\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectBankAuthLinkRequest"}}}},"responses":{"200":{"description":"Successful response returns the direct auth link in the `result` field","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUriResponse"},"examples":{"reauthUriExample":{"$ref":"#/components/examples/DirectBankAuth200Response"}}}}},"401":{"$ref":"#/components/responses/401"},"500":{"$ref":"#/components/responses/500"}},"security":[]}},"/v1/reauthuri":{"post":{"tags":["Auth link"],"summary":"Generate a reauthentication link","operationId":"GenerateReauthLink","description":"Generate a link to initiate a reauthentication flow. The reauthentication flow provides a simple path for the user to follow to reconnect their account, providing a shorter user journey compared to setting up their account for the first time.\n\n**UK only**: Reauthentication is currently only supported for UK providers. Ireland and other European providers are not supported.\n\nMost European banks require that end-users who are sharing account details grant permission for data sharing every 90 days.\n\nFor these banks, access to your user’s bank accounts will no longer be available 90 days after they initially connect their account. When this happens, the TrueLayer `POST /connect/token` endpoint will return a 400 `invalid_grant` error when you try to refresh your tokens, and if you try to fetch data using an access_token TrueLayer will return a 403 `access_denied` error.\n\nTo initiate the reauthentication flow, call the reauth endpoint with a refresh token for the user you would like to re-authenticate. We will return a link to the bank for the user to follow. You can have the user go through this flow either before or after their original connection expires (for example, you may prefer to have users reconnect their accounts a week before the connection expires, which would reset the expiration to 90 days from the time of reauthentication).\n\nUsers can use the reauthentication flow for up to 90 days after their associated refresh token expires. (The expiration time varies based on the underlying bank but in general you will have at least 90 days after their connection has expired in which to use the reauthentication flow). After that time has elapsed, reauthentication is no longer possible and the user should go through the first-time authentication flow instead.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReauthUriRequest"}}}},"responses":{"200":{"description":"Successful response returns `access_token` and optionally `refresh_token`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthUriResponse"},"examples":{"reauthUriExample":{"$ref":"#/components/examples/reauthUri200Response"}}}}},"401":{"$ref":"#/components/responses/401"},"500":{"$ref":"#/components/responses/500"}},"security":[]}},"/api/debug":{"post":{"tags":["Debug ID"],"summary":"Generate a debug ID","operationId":"GenerateDebugId","description":"This endpoint generates a `debug_id` that TrueLayer can use to debug issues. You should only generate a `debug_id` when you are actively experiencing a problem, or you may encounter rate limiting issues.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugIdRequest"}}}},"responses":{"200":{"description":"Successful response returns a `debug_id`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugIdResponse"},"examples":{"accessTokenExample":{"$ref":"#/components/examples/DebugId200Response"}}}}},"400":{"$ref":"#/components/responses/DebugId400Response"},"401":{"$ref":"#/components/responses/401"},"500":{"$ref":"#/components/responses/500"}},"security":[]},"delete":{"tags":["Debug ID"],"summary":"Delete a debug ID","operationId":"DeleteDebugId","description":"Delete a debug ID","responses":{"200":{"description":"Successful response returns the deleted `debug_id` (now invalid)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DebugIdResponse"},"examples":{"accessTokenExample":{"$ref":"#/components/examples/DebugId200Response"}}}}},"401":{"$ref":"#/components/responses/401"},"500":{"$ref":"#/components/responses/500"}},"security":[]}},"/api/delete":{"delete":{"tags":["Access tokens"],"summary":"Delete a credential","operationId":"DeleteCredential","description":"Delete a connection to a user's accounts","security":[{"bearer_auth":[]}],"responses":{"200":{"description":"Credential successfully deleted. There is no response body."},"500":{"$ref":"#/components/responses/500"}}}},"/api/providers":{"get":{"tags":["Providers"],"summary":"List providers","operationId":"GetProviders","description":"Get a list of all providers, or just those enabled for your client_id.","parameters":[{"in":"query","name":"clientId","description":"Returns only the providers enabled for the `client_id`","schema":{"type":"string"}},{"in":"query","name":"scopes","schema":{"type":"array","items":{"type":"string","enum":["info","accounts","balance","transactions","standing_orders","direct_debits","offline_access","cards"]}},"style":"spaceDelimited","explode":false,"description":"Returns only the providers who have the scopes specified. Multiple scopes can be passed as a space separated list\n"},{"in":"query","name":"country","schema":{"type":"array","items":{"type":"string","enum":["at","be","fi","fr","de","ie","it","lt","nl","pl","pt","es","se","uk"]}},"style":"spaceDelimited","explode":false,"description":"Returns only the providers in the provided countries. Multiple countries can be passed as a space separated list\n"}],"responses":{"200":{"description":"Successful response returns a list of providers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetProvidersResponse"},"examples":{"accessTokenExample":{"$ref":"#/components/examples/GetProviders200Response"}}}}},"500":{"$ref":"#/components/responses/500"}},"security":[]}}},"components":{"securitySchemes":{"bearer_auth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"TokenExchangeRequest":{"type":"object","additionalProperties":false,"required":["grant_type","client_id","client_secret","code","redirect_uri"],"properties":{"client_id":{"type":"string","description":"The Client Id found in TrueLayer Console"},"client_secret":{"type":"string","description":"The Client Secret found in TrueLayer Console"},"code":{"type":"string","description":"The code returned from the auth session"},"grant_type":{"default":"authorization_code","description":"The grant type to use must be `authorization_code`","enum":["authorization_code"]},"redirect_uri":{"type":"string","description":"The Redirect URI allowlisted in TrueLayer Console","format":"uri"},"code_verifier":{"description":"Required _only_ if using PKCE flow. Must be the same `code_verifier` used to generate the `code_challenge`"}}},"TokenRefreshRequest":{"type":"object","additionalProperties":false,"required":["grant_type","client_id","client_secret","refresh_token"],"properties":{"grant_type":{"default":"refresh_token","description":"The grant type to use (must be `refresh_token`)"},"client_id":{"type":"string","description":"The client_id found in TrueLayer Console"},"client_secret":{"type":"string","description":"The client secret found in TrueLayer Console"},"refresh_token":{"type":"string","description":"The refresh_token returned from the auth session"}}},"ClientCredentialsGrantRequest":{"type":"object","additionalProperties":false,"required":["grant_type","client_id","client_secret","scope"],"properties":{"grant_type":{"default":"client_credentials","description":"The grant type to use must be `client_credentials`","enum":["client_credentials"]},"client_id":{"type":"string","description":"The Client Id found in TrueLayer Console"},"client_secret":{"type":"string","description":"The Client Secret found in TrueLayer Console"},"scope":{"type":"string","description":"A space separated list of scopes. Scopes for the Payments API v3\\:\n- `payments`\n- `recurring_payments:sweeping`\n- `recurring_payments:commercial`\n- `signupplus`\n\nScopes for the Verification API\\:\n- `verification`\n\nScopes for deprecated payments APIs\\:\n- `payouts`\n- `paydirect`\n"}}},"TokenExchangeResponse":{"type":"object","additionalProperties":false,"required":["access_token","expires_in","token_type"],"properties":{"access_token":{"type":"string","description":"A short-lived JWT token used to access data on behalf of the End user"},"expires_in":{"type":"integer","description":"`access_token` validity in seconds. Default is 1 hour or specified by provider whichever is lower."},"refresh_token":{"type":"string","description":"A long-lived code used to obtain a new `access_token` when expired. It will be returned only if the scope `offline_access` was requested"},"token_type":{"type":"string","description":"Type of token returned. Must be `Bearer`"},"scope":{"type":"string","description":"The scope of the `access_token`. It will be a space-separated list of scopes granted to the `access_token`."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Machine-readable error category","enum":["access_denied","invalid_request","unauthorized","invalid_grant","unauthorized_client","internal_server_error","not_found"]},"error_description":{"type":"string","description":"Human-readable explanation of the error"},"error_details":{"type":"object","description":"Arbitrary key value pairs to provide more context for certain errors","properties":{"reason":{"type":"string","description":"Additional human-readable explanation as to the cause of the error"}}}}},"DirectBankAuthLinkRequest":{"type":"object","additionalProperties":false,"required":["response_type","client_id","redirect_uri","scope","consent_id","provider_id"],"properties":{"response_type":{"type":"string","description":"Must be `\"code\"`","enum":["code"]},"client_id":{"type":"string","description":"Your client ID"},"redirect_uri":{"type":"string","description":"A valid redirect_uri for your TrueLayer client_id (set in your Console)"},"scope":{"type":"string","description":"Space separated list of scopes representing the data you're asking the end user to share. Possible values:\n- `info`\n- `accounts`\n- `balance`\n- `transactions`\n- `standing_orders`\n- `direct_debits`\n- `offline_access`\n"},"state":{"type":"string","description":"An opaque value used by the client to maintain state between the request and callback"},"consent_id":{"type":"string","description":"Identifier to indicate the client has captured the user’s consent themselves. Any alphanumeric string allowed. Should be unique to track that the user has given consent."},"user":{"type":"object","description":"You must provide the `name` and one of `email` or `phone`.","properties":{"id":{"type":"string","description":"A unique ID for the user","example":"d0e122db-2264-4bbe-97a5-869c95a0aa9e"},"name":{"type":"string","description":"The full name of the user","example":"Alan Turing"},"email":{"type":"string","format":"email","description":"Email address of the user","example":"alan.turing@bletchleypark.org.uk"},"phone":{"type":"string","description":"Phone number of the user","example":"+44777777777"}}},"data_use_description":{"type":"string","description":"The exact copy shown to the user explaining what their data will be used for."},"provider_id":{"type":"string","description":"The id for the provider which you'd link to direct the user to to connect their account."},"code_challenge":{"type":"string","description":"PKCE code challenge"},"code_challenge_method":{"type":"string","description":"must be `\"S256\"` if `code_challenge` is supplied","enum":["S256"]},"response_mode":{"type":"string","description":"must be `\"form_post\"` if provided","enum":["form_post"]},"auth_inputs":{"type":"array","description":"Specify any required additional user input here. Our Providers API specifies which providers require these extra inputs (steps) and lists possible values where available.\n\nThe auth_inputs field requires specifying the input and the value. The key name should be the step `field.id` sourced from the Providers API and the value should be the user's selection. For example:\n```\n\"auth_inputs\": {\n  \"branch-name\": \"stet-credit-agricole-alpes-provence\"\n}\n```\n","items":{"type":"object","example":{"branch-name":"stet-credit-agricole-alpes-provence"}}},"tracking_id":{"type":"string","description":"Allows you to query how far the user got in the authentication flow using Auth Journey Analytics."}}},"AuthUriResponse":{"type":"object","additionalProperties":false,"required":["result","success"],"properties":{"result":{"type":"string","format":"uri","description":"Authentication link. Direct the end user here to (re)authenticate them."},"success":{"type":"boolean"}}},"ReauthUriRequest":{"type":"object","additionalProperties":false,"required":["response_type","refresh_token","redirect_uri"],"properties":{"response_type":{"type":"string","description":"Must be `\"code\"`","enum":["code"]},"refresh_token":{"type":"string","description":"refresh_token for the connection you want to reauthenticate"},"redirect_uri":{"type":"string","description":"A valid redirect_uri for your TrueLayer client_id (set in your Console)"},"state":{"type":"string","description":"An opaque value used by the client to maintain state between the request and callback"},"code_challenge":{"type":"string","description":"PKCE code challenge"},"code_challenge_method":{"type":"string","description":"must be `\"S256\"` if `code_challenge` is supplied","enum":["S256"]},"response_mode":{"type":"string","description":"must be `\"form_post\"` if provided","enum":["form_post"]}}},"DebugIdRequest":{"type":"object","additionalProperties":false,"required":["access_token"],"properties":{"access_token":{"type":"string","description":"The access token of the data access attempt that needs debugging."}}},"DebugIdResponse":{"type":"object","additionalProperties":false,"required":["credentials_id","debug_id","provider_id"],"properties":{"credentials_id":{"type":"string","description":"The ID of the underlying credential associated with the access token."},"debug_id":{"type":"string","description":"An ID that represents this debugging request. Share this with a member of TrueLayer's support team to help them debug your issue."},"provider_id":{"type":"string","description":"The provider associated with the credential and authentication attempt."}}},"AuthInputStep":{"type":"object","required":["type","id","display_name","help_text","mandatory"],"properties":{"type":{"type":"string","description":"Input field type. Can be a Single Choice Input or a Free Input"},"is_sensitive":{"type":"boolean","description":"For Free Input Values, is set to true for sensitive information like passwords"},"values":{"type":"array","description":"For Single Choice Input, an array of values","items":{"type":"object","properties":{"value":{"type":"string","description":"For Single Choice Input, input field value"},"display_name":{"type":"string","description":"For Single Choice Input, friendly name for this input field value"}}}},"validations":{"type":"array","description":"For Free Input Values, an array of RegEx validation rules that need to be satisfied to consider the input valid"},"allowed_characters":{"type":"string","description":"For Free Input Values, character ranges allowed. can be alphanumeric or numeric"},"id":{"type":"string","description":"Unique id for this field within the method"},"display_name":{"type":"string","description":"Friendly name for this field within the method"},"help_text":{"type":"string","description":"Input help text for the end user"},"mandatory":{"type":"boolean","description":"Indicates whether the field is required"}}},"GetProvidersResponse":{"type":"object","additionalProperties":false,"required":["provider_id","display_name","logo_url","scopes","country"],"properties":{"provider_id":{"type":"string","description":"Unique TrueLayer provider ID"},"display_name":{"type":"string","description":"Human friendly provider name"},"logo_url":{"type":"string","description":"URL to the provider’s logo as used by TrueLayer"},"scopes":{"type":"string","description":"List of Permissions supported by the provider","enum":["info","accounts","cards","balance","transactions","direct_debits","standing_orders","offline_access"]},"country":{"type":"string","description":"Country where the provider is available. 2 character [ISO 3166 country code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)","enum":["de","es","fr","ie","it","lt","pl","uk"]},"steps":{"type":"array","items":{"$ref":"#/components/schemas/AuthInputStep"}}}}},"examples":{"tokenExchange200Response":{"summary":"abc","value":{"access_token":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjE0NTk4OUIwNTdDOUMzMzg0MDc4MDBBOEJBNkNCOUZFQjMzRTk1MTBSUzI1NiIsInR5cCI6ImF0K2p3dCIsIng1dCI6IkZGbUpzRmZKd3poQWVBQ291bXk1X3JNLWxSQSJ9.eyJuYmYiOjE2MTMwNjY5MzgsImV4cCI6MTYxMzA3MDUzOCwiaXNzIjoiaHR0cHM6Ly9hdXRoLnRydWVsYXllci1zYW5kYm94LmNvbSIsImF1ZCI6ImRhdGFfYXBpIiwiY2xpZW50X2lkIjoic2FuZGJveC15b28tMTZiNTgzIiwic3ViIjoiSmJKZ1RJOWozK0pNdWtuSnlnMDFla3RjMGpOYTZuRlZuSDZHUVU5TWRTbz0iLCJhdXRoX3RpbWUiOjE2MTMwNjY5MzgsImlkcCI6ImxvY2FsIiwianRpIjoiNkYxNUY3QkEzRDUzQkI4QUE5RTY2MzdFMTcxM0JFNjUiLCJzaWQiOiJhdXRoLXBXYUNnUzByTnJzdjJJbTJ6NjItQURYQ1AxcktBMVZCVHZCdmt0aGE3cW8iLCJpYXQiOjE2MTMwNjY5MzgsImNvbm5lY3Rvcl9pZCI6Im1vY2siLCJjcmVkZW50aWFsc19rZXkiOiIwNTgyNGI0YmEzYTYzM2ZmZDg5OGRiZWM4NGVlYjExMjVjM2RmYjgxYWJlMDNlMGEyZWY4NjRkMmFmZmYyNjU4IiwicHJpdmFjeV9wb2xpY3kiOiJGZWIyMDE5IiwiY29uc2VudF9pZCI6ImVmZmVhZjk1LTdjYmUtNGVkNC05MzIwLTJiOGFjOWZhYmUyOCIsInNjb3BlIjpbImluZm8iLCJhY2NvdW50cyIsImJhbGFuY2UiLCJjYXJkcyIsInRyYW5zYWN0aW9ucyIsImRpcmVjdF9kZWJpdHMiLCJzdGFuZGluZ19vcmRlcnMiLCJvZmZsaW5lX2FjY2VzcyJdLCJhbXIiOlsicHdkIl19.bU71YzlQLfEoQLMlX8enb-T28lkpM989mAxaAkmV3J3FgvZsv3Rj7n-TvsKN-_6cumbhpLavchezy4xo-n-Uq8o8l0dcxLELrgImX0vDOxRm8iae5hBkRstW5_0oNjxP9vIMi8f_SZlDgFv7pozWup2d0tNY-7Vx2C8uJVRYX7L6sT-aqVwhuM0vkzlsugY-dceTnikK3qMmX6adO3CHHD6Qqv7qm7VmEuXk5dgnDUQC7PnQugffBM517Ic7ilzOsWhgbjR0GjvrUfhh9xBqv2CuL_fBllcL2n7dsjMxXr6AvAz4hhuXZhhNxZSBOPiDImYdnRg8BKAWZuj0T1LMDg","expires_in":3600,"token_type":"Bearer","refresh_token":"DD65D922D17924F5A96E2C9DFA65AC8CD396107FD06A59F40B169E62B738BE5A","scope":"info accounts balance cards transactions direct_debits standing_orders offline_access"}},"InvalidGrant400Response":{"summary":"Invalid grant","value":{"error":"invalid_grant"}},"InternalServerError500Response":{"summary":"Internal server error","value":{"error_description":"Sorry, we are experiencing technical difficulties. Please try again later.","error":"internal_server_error","error_details":{}}},"DirectBankAuth200Response":{"summary":"Direct bank auth link for Monzo","value":{"result":"https://verify.monzo.com/open-banking/authorize?client_id=oauth2client_abc123&request=ey...&state=auth-abc123nonce=WZIU7nl3cLimgW-OMVbKmI2fecWkYjNYjmmPnSVN&scope=openid&response_type=code%20id_token&redirect_uri=https%3A%2F%2Fauth.truelayer.com%2Foauth%2Fhybrid%2Fcallback","success":true}},"Unauthorized401Response":{"summary":"Unauthorized request","value":{"error_description":"Unauthorized.","error":"unauthorized","error_details":{"reason":"Invalid token"}}},"InvalidRefreshToken401Response":{"summary":"Invalid refresh token","value":{"error_description":"Invalid request","error":"invalid_request","error_details":{"reason":"Invalid refresh_token"}}},"UnauthorizedClient401Response":{"summary":"Unauthorized client","value":{"error_description":"The client credentials you have entered are incorrect. Please check and try again.","error":"unauthorized_client","error_details":{}}},"reauthUri200Response":{"summary":"abc","value":{"result":"https://example.com","success":true}},"DebugId200Response":{"summary":"abc","value":{"credentials_id":"SSwF1CgQMLOs0qratFpybzF7uJ3hxwppiw1C4s+rT4I=","debug_id":"ob-monzo|U1N3RjFDZ1FNTE9zMHFyYXRGcHliekY3dUozaHh3cHBpdzFDNHMrYXk0ST0","provider_id":"ob-monzo"}},"DebugId400Response":{"summary":"Invalid Request","value":{"error_description":"Invalid request","error":"invalid_request","error_details":{"reason":"Consent expired or revoked"}}},"GetProviders200Response":{"summary":"List of providers","value":[{"provider_id":"mock","display_name":"Mock","country":"uk","logo_url":"https://truelayer-provider-assets.s3.amazonaws.com/global/logos/mock.svg","scopes":["accounts","balance","cards","info","transactions","offline_access"],"availability":{"recommended_status":"healthy","updated_at":"2023-05-23T10:11:54.501Z"}},{"provider_id":"ob-transferwise","display_name":"Wise","country":"uk","logo_url":"https://truelayer-provider-assets.s3.amazonaws.com/global/logos/transferwise.svg","scopes":["accounts","balance","transactions","offline_access"],"availability":{"recommended_status":"healthy","updated_at":"2023-05-23T10:11:54.501Z"}},{"provider_id":"ob-lloyds-business","display_name":"Lloyds Business","country":"uk","logo_url":"https://truelayer-provider-assets.s3.amazonaws.com/global/logos/lloyds.svg","scopes":["info","accounts","balance","transactions","cards","direct_debits","standing_orders","offline_access"],"availability":{"recommended_status":"healthy","updated_at":"2023-05-23T10:11:54.501Z"}},{"provider_id":"stet-credit-agricole","display_name":"Crédit Agricole","country":"fr","logo_url":"https://truelayer-provider-assets.s3.amazonaws.com/fr/logos/credit-agricole.svg","scopes":["info","accounts","balance","transactions","offline_access"],"steps":[{"title":"OAuthRedirect","fields":[{"type":"SingleChoiceField","values":[{"value":"stet-banque-chalus","display_name":"Banque Chalus"},{"value":"stet-credit-agricole-alsace-vosges","display_name":"Crédit Agricole Alsace Vosges"},{"value":"stet-credit-agricole-alpes-provence","display_name":"Crédit Agricole Alpes Provence"},{"value":"stet-credit-agricole-anjou-maine","display_name":"Crédit Agricole de l'Anjou et du Maine"},{"value":"stet-credit-agricole-aquitaine","display_name":"Crédit Agricole d'Aquitaine"},{"value":"stet-credit-agricole-atlantique-vendee","display_name":"Crédit Agricole Atlantique Vendée"},{"value":"stet-credit-agricole-brie-picardie","display_name":"Crédit Agricole Brie Picardie"},{"value":"stet-credit-agricole-centre-est","display_name":"Crédit Agricole de Centre-Est"}],"id":"branch-name","display_name":"Branch Name","help_text":"Please select a branch","mandatory":true}]}],"availability":{"recommended_status":"healthy","updated_at":"2023-05-23T10:11:54.501Z"}}]}},"responses":{"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"400Example":{"$ref":"#/components/examples/InvalidGrant400Response"}}}}},"401":{"description":"Unauthorized request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"401Example":{"$ref":"#/components/examples/Unauthorized401Response"},"401InvalidRefreshTokenExample":{"$ref":"#/components/examples/InvalidRefreshToken401Response"},"401UnauthorizedClientExample":{"$ref":"#/components/examples/UnauthorizedClient401Response"}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"500Example":{"$ref":"#/components/examples/InternalServerError500Response"}}}}},"DebugId400Response":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"400Example":{"$ref":"#/components/examples/DebugId400Response"}}}}}}},"x-readme":{"explorer-enabled":false}}