Download OpenAPI specification:
Simple API where users can create and manage board games with layouts, tiles, and rules.
Retrieve a paginated list of game IDs representing the games created by the specified user, ordered by most recent first.
Visibility Rules:
Pagination:
page controls which page of results is returned.size controls how many game IDs are included per page.| search | string Filter games by title prefix (case-insensitive). |
| user_id | string <uuid> Example: user_id=abcd1234-ef56-7890-ab12-cd34567890ef The UUID of the user whose games are being retrieved. |
| page | integer Default: 1 Example: page=1 The page number to retrieve (starting at 1). |
| size | integer Default: 10 Example: size=10 Number of items per page. |
{- "games": [
- "abcd1234-ef56-7890-ab12-cd34567890ef",
- "1234abcd-5678-90ef-ab12-cd34567890ef",
- "efab5678-1234-90cd-ab12-cd34567890ef"
], - "page_size": 3,
- "total_elements": 12,
- "total_pages": 4,
- "current_page": 1
}Create a new game owned by the specified user.
Note:
title must not exceed 100 characters. description must not exceed 1024 characters.JSON object containing the new game's details.
| title required | string <= 100 characters The title of the new game. |
| description required | string <= 1024 characters A short description of the new game. |
| owner_id required | string <uuid> The UUID of the user creating the game. |
{- "title": "Mystic Maze",
- "description": "A cooperative board game where players navigate a shifting labyrinth.",
- "owner_id": "a47621ad-59bf-4674-a6f2-5e7d9abf9faf"
}"64a75816-1f79-4c6d-806c-2e6667b74d2b"Retrieve detailed information for a specific game.
Note:
public flag indicating whether the game is publicly visible. public: true appear in other users' timelines.| game_id required | string Example: 82633550-7105-40b8-aef1-9bd640a5a606 The UUID of the game to retrieve. |
{- "title": "Mystic Maze",
- "description": "A cooperative board game where players navigate a shifting labyrinth.",
- "public": true,
- "owner_id": "77cdb643-94a7-419f-9916-970c79d012e8"
}Partially update one or more fields of a specific game.
Note:
title, description, and public may be provided. title must not exceed 100 characters. description must not exceed 1024 characters. public flag can only be set to true if the game already has a board and rules defined.| game_id required | string Example: 64a75816-1f79-4c6d-806c-2e6667b74d2b The UUID of the game to update. |
JSON object containing one or more fields to update.
| title | string <= 100 characters The new title of the game. |
| description | string <= 1024 characters The new description of the game. |
| public | boolean Set to |
{- "title": "Mystic Maze: Deluxe Edition",
- "public": true
}Add or replace the board of the specified game. This operation is idempotent and will fully replace any existing board.
Requirements:
height and width must each be an integer between 5 and 20. start and end objects must each contain valid x and y coordinates within the board's dimensions. x and y coordinates (0-indexed) within the board's bounds. color value of red, green, blue, or yellow. type value of plain, star, circle, or square.start and end positions.| game_id required | string Example: 64a75816-1f79-4c6d-806c-2e6667b74d2b The UUID of the game whose board is being added or updated. |
JSON object describing the new or updated board.
| height required | integer [ 5 .. 20 ] Height of the board. |
| width required | integer [ 5 .. 20 ] Width of the board. |
required | object Coordinates of the start piece. |
required | object Coordinates of the end piece. |
required | Array of objects Array of board pieces. |
{- "height": 8,
- "width": 8,
- "start": {
- "x": 0,
- "y": 0
}, - "end": {
- "x": 7,
- "y": 7
}, - "pieces": [
- {
- "x": 1,
- "y": 1,
- "color": "red",
- "type": "star"
}, - {
- "x": 2,
- "y": 3,
- "color": "green",
- "type": "circle"
}, - {
- "x": 4,
- "y": 5,
- "color": "blue",
- "type": "square"
}
]
}Retrieve the board of the specified game, including its dimensions, start and end positions, and all board pieces.
| game_id required | string Example: 64a75816-1f79-4c6d-806c-2e6667b74d2b The UUID of the game whose board is being retrieved. |
{- "height": 8,
- "width": 8,
- "start": {
- "x": 0,
- "y": 0
}, - "end": {
- "x": 7,
- "y": 7
}, - "pieces": [
- {
- "x": 1,
- "y": 1,
- "color": "red",
- "type": "star"
}, - {
- "x": 2,
- "y": 3,
- "color": "green",
- "type": "circle"
}, - {
- "x": 4,
- "y": 5,
- "color": "blue",
- "type": "square"
}
]
}Add or replace the list of rules for the specified game.
Note:
| game_id required | string Example: 64a75816-1f79-4c6d-806c-2e6667b74d2b The UUID of the game whose rules are being added or updated. |
JSON array of rules to assign to the game.
[- "Players can move up to two tiles at a time.",
- "Blue tiles make players return to start.",
- "Star tiles skip the player's next turn."
]Retrieve the list of rules for the specified game.
| game_id required | string Example: 64a75816-1f79-4c6d-806c-2e6667b74d2b The UUID of the game whose rules are being retrieved. |
[- "Players can move up to two tiles at a time.",
- "Blue tiles make players return to start.",
- "Star tiles skip the player's next turn."
]Register a new user.
Note:
Request body for adding a new user.
| username required | string <= 20 characters The username of the new user. |
| password required | string <= 256 characters The password of the new user. |
{- "username": "johndoe",
- "password": "password123"
}{- "jwt_token": "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SnliMnhsSWpwN0lsVnpaWElpT2lKaFpHRm1JbjBzSW1WNGNDSTZNVGN6T0RFNE1UTTNNWDAuZExmYWJFVnJ6VXI1eTgwNTlFTUl0dC1VLXhoc2lQWlFYU3R5WUo4Q29hYw==",
- "refresh_token": "ez6K5tTdum8rAOdCV4vdoyuSxDeALroCDrJyR4n8JcMtJIHWbH3IJfz1cWp0mx5k",
- "user_id": "2c5f1d4d-3b9d-4b9d-3b9d-4b9d3b9d3b9d"
}Login with a user's credentials.
Request body for logging in a user.
| username required | string The username of the user, |
| password required | string The password of the user. |
{- "username": "johndoe",
- "password": "password123"
}{- "jwt_token": "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SnliMnhsSWpwN0lsVnpaWElpT2lKaFpHRm1JbjBzSW1WNGNDSTZNVGN6T0RFNE1UTTNNWDAuZExmYWJFVnJ6VXI1eTgwNTlFTUl0dC1VLXhoc2lQWlFYU3R5WUo4Q29hYw==",
- "refresh_token": "ez6K5tTdum8rAOdCV4vdoyuSxDeALroCDrJyR4n8JcMtJIHWbH3IJfz1cWp0mx5k",
- "user_id": "2c5f1d4d-3b9d-4b9d-3b9d-4b9d3b9d3b9d"
}Invalidate a user's refresh token, effectively logging them out.
| refresh_token required | string The refresh token to invalidate. |
{- "refresh_token": "eKxEETPjUDfvvY1oxcCRboHn88GsggBoyoyiSAUJ37FAeZquv8BwruAl6I6Pc8wJ"
}Exchange a valid refresh token for a new access token and a rotated refresh token.
The old token becomes invalid after refreshing.
Request body containing the refresh token.
| refresh_token required | string The refresh token issued during login or previous refresh. |
{- "refresh_token": "ez6K5tTdum8rAOdCV4vdoyuSxDeALroCDrJyR4n8JcMtJIHWbH3IJfz1cWp0mx5k"
}{- "jwt_token": "ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SnliMnhsSWpwN0lsVnpaWElpT2lKaFpHRm1JbjBzSW1WNGNDSTZNVGN6T0RFNE1UTTNNWDAuZExmYWJFVnJ6VXI1eTgwNTlFTUl0dC1VLXhoc2lQWlFYU3R5WUo4Q29hYw==",
- "refresh_token": "ez6K5tTdum8rAOdCV4vdoyuSxDeALroCDrJyR4n8JcMtJIHWbH3IJfz1cWp0mx5k",
- "user_id": "2c5f1d4d-3b9d-4b9d-3b9d-4b9d3b9d3b9d"
}Retrieve a paginated list of user IDs (UUIDs).
Search:
search query parameter is provided, only users whose usernames start with the given string (case-insensitive) will be returned. search parameter is provided, all user IDs are returned.Pagination:
page controls which page of results is returned.size controls how many user IDs are included per page.| search | string Example: search=alex Filter users by username prefix (case-insensitive). |
| page | integer Default: 1 Example: page=1 The page number to retrieve (starting at 1). |
| size | integer Default: 10 Example: size=10 Number of items per page. |
{- "users": [
- "abcd1234-ef56-7890-ab12-cd34567890ef",
- "1234abcd-5678-90ef-ab12-cd34567890ef",
- "efab5678-1234-90cd-ab12-cd34567890ef"
], - "page_size": 3,
- "total_elements": 25,
- "total_pages": 9,
- "current_page": 1
}Retrieve profile information for a user by their internal UUID.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose profile is being retrieved. |
{- "username": "john.doe",
- "description": "Avid board game designer and weekend hiker."
}Replace all profile information for the specified user.
Note:
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose profile is being updated. |
New profile information to assign to the user.
| username required | string <= 20 characters The username of the user. |
| description required | string <= 512 characters A short "about me" text to display on the user’s profile. |
{- "username": "john.doe",
- "description": "Avid board game designer and weekend hiker."
}Retrieve the profile picture of a user by their internal UUID.
The image is returned as binary data (e.g., JPEG or PNG).
Optional query parameters can be used to request a specific size; if omitted, the original image size is returned.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose profile picture is being retrieved. |
| height | integer [ 1 .. 1000 ] Desired height of the image in pixels. Defaults to the original image height if not provided. |
| width | integer [ 1 .. 1000 ] Desired width of the image in pixels. Defaults to the original image width if not provided. |
Upload and replace the profile picture for the specified user.
Note:
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose profile picture is being updated. |
JPEG or PNG image to set as the new profile picture.
Retrieve a list of user IDs representing the users who are following the specified user.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose followers list is being retrieved. |
[- "550e8400-e29b-41d4-a716-4466554403g71",
- "09fe5ae2-1c52-44fb-ab99-9e24807322bf",
- "7db4de36-17a2-4dd4-8a45-83c2399e3c18"
]Retrieve a list of user IDs representing the users that the specified user is following.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose list of followed users is being retrieved. |
[- "84e66bd2-f511-42ec-89db-be23b598e4c7",
- "74d8b3d5-0c5d-49e7-b46b-7547f8647e77",
- "d0280967-f710-45c0-a9c4-09cb358b74b8"
]Make the specified user follow the target user.
If the user is already following the target, this operation is idempotent.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf UUID of the following user. |
UUID of the user to follow
| target_id required | string <uuid> |
{- "target_id": "a47621ad-59bf-4674-a6f2-5e7d9abf9faf"
}Make the specified user unfollow the target user.
If the user is not currently following the target, this operation is idempotent.
| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf UUID of the following user. |
| target_id required | string UUID of the user to unfollow. |
Retrieve a paginated list of game IDs representing the games that should appear in the specified user's timeline.
A user's timeline is calculated by merging the IDs of all the public games of the users that the specified user is following, ordered by most recent.
Note:
page controls which page of results is returned. size controls how many game IDs are included per page.| user_id required | string <uuid> Example: a47621ad-59bf-4674-a6f2-5e7d9abf9faf The UUID of the user whose timeline is being retrieved. |
| page | integer Default: 1 Example: page=1 The page number to retrieve (starting at 1). |
| size | integer Default: 10 Example: size=10 Number of items per page. |
{- "games": [
- "1a2b3c4d-5678-90ab-cdef-1234567890ab",
- "fedcba09-8765-4321-ba98-76543210fedc",
- "0a1b2c3d-4e5f-6789-abcd-ef0123456789"
], - "page_size": 3,
- "total_elements": 7,
- "total_pages": 3,
- "current_page": 1
}