---
updatedAt: 2026-10-15T21:29:21.000Z
agentTools:
  projectIndex: https://docs.wristband.dev/llms.txt
---

# Authorize

<br />

<Callout icon="↪️" theme="default">
  ### Redirect Required

  Your application will need to redirect to this endpoint instead of making a direct API call.
</Callout>

<Callout icon="🛡️" theme="default">
  ### OIDC Compliant

  This endpoint is compliant with the [OIDC Authorization Endpoint (Authorization Code Flow)](https://openid.net/specs/openid-connect-core-1_0.html#AuthorizationEndpoint) specification.
</Callout>

Initiates the OIDC Authorization Code flow. This API can be called using either an **application vanity domain** or a **tenant vanity domain**. The API's behavior depends on which vanity domain is used in the request, as described below.

<Callout icon="far fa-circle-info" theme="info">
  ### Note

  An **application vanity domain** can only be used when **application authorization requests** are enabled for the application.
</Callout>

### If an Application Vanity Domain Is Used

Initiates an application-level login request. If the request is valid, the user is redirected to either the Wristband-hosted application login page or a custom application login page, if configured.

On the login page, the user completes the tenant discovery flow to identify the tenant they want to log in to. Once the tenant is resolved, the user is redirected to the authorize endpoint using the tenant's vanity domain to initiate the tenant-level login flow.

If the request is invalid, the user is redirected to either the default Wristband application error page or a custom application error page, if configured.

<Callout icon="far fa-circle-info" theme="info">
  ### Note

  When the user is redirected to an application login page, an authorization request JWT containing the original authorization request parameters is created and appended to the URL as the `req` query parameter. The login page can use this JWT to retrieve the original authorization request parameters by calling the [Introspect Authorization Request Token API](https://docs.wristband.dev/reference/introspectauthorizationrequesttokenv1#/).
</Callout>

### If a Tenant Vanity Domain Is Used

Initiates a login request for a specific tenant. The tenant vanity domain identifies the tenant the user is attempting to log in to. When this endpoint is invoked, one of the following actions occurs:

* **Invalid request with an undeterminable redirect URI or invalid client ID:** The user is redirected to either the default Wristband tenant error page or a custom tenant error page, if configured.

* **Invalid request with a valid client redirect URI:** The user is redirected to the client's redirect URI with the appropriate error code.

* **Valid request with an unauthenticated user:** If a valid authentication session cookie is not present, the user is redirected to either the Wristband-hosted tenant login page or a custom tenant login page, if configured. This behavior applies when the `prompt` parameter is omitted or set to `login`. If `prompt` is set to `none`, the user is redirected to the client's redirect URI with a `login_required` error code.

* **Valid request with an authenticated user and&#x20;**`prompt=login`**:** The user is redirected to either the Wristband-hosted tenant login page or a custom tenant login page, if configured, to initiate a new login flow.

* **Valid request with an authenticated user and&#x20;**`prompt=none`**&#x20;or an omitted&#x20;**`prompt`**&#x20;parameter:** The user is redirected to the client's redirect URI with an authorization code.

<Callout icon="far fa-circle-info" theme="info">
  ### Note

  When the user is redirected to a tenant login page, an authorization request JWT containing the original authorization request parameters is created and appended to the URL as the `req` query parameter. The login page can use this JWT to retrieve the original authorization request parameters by calling the [Introspect Authorization Request Token API](https://docs.wristband.dev/reference/introspectauthorizationrequesttokenv1#/).
</Callout>

### **Error Codes:**

Below is a list of error codes that can be returned on redirects to the client's callback URI.

* `invalid_request`: The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.
* `unauthorized_client`: The client is not authorized to request an authorization code, usually because the client doesn't support the `authorization_code` grant type.
* `access_denied`: The resource owner or authorization server denied the request.
* `unsupported_response_type`: The response type specified in the request is not supported.
* `invalid_scope`: The requested scope is invalid, unknown, or malformed.
* `server_error`: The authorization server encountered an unexpected condition that prevented it from fulfilling the request.
* `temporarily_unavailable`: The authorization server is currently unable to handle the request due to a temporary overload or maintenance of the server.
* `login_required`: The authorization request does not have a valid auth session associated with it and requires the user to authenticate.
* `request_not_supported`: Returned if the OIDC `request` parameter is specified in the request.
* `request_uri_not_supported`: Returned if the OIDC `request_uri` parameter is specified in the request.
* `registration_not_supported`: Returned if the OIDC `registration` parameter is specified in the request.

# OpenAPI definition

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Authentication APIs",
    "version": "1.0.0",
    "description": "Authentication APIs",
    "license": {
      "name": "Private",
      "url": "https://wristband.dev/terms/"
    },
    "termsOfService": "https://wristband.dev/terms/",
    "contact": {
      "name": "Wristband Support",
      "email": "support@wristband.dev",
      "url": "https://wristband.dev/contact/"
    }
  },
  "servers": [
    {
      "url": "https://{application_vanity_domain}",
      "description": "Wristband application scoped URL.",
      "variables": {
        "application_vanity_domain": {
          "default": "yourapp-yourorg.us.wristband.dev",
          "description": "Wristband vanity domain scoped to a specific application."
        }
      }
    }
  ],
  "paths": {
    "/api/v1/oauth2/authorize": {
      "get": {
        "summary": "Authorize",
        "security": [],
        "operationId": "authorizeV1",
        "servers": [
          {
            "url": "https://{application_vanity_domain}",
            "description": "Wristband application scoped URL.",
            "variables": {
              "application_vanity_domain": {
                "default": "yourapp-yourorg.us.wristband.dev",
                "description": "Wristband vanity domain scoped to a specific application."
              }
            }
          },
          {
            "url": "https://{tenant_vanity_domain}",
            "description": "Wristband tenant scoped URL.",
            "variables": {
              "tenant_vanity_domain": {
                "default": "tenant-yourapp-yourorg.us.wristband.dev",
                "description": "Wristband vanity domain scoped to a specific tenant."
              }
            }
          }
        ],
        "tags": [
          "Login"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/ClientIdQueryParam"
          },
          {
            "$ref": "#/components/parameters/ResponseTypeQueryParam"
          },
          {
            "$ref": "#/components/parameters/RedirectUriQueryParam"
          },
          {
            "$ref": "#/components/parameters/StateQueryParam"
          },
          {
            "$ref": "#/components/parameters/NonceQueryParam"
          },
          {
            "$ref": "#/components/parameters/ScopeQueryParam"
          },
          {
            "$ref": "#/components/parameters/CodeChallengeQueryParam"
          },
          {
            "$ref": "#/components/parameters/CodeChallengeMethodQueryParam"
          },
          {
            "$ref": "#/components/parameters/PromptQueryParam"
          },
          {
            "$ref": "#/components/parameters/MaxAgeQueryParam"
          },
          {
            "$ref": "#/components/parameters/LoginHintQueryParam"
          },
          {
            "$ref": "#/components/parameters/IdpHintQueryParam"
          },
          {
            "$ref": "#/components/parameters/TenantHintQueryParam"
          },
          {
            "$ref": "#/components/parameters/RequestQueryParam"
          },
          {
            "$ref": "#/components/parameters/SessionCookie"
          }
        ],
        "responses": {
          "302": {
            "description": "Found",
            "headers": {
              "Location": {
                "description": "URI where the user will be redirected to after the authorization request.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                },
                "examples": {
                  "Example 1 - Redirect to Login Page": {
                    "description": "Redirect URI where the authorization request is valid but the user needs to authenticate.",
                    "value": "http://example.com/login?req=eyJraWQiOiJ3Skppp1lfWldPcmg3aFZJR1hTaTZidkozQmVqdlVYT3pPVm41My1RR1FjIiwidHlwIjoiYWMrSldUIiwiYWxnIjoiSFMyNTYifQ.eyJwYXJ0apppb24iOjUsImV4cCI6MTY1OTIxNzg4MiwianRpIjoibnQzemt5d3dpemQ3dHA2aTNpcmloZnB0cGUifQ.qo5PY_O1Su3HPpppW1VVdFWL83OKXNWxlOyUkc2fodg&state=Q0d3hY81cp_fBnk9libR1sOJ-rSJBUgfSzih4xkwvYs"
                  },
                  "Example 2 - Auth Code Created": {
                    "description": "Redirect URI where the authorization request is valid and has an active auth session associated with it, so the user doesn't need to re-authenticate.",
                    "value": "http://example.com/auth/callback?code=eyJraWQiOiJ3Skppp1lfWldPcmg3aFZJR1hTaTZidkozQmVqdlVYT3pPVm41My1RR1FjIiwidHlwIjoiYWMrSldUIiwiYWxnIjoiSFMyNTYifQ.eyJwYXJ0apppb24iOjUsImV4cCI6MTY1OTIxNzg4MiwianRpIjoibnQzemt5d3dpemQ3dHA2aTNpcmloZnB0cGUifQ.qo5PY_O1Su3HPpppW1VVdFWL83OKXNWxlOyUkc2fodg&state=Q0d3hY81cp_fBnk9libR1sOJ-rSJBUgfSzih4xkwvYs"
                  },
                  "Example 3 - Error Encountered": {
                    "description": "Redirect URI where the authorization request is not valid.",
                    "value": "http://example.com/auth/callback?state=Q0d3hY81cp_fBnk9libR1sOJ-rSJBUgfSzih4xkwvYs&error=INVALID_REQUEST&error_description=Prompt%20value%20%5BBAD%5D%20is%20not%20supported"
                  }
                }
              },
              "Set-Cookie": {
                "$ref": "#/paths/~1api~1v1~1logout/get/responses/302/headers/Set-Cookie"
              }
            }
          },
          "400": {
            "$ref": "#/paths/~1api~1v1~1logout/get/responses/400"
          },
          "405": {
            "$ref": "#/paths/~1api~1v1~1logout/get/responses/405"
          },
          "406": {
            "$ref": "#/paths/~1api~1v1~1logout/get/responses/406"
          },
          "500": {
            "$ref": "#/paths/~1api~1v1~1logout/get/responses/500"
          },
          "503": {
            "$ref": "#/paths/~1api~1v1~1logout/get/responses/503"
          }
        }
      }
    },
    "/api/v1/logout": {
      "get": {
        "summary": "Logout",
        "security": [],
        "operationId": "logoutV1",
        "servers": [
          {
            "url": "https://{tenant_vanity_domain}",
            "description": "Wristband tenant scoped URL.",
            "variables": {
              "tenant_vanity_domain": {
                "default": "tenant-yourapp-yourorg.us.wristband.dev",
                "description": "Wristband vanity domain scoped to a specific tenant."
              }
            }
          }
        ],
        "tags": [
          "Logout"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/SessionCookie"
          },
          {
            "in": "query",
            "name": "client_id",
            "description": "ID of the client that initiated the logout request. If provided, the login URL from the client (if defined) will be used when resolving the final redirect URL.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 26,
              "example": "jayovsssgbgbpk47ihblujcm2e"
            }
          },
          {
            "in": "query",
            "name": "redirect_url",
            "description": "If provided, the Logout Endpoint will redirect to this URL after the logout operation has completed. Note, the redirect URL must be registered on the application before it can be used in the `redirect_url` query parameter.",
            "required": false,
            "schema": {
              "type": "string",
              "format": "uri",
              "minLength": 1,
              "maxLength": 2000,
              "example": "https://example.com/custom-logout-url"
            }
          },
          {
            "in": "query",
            "name": "state",
            "description": "If provided, the value will be appended as a `state` query parameter to the resolved redirect URL. This can be used to transfer state between the Logout Endpoint and the resolved redirect endpoint.",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 512,
              "example": "my_param=value"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Found",
            "headers": {
              "Location": {
                "description": "URI where the user will be redirected to after the Authorization request.",
                "schema": {
                  "type": "string",
                  "format": "uri"
                },
                "examples": {
                  "Example 1 - Redirect to Custom Logout Redirect URL": {
                    "value": "https://example.com/custom-logout-url?my_param=value"
                  },
                  "Example 2 - Redirect to Client Login URL": {
                    "value": "https://example.com/client-login"
                  },
                  "Example 3 - Redirect to Application Login URL": {
                    "value": "https://example.com/login"
                  }
                }
              },
              "Set-Cookie": {
                "description": "Used to send a cookie from the server to the user agent, so that the user agent can send it back to the server later.  Wristband session cookies get both set and cleared from this header, depending on the API invoked.",
                "schema": {
                  "type": "string"
                },
                "example": "sid=s:R1CR1K4ALGkySkGQMG3sCn7cgeeKUgFX.RJ6C4FUMxWGimQmYyiOHQRSxJwAvHq0Ad2v77NfLu0E; Path=/; Expires=Mon, 01 Aug 2021 08:11:40 GMT; HttpOnly; SameSite=Strict; Secure"
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/paths/~1api~1v1~1logout/get/responses/405/content/application~1json/schema"
                    },
                    {
                      "title": "ConstraintViolationsApiError",
                      "description": "An API error that occurred due to a constraint violation",
                      "allOf": [
                        {
                          "$ref": "#/paths/~1api~1v1~1logout/get/responses/405/content/application~1json/schema"
                        },
                        {
                          "type": "object",
                          "readOnly": true,
                          "required": [
                            "violations"
                          ],
                          "properties": {
                            "violations": {
                              "type": "object",
                              "readOnly": true,
                              "required": [
                                "code"
                              ],
                              "properties": {
                                "code": {
                                  "type": "string",
                                  "description": "A code identifying the constraint violation.",
                                  "minLength": 1,
                                  "example": "too_long"
                                },
                                "constraintAttributes": {
                                  "type": "object",
                                  "description": "A map of constraint attribute values.",
                                  "additionalProperties": {
                                    "type": "string"
                                  },
                                  "example": {
                                    "maxLength": "10"
                                  }
                                }
                              }
                            }
                          }
                        }
                      ],
                      "x-examples": {
                        "Example 1": {
                          "type": "constraint_violations_error",
                          "code": "message_body_constraint_violations",
                          "message": "The request contained invalid fields",
                          "ticket": "11t7n71hi5e6t",
                          "violations": {
                            "field1": {
                              "code": "too_long",
                              "constraintAttributes": {
                                "maxLength": "10"
                              }
                            },
                            "field2": {
                              "code": "not_null"
                            }
                          }
                        }
                      }
                    }
                  ]
                },
                "examples": {
                  "code - invalid_request": {
                    "value": {
                      "type": "base_error",
                      "code": "invalid_request",
                      "message": "The request was invalid",
                      "ticket": "11t7n71hi5e6t"
                    }
                  },
                  "code - request_constraint_violations": {
                    "value": {
                      "type": "constraint_violations_error",
                      "code": "message_body_constraint_violations",
                      "message": "The message body contained invalid fields",
                      "ticket": "11t7n71hi5e6t",
                      "violations": {
                        "field1": {
                          "code": "too_long",
                          "constraintAttributes": {
                            "maxLength": 10
                          }
                        },
                        "field2": {
                          "code": "not_null"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "title": "ApiError",
                  "type": "object",
                  "description": "API error object",
                  "x-examples": {
                    "Example 1": {
                      "code": "invalid_request",
                      "message": "The request was invalid",
                      "ticket": "11t7n71hi5e6t"
                    }
                  },
                  "properties": {
                    "type": {
                      "type": "string",
                      "example": "base_error",
                      "minLength": 1,
                      "description": "The type of the API error.",
                      "readOnly": true
                    },
                    "code": {
                      "type": "string",
                      "example": "invalid_request",
                      "minLength": 1,
                      "description": "A code identifying the error that occurred.",
                      "readOnly": true
                    },
                    "message": {
                      "type": "string",
                      "example": "The request was invalid",
                      "description": "A free text message describing the error.  This error message is only meant to help developers understand the cause of the error.  It should not be used for programmatic purposes.",
                      "readOnly": true
                    },
                    "ticket": {
                      "type": "string",
                      "example": "11t7n71hi5e6t",
                      "description": "Ticket that can help correlate the error to the backend",
                      "readOnly": true
                    },
                    "details": {
                      "type": "object",
                      "description": "A map of details about the error. The keys are defined by the API.",
                      "additionalProperties": {},
                      "example": {
                        "attemptsRemaining": 4
                      }
                    }
                  },
                  "required": [
                    "type",
                    "code"
                  ]
                },
                "examples": {
                  "code - method_not_supported": {
                    "value": {
                      "type": "base_error",
                      "code": "method_not_supported",
                      "message": "The specified HTTP method is not supported",
                      "ticket": "11t7n71hi5e6t"
                    }
                  }
                }
              }
            }
          },
          "406": {
            "description": "Not Acceptable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1api~1v1~1logout/get/responses/405/content/application~1json/schema"
                },
                "examples": {
                  "code - not_acceptable": {
                    "value": {
                      "type": "base_error",
                      "code": "not_acceptable",
                      "message": "The Accept header was invalid",
                      "ticket": "11t7n71hi5e6t"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1api~1v1~1logout/get/responses/405/content/application~1json/schema"
                },
                "examples": {
                  "code - internal_server_failure ": {
                    "value": {
                      "type": "base_error",
                      "code": "internal_server_failure",
                      "message": "An unexpected error occurred while processing the request",
                      "ticket": "11t7n71hi5e6t"
                    }
                  }
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/paths/~1api~1v1~1logout/get/responses/405/content/application~1json/schema"
                },
                "examples": {
                  "code - service_unavailable": {
                    "value": {
                      "type": "base_error",
                      "code": "service_unavailable",
                      "message": "The service is currently unavailable",
                      "ticket": "11t7n71hi5e6t"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "ClientIdQueryParam": {
        "name": "client_id",
        "description": "ID of the client initiating the authorization request.",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 26,
          "example": "jayovsssgbgbpk47ihblujcm2e"
        }
      },
      "ResponseTypeQueryParam": {
        "name": "response_type",
        "description": "The response type that the client is requesting. This will affect the response that is returned from the authorization request.\n\n**Supported Values:**\n- `code`: The authorization code will be returned as the `code` query parameter when redirecting to the registered callback endpoint.",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "code"
          ],
          "minLength": 1,
          "example": "code"
        }
      },
      "RedirectUriQueryParam": {
        "name": "redirect_uri",
        "description": "The redirect URI that will be used to send the authorization code or authorization errors back to the client. The redirect URI value must exactly match one of the redirect URIs registered with the client initiating the request. If the client requesting authorization only has one redirect URI registered with Wristband, then the `redirect_uri` query parameter can be omitted.\n\n**Note**: When a redirect URI is registered with the `{tenant_name}` placeholder, pass the URI to the Authorize endpoint exactly as registered. Do not substitute `{tenant_name}` with an actual tenant name. For example: `redirect_uri=https://{tenant_name}.myapp.com/auth/callback`.",
        "in": "query",
        "schema": {
          "type": "string",
          "format": "uri",
          "minLength": 1,
          "maxLength": 2000,
          "example": "http://example.com/auth/callback"
        }
      },
      "StateQueryParam": {
        "name": "state",
        "description": "An opaque value used by the client to maintain state between the request and callback. When Wristband redirects to the callback endpoint it will include the original state value in the `state` query parameter.",
        "in": "query",
        "schema": {
          "type": "string",
          "minLength": 22,
          "maxLength": 512,
          "example": "jcm2ejayovsgbgbpkihblu47"
        }
      },
      "NonceQueryParam": {
        "name": "nonce",
        "description": "An opaque value used to associate the authorization request with an ID Token.  The value is passed through unmodified from the authentication request to the ID Token.  If present in the ID Token, clients MUST verify that the nonce claim value is equal to the value of the nonce parameter sent in the authorization request before trusting claims included in the ID token.",
        "in": "query",
        "schema": {
          "type": "string",
          "minLength": 22,
          "maxLength": 128,
          "example": "gbgbpkihblu47jcm2ejayovs"
        }
      },
      "ScopeQueryParam": {
        "name": "scope",
        "description": "The authorization and token endpoints allow the client to specify the scope of the authorization request using the `scope` request parameter.  In turn, the authorization server uses the `scope` response parameter to inform the client of the scopes of the access token issued.  The value of the scope parameter is expressed as a list of space-delimited, case-sensitive strings.  If the value contains multiple space-delimited strings, their order does not matter, and each string adds an additional requested scope.\n\n**Supported Scopes:**\n- openid - Required for OIDC requests.\n- profile - Includes the following claims in the User Info response: `name`, `given_name`, `family_name`, `middle_name`, `nickname`, `preferred_username`, `picture`, `gender`, `birthdate`, `zoneinfo`, `locale`, `updated_at`\n- email - Includes the following claims in the User Info response: `email`, `email_verified`\n- phone - Includes the following claims in the User Info response: `phone_number`, `phone_number_verified`\n- roles - Includes the following claims in the User Info response: `roles`\n- offline_access - If specified the response from the Token Endpoint will return a refresh token along with the access token.\n\n**Required Scopes:**\n- openid",
        "in": "query",
        "required": true,
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1000,
          "example": "openid offline_access"
        }
      },
      "CodeChallengeQueryParam": {
        "name": "code_challenge",
        "description": "This field is used by clients to implement the Proof Key for Code Exchange (PKCE) extension of the OAuth 2 specification.  The client first creates a code challenge which is sent to the server when requesting authorization.  The client then uses the code verifier (the string used to create the code challenge) when exchanging the authorization code for an access token.  In OAuth 2.1 it is required that clients use PKCE unless the following conditions are met:\n\n1. The client is a confidential client.\n2. In the specific deployment and the specific request, there is reasonable assurance by the authorization server that the client implements the OpenID Connect nonce mechanism properly.\n\nTherefore, if the client is a confidential client and the `nonce` query parameter is specified, then the `code_challenge` query parameter is not required; otherwise, the `code_challenge` is required.",
        "in": "query",
        "schema": {
          "type": "string",
          "pattern": "[A-Za-z0-9-._~]",
          "minLength": 43,
          "maxLength": 128,
          "example": "47jcm2ejayovsgbgbpkihblu47jcm2ejayovs47jcm2ejayovs"
        }
      },
      "CodeChallengeMethodQueryParam": {
        "name": "code_challenge_method",
        "description": "The method used for creating the code challenge.  If the `code_challenge` query parameter is present in the authorization request, then the `code_challenge_method` is required; otherwise, it is not required.\n\n**Supported Methods:**\n- `S256`: The code challenge is a BASE64-URL-encoded string of a SHA256 hash of the code verifier.",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "S256"
          ],
          "minLength": 1,
          "example": "S256"
        }
      },
      "PromptQueryParam": {
        "name": "prompt",
        "description": "Specifies whether the server should prompt the end user for re-authentication.\n\n**Supported Prompts:**\n- `none`: The Authorization Server MUST NOT prompt the user to authenticate. If the user does not already have an authenticated session then a `login_required` error is returned.\n- `login`: The Authorization Server will always prompt the user to authenticate, even if the user already has an authenticated session. \n\nPrompt is not a required field.  If it's not specified as part of an authorization request, then the default behavior is as follows:\n- If a valid auth session cookie is present, then an authorization code will automatically be created, and the user will be redirected to the callback endpoint without having to re-authenticate.\n- If an auth session cookie is not present or invalid, then the user is redirected to the login page to authenticate.",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": [
            "none",
            "login"
          ],
          "minLength": 1,
          "example": "login"
        }
      },
      "MaxAgeQueryParam": {
        "name": "max_age",
        "description": "Specifies the allowable elapsed time in seconds since the last time the user was actively authenticated.  If the elapsed time is greater than this value, the user must re-authenticate, even if they already have a valid auth session.",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "example": 3600
        }
      },
      "LoginHintQueryParam": {
        "name": "login_hint",
        "description": "Hint about the login identifier the end-user might use to log in.  If provided, this value will be used to pre-populate the login identifier form field. Note, if a login hint value is provided and an existing auth session is detected, one of the login identifiers (email or potentially username if it's configured as a login identifier) for the user associated with the auth session must match the login hint value; otherwise, the existing auth session will be revoked and the user will have to login again.",
        "in": "query",
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "example": "local@domain.com"
        }
      },
      "IdpHintQueryParam": {
        "name": "idp_hint",
        "description": "Hint indicating which Identity Provider (IdP) the user should authenticate with. The value must match the name of an IdP enabled for the user's tenant. If a match is found, the user is automatically taken to that IdP's login page. If no match is found, then the IdP hint is ignored and the regular login page is shown.",
        "in": "query",
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "example": "google"
        }
      },
      "TenantHintQueryParam": {
        "name": "tenant_hint",
        "description": "Hint identifying the tenant the user is trying to log in to. This query parameter is evaluated only when the authorization request uses an application vanity domain; otherwise, it is ignored. The value must match the name of an active tenant within the application identified by the application vanity domain. If a matching tenant is found, the user is automatically redirected to that tenant's login page. Otherwise, the hint is ignored, and the user must complete the tenant discovery workflow.",
        "in": "query",
        "schema": {
          "type": "string",
          "minLength": 1,
          "maxLength": 63,
          "example": "org1"
        }
      },
      "RequestQueryParam": {
        "name": "request",
        "description": "JWT containing the authorization request parameters. Use this parameter only to propagate an application-level authorization request token to a tenant-level authorization request.",
        "in": "query",
        "schema": {
          "type": "string",
          "example": "eyJraWQiOiJ4MGFrTVJfWnY5cFlTSmhYR2sxVi1sdmRTREY1ZjlPUlNjYWE5eGNSWTdZIiwidHlwIjoiYXIrSldUIiwiYWxnIjoiSFMyNTYifQ.eyJ2YW5fZG9tIjoidGVzdC13cmlzdGJhbmQuZGV2LndyaXN0YmFuZC5kZXYiLCJyZXNwb25zZV90eXBlIjpbImNvZGUiXSwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIjoiUzI1NiIsInJlZGlyZWN0X3VyaV9wcm92aWRlZCI6ZmFsc2UsIm5vbmNlIjoiMzIxMzQ0MzI0NTMyNDMyZHNrbGFka2xrbGxramxramxramxraiIsImNsaWVudF9pZCI6ImltaHJzb2c1M2JlZWZrdnM1Mjd4dDJsa2U0IiwibG9naW5fdXJsIjoiaHR0cHM6Ly90ZXN0LXdyaXN0YmFuZC5kZXYud3Jpc3RiYW5kLmRldi9sb2dpbi11cmwtcGxhY2Vob2xkZXI_bG9naW5faGludD1kYXZpZCU0MHdyaXN0YmFuZC5kZXYiLCJsb2dpbl9oaW50IjoiZGF2aWRAd3Jpc3RiYW5kLmRldiIsInNjb3BlIjpbIm9wZW5pZCIsInByb2ZpbGUiLCJlbWFpbCIsInJvbGVzIiwib2ZmbGluZV9hY2Nlc3MiXSwicmVkaXJlY3RfdXJpIjoiaHR0cHM6Ly9kYXZpZHN0ZXN0LmNvbS9jYWxsYmFjayIsInN0YXRlIjoiMTIzNDM1ZGFzZGpzYWtsZGpzYWtsZGprbHNhZGphc2RzYWRhcyIsImFwcF9pZCI6Im1sNGpmbm5ydHJocTdlN2pkd3hyaGd4c2JpIiwiaWF0IjoxNzkwMzc1NjEzLCJqdGkiOiJzcm9tbmZpZ2l2aGdmaXVmaHR1bmt2d3BqYSIsImNvZGVfY2hhbGxlbmdlIjoiU0NZbV8tWXlxVHpqcHVRZU41Q1lIMEZYRFNHcERNM1VFWXhIdXlBSkUtRSJ9.KQH8Rcew12EkdlDIdIvyGRRB3ddPvO3BMpV6-aNpdI4"
        }
      },
      "SessionCookie": {
        "name": "sid",
        "description": "HTTP-only cookie representing a user's authenticated session.",
        "in": "cookie",
        "schema": {
          "type": "string",
          "minLength": 1,
          "example": "eyJraWQiOiJlR3dXS09BZjh5aWxWWnJZaGhQY1NyMU5rM0lxbENtMEk2a2pwX2hwZHVNIiwidHlwIjoicytKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJmN3BwYnVvcHN6ZmluaXB0cWg3MnVtdmtxZSIsInBhcnRpdGlvbiI6M30.VOE5cPu8u0W5M3vTCKk8wA96VIHHrRS4ELs5TNIdUY4"
        }
      }
    }
  },
  "tags": [
    {
      "name": "Logout",
      "description": "Logout"
    }
  ]
}
```