All endpoints need a valid access token which can be obtained following either of the authentication flows detailed below. Both the authentication methods required a OAuth2 client. Create a OAuth2 client for your organisation at https://app.hoxton.ai/settings?tab=oauth_client, if not done already.
This method is preferred if you plan to share your oauth client credentials with a third part app. This method involves
directing user to the login
page on the authorization server. After the user has successfully authenticated, exchange
authorization code received from the server to the access_token
. This is a multistep method.
authorization_code
:Endpoint: https://auth.hoxton.ai/authorize
Parameter | Type | Description |
---|---|---|
response_type |
required | Always set this to code |
audience |
required | Always set this to https://api.hoxton.cloud |
scope |
optional | A space separated list of claims to include in the token. Use profile to get ID token. Include offline_access to get Refresh Token. |
client_id |
required | The oauth client's id |
redirect_uri |
required | URL the user should be redirect to after successful login. This must be a valid Allowed Callback URL set in the oauth client |
An example authorization url would be:
https://auth.hoxton.ai/authorize?
response_type=code&
client_id=<CLIENT_ID>&
redirect_uri=<REDIRECT_URI>&
scope=offline_access&
audience=https://api.hoxton.cloud
On successful authentication, you will receive a HTTP 302
response with the authorization_code
included as a parameter.
HTTP/1.1 302 Found
Location: <REDIRECT_URI>?code={authorization_code}
authorization_code
to access_token
:Endpoint: https://auth.hoxton.ai/oauth/token
Parameter | Type | Description |
---|---|---|
grant_type |
required | Always set this to authorization_code |
code |
required | The authorization_code from the previous step |
client_id |
required | The oauth client's id |
client_secret |
required | The oauth client's secret |
redirect_uri |
required | A valid URL configured in the oauth client. This must match exactly the URL passed to the authorization endpoint in the first step |
You can now exchange the authorization_code
from the above step to the access_token
by making a POST
request to the
token URL.
curl -X POST https://auth.hoxton.ai/oauth/token
-H 'Content-Type: application/json'
-d '{
"grant_type": "authorization_code",
"code": "<code_from_authorization_step>",
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>",
"redirect_uri": "<REDIRECT_URI>"
}'
All going well, you will get a HTTP 200
response with the access_token
which is valid for 24hr
.
{
"access_token": "eyJhbGc...2oSuHNwA",
"refresh_token": "v1.MT...4XFunfTks",
"id_token": "eyv1.KDNM3w...vPkdKvMU",
"token_type": "Bearer",
"expires_in": 86400
}
This method should be reserved for internal use only. If you are sharing with third party, use authorization code flow
described above. This flow is best suited for Machine-to-Machine (M2M) applications, such as CLIs, daemons, or
backend services, because the system must authenticate and authorize the application instead of a user.
To get the access token, make a POST request to the token URL with the oauth2 client's credentials (client_id
&
client_secret
). This is a single step method.
access_token
:Endpoint: https://auth.hoxton.ai/oauth/token
Parameter | Type | Description |
---|---|---|
grant_type |
required | Always set this to client_credentials |
audience |
required | Always set this to https://api.hoxton.cloud |
client_id |
required | The oauth client's id |
client_secret |
required | The oauth client's secret |
Once you have the required oauth client credentials, the access token can be obtained from the authorization server by making a POST request to the token URL.
curl -X POST https://auth.hoxton.ai/oauth/token
-H 'Content-Type: application/json'
-d '{
"grant_type": "client_credentials",
"audience": "https://api.hoxton.cloud",
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>",
}'
If the authorization server was able to successfully validate the request, you will receive HTTP 200
response with
a payload containing access_token
which is valid for 24hr
.
{
"access_token": "eyJhbGc...2oSuHNwA",
"token_type": "Bearer",
"expires_in": 86400
}
This method should be reserved for internal use only. If you are sharing with third party, use authorization code flow
described above.
To get the access token first get the user's credentials (username
& password
). Then get the oauth2 client's
credentials (client_id
& client_secret
). Finally, exchange them for token by making a POST
request to the
token URL. This is a single step method.
access_token
:Endpoint: https://auth.hoxton.ai/oauth/token
Parameter | Type | Description |
---|---|---|
grant_type |
required | Always set this to password |
audience |
required | Always set this to https://api.hoxton.cloud |
scope |
optional | A space separated list of claims to include in the token. Use profile to get ID token. Include offline_access to get Refresh Token. |
username |
required | The user's loging username |
password |
required | The user's login password |
client_id |
required | The oauth client's id |
client_secret |
required | The oauth client's secret |
Once you have the required oauth client credentials, the access token can be obtained from the authorization server by making a POST request to the token URL.
curl -X POST https://auth.hoxton.ai/oauth/token
-H 'Content-Type: application/json'
-d '{
"grant_type": "password",
"username": "<USERNAME>",
"password": "<PASSWORD>",
"audience": "https://api.hoxton.cloud",
"scope": "offline",
"client_id": "<CLIENT_ID>",
"client_secret": "<CLIENT_SECRET>",
}'
If the authorization server was able to successfully validate the request, you will receive HTTP 200
response with
a payload containing access_token
which is valid for 24hr
.
{
"access_token": "eyJhbGc...2oSuHNwA",
"refresh_token": "v1.MT...4XFunfTks",
"id_token": "eyv1.KDNM3w...vPkdKvMU",
"token_type": "Bearer",
"expires_in": 86400
}
If you have requested offline_access
claim in the authorisation call as described above, you can request a new
access_token
using this method.
access_token
and refresh_token
:Endpoint: https://auth.hoxton.ai/oauth/token
Parameter | Type | Description |
---|---|---|
grant_type |
required | Always set this to refresh_token |
scope |
optional | A space separated list of claims to include in the token. Do not set this parameter if you want to keep the original claims |
client_id |
required | The oauth client's id use in the initial authorization call |
refresh_token |
required | The refresh_token from the previous successful authorization call |
To get a new access_token
& refresh_token
, make a POST
request to the token URL.
curl -X POST https://auth.hoxton.ai/oauth/token
-H 'Content-Type: application/json'
-d '{
"grant_type": "refresh_token",
"client_id": "<CLIENT_ID>",
"scope": "offline",
"refresh_token": "v1.MT...4XFunfTks"
}'
If the authorization server was able to successfully validate the request, you will receive HTTP 200
response with
a payload containing access_token
(which is valid for 24hr
) and a refresh_token
.
{
"access_token": "eyJhbGc...2oSuHNwA",
"refresh_token": "v1.MT...4XFunfTks",
"id_token": "eyv1.KDNM3w...vPkdKvMU",
"token_type": "Bearer",
"expires_in": 86400
}