REST API
The database server works through a REST API. This API is used by both the Unity package and the website template we provide. We also support custom clients and integrations, thus why we provide this documentation.
Handling Errors
All responses from the database server are in JSON format. If an error occurs, the response will be in the following format:
{
"code": integer, // The HTTP status code of the error
"message": string, // A string version of the HTTP status code
"errors": [ // An array of errors that occurred, usually only one, but can be more
{
"status": string, // Usually the same as the HTTP status code
"detail": string, // A detailed message about the error, this is the one you want to show to the user
"links": { // A link to the documentation or api for the error, usually not defined
"about": string, // A link to the documentation for the error
"type": string // A link to the api for the error
}
}
]
}
Authentication
The database server uses a token-based authentication system. This means that you need to provide a valid bearer token in the Authorization header of your requests. The token is generated when you create a new user account.
Signup
This creates a new user account for the application corresponding to the provided app key.
Endpoint
POST /auth/signup
Request Body
{
"app_key": string, // The app key of the application to register the user for
"email": string, // A valid email for this user
"username": string, // A username for this user, must be unique case insensitive
"password": string, // A password for this user
}
Response
{
"mesage": string, // A message indicating the result of the operation
}
Login
This logs in a user and returns a token and refresh token that can be used to authenticate future requests.
Endpoint
POST /auth/login
Request Body
{
"app_key": string, // The app key of the application to access
"username": string, // The username of the user
"password": string, // The password of the user
}
Response
{
"session_token": { // The token to use for authentication
"token": string, // The token to use for authentication, must be provided in the Authorization header as a bearer token "Authorization: Bearer <token>"
"expires_at": integer, // The time the token expires in seconds since the epoch
},
"refresh_token": {
"token": string, // The refresh token to use to get a new token from the /auth/refresh endpoint
"expires_at": integer, // The time the token expires in seconds since the epoch
}, // The refresh token to use to get a new token
}
Logout
This logs out a user and invalidates the session token.
Endpoint
POST /auth/logout
Headers
Authorization: Bearer <session_token>
Request Body
{
}
Response
{
"message": string, // A message indicating the result of the operation
}
Refresh Token
This refreshes a session token using a refresh token, this is useful for keeping a user logged in without having to re-enter their password. Will return a new session token and refresh token that can be used to authenticate future requests.
Endpoint
POST /auth/refresh
Request Body
{
"refresh_token": string, // The refresh token to use to get a new token
}
Response
{
"session_token": { // The token to use for authentication
"token": string, // The token to use for authentication, must be provided in the Authorization header as a bearer token "Authorization: Bearer <token>"
"expires_at": integer, // The time the token expires in seconds since the epoch
},
"refresh_token": {
"token": string, // The refresh token to use to get a new token from the /auth/refresh endpoint
"expires_at": integer, // The time the token expires in seconds since the epoch
}, // The refresh token to use to get a new token
}
Change Password
This changes the password of an authenticated user.
Endpoint
POST /auth/change_pass
Headers
Authorization Bearer <session_token>
Request Body
{
"old_password": string, // The old password of the user, must be correct or the request will fail
"new_password": string, // The new password of the user
}
Response
{
"message": string, // A message indicating the result of the operation
}
Forgot Password
This sends an email containing a reset code to be sent to the registered user with the passed in email address.
Endpoint
POST /auth/reset
Request Body
{
"email": string, // The email address of the user
"app_key": string, // The app key of the application
}
Response
{
"message": string, // A message indicating the result of the operation
}
Reset Password
This resets the password of a user to the passed in value, if the reset code matches the one given to them in the email.
Endpoint
POST /auth/reset_code
Request Body
{
"reset_code": string, // The reset code given to the user in the email
"new_password": string, // The new password of the user
"app_key": string, // The app key of the application
}
Response
{
"message": string, // A message indicating the result of the operation
}
User
These endpoints are used to interact with users
Get User
Used to grab common information about a user.
Endpoint
GET /user
Query Parameters
user_id: string, // The id of the user to get
Headers
Authorization Bearer <session_token>
Response
{
"_id": string, // The id of the user
"username": string, // The username of the user
"email": string, // The email of the user, this will be hidden if the user is not the same as the one making the request or an admin
"created_at": integer, // The time the user was created in rfc3339 format
"roles": [ string ], // An array of roles the user has, use the /user/roles/defs endpoint to get the definitions of these roles
}
Update User
Used to update the information of a user.
Endpoint
POST /user/update
Headers
Authorization Bearer <session_token>
Request Body
{
"user_id": string, // OPTIONAL The id of the user to update, if not provided the user making the request will be updated
"username": string, // OPTIONAL The new username of the user
"email": string, // OPTIONAL The new email of the user
}
Response
{
"message": string, // A message indicating the result of the operation
}
Delete User
// TODO
Search Users
Used to search for users based on a query.
Endpoint
GET /user/search
Query Parameters
username: string, // OPTIONAL Username to search for
email: string, // OPTIONAL Email to search for
roles: [ string ], // OPTIONAL An array of roles to filter by
start_index: integer, // OPTIONAL The start index of the search
count: integer, // OPTIONAL The number of results to return
Headers
Authorization Bearer <session_token>
Response
{
"users": [ // An array of users that match the search
{
"_id": string, // The id of the user, can be used to get more information about the user
"username": string, // The username of the user
}
]
}
User Roles
This set of endpoints is used to manage user roles, and manage what roles a user has.
Define Roles
Used to define or update roles in the system, also may be used to delete roles.
Endpoint
POST /user/roles/define
Headers
Authorization Bearer <session_token>
Request Body
{
"define": [ // OPTIONAL An array of roles to define
{
<role name>: { // Key is the name of the role
"permissions": [ string ] // An array of permissions the role has
},
}
],
"delete": [ string ] // OPTIONAL An array of roles to delete
}
Response
{
"message": string, // A message indicating the result of the operation
}
Get Role Definitions
Used to get the definitions of roles in the system.
Endpoint
GET /user/roles/defs
Headers
Authorization Bearer <session_token>
Response
{
"defs": { // An object of roles and their data
<role name>: {
"permissions": [ string ] // An array of permissions the role has
}
}
}
Assign Roles
Used to assign roles to a user.
Endpoint
POST /user/roles/add
Headers
Authorization Bearer <session_token>
Request Body
{
"user_id": string, // OPTIONAL The id of the user to assign roles to, if not provided the user making the request will be updated
"roles": [ string ] // An array of roles to assign to the user
}
Response
{
"message": string, // A message indicating the result of the operation
}
Retract Roles
Used to retract roles from a user.
Endpoint
POST /user/roles/remove
Headers
Authorization Bearer <session_token>
Request Body
{
"user_id": string, // OPTIONAL The id of the user to retract roles from, if not provided the user making the request will be updated
"roles": [ string ] // An array of roles to retract from the user
}
Response
{
"message": string, // A message indicating the result of the operation
}
User Properties
This set of endpoints is used to manage user properties, and manage what properties a user has and their values.
Define Properties
Used to define or update properties in the system, also may be used to delete properties.
Endpoint
POST /user/props/define
Headers
Authorization Bearer <session_token>
Request Body
{
"define": [ // OPTIONAL An array of properties to define
{
<property name>: { // Key is the name of the property
"get_roles": [ string ], // An array of roles that can access this property
"set_roles": [ string ] // An array of roles that can set this property
},
}
],
"delete": [ string ] // OPTIONAL An array of properties to delete definitions for
}
Response
{
"message": string, // A message indicating the result of the operation
}
Get Property Definitions
Used to get the definitions of properties in the system.
Endpoint
GET /user/props/defs
Query Parameters
filter: [ string ], // OPTIONAL An array of property names to filter by
Headers
Authorization Bearer <session_token>
Response
{
"defs": { // An object of properties and their data
<property name>: {
"get_roles": [ string ], // An array of roles that can access this property
"set_roles": [ string ] // An array of roles that can set this property
}
}
}
Set Properties
Used to set and delete properties for a user.
Endpoint
POST /user/props/set
Headers
Authorization Bearer <session_token>
Request Body
{
"user_id": string, // OPTIONAL The id of the user to set properties for, if not provided the user making the request will be updated
"props": { // An object of properties to set
<property name>: json_value // The value of the property, can be any json value. If null the property will be deleted
}
}
Response
{
"message": string, // A message indicating the result of the operation
}
Get Properties
Used to get the properties of a user.
Endpoint
POST /user/props/get
Headers
Authorization Bearer <session_token>
Request Body
{
"user_id": string, // OPTIONAL The id of the user to get properties for, if not provided the user making the request will be updated
"props": [ string ], // OPTIONAL An array of properties to get, if not provided all properties will be returned
"permissions": bool // OPTIONAL If true the permissions of the user will be returned as well
}
Response (permissions false)
{
"props": { // An object of properties and their values
<property name>: json_value // The value of the property
},
}
Response (permissions true)
{
"props": { // An object of properties and their values
<property name>: {
"value": json_value, // The value of the property
"get_roles": [ string ], // An array of roles that can access this property
"set_roles": [ string ] // An array of roles that can set this property (will not be defined if the user does not have permission to set the property)
}
}
Update Reset Email
Used to set and delete the reset email template of the application. Can only be done by admins and must be valid HTML with no scripts.
There are included Wild Cards that will be replaced with their corresponding value when the email is sent, these can be found here.
Endpoint
PUT /user/props/update_reset
Headers
Authorization Bearer <session_token>
Request Body
{
"reset_email": string, // The HTML for the reset email template in the form of a string.
}
Response
{
"message": string, // A message indicating the result of the operation
}