NAV
bash javascript

Introduction

Welcome to the documentation for osu!api v2. You can use this API to get information on various circles and those who click them.

Note that while we endeavour to keep this documentation up to date, consider it a work-in-progress and note that it will likely contain errors.

If you notice any errors in the documentation or encounter problems using the API, please check for (or create if necessary) issues on GitHub. Alternatively, you can ask in #osu-web on the development discord.

Code examples are provided in the dark area to the right, you can use the tabs at the top of the page to switch between bash and javascript samples.

If you use Postman, you can download a collection here.

Terms of Use

Use the API for good. Don't overdo it. If in doubt, ask before (ab)using :). this section may expand as necessary.

Current rate limit is set at an insanely high 1200 requests per minute, with burst capability of up to 200 beyond that. If you require more, you probably fall into the above category of abuse. If you are doing more than 60 requests a minute, you should probably give peppy a yell.

Endpoint

Base URL

The base URL is: https://osu.ppy.sh/api/[version]/

API Versions

This is combined with the base endpoint to determine where requests should be sent.

Version Status
v2 current (not yet public, consider unstable and expect breaking changes)
v1 legacy api provided by the old site, will be deprecated soon

Authentication

Routes marked with the OAuth label require a valid OAuth2 token for access.

More information about applications you have registered and granted permissions to can be found here.

The API supports the following grant types:

Before you can use the osu!api, you will need to

  1. have registered an OAuth Application.
  2. acquire an access token by either:
    • authorizing users for your application;
    • requesting Client Credentials token.

Registering an OAuth application

Before you can get an OAuth token, you will need to register an OAuth application on your account settings page

To register an OAuth application you will need to provide the:

Name Description
Application Name This is the name that will be visible to users of your application. The name of your application cannot be changed.
Application Callback URL The URL in your application where users will be sent after authorization.

The Application Callback URL is required when for using Authorization Codes. This may be left blank if you are only using Client Credentials Grants.

Your new OAuth application will have a Client ID and Client Secret; the Client Secret is like a password for your OAuth application, it should be kept private and do not share it with anyone else.

Authorization Code Grant

The flow to authorize users for your application is:

  1. Requesting authorization from users
  2. Users are redirected back to your site
  3. Your application accesses the API with the user's access token

Request authorization from a user

To obtain an access token, you must first get an authorization code that is created when a user grants permissions to your application. To request permission from the user, they should be redirected to:

GET https://osu.ppy.sh/oauth/authorize

Parameters

Name Type Description
client_id number The Client ID you received when you registered
redirect_uri string The URL in your application where users will be sent after authorization. This must match the registered Application Callback URL exactly.
response_type string This should always be code when requesting authorization.
scope string A space-delimited string of scopes.
state string Data that will be returned when a temporary code is issued. It can be used to provide a token for protecting against cross-site request forgery attacks.

User is redirected back to your site

If the user accepts your request, they will be redirected back to your site with a temporary single-use code contained in the URL parameter. If a state value was provided in the previous request, it will be returned here.

Exchange this code for an access token:

fetch("https://osu.ppy.sh/oauth/token", {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        "grant_type": "authorization_code",
        "client_id": 1,
        "client_secret": "secret",
        "redirect_uri": "https://notarealaddress.local/oauth/osu",
        "code": "code"
    })
})
.then(response => {
    return response.json();
});

POST https://osu.ppy.sh/oauth/token

Parameters

Name Type Description
client_id number The client ID of your application.
client_secret string The client secret of your application.
code string The code you received.
grant_type string This must always be authorization_code
redirect_uri string The URL in your application where users will be sent after authorization.
{
    "token_type": "Bearer",
    "expires_in": 86400,
    "access_token": "verylongstring",
    "refresh_token": "anotherlongstring",
}

Successful requests will be issued an access token:

Name Type Description
token_type string The type of token, this should always be Bearer.
expires_in number The number of seconds the token will be valid for.
access_token string The access token.
refresh_token string The refresh token.

Client Credentials Grant

The client credential flow provides a way for developers to get access tokens that do not have associated user permissions; as such, these tokens are considered as guest users.

Example for requesting Client Credentials token:

fetch("https://osu.ppy.sh/oauth/token", {
    method: 'post',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        "grant_type": "client_credentials",
        "client_id": 1,
        "client_secret": "secret",
        "scope": "public"
    })
})
.then(response => {
    return response.json();
});

POST https://osu.ppy.sh/oauth/token

Parameters

Name Type Description
client_id number The Client ID you received when you registered
client_secret string The client secret of your application.
grant_type string This must always be client_credentials
scope string Must be public; other scopes have no meaningful effect.
{
    "token_type": "Bearer",
    "expires_in": 86400,
    "access_token": "verylongstring",
}

Successful requests will be issued an access token:

Name Type Description
token_type string The type of token, this should always be Bearer.
expires_in number The number of seconds the token will be valid for.
access_token string The access token.

Using the access token to access the API

With the access token, you can make requests to osu!api on behalf of a user.

The token should be included in the header of requests to the API.

Authorization: Bearer {{token}}

# With shell, you can just pass the correct header with each request
curl "https://osu.ppy.sh/api/[version]/[endpoint]"
  -H "Authorization: Bearer {{token}}"
// This javascript example uses fetch()
fetch("https://osu.ppy.sh/api/[version]/[endpoint]", {
    headers: {
      Authorization: 'Bearer {{token}}'
    }
});

Make sure to replace {{token}} with your OAuth2 token.

Resource Owner

The Resource Owner is the user that a token acts on behalf of.

For Authorization Code Grant tokens, the Resource Owner is the user authorizing the token.

Client Credentials Grant tokens do not have a Resource Owner (i.e. is a guest user), unless they have been granted the bot scope. The Resource Owner of tokens with the bot scope is the owner of the OAuth Application that was granted the token. Currently, only Chat Bots are allowed to request the bot scope.

Scopes

The following scopes are currently supported:

Name Description
bot Chat Bot and Client Credentials Grant exclusive scope.
chat.write Allows sending chat messages on a user's behalf; exclusive to Chat Bots
forum.write Allows creating and editing forum posts on a user's behalf.
friends.read Allows reading of the user's friend list.
identify Allows reading of the public profile of the user (/me).
public Allows reading of publicly available data on behalf of the user.

identify is the default scope for the Authorization Code Grant and always implicitly provided. The Client Credentials Grant does not currently have any default scopes.

Routes marked with lazer are intended for use by the osu!lazer client and not currently available for use with Authorization Code or Client Credentials grants.

Managing OAuth applications

Your account settings page will show your registered OAuth applications, and all the OAuth applications you have granted permissions to.

Reset Client Secret

You can generate a new Client Secret by choosing to "Reset client secret", however, this will disable all access tokens issued for the application.

Changelog

For a full list of changes, see the Changelog on the site.

Breaking Changes

2021-02-25

2020-09-08

2020-08-28

2020-05-01

2020-02-18

2019-10-09

2019-07-18

Beatmaps

Lookup Beatmap

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/lookup?checksum=culpa&filename=culpa&id=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/lookup");

let params = {
    "checksum": "culpa",
    "filename": "culpa",
    "id": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

"See Beatmap object section"

Returns beatmap.

OAuth public

HTTP Request

GET /beatmaps/lookup

Query Parameters

Parameter Status Description
checksum optional A beatmap checksum.
filename optional A filename to lookup.
id optional A beatmap ID to lookup.

Response format

See Get Beatmap

Get a User Beatmap score

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/culpa/scores/users/culpa?mode=culpa&mods=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/culpa/scores/users/culpa");

let params = {
    "mode": "culpa",
    "mods": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Return a User's score on a Beatmap

OAuth public

HTTP Request

GET /beatmaps/{beatmap}/scores/users/{user}

URL Parameters

Parameter Status Description
beatmap required Id of the Beatmap.
user required Id of the User.

Query Parameters

Parameter Status Description
mode optional The GameMode to get scores for.
mods optional An array of matching Mods, or none // TODO.

Response Format

Returns BeatmapUserScore

The position returned depends on the requested mode and mods.

Get Beatmap scores

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/culpa/scores?mode=culpa&mods=culpa&type=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/culpa/scores");

let params = {
    "mode": "culpa",
    "mods": "culpa",
    "type": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Returns the top scores for a beatmap

OAuth public

HTTP Request

GET /beatmaps/{beatmap}/scores

URL Parameters

Parameter Status Description
beatmap required Id of the Beatmap.

Query Parameters

Parameter Status Description
mode optional The GameMode to get scores for.
mods optional An array of matching Mods, or none // TODO.
type optional Beatmap score ranking type // TODO.

Response Format

Returns BeatmapScores

Get Beatmap

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/culpa");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

"See Beatmap object section."

Gets beatmap data for the specified beatmap ID.

OAuth public

HTTP Request

GET /beatmaps/{beatmap}

URL Parameters

Parameter Status Description
beatmap required The ID of the beatmap.

Response format

Returns Beatmap object. Following attributes are included in the response object when applicable,

Attribute Notes
beatmapset Includes ratings property.
failtimes
max_combo

Beatmapset Discussions

Get Beatmapset Discussion Posts

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/discussions/posts?beatmapset_discussion_id=culpa&limit=12&page=12&sort=culpa&user=culpa&with_deleted=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/discussions/posts");

let params = {
    "beatmapset_discussion_id": "culpa",
    "limit": "12",
    "page": "12",
    "sort": "culpa",
    "user": "culpa",
    "with_deleted": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Returns the posts of beatmapset discussions.

OAuth public

HTTP Request

GET /beatmapsets/discussions/posts

Query Parameters

Parameter Status Description
beatmapset_discussion_id optional id of the BeatmapsetDiscussion.
limit optional Maximum number of results.
page optional Search result page.
sort optional id_desc for newest first; id_asc for oldest first. Defaults to id_desc.
user optional The id of the User.
with_deleted optional This param has no effect as api calls do not currently receive group permissions.

Response Format

Field Type Description
beatmapsets BeatmapsetCompact
cursor Cursor
posts BeatmapsetDiscussionPost[]
users UserCompact

Get Beatmapset Discussion Votes

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/discussions/votes?beatmapset_discussion_id=culpa&limit=12&page=12&receiver=culpa&score=culpa&sort=culpa&user=culpa&with_deleted=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/discussions/votes");

let params = {
    "beatmapset_discussion_id": "culpa",
    "limit": "12",
    "page": "12",
    "receiver": "culpa",
    "score": "culpa",
    "sort": "culpa",
    "user": "culpa",
    "with_deleted": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Returns the votes given to beatmapset discussions.

OAuth public

HTTP Request

GET /beatmapsets/discussions/votes

Query Parameters

Parameter Status Description
beatmapset_discussion_id optional id of the BeatmapsetDiscussion.
limit optional Maximum number of results.
page optional Search result page.
receiver optional The id of the User receiving the votes.
score optional 1 for up vote, -1 for down vote.
sort optional id_desc for newest first; id_asc for oldest first. Defaults to id_desc.
user optional The id of the User giving the votes.
with_deleted optional This param has no effect as api calls do not currently receive group permissions.

Response Format

Field Type Description
cursor Cursor
discussions BeatmapsetDiscussion
users UserCompact
votes BeatmapsetDiscussionVote[]

Get Beatmapset Discussions

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/discussions?beatmap_id=culpa&beatmapset_id=culpa&beatmapset_status=culpa&limit=12&message_types%5B%5D=culpa&only_unresolved=culpa&page=12&sort=culpa&user=culpa&with_deleted=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/discussions");

let params = {
    "beatmap_id": "culpa",
    "beatmapset_id": "culpa",
    "beatmapset_status": "culpa",
    "limit": "12",
    "message_types[]": "culpa",
    "only_unresolved": "culpa",
    "page": "12",
    "sort": "culpa",
    "user": "culpa",
    "with_deleted": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Returns a list of beatmapset discussions.

OAuth public

HTTP Request

GET /beatmapsets/discussions

Query Parameters

Parameter Status Description
beatmap_id optional id of the Beatmap.
beatmapset_id optional id of the Beatmapset.
beatmapset_status optional One of all, ranked, qualified, disqualified, never_qualified. Defaults to all. TODO: better descriptions.
limit optional Maximum number of results.
message_types[] optional suggestion, problem, mapper_note, praise, hype, review. Blank defaults to all types. TODO: better descriptions.
only_unresolved optional true to show only unresolved issues; false, otherwise. Defaults to false.
page optional Search result page.
sort optional id_desc for newest first; id_asc for oldest first. Defaults to id_desc.
user optional The id of the User.
with_deleted optional This param has no effect as api calls do not currently receive group permissions.

Response Format

Field Type Description
beatmaps Beatmap[] List of beatmaps associated with the discussions returned.
cursor Cursor
discussions BeatmapsetDiscussion[] List of discussions according to sort order.
included_discussions BeatmapsetDiscussion[] Additional discussions related to discussions.
reviews_config.max_blocks number Maximum number of blocks allowed in a review.
users UserCompact[] List of users associated with the discussions returned.

Chat

Create New PM

curl -X POST "https://osu.ppy.sh/api/v2/chat/new" \

    -H "Content-Type: application/json" \
    -d '{"target_id":12,"message":"culpa","is_action":false}'
const url = new URL("https://osu.ppy.sh/api/v2/chat/new");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "target_id": 12,
    "message": "culpa",
    "is_action": false
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

null

This endpoint allows you to create a new PM channel.

OAuth chat.write

HTTP Request

POST /chat/new

Body Parameters

Parameter Type Status Description
target_id integer required user_id of user to start PM with
message string required message to send
is_action boolean required whether the message is an action

Response Format

Field Type
new_channel_id channel_id of newly created ChatChannel
presence array of ChatChannel
message the sent ChatMessage

Get Updates

curl -X GET -G "https://osu.ppy.sh/api/v2/chat/updates?since=culpa&channel_id=culpa&limit=12" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/updates");

let params = {
    "since": "culpa",
    "channel_id": "culpa",
    "limit": "12",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "presence": [
        {
            "channel_id": 5,
            "name": "#osu",
            "description": "The official osu! channel (english only).",
            "type": "public",
            "last_read_id": 9150005005,
            "last_message_id": 9150005005
        },
        {
            "channel_id": 12345,
            "type": "PM",
            "name": "peppy",
            "icon": "https:\/\/a.ppy.sh\/2?1519081077.png",
            "users": [
                2,
                102
            ],
            "last_read_id": 9150001235,
            "last_message_id": 9150001234
        }
    ],
    "messages": [
        {
            "message_id": 9150005004,
            "sender_id": 2,
            "channel_id": 5,
            "timestamp": "2018-07-06T06:33:34+00:00",
            "content": "i am a lazerface",
            "is_action": 0,
            "sender": {
                "id": 2,
                "username": "peppy",
                "profile_colour": "#3366FF",
                "avatar_url": "https:\/\/a.ppy.sh\/2?1519081077.png",
                "country_code": "AU",
                "is_active": true,
                "is_bot": false,
                "is_online": true,
                "is_supporter": true
            }
        },
        {
            "message_id": 9150005005,
            "sender_id": 102,
            "channel_id": 5,
            "timestamp": "2018-07-06T06:33:42+00:00",
            "content": "uh ok then",
            "is_action": 0,
            "sender": {
                "id": 102,
                "username": "nekodex",
                "profile_colour": "#333333",
                "avatar_url": "https:\/\/a.ppy.sh\/102?1500537068",
                "country_code": "AU",
                "is_active": true,
                "is_bot": false,
                "is_online": true,
                "is_supporter": true
            }
        }
    ]
}

This endpoint returns new messages since the given message_id along with updated channel 'presence' data.

OAuth lazer

HTTP Request

GET /chat/updates

Query Parameters

Parameter Status Description
since required The message_id of the last message to retrieve messages since
channel_id optional If provided, will only return messages for the given channel
limit optional number of messages to return (max of 50)

Response Format

Field Type
presence array of ChatChannel
messages array of ChatMessage

Get Channel Messages

curl -X GET -G "https://osu.ppy.sh/api/v2/chat/channels/1/messages?limit=12&since=culpa&until=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1/messages");

let params = {
    "limit": "12",
    "since": "culpa",
    "until": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "message_id": 9150005004,
        "sender_id": 2,
        "channel_id": 5,
        "timestamp": "2018-07-06T06:33:34+00:00",
        "content": "i am a lazerface",
        "is_action": 0,
        "sender": {
            "id": 2,
            "username": "peppy",
            "profile_colour": "#3366FF",
            "avatar_url": "https:\/\/a.ppy.sh\/2?1519081077.png",
            "country_code": "AU",
            "is_active": true,
            "is_bot": false,
            "is_online": true,
            "is_supporter": true
        }
    },
    {
        "message_id": 9150005005,
        "sender_id": 102,
        "channel_id": 5,
        "timestamp": "2018-07-06T06:33:42+00:00",
        "content": "uh ok then",
        "is_action": 0,
        "sender": {
            "id": 102,
            "username": "nekodex",
            "profile_colour": "#333333",
            "avatar_url": "https:\/\/a.ppy.sh\/102?1500537068",
            "country_code": "AU",
            "is_active": true,
            "is_bot": false,
            "is_online": true,
            "is_supporter": true
        }
    }
]

This endpoint returns the chat messages for a specific channel.

OAuth lazer

HTTP Request

GET /chat/channels/{channel}/messages

URL Parameters

Parameter Status Description
channel_id required The ID of the channel to retrieve messages for

Query Parameters

Parameter Status Description
limit optional number of messages to return (max of 50)
since optional messages after the specified message id will be returned
until optional messages up to but not including the specified message id will be returned

Response Format

Returns an array of ChatMessage

Send Message to Channel

curl -X POST "https://osu.ppy.sh/api/v2/chat/channels/1/messages?channel_id=culpa" \

    -H "Content-Type: application/json" \
    -d '{"message":"culpa","is_action":false}'
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1/messages");

let params = {
    "channel_id": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "message": "culpa",
    "is_action": false
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "message_id": 9150005004,
    "sender_id": 2,
    "channel_id": 5,
    "timestamp": "2018-07-06T06:33:34+00:00",
    "content": "i am a lazerface",
    "is_action": 0,
    "sender": {
        "id": 2,
        "username": "peppy",
        "profile_colour": "#3366FF",
        "avatar_url": "https:\/\/a.ppy.sh\/2?1519081077.png",
        "country_code": "AU",
        "is_active": true,
        "is_bot": false,
        "is_online": true,
        "is_supporter": true
    }
}

This endpoint returns the chat messages for a specific channel.

OAuth lazer

HTTP Request

POST /chat/channels/{channel}/messages

Body Parameters

Parameter Type Status Description
message string required message to send
is_action boolean required whether the message is an action

Query Parameters

Parameter Status Description
channel_id required The channel_id of the channel to send message to

Response Format

The sent ChatMessage

Join Channel

curl -X PUT "https://osu.ppy.sh/api/v2/chat/channels/1/users/1" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1/users/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "channel_id": 5,
    "name": "#osu",
    "description": "The official osu! channel (english only).",
    "type": "public"
}

This endpoint allows you to join a public channel.

OAuth lazer

HTTP Request

PUT /chat/channels/{channel}/users/{user}

Response Format

Returns the joined ChatChannel.

Leave Channel

curl -X DELETE "https://osu.ppy.sh/api/v2/chat/channels/1/users/1" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1/users/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "DELETE",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (204):

{}

This endpoint allows you to leave a public channel.

OAuth lazer

HTTP Request

DELETE /chat/channels/{channel}/users/{user}

Response Format

empty response

Mark Channel as Read

curl -X PUT "https://osu.ppy.sh/api/v2/chat/channels/1/mark-as-read/1?channel_id=culpa&message_id=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1/mark-as-read/1");

let params = {
    "channel_id": "culpa",
    "message_id": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (204):

{}

This endpoint marks the channel as having being read up to the given message_id.

OAuth lazer

HTTP Request

PUT /chat/channels/{channel}/mark-as-read/{message}

Query Parameters

Parameter Status Description
channel_id required The channel_id of the channel to mark as read
message_id required The message_id of the message to mark as read up to

Response Format

empty response

Get Channel List

curl -X GET -G "https://osu.ppy.sh/api/v2/chat/channels" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "channel_id": 5,
        "name": "#osu",
        "description": "The official osu! channel (english only).",
        "type": "public"
    }
]

This endpoint returns a list of all joinable public channels.

OAuth lazer

HTTP Request

GET /chat/channels

Response Format

Returns an array of ChatChannel

Create Channel

curl -X POST "https://osu.ppy.sh/api/v2/chat/channels" \

    -H "Content-Type: application/json" \
    -d '{"type":"culpa","target_id":12}'
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "type": "culpa",
    "target_id": 12
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "channel_id": 1,
    "name": "#pm_1-2",
    "description": "",
    "type": "PM",
    "recent_messages": [
        {
            "message_id": 1,
            "sender_id": 1,
            "channel_id": 1,
            "timestamp": "2020-01-01T00:00:00+00:00",
            "content": "Happy new year",
            "is_action": false
        }
    ]
}

This endpoint creates a new channel if doesn't exist and joins it. Currently only for rejoining existing PM channels which the user has left.

OAuth lazer

HTTP Request

POST /chat/channels

Body Parameters

Parameter Type Status Description
type string required channel type (currently only supports "PM")
target_id integer optional target user id for type PM

Response Format

Returns ChatChannel with recent_messages attribute. Note that if there's no existing PM channel, most of the fields will be blank. In that case, send a message instead to create the channel.

Get Channel

curl -X GET -G "https://osu.ppy.sh/api/v2/chat/channels/1" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/channels/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "channel": {
        "channel_id": 1337,
        "name": "test channel",
        "description": "wheeeee",
        "icon": "\/images\/layout\/avatar-guest@2x.png",
        "type": "PM",
        "first_message_id": 10,
        "last_read_id": 9150005005,
        "last_message_id": 9150005005,
        "moderated": false,
        "users": [
            2,
            102
        ]
    },
    "users": [
        {
            "id": 2,
            "username": "peppy",
            "profile_colour": "#3366FF",
            "avatar_url": "https:\/\/a.ppy.sh\/2?1519081077.png",
            "country_code": "AU",
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": true,
            "is_supporter": true
        },
        {
            "id": 102,
            "username": "lambchop",
            "profile_colour": "#3366FF",
            "icon": "\/images\/layout\/avatar-guest@2x.png",
            "country_code": "NZ",
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": false
        }
    ]
}

Gets details of a chat channel.

OAuth lazer

HTTP Request

GET /chat/channels/{channel}

Response Format

Field Type Description
channel ChatChannel
users UserCompact Users are only visible for PM channels.

Comments

Get Comments

curl -X GET -G "https://osu.ppy.sh/api/v2/comments?commentable_type=culpa&commentable_id=culpa&cursor=culpa&parent_id=culpa&sort=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/comments");

let params = {
    "commentable_type": "culpa",
    "commentable_id": "culpa",
    "cursor": "culpa",
    "parent_id": "culpa",
    "sort": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (422):

{
    "error": ""
}

Returns a list comments and their replies up to 2 levels deep.

HTTP Request

GET /comments

Query Parameters

Parameter Status Description
commentable_type optional The type of resource to get comments for.
commentable_id optional The id of the resource to get comments for.
cursor optional Pagination option. See CommentSort for detail. The format follows Cursor except it's not currently included in the response.
parent_id optional Limit to comments which are reply to the specified id. Specify 0 to get top level comments.
sort optional Sort option as defined in CommentSort. Defaults to new for guests and user-specified default when authenticated.

Response Format

Returns CommentBundle.

pinned_comments is only included when commentable_type and commentable_id are specified.

Post a new comment

curl -X POST "https://osu.ppy.sh/api/v2/comments?comment%5Bcommentable_id%5D=culpa&comment%5Bcommentable_type%5D=culpa&comment%5Bmessage%5D=culpa&comment%5Bparent_id%5D=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/comments");

let params = {
    "comment.commentable_id": "culpa",
    "comment.commentable_type": "culpa",
    "comment.message": "culpa",
    "comment.parent_id": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Posts a new comment to a comment thread.

OAuth lazer

HTTP Request

POST /comments

Query Parameters

Parameter Status Description
comment.commentable_id optional Resource ID the comment thread is attached to
comment.commentable_type optional Resource type the comment thread is attached to
comment.message optional Text of the comment
comment.parent_id optional The id of the comment to reply to, null if not a reply

Response Format

Returns CommentBundle

Get a Comment

curl -X GET -G "https://osu.ppy.sh/api/v2/comments/1" 
const url = new URL("https://osu.ppy.sh/api/v2/comments/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "comments": [
        {
            "id": 1,
            "parent_id": null,
            "user_id": 2,
            "pinned": false,
            "replies_count": 7,
            "votes_count": 8,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2018-09-11T08:45:49+00:00",
            "updated_at": "2021-05-08T03:09:37+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "first... well kind of",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">first... well kind of<\/p>\n<\/div>"
        }
    ],
    "has_more": false,
    "has_more_id": 1,
    "included_comments": [
        {
            "id": 1603455,
            "parent_id": 1,
            "user_id": 13661784,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2021-05-08T03:09:24+00:00",
            "updated_at": "2021-05-08T03:09:24+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "comment #1",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">comment #1<\/p>\n<\/div>"
        },
        {
            "id": 1379663,
            "parent_id": 1,
            "user_id": 8256770,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2020-12-28T15:47:01+00:00",
            "updated_at": "2020-12-28T15:47:01+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "FIRST OSU COMMENT",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">FIRST OSU COMMENT<\/p>\n<\/div>"
        },
        {
            "id": 1235036,
            "parent_id": 1,
            "user_id": 18230139,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2020-09-13T15:57:38+00:00",
            "updated_at": "2020-09-13T15:57:38+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "coolio",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">coolio<\/p>\n<\/div>"
        },
        {
            "id": 1098904,
            "parent_id": 1,
            "user_id": 13094046,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2020-05-13T03:20:00+00:00",
            "updated_at": "2020-05-13T03:20:00+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "is it first comment?",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">is it first comment?<\/p>\n<\/div>"
        },
        {
            "id": 729728,
            "parent_id": 1,
            "user_id": 8218806,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2018-10-23T11:49:51+00:00",
            "updated_at": "2018-10-23T11:49:51+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "test",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">test<\/p>\n<\/div>"
        },
        {
            "id": 43743,
            "parent_id": 1,
            "user_id": 3027421,
            "pinned": false,
            "replies_count": 0,
            "votes_count": 0,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2018-09-11T08:57:18+00:00",
            "updated_at": "2018-09-11T08:57:18+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "Comment without disqus? What kind of sorcery is this ",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">Comment without disqus? What kind of sorcery is this<\/p>\n<\/div>"
        },
        {
            "id": 17686,
            "parent_id": 1,
            "user_id": 2,
            "pinned": false,
            "replies_count": 1,
            "votes_count": 1,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2018-09-11T08:50:55+00:00",
            "updated_at": "2019-01-31T17:25:50+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": ":)",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">:)<\/p>\n<\/div>"
        },
        {
            "id": 34354,
            "parent_id": 17686,
            "user_id": 2,
            "pinned": false,
            "replies_count": 4,
            "votes_count": 1,
            "commentable_type": "news_post",
            "commentable_id": 409,
            "legacy_name": null,
            "created_at": "2018-09-11T08:54:57+00:00",
            "updated_at": "2019-01-31T17:25:50+00:00",
            "deleted_at": null,
            "edited_at": null,
            "edited_by_id": null,
            "message": "goodbye disqus!",
            "message_html": "<div class='osu-md osu-md--comment'><p class=\"osu-md__paragraph\">goodbye disqus!<\/p>\n<\/div>"
        }
    ],
    "pinned_comments": [],
    "user_votes": [],
    "user_follow": false,
    "users": [
        {
            "avatar_url": "https:\/\/a.ppy.sh\/2?1537409912.jpeg",
            "country_code": "AU",
            "default_group": "default",
            "id": 2,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": true,
            "last_visit": "2021-05-12T11:08:39+00:00",
            "pm_friends_only": false,
            "profile_colour": "#3366FF",
            "username": "peppy"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/3027421?1605895879.jpeg",
            "country_code": "ID",
            "default_group": "bng",
            "id": 3027421,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": true,
            "last_visit": null,
            "pm_friends_only": false,
            "profile_colour": "#6B3FA0",
            "username": "Arzenvald"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/8218806?1531747763.jpeg",
            "country_code": "UA",
            "default_group": "default",
            "id": 8218806,
            "is_active": false,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": false,
            "last_visit": "2021-04-02T21:37:03+00:00",
            "pm_friends_only": false,
            "profile_colour": null,
            "username": "Dem0n"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/8256770?1620526278.jpeg",
            "country_code": "AR",
            "default_group": "default",
            "id": 8256770,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": false,
            "last_visit": "2021-05-12T09:49:12+00:00",
            "pm_friends_only": false,
            "profile_colour": null,
            "username": "_Illustrious_"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/13094046?1613962377.jpeg",
            "country_code": "KR",
            "default_group": "default",
            "id": 13094046,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": false,
            "last_visit": "2021-05-09T10:12:20+00:00",
            "pm_friends_only": false,
            "profile_colour": null,
            "username": "BlackSoftCow"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/13661784?1616742378.png",
            "country_code": "RU",
            "default_group": "default",
            "id": 13661784,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": false,
            "last_visit": "2021-05-12T04:53:28+00:00",
            "pm_friends_only": false,
            "profile_colour": null,
            "username": "ItsNeverLight"
        },
        {
            "avatar_url": "https:\/\/a.ppy.sh\/18230139?1620587360.jpeg",
            "country_code": "US",
            "default_group": "default",
            "id": 18230139,
            "is_active": true,
            "is_bot": false,
            "is_deleted": false,
            "is_online": false,
            "is_supporter": true,
            "last_visit": "2021-05-12T02:53:59+00:00",
            "pm_friends_only": false,
            "profile_colour": null,
            "username": "embed"
        }
    ],
    "sort": "new",
    "cursor": {
        "created_at": "2018-09-11T08:45:49.000000Z",
        "id": 1
    },
    "commentable_meta": [
        {
            "id": 409,
            "type": "news_post",
            "title": "Project Loved: Week of September 9th",
            "url": "https:\/\/osu.ppy.sh\/home\/news\/2018-09-10-project-loved-week-of-september-9th",
            "owner_id": null,
            "owner_title": null
        },
        {
            "title": "Deleted Item"
        }
    ]
}

Gets a comment and its replies up to 2 levels deep.

HTTP Request

GET /comments/{comment}

Response Format

Returns CommentBundle

Edit Comment

curl -X PUT "https://osu.ppy.sh/api/v2/comments/1?comment%5Bmessage%5D=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/comments/1");

let params = {
    "comment.message": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Edit an existing comment.

OAuth lazer

HTTP Request

PUT /comments/{comment}

PATCH /comments/{comment}

Query Parameters

Parameter Status Description
comment.message optional New text of the comment

Response Format

Returns CommentBundle

Delete Comment

curl -X DELETE "https://osu.ppy.sh/api/v2/comments/1" 
const url = new URL("https://osu.ppy.sh/api/v2/comments/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "DELETE",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Deletes the specified comment.

OAuth lazer

HTTP Request

DELETE /comments/{comment}

Response Format

Returns CommentBundle

Add Comment vote

curl -X POST "https://osu.ppy.sh/api/v2/comments/1/vote" 
const url = new URL("https://osu.ppy.sh/api/v2/comments/1/vote");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Upvotes a comment.

OAuth lazer

HTTP Request

POST /comments/{comment}/vote

Response Format

Returns CommentBundle

Remove Comment vote

curl -X DELETE "https://osu.ppy.sh/api/v2/comments/1/vote" 
const url = new URL("https://osu.ppy.sh/api/v2/comments/1/vote");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "DELETE",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Un-upvotes a comment.

OAuth lazer

HTTP Request

DELETE /comments/{comment}/vote

Response Format

Returns CommentBundle

Forum

Reply Topic

curl -X POST "https://osu.ppy.sh/api/v2/forums/topics/1/reply" \

    -H "Content-Type: application/json" \
    -d '{"body":"hello"}'
const url = new URL("https://osu.ppy.sh/api/v2/forums/topics/1/reply");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "body": "hello"
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Create a post replying to the specified topic.

OAuth forum.write

HTTP Request

POST /forums/topics/{topic}/reply

URL Parameters

Parameter Status Description
topic required Id of the topic to be replied to.

Body Parameters

Parameter Type Status Description
body string required Content of the reply post.

Response Format

ForumPost with body included.

Create Topic

curl -X POST "https://osu.ppy.sh/api/v2/forums/topics" \

    -H "Content-Type: application/json" \
    -d '{"body":"hello","forum_id":1,"title":"untitled","with_poll":true,"forum_topic_poll":{"options":"item A...","title":"my poll"}}'
const url = new URL("https://osu.ppy.sh/api/v2/forums/topics");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "body": "hello",
    "forum_id": 1,
    "title": "untitled",
    "with_poll": true,
    "forum_topic_poll": {
        "options": "item A...",
        "title": "my poll"
    }
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Create a new topic.

OAuth forum.write

HTTP Request

POST /forums/topics

Body Parameters

Parameter Type Status Description
body string required Content of the topic.
forum_id number required Forum to create the topic in.
title string required Title of the topic.
with_poll boolean optional Enable this to also create poll in the topic (default: false).
forum_topic_poll[hide_results] boolean optional Enable this to hide result until voting period ends (default: false).
forum_topic_poll[length_days] number optional Number of days for voting period. 0 means the voting will never ends (default: 0). This parameter is required if hide_results option is enabled.
forum_topic_poll[max_options] number optional Maximum number of votes each user can cast (default: 1).
forum_topic_poll[options] string required Newline-separated list of voting options. BBCode is supported.
forum_topic_poll[title] string required Title of the poll.
forum_topic_poll[vote_change] boolean optional Enable this to allow user to change their votes (default: false).

Response Format

Field Type Includes
topic ForumTopic
post ForumPost body

Get Topic and Posts

curl -X GET -G "https://osu.ppy.sh/api/v2/forums/topics/1" 
const url = new URL("https://osu.ppy.sh/api/v2/forums/topics/1");

let params = {
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "topic": {
        "id": 1,
        "...": "..."
    },
    "posts": [
        {
            "id": 1,
            "...": "..."
        },
        {
            "id": 2,
            "...": "..."
        }
    ],
    "cursor": {
        "post_id": 1
    },
    "sort": "id_asc"
}

Get topic and its posts.

OAuth public

HTTP Request

GET /forums/topics/{topic}

URL Parameters

Parameter Status Description
topic optional Id of the topic.

Query Parameters

Parameter Status Description
cursor optional Cursor for pagination.
sort optional Post sorting option. Valid values are id_asc (default) and id_desc.
limit optional Maximum number of posts to be returned (20 default, 50 at most).
start optional First post id to be returned with sort set to id_asc. This parameter is ignored if cursor is specified.
end optional First post id to be returned with sort set to id_desc. This parameter is ignored if cursor is specified.

Response Format

Field Type Notes
cursor Cursor
search Parameters used for current request excluding cursor.
posts ForumPost[] Includes body.
topic ForumTopic

Edit Topic

curl -X PUT "https://osu.ppy.sh/api/v2/forums/topics/1" \

    -H "Content-Type: application/json" \
    -d '{"forum_topic":{"topic_title":"titled"}}'
const url = new URL("https://osu.ppy.sh/api/v2/forums/topics/1");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "forum_topic": {
        "topic_title": "titled"
    }
}

fetch(url, {
    method: "PUT",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Edit topic. Only title can be edited through this endpoint.

OAuth forum.write

HTTP Request

PUT /forums/topics/{topic}

PATCH /forums/topics/{topic}

URL Parameters

Parameter Status Description
topic required Id of the topic.

Body Parameters

Parameter Type Status Description
forum_topic[topic_title] string optional New topic title.

Response Format

The edited ForumTopic.

Edit Post

curl -X PUT "https://osu.ppy.sh/api/v2/forums/posts/1" \

    -H "Content-Type: application/json" \
    -d '{"body":"hello"}'
const url = new URL("https://osu.ppy.sh/api/v2/forums/posts/1");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "body": "hello"
}

fetch(url, {
    method: "PUT",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Edit specified forum post.

OAuth forum.write

HTTP Request

PUT /forums/posts/{post}

PATCH /forums/posts/{post}

URL Parameters

Parameter Status Description
post required Id of the post.

Body Parameters

Parameter Type Status Description
body string required New post content in BBCode format.

Response Format

ForumPost with body included.

Home

Search

curl -X GET -G "https://osu.ppy.sh/api/v2/search?mode=all&query=hello&page=1" 
const url = new URL("https://osu.ppy.sh/api/v2/search");

let params = {
    "mode": "all",
    "query": "hello",
    "page": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Searches users and wiki pages.

OAuth public

HTTP Request

GET /search

Query Parameters

Parameter Status Description
mode optional Either all, user, or wiki_page. Default is all.
query optional Search keyword.
page optional Search result page. Ignored for mode all.

Response Format

Field Type Description
user SearchResult<UserCompact>? For all or user mode. Only first 100 results are accessible
wiki_page SearchResult<WikiPage>? For all or wiki_page mode

SearchResult<T>

Field Type Description
data T[]
total number

Multiplayer

Get User High Score

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores/users/culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores/users/culpa");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth lazer

HTTP Request

GET /rooms/{room}/playlist/{playlist}/scores/users/{user}

URL Parameters

Parameter Status Description
room required Id of the room.
playlist required Id of the playlist item.
user required User id.

Get Scores

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores?limit=culpa&sort=culpa&cursor=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores");

let params = {
    "limit": "culpa",
    "sort": "culpa",
    "cursor": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /rooms/{room}/playlist/{playlist}/scores

URL Parameters

Parameter Status Description
room required Id of the room.
playlist required Id of the playlist item.

Query Parameters

Parameter Status Description
limit optional Number of scores to be returned.
sort optional MultiplayerScoresSort parameter.
cursor optional MultiplayerScoresCursor parameter.

Get a Score

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores/culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/culpa/playlist/culpa/scores/culpa");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth lazer

HTTP Request

GET /rooms/{room}/playlist/{playlist}/scores/{score}

URL Parameters

Parameter Status Description
room required Id of the room.
playlist required Id of the playlist item.
score required Id of the score.

Notification

Get Notifications

curl -X GET -G "https://osu.ppy.sh/api/v2/notifications?max_id=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/notifications");

let params = {
    "max_id": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "has_more": true,
    "notifications": [
        {
            "id": 1,
            "name": "forum_topic_reply",
            "created_at": "2019-04-24T07:12:43+00:00",
            "object_type": "forum_topic",
            "object_id": 1,
            "source_user_id": 1,
            "is_read": false,
            "details": {
                "title": "A topic",
                "post_id": 2,
                "username": "User",
                "cover_url": "https:\/\/..."
            }
        }
    ],
    "unread_count": 100,
    "notification_endpoint": "wss:\/\/notify.ppy.sh"
}

This endpoint returns a list of the user's unread notifications. Sorted descending by id with limit of 50.

OAuth lazer

HTTP Request

GET /notifications

Query Parameters

Parameter Status Description
max_id optional Maximum id fetched. Can be used to load earlier notifications. Defaults to no limit (fetch latest notifications)

Response Format

Returns an object containing Notification and other related attributes.

Field Type
has_more boolean whether or not there are more notifications
notifications array of Notification
unread_count total unread notifications
notification_endpoint url to connect to websocket server

Mark Notifications as Read

curl -X POST "https://osu.ppy.sh/api/v2/notifications/mark-read" \

    -H "Content-Type: application/json" \
    -d '{"ids":"[1, 2, 3]"}'
const url = new URL("https://osu.ppy.sh/api/v2/notifications/mark-read");

let headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
}

let body = {
    "ids": "[1, 2, 3]"
}

fetch(url, {
    method: "POST",
    headers: headers,
    body: body
})
.then(response => response.json())
.then(json => console.log(json));

Example response (204):

{}

This endpoint allows you to mark notifications read.

OAuth lazer

HTTP Request

POST /notifications/mark-read

Body Parameters

Parameter Type Status Description
ids integer[] required id of notifications to be marked as read

Response Format

empty response

OAuth Tokens

Revoke current token

curl -X DELETE "https://osu.ppy.sh/api/v2/oauth/tokens/current" 
const url = new URL("https://osu.ppy.sh/api/v2/oauth/tokens/current");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "DELETE",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (204):

{}

Revokes currently authenticated token.

OAuth

HTTP Request

DELETE /oauth/tokens/current

Ranking

Get Ranking

curl -X GET -G "https://osu.ppy.sh/api/v2/rankings/mania/performance?country=JP&filter=all&variant=4k" 
const url = new URL("https://osu.ppy.sh/api/v2/rankings/mania/performance");

let params = {
    "country": "JP",
    "filter": "all",
    "variant": "4k",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Gets the current ranking for the specified type and game mode.

OAuth public

HTTP Request

GET /rankings/{mode}/{type}

URL Parameters

Parameter Status Description
mode required GameMode.
type required RankingType.

Query Parameters

Parameter Status Description
country optional Filter ranking by country code. Only available for type of performance.
cursor optional Cursor.
filter optional Either all (default) or friends.
spotlight optional The id of the spotlight if type is charts. Ranking for latest spotlight will be returned if not specified.
variant optional Filter ranking to specified mode variant. For mode of mania, it's either 4k or 7k. Only available for type of performance.

Response Format

Returns Rankings

Get Spotlights

curl -X GET -G "https://osu.ppy.sh/api/v2/spotlights" 
const url = new URL("https://osu.ppy.sh/api/v2/spotlights");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

Gets the list of spotlights.

OAuth public

HTTP Request

GET /spotlights

Response Format

Returns Spotlights

Undocumented

api/v2/beatmaps/{beatmap}/solo/scores

curl -X POST "https://osu.ppy.sh/api/v2/beatmaps/1/solo/scores" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/1/solo/scores");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

POST /beatmaps/{beatmap}/solo/scores

api/v2/beatmaps/{beatmap}/solo/scores/{score}

curl -X PUT "https://osu.ppy.sh/api/v2/beatmaps/1/solo/scores/1" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/1/solo/scores/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

PUT /beatmaps/{beatmap}/solo/scores/{score}

PATCH /beatmaps/{beatmap}/solo/scores/{score}

api/v2/beatmapsets/events

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/events" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/events");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /beatmapsets/events

api/v2/beatmapsets/{beatmapset}/favourites

curl -X POST "https://osu.ppy.sh/api/v2/beatmapsets/1/favourites" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/1/favourites");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

POST /beatmapsets/{beatmapset}/favourites

api/v2/chat/presence

curl -X GET -G "https://osu.ppy.sh/api/v2/chat/presence" 
const url = new URL("https://osu.ppy.sh/api/v2/chat/presence");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth lazer

HTTP Request

GET /chat/presence

api/v2/changelog/{stream}/{build}

curl -X GET -G "https://osu.ppy.sh/api/v2/changelog/1/1" 
const url = new URL("https://osu.ppy.sh/api/v2/changelog/1/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (404):

{
    "error": null
}

HTTP Request

GET /changelog/{stream}/{build}

api/v2/changelog

curl -X GET -G "https://osu.ppy.sh/api/v2/changelog" 
const url = new URL("https://osu.ppy.sh/api/v2/changelog");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "streams": [
        {
            "id": 5,
            "name": "stable40",
            "display_name": "Stable",
            "is_featured": true,
            "latest_build": {
                "id": 5735,
                "version": "20210423.2",
                "display_version": "20210423.2",
                "users": 31391,
                "created_at": "2021-04-23T04:04:32+00:00",
                "update_stream": {
                    "id": 5,
                    "name": "stable40",
                    "display_name": "Stable",
                    "is_featured": true
                }
            },
            "user_count": 31853
        },
        {
            "id": 1,
            "name": "stable",
            "display_name": "Stable Fallback",
            "is_featured": false,
            "latest_build": {
                "id": 3808,
                "version": "20160403.6",
                "display_version": "20160403.6",
                "users": 9,
                "created_at": "2016-04-03T12:03:55+00:00",
                "update_stream": {
                    "id": 1,
                    "name": "stable",
                    "display_name": "Stable Fallback",
                    "is_featured": false
                }
            },
            "user_count": 9
        },
        {
            "id": 6,
            "name": "beta40",
            "display_name": "Beta",
            "is_featured": false,
            "latest_build": {
                "id": 5734,
                "version": "20210423.1",
                "display_version": "20210423.1",
                "users": 212,
                "created_at": "2021-04-23T03:36:34+00:00",
                "update_stream": {
                    "id": 6,
                    "name": "beta40",
                    "display_name": "Beta",
                    "is_featured": false
                }
            },
            "user_count": 212
        },
        {
            "id": 3,
            "name": "cuttingedge",
            "display_name": "Cutting Edge",
            "is_featured": false,
            "latest_build": {
                "id": 5750,
                "version": "20210505",
                "display_version": "20210505",
                "users": 633,
                "created_at": "2021-05-05T05:40:59+00:00",
                "update_stream": {
                    "id": 3,
                    "name": "cuttingedge",
                    "display_name": "Cutting Edge",
                    "is_featured": false
                }
            },
            "user_count": 637
        },
        {
            "id": 7,
            "name": "lazer",
            "display_name": "Lazer",
            "is_featured": false,
            "latest_build": {
                "id": 5744,
                "version": "2021.502.0",
                "display_version": "2021.502.0",
                "users": 0,
                "created_at": "2021-05-02T04:50:02+00:00",
                "update_stream": {
                    "id": 7,
                    "name": "lazer",
                    "display_name": "Lazer",
                    "is_featured": false
                }
            },
            "user_count": 0
        },
        {
            "id": 8,
            "name": "web",
            "display_name": "Web",
            "is_featured": false,
            "latest_build": {
                "id": 5752,
                "version": "2021.511.0",
                "display_version": "2021.511.0",
                "users": 0,
                "created_at": "2021-05-11T13:52:45+00:00",
                "update_stream": {
                    "id": 8,
                    "name": "web",
                    "display_name": "Web",
                    "is_featured": false
                }
            },
            "user_count": 0
        }
    ],
    "builds": [
        {
            "id": 5752,
            "version": "2021.511.0",
            "display_version": "2021.511.0",
            "users": 0,
            "created_at": "2021-05-11T13:52:45+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 12121,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5404,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5404",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Quarterfinals update",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T17:08:09+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12122,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5364,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5364",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update ATT 2021 to Semifinals",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T17:08:50+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12123,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5401,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5401",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update BN listing and Staff log",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T17:10:47+00:00",
                    "github_user": {
                        "id": 349,
                        "display_name": "hypercyte",
                        "github_url": "https:\/\/github.com\/hypercyte",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12124,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5183,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5183",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add \"Downbeat\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T17:32:06+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12125,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5195,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5195",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add \"Input device\/Mouse\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T18:59:43+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12129,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5354,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5354",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN] [ZH] Fix command in Shorthand",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-11T02:01:12+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12131,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7544,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7544",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix markdown TOC and header ID generation",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-11T06:02:37+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12133,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7539,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7539",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix display of news articles with first img tag at top level",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-11T06:32:41+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12135,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5408,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5408",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH] Fix typo in MWC_2020_4K",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-11T11:07:48+00:00",
                    "github_user": {
                        "id": 291,
                        "display_name": "Kotoki1337",
                        "github_url": "https:\/\/github.com\/Kotoki1337",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12136,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5410,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5410",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Spring 2021 Fanart Contest Voting Open newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-11T12:46:08+00:00",
                    "github_user": {
                        "id": 13,
                        "display_name": "Ephemeralis",
                        "github_url": "https:\/\/github.com\/Ephemeralis",
                        "osu_username": "Ephemeralis",
                        "user_id": 10948742,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10948742"
                    }
                }
            ]
        },
        {
            "id": 5751,
            "version": "2021.510.0",
            "display_version": "2021.510.0",
            "users": 0,
            "created_at": "2021-05-10T13:53:06+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11984,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5332,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5332",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Update \"Community Contributors\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T14:15:39+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11986,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5325,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5325",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update \"Users with unique titles\" wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T18:57:26+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11996,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5336,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5336",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add skinning contest voting newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-29T08:33:41+00:00",
                    "github_user": {
                        "id": 39,
                        "display_name": "RockRoller01",
                        "github_url": "https:\/\/github.com\/RockRoller01",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11997,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5337,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5337",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update \"Skinning Contest\" wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-29T09:04:46+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12004,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5340,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5340",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Group Stage reschedules",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-29T16:39:37+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12005,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5341,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5341",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix mistyped username in Skinning Contest wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-29T16:43:40+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12030,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5343,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5343",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Conclude FL4T tournament",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T22:31:44+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12033,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5348,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5348",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add m108 FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-01T08:01:59+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12034,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7543,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7543",
                    "url": null,
                    "type": "fix",
                    "category": "Localisation",
                    "title": "Update translations from crowdin",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-01T09:23:48+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 12039,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5350,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5350",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Changed mistake in section \"Grade\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-02T06:18:55+00:00",
                    "github_user": {
                        "id": 519,
                        "display_name": "af2111",
                        "github_url": "https:\/\/github.com\/af2111",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12041,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5352,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5352",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add o!BWC2021 Registrations Open newspost & update wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-02T14:08:02+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12042,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5359,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5359",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix typo for \"Sparhten\" user",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-02T19:16:25+00:00",
                    "github_user": {
                        "id": 520,
                        "display_name": "yfxu",
                        "github_url": "https:\/\/github.com\/yfxu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12044,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5346,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5346",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix syntax errors on osu!weekly #95–#99, 103",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-03T06:39:25+00:00",
                    "github_user": {
                        "id": 355,
                        "display_name": "MilkyIQ",
                        "github_url": "https:\/\/github.com\/MilkyIQ",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12045,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7553,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7553",
                    "url": null,
                    "type": "fix",
                    "category": "Localisation",
                    "title": "Update translations from crowdin",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-03T13:08:38+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 12046,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5362,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5362",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Change MacOS\/Mac OSX -> macOS",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-03T13:31:41+00:00",
                    "github_user": {
                        "id": 462,
                        "display_name": "HibanaSama",
                        "github_url": "https:\/\/github.com\/HibanaSama",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12047,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5339,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5339",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Beatmap Spotlights Spring 2021 newspost & wiki articles",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-04T01:48:16+00:00",
                    "github_user": {
                        "id": 8,
                        "display_name": "venix12",
                        "github_url": "https:\/\/github.com\/venix12",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12048,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5366,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5366",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Round of 16 updates",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-04T03:07:11+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12049,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5261,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5261",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Rewrite the osu!catch Ranking Criteria",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-04T04:17:10+00:00",
                    "github_user": {
                        "id": 348,
                        "display_name": "Darius-Wattimena",
                        "github_url": "https:\/\/github.com\/Darius-Wattimena",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12054,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5369,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5369",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN] Convert osu! standard to osu",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-04T08:57:45+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12056,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5373,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5373",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN] Fix links in Options",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T02:02:03+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12060,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5374,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5374",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add miraie FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T09:11:13+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12062,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5375,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5375",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix incorrect link in miraie FA post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T09:25:18+00:00",
                    "github_user": {
                        "id": 13,
                        "display_name": "Ephemeralis",
                        "github_url": "https:\/\/github.com\/Ephemeralis",
                        "osu_username": "Ephemeralis",
                        "user_id": 10948742,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10948742"
                    }
                },
                {
                    "id": 12063,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5376,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5376",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix missing digit from Mentorship newspost filename",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T12:20:33+00:00",
                    "github_user": {
                        "id": 13,
                        "display_name": "Ephemeralis",
                        "github_url": "https:\/\/github.com\/Ephemeralis",
                        "osu_username": "Ephemeralis",
                        "user_id": 10948742,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10948742"
                    }
                },
                {
                    "id": 12067,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5378,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5378",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Miraie to \"Users with unique titles\" listing",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T15:18:36+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12072,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5379,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5379",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix missing word in miraie newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T18:51:30+00:00",
                    "github_user": {
                        "id": 110,
                        "display_name": "NoffyNoffeh",
                        "github_url": "https:\/\/github.com\/NoffyNoffeh",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12074,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5372,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5372",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update BN listing and Staff log",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-05T21:28:53+00:00",
                    "github_user": {
                        "id": 349,
                        "display_name": "hypercyte",
                        "github_url": "https:\/\/github.com\/hypercyte",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12078,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5236,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5236",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update History of osu! 2015",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-06T08:05:36+00:00",
                    "github_user": {
                        "id": 355,
                        "display_name": "MilkyIQ",
                        "github_url": "https:\/\/github.com\/MilkyIQ",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12082,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5381,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5381",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Round of 16 Reschedules",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-07T04:50:14+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12086,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5347,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5347",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "OWC 2021 Staff and Mapper Application Newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-07T16:31:29+00:00",
                    "github_user": {
                        "id": 362,
                        "display_name": "omgforz",
                        "github_url": "https:\/\/github.com\/omgforz",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12088,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5387,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5387",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix link in CWC Ro16 mappool",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-08T06:38:45+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12089,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5388,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5388",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Reku Mochizuki FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-08T09:21:27+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12096,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7551,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7551",
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Fix check for restricted user when finding username availability",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-09T09:54:05+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12097,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5396,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5396",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "o!BWC2021: Add mapper & player judging panels",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-09T10:16:26+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12100,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5386,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5386",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Final Updates to the TWC 2021 wiki page.",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-09T14:29:31+00:00",
                    "github_user": {
                        "id": 453,
                        "display_name": "mangomizer",
                        "github_url": "https:\/\/github.com\/mangomizer",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12101,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5382,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5382",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add May MBC news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-09T18:58:01+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12102,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5399,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5399",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix links in MBC May news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-09T20:35:31+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12106,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7542,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7542",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Use wiki branch config everywhere",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T02:21:49+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12107,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7573,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7573",
                    "url": null,
                    "type": "fix",
                    "category": "Api",
                    "title": "Fix getting last item for cursor",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T03:45:30+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 12111,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7576,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7576",
                    "url": null,
                    "type": "fix",
                    "category": "Documentation",
                    "title": "Fix spotlight apidoc types",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T08:30:32+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 12112,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7535,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7535",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Convert Timeago to TypeScript",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T10:18:29+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 12113,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7536,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7536",
                    "url": null,
                    "type": "fix",
                    "category": "Performance",
                    "title": "Reduce image lazy-loading related works",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T10:33:01+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 12114,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7537,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7537",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Don't reobserve on page load",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T10:58:50+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 12117,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7574,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7574",
                    "url": null,
                    "type": "fix",
                    "category": "Api",
                    "title": "Remove duplicate commentable meta objects",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-10T12:32:34+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                }
            ]
        },
        {
            "id": 5750,
            "version": "20210505",
            "display_version": "20210505",
            "users": 633,
            "created_at": "2021-05-05T05:40:59+00:00",
            "update_stream": {
                "id": 3,
                "name": "cuttingedge",
                "display_name": "Cutting Edge",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Improve tournament client's ability to handle command line parameters",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T03:59:28+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5744,
            "version": "2021.502.0",
            "display_version": "2021.502.0",
            "users": 0,
            "created_at": "2021-05-02T04:50:02+00:00",
            "update_stream": {
                "id": 7,
                "name": "lazer",
                "display_name": "Lazer",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11913,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12555,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12555",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Refine path for android logs in documentations",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T11:08:56+00:00",
                    "github_user": {
                        "id": 425,
                        "display_name": "PercyDan54",
                        "github_url": "https:\/\/github.com\/PercyDan54",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11925,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12569,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12569",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix typo in project README",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T04:00:33+00:00",
                    "github_user": {
                        "id": 515,
                        "display_name": "plan-do-break-fix",
                        "github_url": "https:\/\/github.com\/plan-do-break-fix",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11926,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4402,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4402",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Fix game window sometimes thinking it's active on startup when it isn't",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T11:59:09+00:00",
                    "github_user": {
                        "id": 452,
                        "display_name": "Susko3",
                        "github_url": "https:\/\/github.com\/Susko3",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11931,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12546,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12546",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Ensure source is set on GameplayClockContainer.Reset()",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T05:12:12+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11932,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12574,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12574",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Fix missing animation of slider repeat and tail circle pieces",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-26T05:42:46+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11934,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12581,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12581",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Fix simultaneous slider input not allowing both keys to be accepted",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T07:21:48+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11935,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12579,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12579",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Rename \"EditRuleset\" and \"EditPlayfield\" to use full \"Editor\" keyword",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T07:44:36+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11936,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12580,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12580",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix slider repeats and tails still animating with editor hit animations disabled",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-26T08:36:52+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11937,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12500,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12500",
                    "url": null,
                    "type": "fix",
                    "category": "Ruleset API",
                    "title": "Factor out pooling and lifetime management logic of DHO to a base class",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T10:30:44+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11938,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4401,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4401",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Change dragging states before triggering end event",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T11:24:54+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11939,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4405,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4405",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Expose ThreadSafety for use in other projects",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T11:25:36+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11943,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12583,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12583",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix exported scores not being compatible with osu-stable ",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-26T13:32:18+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11960,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12590,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12590",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix a couple of inspections in editor code",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T05:09:38+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11961,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4408,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4408",
                    "url": null,
                    "type": "add",
                    "category": "Tooling",
                    "title": "Add headless test runner for templates tests projects",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T05:14:11+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11962,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4409,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4409",
                    "url": null,
                    "type": "add",
                    "category": "Framework",
                    "title": "Add ConfigureAwait(false) to DCC",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T05:31:37+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11964,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12589,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12589",
                    "url": null,
                    "type": "fix",
                    "category": "UX",
                    "title": "Show a warning if the game is running at administrator\/root",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T06:25:13+00:00",
                    "github_user": {
                        "id": 509,
                        "display_name": "Cublibre",
                        "github_url": "https:\/\/github.com\/Cublibre",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11965,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12585,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12585",
                    "url": null,
                    "type": "add",
                    "category": "Ruleset API",
                    "title": "Add method to safely refresh DrawableHitObject transforms",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T10:15:13+00:00",
                    "github_user": {
                        "id": 295,
                        "display_name": "LumpBloom7",
                        "github_url": "https:\/\/github.com\/LumpBloom7",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11968,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4411,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4411",
                    "url": null,
                    "type": "fix",
                    "category": "Ruleset API",
                    "title": "Simplify LifetimeEntry logic, and make SetLifetime overridable",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T12:24:29+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11969,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12598,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12598",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix bonus score not calculated from the correct statistics",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T15:33:09+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11970,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12592,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12592",
                    "url": null,
                    "type": "fix",
                    "category": "Ruleset API",
                    "title": "Fix Setting DHO's lifetime doesn't update its entry lifetime",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T16:38:19+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11977,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12602,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12602",
                    "url": null,
                    "type": "add",
                    "category": "Code Quality",
                    "title": "Add support for custom controls to SettingSourceAttribute",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T07:39:18+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11979,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12609,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12609",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix import cancellation not correctly being forwarded to import notification",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T08:28:59+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11980,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12603,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12603",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix bonus-only maps having only 700K base score",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T08:30:58+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11983,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4413,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4413",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Fix variable declarations not explored by DCC",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T14:15:19+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11985,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4414,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4414",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Fix type arguments not explored by DCC",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T15:59:18+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 12010,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12610,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12610",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix possible precision loss on exporting legacy replays",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T02:19:27+00:00",
                    "github_user": {
                        "id": 425,
                        "display_name": "PercyDan54",
                        "github_url": "https:\/\/github.com\/PercyDan54",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12011,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12596,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12596",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Make editor blueprint\/selection components abstract",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This allows for some pretty OP things to occur going forward. Is a prerequisite for the upcoming skin editor.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-30T09:55:21+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 12012,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12625,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12625",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Refactor `SelectionBlueprint` and `MoveSelectionEvent` to work in screen-space coordinates",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T10:37:31+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 12025,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4412,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4412",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Migrate osu!framework to GitHub Actions",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T13:33:38+00:00",
                    "github_user": {
                        "id": 160,
                        "display_name": "sr229",
                        "github_url": "https:\/\/github.com\/sr229",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12026,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4424,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4424",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Make pack jobs depend on tests passing",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T14:51:49+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 12027,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12588,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12588",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add unsnapped and concurrent object checks to verify screen",
                    "message_html": "<div class='changelog-md'><ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item\"><div>\n<code>CheckUnsnappedObjects<\/code>, which detects\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>≥ 2 ms off as a problem<\/div><\/li>\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>≥ 1 ms off as negligible (this type will eventually be hidden by default)<\/div><\/li>\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>all edges (starts, repeats, ends)<\/div><\/li>\n<\/ul>\n<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>\n<code>CheckConcurrentObjects<\/code>, which detects\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>end time being greater than the start time of the previous object<\/div><\/li>\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>per-column in rulesets like mania<\/div><\/li>\n<\/ul>\n<\/div><\/li>\n<\/ul>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-30T15:20:02+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12028,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12634,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12634",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix editor buttons inheriting from `TriangleButton` when they have no need to",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T20:26:30+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 12029,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12632,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12632",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Refactor OsuModBarrelRoll to allow it's usage by other rulesets",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-30T21:03:56+00:00",
                    "github_user": {
                        "id": 144,
                        "display_name": "EVAST9919",
                        "github_url": "https:\/\/github.com\/EVAST9919",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12031,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4425,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4425",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Fix Test Coverage Reporting",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-01T00:42:09+00:00",
                    "github_user": {
                        "id": 160,
                        "display_name": "sr229",
                        "github_url": "https:\/\/github.com\/sr229",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12032,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12564,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12564",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix beatmap info download button content not scaling on mouse down",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-01T01:43:59+00:00",
                    "github_user": {
                        "id": 9,
                        "display_name": "Joehuu",
                        "github_url": "https:\/\/github.com\/Joehuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12035,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12558,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12558",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!mania)",
                    "title": "Add snap color option for osu!mania",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Adds the long-standing request of colouring notes based on the &quot;snap&quot; they land on. This means that 1\/2 notes have a different colour from 1\/4 and 1\/8, making it easier to visually discern upcoming rhythms for some users.<\/p>\n<p class=\"changelog-md__paragraph\">Colours matches the editor scheme. Customising the colour choice will come as a future skin option.<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/73b70d7f651a30605f80c5df38d397be0a214e37\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f373835343336372f3131353935333339352d63656639323038302d613531642d313165622d393163392d6339376537663032363732382e6a7067\" alt=\"osu_2021-04-24_16-47-32\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-05-01T14:52:54+00:00",
                    "github_user": {
                        "id": 518,
                        "display_name": "JustusFT",
                        "github_url": "https:\/\/github.com\/JustusFT",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12037,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12617,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12617",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix approved maps not displaying pp column on score table",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-02T04:27:39+00:00",
                    "github_user": {
                        "id": 9,
                        "display_name": "Joehuu",
                        "github_url": "https:\/\/github.com\/Joehuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 12038,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12650,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12650",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Compute selection box area using the bounding box of the blueprints instead",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-05-02T04:30:01+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                }
            ]
        },
        {
            "id": 5743,
            "version": "2021.428.0",
            "display_version": "2021.428.0",
            "users": 0,
            "created_at": "2021-04-28T13:29:57+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11963,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7532,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7532",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix yarn lockfile",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T05:45:33+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11966,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5306,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5306",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Make Boolean Matching Case-Insensitive For Manually-Triggered Actions",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T10:16:43+00:00",
                    "github_user": {
                        "id": 160,
                        "display_name": "sr229",
                        "github_url": "https:\/\/github.com\/sr229",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11967,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5331,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5331",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update 3WC 2021 to Finals",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T11:39:02+00:00",
                    "github_user": {
                        "id": 490,
                        "display_name": "shdewz",
                        "github_url": "https:\/\/github.com\/shdewz",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11971,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5295,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5295",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Update \"Project Loved Team\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T17:06:28+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11972,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5326,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5326",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add A Labour of Love results news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T20:25:54+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11973,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5211,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5211",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add Auto and Easy (mod) articles",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T21:26:36+00:00",
                    "github_user": {
                        "id": 424,
                        "display_name": "hikikuman",
                        "github_url": "https:\/\/github.com\/hikikuman",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11974,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5212,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5212",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add 10K, Fade In, and Fade Out (mod) articles",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T21:27:44+00:00",
                    "github_user": {
                        "id": 424,
                        "display_name": "hikikuman",
                        "github_url": "https:\/\/github.com\/hikikuman",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11975,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5317,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5317",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Abandoned wasteland\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T21:28:30+00:00",
                    "github_user": {
                        "id": 506,
                        "display_name": "wowcake",
                        "github_url": "https:\/\/github.com\/wowcake",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11976,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7534,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7534",
                    "url": null,
                    "type": "fix",
                    "category": "Api",
                    "title": "No redirect on user show API",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T07:03:44+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11978,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5177,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5177",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Grade",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T08:25:22+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11981,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7533,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7533",
                    "url": null,
                    "type": "add",
                    "category": "Contests",
                    "title": "Add option to show entry names for external\/art contests.",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T09:27:18+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11982,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5333,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5333",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Emiru no Aishita Tsukiyo ni Dai San Gensou Kyoku wo FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-28T09:51:22+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                }
            ]
        },
        {
            "id": 5742,
            "version": "2021.427.0",
            "display_version": "2021.427.0",
            "users": 0,
            "created_at": "2021-04-27T04:16:16+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11912,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5311,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5311",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Grynpyret FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T10:23:56+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11914,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5310,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5310",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Ausu!Taiko Tournament 2019 tournament article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T22:27:58+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11915,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5314,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5314",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix one finals match in ATT 2019",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T22:59:51+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11916,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5282,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5282",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add .osk",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:14:05+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11917,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5283,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5283",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add .osb",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:18:04+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11918,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5284,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5284",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add Organisations",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:18:43+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11919,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5280,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5280",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add Beatmap Spotlights Seasons",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:21:57+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11920,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5230,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5230",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add peppy",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:25:38+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11921,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5231,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5231",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add Legal",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:25:49+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11922,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5227,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5227",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH] Change wording in User_title ",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:30:45+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11923,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5196,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5196",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add upppy",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:31:36+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11924,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5173,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5173",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Create People",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T00:32:48+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11927,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 4962,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4962",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH] Update Beatmapping",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T16:10:18+00:00",
                    "github_user": {
                        "id": 372,
                        "display_name": "lixiangwuxian",
                        "github_url": "https:\/\/github.com\/lixiangwuxian",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11928,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5281,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5281",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add .osz",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T16:12:36+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11929,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5181,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5181",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add Graphics tablet",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T16:13:12+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11930,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5175,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5175",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ZH-TW] Add Beatmap description",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-25T16:34:44+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11933,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7531,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7531",
                    "url": null,
                    "type": "fix",
                    "category": "Reliability",
                    "title": "Update javascript dependencies",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T07:11:12+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11940,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7529,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7529",
                    "url": null,
                    "type": "fix",
                    "category": "Api",
                    "title": "More useful error on invalid route",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T11:47:46+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11941,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7528,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7528",
                    "url": null,
                    "type": "add",
                    "category": "Code Quality",
                    "title": "Add class member sort lint for eslint",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T12:04:24+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11942,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5322,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5322",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix osu!taiko World Cup 2021 start end dates",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T12:24:22+00:00",
                    "github_user": {
                        "id": 516,
                        "display_name": "badaccuracy",
                        "github_url": "https:\/\/github.com\/badaccuracy",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11944,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5323,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5323",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Group Stage updates",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:01:12+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11945,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5320,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5320",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update ATT 2021 to Round of 16",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:16:39+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11946,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5213,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5213",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add Autopilot, Cinema, and Co-op mod articles",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:24:36+00:00",
                    "github_user": {
                        "id": 424,
                        "display_name": "hikikuman",
                        "github_url": "https:\/\/github.com\/hikikuman",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11947,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5208,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5208",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Play style stubs",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:44:40+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11948,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5117,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5117",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[PL] Update osu!api ",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:44:48+00:00",
                    "github_user": {
                        "id": 504,
                        "display_name": "heyngra",
                        "github_url": "https:\/\/github.com\/heyngra",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11949,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5207,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5207",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Performance points stubs",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:45:42+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11950,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5188,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5188",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Mapping techniques stubs",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T14:57:33+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11951,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5189,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5189",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Modding stubs",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:04:19+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11952,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5178,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5178",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Graveyard",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:08:56+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11953,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5170,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5170",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Geki",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:13:09+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11954,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5143,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5143",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Community Mentorship Program",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:15:21+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11955,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5186,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5186",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Hit object stubs",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:18:46+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11956,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5179,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5179",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Grid Snapping",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:20:07+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11957,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5157,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5157",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Skin",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T15:21:30+00:00",
                    "github_user": {
                        "id": 517,
                        "display_name": "Baguette2Pain",
                        "github_url": "https:\/\/github.com\/Baguette2Pain",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11958,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5324,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5324",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Prevent beatmap stealing in Ranking Criteria",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-26T16:53:56+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11959,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7509,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7509",
                    "url": null,
                    "type": "fix",
                    "category": "Search",
                    "title": "Update elasticsearch-php",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-27T03:09:49+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                }
            ]
        },
        {
            "id": 5737,
            "version": "2021.424.0",
            "display_version": "2021.424.0",
            "users": 0,
            "created_at": "2021-04-24T07:11:05+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11858,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5273,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5273",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[RU] Add \"Beatmap\/Genre & Language\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T13:21:20+00:00",
                    "github_user": {
                        "id": 233,
                        "display_name": "TicClick",
                        "github_url": "https:\/\/github.com\/TicClick",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11861,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7484,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7484",
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Delete beatmapset forum topic upon beatmapset deletion",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T03:37:17+00:00",
                    "github_user": {
                        "id": 8,
                        "display_name": "venix12",
                        "github_url": "https:\/\/github.com\/venix12",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11862,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7506,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7506",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Ordered beatmap grouping",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T04:31:03+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11863,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7514,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7514",
                    "url": null,
                    "type": "fix",
                    "category": "Documentation",
                    "title": "Fix documentation of UserAccountHistory",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T05:06:09+00:00",
                    "github_user": {
                        "id": 512,
                        "display_name": "alchzh",
                        "github_url": "https:\/\/github.com\/alchzh",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11864,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7515,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7515",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix object keys order",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T06:26:11+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11868,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5293,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5293",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update Project Loved Team",
                    "message_html": "<div class='changelog-md'><ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item\"><div>Gave better descriptions for what each kind of team member does<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>Listed alumni<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>Updated info about the website user group<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>Changed &quot;osu!standard&quot; to &quot;osu!&quot;<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>Updated osu! and osu!mania captains and other team members<\/div><\/li>\n<\/ul>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-22T09:13:40+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11882,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5294,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5294",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "112CT2020: Reflect the name change",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T12:30:45+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11883,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5238,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5238",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Clean up the Help Centre",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T13:01:13+00:00",
                    "github_user": {
                        "id": 508,
                        "display_name": "THATotaku",
                        "github_url": "https:\/\/github.com\/THATotaku",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11884,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5296,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5296",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update \"Project Loved Team\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T15:26:00+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11886,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5287,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5287",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add translation of \"\/Featured Artists\/Featured artist showcase beatmaps\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T16:39:08+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11887,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5300,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5300",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update \"Modding\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T18:08:57+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11888,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5299,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5299",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update \"BanchoBot\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T18:09:11+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11889,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5298,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5298",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update and revise \"Community Contributors\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T18:09:29+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11890,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5297,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5297",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update BN Expectations & General Information",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T18:09:44+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11891,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5255,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5255",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Convert `osu!standard` > `osu!` everywhere",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T20:35:05+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11892,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5278,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5278",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Ausu!Taiko Tournament 2021 tournament article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T23:51:01+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11896,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5302,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5302",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add missing escape characters in Project Loved Team wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T07:00:22+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11897,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7485,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7485",
                    "url": null,
                    "type": "add",
                    "category": "Admin",
                    "title": "Add delete beatmapset LIO endpoint",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T08:46:10+00:00",
                    "github_user": {
                        "id": 8,
                        "display_name": "venix12",
                        "github_url": "https:\/\/github.com\/venix12",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11899,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7507,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7507",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fixed wiki toc title expansion at desktop",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T09:42:31+00:00",
                    "github_user": {
                        "id": 513,
                        "display_name": "danilyer228",
                        "github_url": "https:\/\/github.com\/danilyer228",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11900,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5303,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5303",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Ausu!Taiko Tournament 2020 tournament article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T10:30:29+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11901,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5305,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5305",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Refresh privacy policy's last change date",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T11:25:57+00:00",
                    "github_user": {
                        "id": 158,
                        "display_name": "osuShiro",
                        "github_url": "https:\/\/github.com\/osuShiro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11902,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5304,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5304",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Spring 2021 Fanart Contest newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T12:01:59+00:00",
                    "github_user": {
                        "id": 13,
                        "display_name": "Ephemeralis",
                        "github_url": "https:\/\/github.com\/Ephemeralis",
                        "osu_username": "Ephemeralis",
                        "user_id": 10948742,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10948742"
                    }
                },
                {
                    "id": 11904,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5307,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5307",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add March MBC results news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T19:47:25+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11905,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5308,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5308",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Apply grammatical fixes and markdown escaping to MBC March 2021 newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T20:00:18+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11906,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5309,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5309",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update \"Users with unique titles\" listing",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T20:42:57+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11911,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7524,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7524",
                    "url": null,
                    "type": "add",
                    "category": "Misc",
                    "title": "Add osu!catch \"floating fruit\" mod support",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T07:06:01+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5736,
            "version": "2021.424.0",
            "display_version": "2021.424.0",
            "users": 0,
            "created_at": "2021-04-24T07:04:52+00:00",
            "update_stream": {
                "id": 7,
                "name": "lazer",
                "display_name": "Lazer",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11801,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12456,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12456",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Improve \"barrel roll\" mod settings description",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T04:19:24+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11802,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4371,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4371",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Allow parsing any enum-parsable value to enum bindables",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T09:07:05+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11804,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4372,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4372",
                    "url": null,
                    "type": "add",
                    "category": "User Interface",
                    "title": "Add descriptions to rotation directions",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T09:45:11+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11806,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12460,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12460",
                    "url": null,
                    "type": "fix",
                    "category": "UX",
                    "title": "Fix idle tracker assuming time starts at zero",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T13:31:54+00:00",
                    "github_user": {
                        "id": 218,
                        "display_name": "bdach",
                        "github_url": "https:\/\/github.com\/bdach",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11809,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12473,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12473",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix selection box not displaying after pasting a selection in the editor",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-18T15:40:52+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11811,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12476,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12476",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Fix volume control displaying on non-vertical scroll events",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-18T16:34:43+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11812,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12481,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12481",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix download button check icon not scaling on mouse down",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T02:49:39+00:00",
                    "github_user": {
                        "id": 9,
                        "display_name": "Joehuu",
                        "github_url": "https:\/\/github.com\/Joehuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11813,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4376,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4376",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Move bitrate assignment to before reversing stream",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T03:18:24+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11817,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12446,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12446",
                    "url": null,
                    "type": "fix",
                    "category": "UX",
                    "title": "Reset per-session warnings\/settings after long period of inactivity",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T05:44:40+00:00",
                    "github_user": {
                        "id": 511,
                        "display_name": "jvyden",
                        "github_url": "https:\/\/github.com\/jvyden",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11818,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4377,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4377",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Fix input being incorrectly offset for some users when running borderless",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-19T08:19:18+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11819,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12484,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12484",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update the design of the editor timing screen",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Reveals relevant information without requiring a hover for tooltip. Brings things closer in line with the upcoming design pass, but as with other recent pull requests is focused on rapid implementation and usability. The timeline is temporarily removed from the timing screen, but will likely come back in the future.<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/d0b9032c65f77fe0301643b17346a73b299122b8\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131353139393537342d35336236663938302d613132652d313165622d386331322d6166323664626163653339362e706e67\" alt=\"20210419 164302 (dotnet)\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-19T08:20:49+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11820,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4379,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4379",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Fix tablet handling updating the OS cursor when the game window is not focused.",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-19T10:11:05+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11821,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4380,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4380",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Improve bitrate precision",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T12:05:04+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11822,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12485,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12485",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Further design updates to the timing screen",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Refined design a bit more with help from @arflyte.<\/p>\n<div align=\"center\">\n    <video width=\"95%\" controls>\n        <source src=\"https:\/\/user-images.githubusercontent.com\/191335\/115213638-ae575200-a13c-11eb-8bb2-b957c78a11a7.mp4\" type=\"video\/mp4\" preload=\"none\">\n    <\/video>\n<\/div>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-19T12:54:23+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11823,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4381,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4381",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix possible nullref in GetDescription() extension method",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T13:15:35+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11824,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12447,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12447",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Record spectator data every 60fps interval",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T14:26:59+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11831,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12478,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12478",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add read-only combo colour display to setup screen",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T02:55:35+00:00",
                    "github_user": {
                        "id": 218,
                        "display_name": "bdach",
                        "github_url": "https:\/\/github.com\/bdach",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11833,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12496,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12496",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix storyboard samples not getting cleaned up correctly if skipped over",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T09:07:15+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11834,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12497,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12497",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!catch)",
                    "title": "Remove catcher fade during hyperdash",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T11:36:17+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11835,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12499,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12499",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Keep hitcircles aligned with view in \"Barrel Roll\" mod",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Seems to feel better, especially with higher rotation speeds.<\/p>\n<div align=\"center\">\n    <video width=\"95%\" controls>\n        <source src=\"https:\/\/user-images.githubusercontent.com\/191335\/115374048-6c471280-a207-11eb-889a-fd45efeabf3b.mov\" type=\"video\/mp4\" preload=\"none\">\n    <\/video>\n<\/div>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-20T11:39:18+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11836,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12498,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12498",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Allow faster roll speed selection in \"Barrel Roll\" mod",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-20T11:39:45+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11838,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12492,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12492",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add background and audio checks",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This adds the following checks to the &quot;verify&quot; screen:<\/p>\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item\"><div>\n<code>CheckBackgroundQuality<\/code>, which checks\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>160x120 &lt;= resolution &lt;= 2560x1440<\/div><\/li>\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>filesize &lt;= 2.5 MB<\/div><\/li>\n<\/ul>\n<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>\n<code>CheckAudioQuality<\/code>, which checks\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>128 &lt;= average bitrate &lt;= 192<\/div><\/li>\n<\/ul>\n<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>\n<code>CheckAudioPresence<\/code> (audio equivalent of <code>CheckBackgroundPresence<\/code>, both inheriting <code>CheckFilePresence<\/code>)<\/div><\/li>\n<\/ul>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-20T15:10:33+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11842,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12506,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12506",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix mod settings blocking input outside its visible area",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T01:11:35+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11843,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12507,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12507",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Fix click-to-resume cursor location being incorrect when playfield is transformed",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T01:29:35+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11844,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12510,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12510",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!)",
                    "title": "Fix slider tails wiggling independently of slider in some mods",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T02:30:13+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11847,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4383,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4383",
                    "url": null,
                    "type": "add",
                    "category": "Framework",
                    "title": "Add lock object specifically for scheduler to avoid deadlock scenario",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T07:29:27+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11848,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4382,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4382",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Speed up dynamic compilation type resolution",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T07:38:29+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11849,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12513,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12513",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Show tablet preview with physical tablet counter-rotated for supplied user area",
                    "message_html": "<div class='changelog-md'><div align=\"center\">\n    <video width=\"45%\" controls>\n        <source src=\"https:\/\/user-images.githubusercontent.com\/191335\/115511798-3adc4e80-a2bc-11eb-8fef-caa717f871cb.mp4\" type=\"video\/mp4\" preload=\"none\">\n    <\/video>\n<\/div>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-21T07:46:09+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11851,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12486,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12486",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Associate DrawableHitObject with HitObjectLifetimeEntry rather than HitObject",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T08:08:21+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11857,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4384,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4384",
                    "url": null,
                    "type": "add",
                    "category": "Framework (Tooling)",
                    "title": "Add dynamic recompilation message when changed file isn't referenced",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T10:57:44+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11859,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4385,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4385",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Fix dynamic compilation culling types without resolving type name",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T13:57:51+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11860,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4386,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4386",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Further speed up dynamic compilation type resolution",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T14:19:34+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11866,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12448,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12448",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Make GameplayClockContainer abstract and add MasterGameplayClockContainer",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T07:20:52+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11867,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12438,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12438",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix OnUserBeganPlaying not being invoked if already watching",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T08:17:02+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11869,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12530,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12530",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!catch)",
                    "title": "Improve fruit stacking algorithm to sit better on catcher's plate",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-22T09:38:10+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11870,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4388,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4388",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Fix invocation expression arguments not being explored",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T09:40:27+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11871,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12527,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12527",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Rollback hold note placement when length is zero",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T09:48:32+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11872,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12529,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12529",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Allow shift+right-click deletion when in placement mode",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T09:50:21+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11873,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12526,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12526",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix chat system messages always being displayed above standard messages",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T09:51:25+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11874,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4390,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4390",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Ignore exploring more types during dynamic compilation",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T10:03:52+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11875,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12515,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12515",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Apply \"classic\" mod to all legacy scores",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">All scores in the leaderboards (or loaded replays from stable) will now show with the &quot;Classic&quot; mod applied. This will allow for more correct scoring and playback.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-22T10:52:09+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11876,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4389,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4389",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Resolve more assemblies for dynamic compilation",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T11:15:30+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11878,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4391,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4391",
                    "url": null,
                    "type": "fix",
                    "category": "Framework (Tooling)",
                    "title": "Multithreaded dynamic compilation type resolver",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T11:39:21+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11879,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12519,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12519",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add editor hit animation toggle",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This brings back a much-requested feature from the <code>osu-stable<\/code> editor, which is that hit circles don't &quot;explode&quot;. This is actually the default behaviour in stable, so I've also set it as the default here for the time being, pending feedback.<\/p>\n<div align=\"center\">\n    <video width=\"95%\" controls>\n        <source src=\"https:\/\/user-images.githubusercontent.com\/191335\/115541947-ae8d5400-a2da-11eb-8f78-5caad5ad4454.mp4\" type=\"video\/mp4\" preload=\"none\">\n    <\/video>\n<\/div>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-22T11:49:21+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11880,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12534,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12534",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!mania)",
                    "title": "Fix hold notes with zero length crashing the game",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T12:14:36+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11881,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12531,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12531",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add simple key based time nudging support to editor",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Defaults to 'j' and 'k' keys like stable, but can be reconfigured.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-22T12:14:51+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11893,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12528,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12528",
                    "url": null,
                    "type": "add",
                    "category": "User Interface",
                    "title": "Add sound effects when switching active ruleset from the toolbar",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-23T02:35:19+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11894,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12537,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12537",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix current match playing users not updated on room join",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T03:00:33+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11895,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4392,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4392",
                    "url": null,
                    "type": "add",
                    "category": "Input",
                    "title": "Add \"numpad\" prefix to `KeyCombination`'s readable output to discern from normal keys",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T05:25:48+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11898,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4394,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4394",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Close midi devices asynchronously to avoid blocking the game UI",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T09:17:03+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11903,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4395,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4395",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Fix TrackBass not updating current time after seek",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T18:01:25+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11907,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4397,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4397",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Fix assertion tripping when seeking from within the mixtime callback",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T03:24:23+00:00",
                    "github_user": {
                        "id": 218,
                        "display_name": "bdach",
                        "github_url": "https:\/\/github.com\/bdach",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11908,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12552,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12552",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix Spelling Error 'passses'",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-24T04:02:23+00:00",
                    "github_user": {
                        "id": 514,
                        "display_name": "subfluid",
                        "github_url": "https:\/\/github.com\/subfluid",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11910,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12461,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12461",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!catch)",
                    "title": "Add \"Floating Fruits\" mod",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">An osu!catch-specific mod, makes the fruits float upwards instead of falling downwards.<\/p>\n<div align=\"center\">\n    <video width=\"95%\" controls>\n        <source src=\"https:\/\/user-images.githubusercontent.com\/47401343\/115116275-081f1700-9f99-11eb-8979-c37bff97f8d0.mp4\" type=\"video\/mp4\" preload=\"none\">\n    <\/video>\n<\/div>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-24T06:11:25+00:00",
                    "github_user": {
                        "id": 288,
                        "display_name": "LiterallyFabian",
                        "github_url": "https:\/\/github.com\/LiterallyFabian",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                }
            ]
        },
        {
            "id": 5735,
            "version": "20210423.2",
            "display_version": "20210423.2",
            "users": 31391,
            "created_at": "2021-04-23T04:04:32+00:00",
            "update_stream": {
                "id": 5,
                "name": "stable40",
                "display_name": "Stable",
                "is_featured": true
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Disable \"sample import\" dialog when not mapping for osu!mania",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">On top of not being useful, it was causing crashes and confusion amongst users, so it's now no longer a thing. It really shouldn't be a thing anywhere since it's an abhorrent dialog from a UX perspective, but will remain available in the osu!mania editor for any users which rely on it.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-21T16:47:49+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Decrease intensity of graphical explosion when local user changes position on leaderboard",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Many users were hiding the during-gameplay leaderboard due to the &quot;flash&quot; effect when passing other users being too intense. It has now been toned down to not cover half the screen.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-03-21T16:47:49+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix pause cursor location incorrectly clamped on wide aspect ratios",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">There was a chance the &quot;click to resume&quot; cursor could be at the wrong screen location for some wide aspect ratios.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-23T06:39:10+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add AiMod rare snap divisor exception for spinners that occur very close to another object",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T06:07:19+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add missing newer beat divisors to timing window retiming controls",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T06:07:19+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix friend list not always including users connected from IRC gateway",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T07:15:47+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix not being able to adjust the \"Creator\" field in song setup when logged out",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-03-24T09:05:35+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix osu!direct not being scrollable correct when in online listing view",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T09:20:06+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": "https:\/\/github.com\/ppy\/osu-stable-issues\/issues\/602",
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Fix multiplayer fail scores not submitting",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Failing in a multiplayer match will now correctly update playcount etc.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-25T03:52:30+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Ensure score frames are purged on match end",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This fixes potential end-of-match discrepancies in spectator \/ tournament streaming scenarios.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-25T09:01:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix crash on placing notes before first timing section in osu!mania editor",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-26T05:24:12+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Turn off winter seasonal backgrounds",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A bit late, but better than never. Releases were held up as we were trying to fix some issues with compatibility mode (coming in the near future, to those still experiencing problems).<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-27T13:41:51+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Make \"show video\" toggle in editor also toggle storyboard",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Some users requested that it is possible to hide storyboards in the editor to make composition of a beatmap easier (less graphically busy). The setting in the &quot;view&quot; menu now allows toggling both video and storyboards.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-03-29T03:59:37+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix client requesting beatmap details when not being logged in",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This could result in beatmaps losing their metadata, causing BSS issues the next time the beatmap is uploaded.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-03-30T03:19:40+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix selection with spinners causing incorrect positional movement",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Moving a selection in the editor when a spinner was part of the selection would result in weird drag behaviour. Now the spinner is ignored and other objects will move as expected around it.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-30T06:09:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix email being specifically mentioned for bss notifications",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Notifications arrive via more channels than email these days, so the message now doesn't make a direct mention of &quot;email&quot;.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-03-31T07:06:33+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Use culture invariant parsing for tournament.cfg",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-03T10:34:32+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Refresh editor video setting state (as it now covers storyboards)",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This resets the saved setting's value to &quot;enabled&quot;, since it was previously not initialised correctly (and would have been disabled for the majority of users). If you don't want to see storyboards of videos in the editor, please change your setting from the view menu.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-13T03:27:46+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Update beatmap URL format to new site style",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Links which were still using &quot;\/b\/&quot; and &quot;\/s\/&quot; links are now updated to the newer URL, which allows them to load faster due to fewer redirect steps.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-15T03:57:47+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Change \"osu! is angry\" message to not offend some people by being too aggressive",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A user reported being offended by the message which appears when beatmap resources are missing, so we changed it to be more polite.<\/p>\n<p class=\"changelog-md__paragraph\">To clarify: I am not doing this to appease one single user (they can get foobar'd). I'm doing it because times have changed and new players likely won't have as much context on the original message.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-23T03:15:06+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5734,
            "version": "20210423.1",
            "display_version": "20210423.1",
            "users": 212,
            "created_at": "2021-04-23T03:36:34+00:00",
            "update_stream": {
                "id": 6,
                "name": "beta40",
                "display_name": "Beta",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Disable \"sample import\" dialog when not mapping for osu!mania",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-21T16:47:49+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Decrease intensity of graphical explosion when local user changes position on leaderboard",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-21T16:47:49+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix pause location clamped on wide aspect ratios",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-23T06:39:10+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add rare snap divisor exception for spinners that occur very close to another object",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T06:07:19+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add missing newer beat divisors to timing window retiming controls",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T06:07:19+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix friend list not always including users connected from IRC gateway",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T07:15:47+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix not being able to adjust the \"Creator\" field in song setup when logged out",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T09:05:35+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix osu!direct not being scrollable correct when in online listing view",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-24T09:20:06+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Fix multiplayer fail scores not submitting",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-25T03:52:30+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Ensure score frames are purged on match end",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-25T09:01:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix crash on placing notes before first timing section in osu!mania editor",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-26T05:24:12+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Compatibility",
                    "title": "Update ANGLE and fix startup errors again",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-26T12:55:36+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Turn off winter seasonal backgrounds",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-27T13:41:51+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Make \"show video\" toggle in editor also toggle storyboard",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-29T03:59:37+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Attempt to fix multiplayer fail scores submitting in an incorrect state",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-30T01:26:56+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Compatibility",
                    "title": "Don't auto-delete libGLESv1_CM",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-30T01:35:12+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix client requesting beatmap details when not being logged in",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-30T03:19:40+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix selection with spinners causing incorrect positional movement",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-30T06:09:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix email being specifically mentioned for bss notifications",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-31T07:06:33+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Use culture invariant parsing for tournament.cfg",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-03T10:34:32+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Allow configuration to be constructed with culture invariant mode",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-03T10:34:32+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update second instance of \"show video\" editor menu text content",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-06T02:17:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Compatibility",
                    "title": "Allow multiple VBOs with ANGLE via settings toggle",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This was added to allow some users to test whether toggling this setting fixes a performance regression <a class=\"changelog-md__link\" href=\"https:\/\/github.com\/ppy\/osu-stable-issues\/issues\/719\">reported<\/a> in recent cutting edge releases.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-11T11:34:23+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Bump MySqlConnector from 1.3.2 to 1.3.3",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T10:21:10+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "BanchoBot",
                        "github_url": null,
                        "osu_username": "BanchoBot",
                        "user_id": 3,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/3"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Refresh editor video setting state (as it now covers storyboards)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T03:27:46+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Update spinner-rpm sprite to not be anchored to bottom of screen (lazer)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T03:27:46+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Update beatmap URL format to new site style",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T03:57:47+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Bump MySqlConnector from 1.3.3 to 1.3.4",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-22T09:55:26+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "BanchoBot",
                        "github_url": null,
                        "osu_username": "BanchoBot",
                        "user_id": 3,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/3"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Change \"osu! is angry\" message to not offend some people by being too aggressive",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-23T03:15:06+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5733,
            "version": "20210423",
            "display_version": "20210423",
            "users": 4,
            "created_at": "2021-04-23T03:31:19+00:00",
            "update_stream": {
                "id": 3,
                "name": "cuttingedge",
                "display_name": "Cutting Edge",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Change \"osu! is angry\" message to not offend some people by being too aggressive",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A user reported being offended by the message, so we changed it to be more polite.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-23T03:15:06+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5732,
            "version": "20210422",
            "display_version": "20210422",
            "users": 1,
            "created_at": "2021-04-22T05:12:30+00:00",
            "update_stream": {
                "id": 3,
                "name": "cuttingedge",
                "display_name": "Cutting Edge",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Update beatmap URL format to new site style",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T03:57:47+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5731,
            "version": "2021.421.0",
            "display_version": "2021.421.0",
            "users": 0,
            "created_at": "2021-04-21T11:40:36+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11837,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5274,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5274",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Project Loved: April 2021 News Post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T11:54:58+00:00",
                    "github_user": {
                        "id": 406,
                        "display_name": "huuishuu",
                        "github_url": "https:\/\/github.com\/huuishuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11839,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 4242,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4242",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN\/ID] Rewrite \"Geki\" and \"Katu\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T17:39:12+00:00",
                    "github_user": {
                        "id": 410,
                        "display_name": "ReiFan49",
                        "github_url": "https:\/\/github.com\/ReiFan49",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11840,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5286,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5286",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update the FA showcase article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T17:49:36+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11841,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5288,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5288",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Relay o!BWC2021 judging criteria changes to the newspost",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T20:27:18+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11845,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7496,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7496",
                    "url": null,
                    "type": "fix",
                    "category": "Contests",
                    "title": "Contest extra_options and artMeta cleanup",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T05:10:46+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11846,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5291,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5291",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Fix wording in \"Geki\" and \"Katu\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T06:22:14+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11850,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5289,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5289",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update 3WC 2021 to Semifinals",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T07:48:11+00:00",
                    "github_user": {
                        "id": 490,
                        "display_name": "shdewz",
                        "github_url": "https:\/\/github.com\/shdewz",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11852,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7513,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7513",
                    "url": null,
                    "type": "add",
                    "category": "Scoring",
                    "title": "Add legacy score entry for solo play",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T08:47:03+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11854,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7508,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7508",
                    "url": null,
                    "type": "fix",
                    "category": "Chat",
                    "title": "Fix avatar in chat",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T09:39:56+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11855,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5292,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5292",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Vektor FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T09:54:31+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11856,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7503,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7503",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Typescript PlaymodeTabs component",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-21T10:49:03+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                }
            ]
        },
        {
            "id": 5730,
            "version": "2021.420.0",
            "display_version": "2021.420.0",
            "users": 0,
            "created_at": "2021-04-20T04:20:29+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11762,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7488,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7488",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix code style",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T13:35:33+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11767,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7490,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7490",
                    "url": null,
                    "type": "add",
                    "category": "Multiplayer",
                    "title": "Add support for barrel roll mod",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T13:57:26+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11771,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5259,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5259",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add NSATT 2019 tournament article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T18:54:37+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11772,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5079,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5079",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[PT-BR] Update Beatmap",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T22:11:49+00:00",
                    "github_user": {
                        "id": 369,
                        "display_name": "daviirodrig",
                        "github_url": "https:\/\/github.com\/daviirodrig",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11774,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7494,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7494",
                    "url": null,
                    "type": "fix",
                    "category": "Scoring",
                    "title": "Score mods should be of type object",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T03:56:40+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11775,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7493,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7493",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Prevent text wrapping of explicit badge",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T05:37:54+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11779,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7476,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7476",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Slightly more precise shortened beatmap stats",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T07:33:00+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11783,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5260,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5260",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update options\/en.md",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T08:30:09+00:00",
                    "github_user": {
                        "id": 289,
                        "display_name": "penguin2233",
                        "github_url": "https:\/\/github.com\/penguin2233",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11785,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7495,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7495",
                    "url": null,
                    "type": "fix",
                    "category": "Forum",
                    "title": "Prevent redirect loop on invalid topic",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T08:47:23+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11786,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5245,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5245",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add \"Featured artist showcase beatmaps\" wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T09:18:45+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11787,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7489,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7489",
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Allow 'external' contests to render using the art contest appearance",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T09:34:53+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11791,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5204,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5204",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Rules\/Content voting process\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T13:03:34+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11792,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5264,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5264",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix metadata in the PP article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T13:06:31+00:00",
                    "github_user": {
                        "id": 158,
                        "display_name": "osuShiro",
                        "github_url": "https:\/\/github.com\/osuShiro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11793,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5133,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5133",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TH] Add \"Performance points\/ppv2\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T13:09:47+00:00",
                    "github_user": {
                        "id": 510,
                        "display_name": "dumb-stuff",
                        "github_url": "https:\/\/github.com\/dumb-stuff",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11794,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5242,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5242",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Full combo\", \"Combo multiple effect\", \"Slidertails\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T13:21:48+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11795,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5263,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5263",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Allow deletion for accounts outside of EU",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T14:00:35+00:00",
                    "github_user": {
                        "id": 158,
                        "display_name": "osuShiro",
                        "github_url": "https:\/\/github.com\/osuShiro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11796,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5262,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5262",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add NATT 2018 tournament article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T14:16:47+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11797,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5265,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5265",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] \"Combo multiplier effect\" fix unused word and link",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T15:30:48+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11798,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5085,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5085",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[PT-BR] Disambiguation",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T16:03:03+00:00",
                    "github_user": {
                        "id": 369,
                        "display_name": "daviirodrig",
                        "github_url": "https:\/\/github.com\/daviirodrig",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11799,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5267,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5267",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Log Project Loved Team group changes",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T23:29:41+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11800,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5268,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5268",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "fix typo on \"Featured Artists\/Featured Artist Showcase Beatmaps\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T02:59:08+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11803,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5269,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5269",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add 2ToneDisco FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T09:27:03+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11805,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5266,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5266",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add TWC2021 to the listings",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T11:52:29+00:00",
                    "github_user": {
                        "id": 418,
                        "display_name": "Icymice",
                        "github_url": "https:\/\/github.com\/Icymice",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11807,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5270,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5270",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update BN\/NAT\/ALM listing and Staff Log",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-17T15:44:33+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11808,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5250,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5250",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Rework the Offset_Wizard article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-18T00:52:53+00:00",
                    "github_user": {
                        "id": 508,
                        "display_name": "THATotaku",
                        "github_url": "https:\/\/github.com\/THATotaku",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11810,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5271,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5271",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "CWC2021 Preliminary teams",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-18T16:12:06+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11814,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7500,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7500",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Cache default eslint call",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T03:57:25+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11815,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7501,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7501",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Beatmap search adjustments",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T04:35:39+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11826,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5276,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5276",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update osu!team\/GMT\/BN\/ALM listing & Staff Log",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T16:21:16+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11827,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5277,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5277",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TR] Update and rework The Team, [ID\/RU\/ZH] Update The Team",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T17:17:59+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11828,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5257,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5257",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Hidden\" and \"Double-time\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T17:31:40+00:00",
                    "github_user": {
                        "id": 506,
                        "display_name": "wowcake",
                        "github_url": "https:\/\/github.com\/wowcake",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11829,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5249,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5249",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Rework the How_to_Use_the_Offset_Wizard guide",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T18:12:35+00:00",
                    "github_user": {
                        "id": 508,
                        "display_name": "THATotaku",
                        "github_url": "https:\/\/github.com\/THATotaku",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11830,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5203,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5203",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Beat\" & \"Music_theory\/Beat\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-19T20:58:53+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11832,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7504,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7504",
                    "url": null,
                    "type": "fix",
                    "category": "Chat",
                    "title": "Gracefully handle missing user in channels",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-20T04:10:06+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                }
            ]
        },
        {
            "id": 5717,
            "version": "2021.416.0",
            "display_version": "2021.416.0",
            "users": 0,
            "created_at": "2021-04-16T14:32:42+00:00",
            "update_stream": {
                "id": 7,
                "name": "lazer",
                "display_name": "Lazer",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11698,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12367,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12367",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!)",
                    "title": "Add follow delay setting to osu! flashlight mod",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-11T10:07:06+00:00",
                    "github_user": {
                        "id": 9,
                        "display_name": "Joehuu",
                        "github_url": "https:\/\/github.com\/Joehuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11703,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12374,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12374",
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Fix multiplayer test failure",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T05:39:41+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11706,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4359,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4359",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Fix readable key combination string including main modifier along direction-specific",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T06:41:45+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11709,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12377,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12377",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove empty <returns> xmldoc",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T09:25:46+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11711,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12217,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12217",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!)",
                    "title": "Add support for legacy spinner SPM counter",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-12T11:19:06+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11712,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12378,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12378",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix mods not being serialised correctly in ScoreInfo",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T12:54:25+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11713,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12352,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12352",
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Implement the multiplayer spectator leaderboard",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Coming soon!<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-12T16:51:14+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11717,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4360,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4360",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Allow OverlayContainers to optionally not block scroll",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T06:33:49+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11718,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 11328,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11328",
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Fix mods using reference equality unless cast to `IMod`",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T06:36:23+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11719,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12392,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12392",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Don't store online IDs from score submission responses for now",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T06:40:04+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11720,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12394,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12394",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Change default waveform opacity",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">We may decide to force full opacity when in the timing screen at a later point, but for now I'm prioritising usability in compose mode.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-13T09:14:51+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11721,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12393,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12393",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update timeline tick display to differentiate tick type using width",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This is a bit of an intermediary step to the newer design logic that flyte has been working on in the background. I wanted to get this in sooner rather than later as I'm not really happy with the recent changes I made (in response to users not being able to visually align hitobjects to the ticks display).<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/ace0a12e41e9c648e4ada54e2f730ae8a23dbf54\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343531353636312d38646463353330302d396337372d313165622d386133612d6662383062623037343363322e706e67\" alt=\"20210413 164430 (dotnet)\" \/><\/p>\n<p class=\"changelog-md__paragraph\">This should bring the best of both worlds back, and although it doesn't look as good as the final design should at least provide a usable stepping stone in the right direction.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-13T09:14:59+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11722,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12390,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12390",
                    "url": null,
                    "type": "fix",
                    "category": "Platform",
                    "title": "Fix import multiple file types via drag potentially reaching the wrong importer",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T09:21:54+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11723,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12350,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12350",
                    "url": null,
                    "type": "add",
                    "category": "Multiplayer",
                    "title": "Add the multiplayer spectator player grid",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Coming soon!<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-13T10:25:32+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11724,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12391,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12391",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Display separate \"replays watched\" tooltip for replays subsection",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T10:25:50+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11725,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12375,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12375",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Remove alt-mousewheel bindings for volume adjustment",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T11:21:58+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11726,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12382,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12382",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix selecting a slider correcting its path",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T11:38:21+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11727,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12389,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12389",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix ctrl-dragging on an existing selection unexpectedly causing deselection",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T11:38:29+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11728,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12396,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12396",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update timeline slider\/spinner apperance",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Again, this is an intermediary step towards the newer design logic, mostly aimed to improve UX rather than reach a final design.<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/c16192c900f31920ced888422a0a95fd5ba73048\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343533393136352d32623866346338302d396338662d313165622d396132612d3933343839646539366465302e706e67\" alt=\"20210413 193345 (dotnet)\" \/><\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/f2e8b154dda7abbd7969f059ba005f27fa9e5502\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343533393133382d32336366613830302d396338662d313165622d386635612d3139353266366362303834372e706e67\" alt=\"20210413 193333 (dotnet)\" \/><\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/d7dec48679af354bba6bb21f586a19b900dff078\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343533393034392d30343338376638302d396338662d313165622d383830622d3738336638663766666133612e706e67\" alt=\"20210413 193241 (dotnet)\" \/><\/p>\n<p class=\"changelog-md__paragraph\">Extremities of colour choice:<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/f29cd22140b49d9c8bd5cd17273cf6753d8829e4\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343533383838332d64336630653130302d396338652d313165622d383530392d3038643835646432373636352e676966\" alt=\"20210413 193100 (dotnet)\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-13T11:47:45+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11729,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12397,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12397",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Simplify ExtendableCircle component",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T13:22:38+00:00",
                    "github_user": {
                        "id": 144,
                        "display_name": "EVAST9919",
                        "github_url": "https:\/\/github.com\/EVAST9919",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11730,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4363,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4363",
                    "url": null,
                    "type": "fix",
                    "category": "Testing",
                    "title": "Fix audio device freeing on Linux",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T13:42:31+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11732,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12361,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12361",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add basic AiMod-like features",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">First progress towards adding back a mapping helper system.<\/p>\n<p class=\"changelog-md__paragraph\">This adds<\/p>\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item\"><div>A &quot;verify&quot; tab<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>Check and issue classes<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>2 realistic checks\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>Background presence (ruleset-agnostic)<\/div><\/li>\n<li class=\"changelog-md__list-item changelog-md__list-item--deep\"><div>Offscreen hitobjects (osu-specific)<\/div><\/li>\n<\/ul>\n<\/div><\/li>\n<\/ul>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-13T15:35:15+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11736,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12395,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12395",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix beatmap background displayed if storyboard is hidden on \"Cinema\" mod",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T05:31:03+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11738,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4366,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4366",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Fix GridContainer autosizing to relatively-sized children",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T10:27:50+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11739,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4368,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4368",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Improve shutdown performance by not joining the sync device thread",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T12:32:49+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11745,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4367,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4367",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Fix possible nullref when setting DecoupleableInterpolatingFramedClock.Rate",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T05:27:43+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11749,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4365,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4365",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Revert weird CursorContainer logic that causes incorrect cursor positioning",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T06:42:25+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11750,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12418,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12418",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Make `Mod.Description` abstract and add missing descriptions",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T06:42:36+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11753,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4369,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4369",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Don't collect input from non-active `InputHandler`s",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T07:11:46+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11755,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12330,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12330",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Send a warning notification if device is unplugged and at low battery",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-15T10:21:05+00:00",
                    "github_user": {
                        "id": 509,
                        "display_name": "Cublibre",
                        "github_url": "https:\/\/github.com\/Cublibre",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11756,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12422,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12422",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove usage of Lazy<List<...>> by always allocating an empty list",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T11:09:40+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11757,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12420,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12420",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add rounded corners to timeline ticks display",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T11:11:20+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11758,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12421,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12421",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Show correct colours (and improve design) of summary timeline",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-15T11:41:21+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11759,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12423,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12423",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Show kiai time on summary timeline (and split out other control point types)",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/2f3d24b2f28b2d40bfd89cd13481ea4ec8f37d6d\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343834393333392d39616535373738302d396531612d313165622d393363612d3337636436616335363930322e676966\" alt=\"20210415 184410 (dotnet)\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-15T12:19:33+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11760,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12428,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12428",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Fix gameplay cursor showing offscreen",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T12:58:43+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11761,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12376,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12376",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Rewrite framed replay input handler for robustness",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T13:26:35+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11763,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12429,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12429",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Simplify ExtendableCircle even more",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T13:36:33+00:00",
                    "github_user": {
                        "id": 144,
                        "display_name": "EVAST9919",
                        "github_url": "https:\/\/github.com\/EVAST9919",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11764,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12412,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12412",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update timeline control point display",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This brings the design logic for the timeline's control point display closer to the newer designs flyte is working on. As with the other recent editor changes, this is intended to be a usability improvement rather than a final design.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-15T13:43:27+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11765,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12406,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12406",
                    "url": null,
                    "type": "fix",
                    "category": "User Interface",
                    "title": "Fix volume control bindings not supporting key repeat",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-15T13:47:13+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11766,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12410,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12410",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!)",
                    "title": "Add \"Barrel Roll\" mod",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Just a quick one which feels like it could be fun.<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/5971805101e764955155627d9d1505e0857a4659\/68747470733a2f2f757365722d696d616765732e67697468756275736572636f6e74656e742e636f6d2f3139313333352f3131343637363335352d32653938343438302d396434342d313165622d393066622d3162383332613439643436652e676966\" alt=\"20210414 170846 (dotnet)\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-15T13:53:34+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11768,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12408,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12408",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Hide top-right HUD overlay elements as part of HUD visibility",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T14:29:55+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11769,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12405,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12405",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!)",
                    "title": "Add support for legacy skin's `CursorCentre` setting",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-15T15:30:53+00:00",
                    "github_user": {
                        "id": 175,
                        "display_name": "frenzibyte",
                        "github_url": "https:\/\/github.com\/frenzibyte",
                        "osu_username": "frenzibyte",
                        "user_id": 14210502,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/14210502"
                    }
                },
                {
                    "id": 11770,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12404,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12404",
                    "url": null,
                    "type": "add",
                    "category": "User Interface",
                    "title": "Add simple acceleration to volume metre adjustments",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This allows adjustments of 1% if scrolling slowly, but ramps up fast to the original adjustment speed. Best of both worlds hopefully!<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-15T15:31:26+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11773,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12431,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12431",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix timeline seeking to an incorrect initial location",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T01:19:12+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11776,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12436,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12436",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix slider not displaying in timeline during zero-duration placement",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T05:52:04+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11777,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4370,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4370",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove IBindable interface inheritance",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T06:52:58+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11778,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12437,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12437",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix placement blueprints not being correctly removed after a rolled back placement",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T07:25:05+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11780,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12441,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12441",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix an occasional crash when deleting a HitObject via internal means",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T08:15:53+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11781,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12439,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12439",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay",
                    "title": "Further refactor FrameReplayInputHandler, simplify the template code",
                    "message_html": "<div class='changelog-md'><h3 class=\"changelog-md__header changelog-md__header--3\">Breaking changes<\/h3>\n<p class=\"changelog-md__paragraph\">The template code to deriving <code>FramedReplayInputHandler<\/code> is changed.<br \/><code>CurrentTime<\/code> is now non-null.<br \/>You can also use <code>StartFrame<\/code> and <code>EndFrame<\/code> for the interpolation logic, as it simplifies the code.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-16T08:16:09+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11782,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12442,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12442",
                    "url": null,
                    "type": "fix",
                    "category": "Multiplayer",
                    "title": "Attempt to fix match subscreen test failure",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T08:29:58+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11784,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12443,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12443",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix div-by-zero when scaling a 1-dimensional slider",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T08:31:42+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11788,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12440,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12440",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Apply changes resulting from IBindable interface updates",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T09:37:47+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11789,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12445,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12445",
                    "url": null,
                    "type": "add",
                    "category": "Editor",
                    "title": "Add border showing selected blueprints in timeline",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-16T10:22:04+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11790,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12444,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12444",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Avoid all scenarios where sliders can become zero length",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-16T10:33:36+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5716,
            "version": "2021.415.0",
            "display_version": "2021.415.0",
            "users": 0,
            "created_at": "2021-04-15T05:27:51+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11715,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5247,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5247",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Remove Xinely from Users with unique titles",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T04:42:57+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11716,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7472,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7472",
                    "url": null,
                    "type": "fix",
                    "category": "Chat",
                    "title": "Load old messages when reopening chat PM ",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T04:49:51+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11731,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5253,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5253",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add CWC 2021 link to CWC index page",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T15:32:35+00:00",
                    "github_user": {
                        "id": 418,
                        "display_name": "Icymice",
                        "github_url": "https:\/\/github.com\/Icymice",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11733,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5254,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5254",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Conclude BTT6",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T17:54:35+00:00",
                    "github_user": {
                        "id": 31,
                        "display_name": "fajar13k",
                        "github_url": "https:\/\/github.com\/fajar13k",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11735,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5251,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5251",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update Universal_Offset Stub",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T04:29:27+00:00",
                    "github_user": {
                        "id": 508,
                        "display_name": "THATotaku",
                        "github_url": "https:\/\/github.com\/THATotaku",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11737,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5256,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5256",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update formatting and grammar Universal offset",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T10:00:07+00:00",
                    "github_user": {
                        "id": 508,
                        "display_name": "THATotaku",
                        "github_url": "https:\/\/github.com\/THATotaku",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11740,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5258,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5258",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add fiend FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T12:34:04+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11741,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5246,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5246",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Rewrite all instances of \"osu!standard\" as \"osu!\" in the Article Styling Criteria",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T21:03:50+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11742,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5252,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5252",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update 3WC 2021 to Quarterfinals",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-14T21:20:10+00:00",
                    "github_user": {
                        "id": 490,
                        "display_name": "shdewz",
                        "github_url": "https:\/\/github.com\/shdewz",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11743,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7471,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7471",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Limit showing 12 difficulties on beatmap card",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T04:32:41+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11744,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7487,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7487",
                    "url": null,
                    "type": "fix",
                    "category": "Localisation",
                    "title": "Update translations from crowdin",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T05:23:07+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11747,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7478,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7478",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Larger cover on beatmap card",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T05:48:19+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11748,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7479,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7479",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove lesscss osu-hsla plugin",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T06:25:59+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11751,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7482,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7482",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Discussions",
                    "title": "Fix invalid timestamp breaking review editor on load",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T06:49:28+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11752,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7425,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7425",
                    "url": null,
                    "type": "add",
                    "category": "Tooling",
                    "title": "Add ESLint config",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T07:01:51+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11754,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7473,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7473",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Fix beatmap card difficulties popup",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-15T09:15:37+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                }
            ]
        },
        {
            "id": 5715,
            "version": "20210413",
            "display_version": "20210413",
            "users": 1,
            "created_at": "2021-04-13T03:35:54+00:00",
            "update_stream": {
                "id": 3,
                "name": "cuttingedge",
                "display_name": "Cutting Edge",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Bump MySqlConnector from 1.3.2 to 1.3.3",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T10:21:10+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "BanchoBot",
                        "github_url": null,
                        "osu_username": "BanchoBot",
                        "user_id": 3,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/3"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Refresh editor video setting state (as it now covers storyboards)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T03:27:46+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Update spinner-rpm sprite to not be anchored to bottom of screen (lazer)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-13T03:27:46+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5714,
            "version": "2021.412.0",
            "display_version": "2021.412.0",
            "users": 0,
            "created_at": "2021-04-12T07:05:15+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11686,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5233,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5233",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "TWC2021 Grandfinals update",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T15:53:28+00:00",
                    "github_user": {
                        "id": 45,
                        "display_name": "WalterToro",
                        "github_url": "https:\/\/github.com\/WalterToro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11693,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5240,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5240",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add YUZUKINGDOM FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-10T10:26:13+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11694,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5187,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5187",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[FR] Katu",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-10T11:37:23+00:00",
                    "github_user": {
                        "id": 219,
                        "display_name": "DoryanR",
                        "github_url": "https:\/\/github.com\/DoryanR",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11695,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5241,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5241",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Minor fixes to grid snapping article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-10T12:15:01+00:00",
                    "github_user": {
                        "id": 158,
                        "display_name": "osuShiro",
                        "github_url": "https:\/\/github.com\/osuShiro",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11696,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5237,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5237",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update BN listing",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T00:54:09+00:00",
                    "github_user": {
                        "id": 349,
                        "display_name": "hypercyte",
                        "github_url": "https:\/\/github.com\/hypercyte",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11697,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5244,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5244",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Fix Ikutoshitsuki link in March Project Loved news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T05:37:42+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11699,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5239,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5239",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add CI check to make sure links without hostname start with `\/wiki\/`",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T10:14:34+00:00",
                    "github_user": {
                        "id": 24,
                        "display_name": "cl8n",
                        "github_url": "https:\/\/github.com\/cl8n",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11700,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5235,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5235",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add osu! Beatmapping World Championship 2021 Judge Applications newspost and wiki article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T14:23:29+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11701,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7466,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7466",
                    "url": null,
                    "type": "add",
                    "category": "Multiplayer",
                    "title": "Add follow delay flashlight mod setting",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T17:17:08+00:00",
                    "github_user": {
                        "id": 9,
                        "display_name": "Joehuu",
                        "github_url": "https:\/\/github.com\/Joehuu",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11702,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5215,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5215",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN] Add MCNC2021 wiki page",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-11T20:17:44+00:00",
                    "github_user": {
                        "id": 341,
                        "display_name": "xz1z1z1z1z",
                        "github_url": "https:\/\/github.com\/xz1z1z1z1z",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11704,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7431,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7431",
                    "url": null,
                    "type": "fix",
                    "category": "User Profile",
                    "title": "Allow clicking username in user card",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T06:23:46+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11705,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7448,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7448",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Update context declaration style",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T06:36:54+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11707,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7469,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7469",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "Use \"list\" image for beatmap card left side thumbnail",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T06:59:14+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11708,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7430,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7430",
                    "url": null,
                    "type": "add",
                    "category": "Api",
                    "title": "Add user parameter type",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T08:19:29+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11710,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7434,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7434",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Typescript beatmap selector",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-12T10:46:06+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                }
            ]
        },
        {
            "id": 5713,
            "version": "20210411",
            "display_version": "20210411",
            "users": 1,
            "created_at": "2021-04-11T11:37:28+00:00",
            "update_stream": {
                "id": 3,
                "name": "cuttingedge",
                "display_name": "Cutting Edge",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix selection with spinners causing incorrect positional movement",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-30T06:09:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix email being specifically mentioned for bss notifications",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-03-31T07:06:33+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Allow configuration to be constructed with culture invariant mode",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-03T10:34:32+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Tournament",
                    "title": "Use culture invariant parsing for tournament.cfg",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-03T10:34:32+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Update second instance of \"show video\" editor menu text content",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-06T02:17:16+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "peppy",
                        "github_url": null,
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": null,
                    "repository": null,
                    "github_pull_request_id": null,
                    "github_url": null,
                    "url": null,
                    "type": "fix",
                    "category": "Compatibility",
                    "title": "Allow multiple VBOs with ANGLE via settings toggle",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This was added to allow some users to test whether toggling this setting fixes a performance regression <a class=\"changelog-md__link\" href=\"https:\/\/github.com\/ppy\/osu-stable-issues\/issues\/719\">reported<\/a> in recent cutting edge releases.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-11T11:34:23+00:00",
                    "github_user": {
                        "id": null,
                        "display_name": "smoogipoo",
                        "github_url": null,
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                }
            ]
        },
        {
            "id": 5708,
            "version": "2021.410.0",
            "display_version": "2021.410.0",
            "users": 0,
            "created_at": "2021-04-10T10:10:56+00:00",
            "update_stream": {
                "id": 7,
                "name": "lazer",
                "display_name": "Lazer",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11647,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4348,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4348",
                    "url": null,
                    "type": "fix",
                    "category": "Platform",
                    "title": "Fix alt-tab behaviour when in full screen mode (in a better way)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T05:11:50+00:00",
                    "github_user": {
                        "id": 452,
                        "display_name": "Susko3",
                        "github_url": "https:\/\/github.com\/Susko3",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11649,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12122,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12122",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Fix editor freezing when creating huge perfect circle sliders",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-08T06:18:23+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11651,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12334,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12334",
                    "url": null,
                    "type": "fix",
                    "category": "Input",
                    "title": "Fix various input behaviours breaking in the latest release",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T09:11:47+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11652,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4350,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4350",
                    "url": null,
                    "type": "fix",
                    "category": "Platform",
                    "title": "Fix window focused state not correctly arriving at gameplay",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-08T09:19:34+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11658,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12321,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12321",
                    "url": null,
                    "type": "add",
                    "category": "Multiplayer",
                    "title": "Add multiplayer spectating user state and button",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This doesn't quite work yet, so you can press the button but don't expect much from it!<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-08T10:48:58+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11659,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12342,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12342",
                    "url": null,
                    "type": "fix",
                    "category": "Testing",
                    "title": "Fix intermittent test failure",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T13:23:38+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11663,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12344,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12344",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix slightly incorrect solo score submission routes",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T14:55:16+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11666,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4352,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4352",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove obsolete method",
                    "message_html": null,
                    "major": true,
                    "created_at": "2021-04-09T05:19:40+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11667,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12347,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12347",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Remove obsolete code",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T05:44:34+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11670,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4354,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4354",
                    "url": null,
                    "type": "fix",
                    "category": "Tooling",
                    "title": "Update rider metadata files in line with 2021.1 release",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T06:53:15+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11671,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12348,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12348",
                    "url": null,
                    "type": "fix",
                    "category": "Online",
                    "title": "Fix scores not being accepted due to missing ruleset ID",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T06:54:19+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11673,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12349,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12349",
                    "url": null,
                    "type": "fix",
                    "category": "Gameplay (osu!catch)",
                    "title": "Fix catcher position update delayed one frame (alternative solution)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T07:44:02+00:00",
                    "github_user": {
                        "id": 26,
                        "display_name": "ekrctb",
                        "github_url": "https:\/\/github.com\/ekrctb",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11674,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4355,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4355",
                    "url": null,
                    "type": "fix",
                    "category": "Testing",
                    "title": "Fix osu.Framework.Tests compilation on mobile platforms",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T08:15:39+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11675,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12340,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12340",
                    "url": null,
                    "type": "add",
                    "category": "Gameplay (osu!)",
                    "title": "Add support for slider whistle hitsounds",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Somehow this wasn't implemented until now. Some sliders once again produce the &quot;whistle&quot; sound while sliding.<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-09T09:12:46+00:00",
                    "github_user": {
                        "id": 5,
                        "display_name": "smoogipoo",
                        "github_url": "https:\/\/github.com\/smoogipoo",
                        "osu_username": "smoogipoo",
                        "user_id": 1040328,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/1040328"
                    }
                },
                {
                    "id": 11677,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12337,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12337",
                    "url": null,
                    "type": "fix",
                    "category": "Editor",
                    "title": "Improve UX of correcting invalid slider path types",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Currently, sliders with 4 or more control points can be set to &quot;perfect curve&quot; with the curve being identical to Bezier, because PerfectCurve falls back to Bezier with more than 3 points. This becomes somewhat confusing if the user is unaware of this behaviour, as the UI seems to insist that the curve is a &quot;perfect curve&quot;.<\/p>\n<p class=\"changelog-md__paragraph\">With this, however, setting &quot;perfect curve&quot; on a segment with more than 3 points will split said segment into two, one of which is the 3-point circular arc which the user probably wanted. Additionally, perfect curve segments with more than 3 points automatically become Bezier segments.<\/p>\n<p class=\"changelog-md__figure-container\"><img class=\"changelog-md__figure-image\" src=\"https:\/\/i.ppy.sh\/262e2641e0a717892e40dbb05a67f12c8286fafc\/68747470733a2f2f63616d6f2e67697468756275736572636f6e74656e742e636f6d2f666338343562376261656530336239643365316366643135636364343533303063386234376162653138323333656338613637336637653236646233343563612f3638373437343730373333613266326636393265363936643637373537323265363336663664326635383737363137383438333036363265363736393636\" alt=\"\" \/><\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-09T10:26:50+00:00",
                    "github_user": {
                        "id": 133,
                        "display_name": "Naxesss",
                        "github_url": "https:\/\/github.com\/Naxesss",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11684,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12354,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12354",
                    "url": null,
                    "type": "fix",
                    "category": "Audio",
                    "title": "Reduce the randomised pitch range of hover sounds",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">The range felt a bit too much with the new samples.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-09T14:43:51+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11687,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4356,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4356",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Update libraries",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Contains an SDL update with fixes for window focus state being wrong on startup.<\/p>\n<\/div>",
                    "major": false,
                    "created_at": "2021-04-09T16:16:11+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11688,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4340,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4340",
                    "url": null,
                    "type": "add",
                    "category": "Input",
                    "title": "Add left\/right modifier support to KeyBindingContainer",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This allows binding LeftShift and RightShift to different bindings (along with the other modifier keys too).<\/p>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-09T16:24:34+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11689,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 11688,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11688",
                    "url": null,
                    "type": "fix",
                    "category": "Difficulty Calculation",
                    "title": "Implement dynamic previous hitobject retention for Skill class",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T16:25:08+00:00",
                    "github_user": {
                        "id": 254,
                        "display_name": "Syriiin",
                        "github_url": "https:\/\/github.com\/Syriiin",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11690,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12353,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12353",
                    "url": null,
                    "type": "add",
                    "category": "Audio",
                    "title": "New UI sounds (iteration two)",
                    "message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Same disclaimers as last time:<\/p>\n<ul class=\"changelog-md__list\">\n<li class=\"changelog-md__list-item\"><div>Sounds are a work in progress and may be replaced\/reverted in the future<\/div><\/li>\n<li class=\"changelog-md__list-item\"><div>The SFX volume vs music balance will be off until song levels are normalised\/etc<\/div><\/li>\n<\/ul>\n<\/div>",
                    "major": true,
                    "created_at": "2021-04-09T16:45:47+00:00",
                    "github_user": {
                        "id": 6,
                        "display_name": "nekodex",
                        "github_url": "https:\/\/github.com\/nekodex",
                        "osu_username": "nekodex",
                        "user_id": 102,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/102"
                    }
                },
                {
                    "id": 11691,
                    "repository": "ppy\/osu-framework",
                    "github_pull_request_id": 4353,
                    "github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4353",
                    "url": null,
                    "type": "fix",
                    "category": "Platform",
                    "title": "Fix window potentialy having an incorrect focused state on windows",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T16:54:55+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                },
                {
                    "id": 11692,
                    "repository": "ppy\/osu",
                    "github_pull_request_id": 12356,
                    "github_url": "https:\/\/github.com\/ppy\/osu\/pull\/12356",
                    "url": null,
                    "type": "fix",
                    "category": "Framework",
                    "title": "Update framework",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T18:34:25+00:00",
                    "github_user": {
                        "id": 3,
                        "display_name": "peppy",
                        "github_url": "https:\/\/github.com\/peppy",
                        "osu_username": "peppy",
                        "user_id": 2,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2"
                    }
                }
            ]
        },
        {
            "id": 5707,
            "version": "2021.409.0",
            "display_version": "2021.409.0",
            "users": 0,
            "created_at": "2021-04-09T13:16:12+00:00",
            "update_stream": {
                "id": 8,
                "name": "web",
                "display_name": "Web",
                "is_featured": false
            },
            "changelog_entries": [
                {
                    "id": 11635,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7429,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7429",
                    "url": null,
                    "type": "fix",
                    "category": "User Profile",
                    "title": "Fix detail menu button size in profile page",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-07T06:09:09+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11637,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5219,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5219",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add Boxplot FA news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-07T08:09:52+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11641,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7424,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7424",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Observable currentUser (in OsuCore)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-07T12:44:28+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11644,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7404,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7404",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix typing for BeatmapsContext",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-07T13:43:10+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11646,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5223,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5223",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Remove song restrictions from qualification BN rules",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T01:38:54+00:00",
                    "github_user": {
                        "id": 113,
                        "display_name": "VINXIS",
                        "github_url": "https:\/\/github.com\/VINXIS",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11650,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7417,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7417",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Typescript suffixed number formatter",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T08:50:41+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11653,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7443,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7443",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Fix test name for BeatmapsController",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T09:28:07+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11654,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7420,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7420",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Update Beatmapset Json interface",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T09:43:20+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11655,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7419,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7419",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Allow css to control circular progress component",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T10:00:00+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11657,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7421,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7421",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Additional attribute when audio plays past halfway",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T10:19:17+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11660,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5080,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5080",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add TKBC2 article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T14:05:56+00:00",
                    "github_user": {
                        "id": 357,
                        "display_name": "Hoshikuz",
                        "github_url": "https:\/\/github.com\/Hoshikuz",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11661,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5226,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5226",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[EN] Update link to ppv2 in ppv1's article",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T14:31:22+00:00",
                    "github_user": {
                        "id": 507,
                        "display_name": "SiderealArt",
                        "github_url": "https:\/\/github.com\/SiderealArt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11664,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5222,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5222",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Rewrite \"Beatmap packs 0916\" as \"Legacy Beatmap Packs\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T15:02:20+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11665,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5229,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5229",
                    "url": null,
                    "type": "add",
                    "category": "Wiki",
                    "title": "Add April MBC news post",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-08T20:58:30+00:00",
                    "github_user": {
                        "id": 27,
                        "display_name": "pishifat",
                        "github_url": "https:\/\/github.com\/pishifat",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11668,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7445,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7445",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Return empty response for json route not found",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T05:51:37+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11669,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7447,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7447",
                    "url": null,
                    "type": "fix",
                    "category": "Scoring",
                    "title": "Check user id for score completion",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T06:27:39+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11672,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7442,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7442",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Info",
                    "title": "Less generic replay download MIME type",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T07:08:00+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11676,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7444,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7444",
                    "url": null,
                    "type": "fix",
                    "category": "Code Quality",
                    "title": "Update SearchSort component to observe changes",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T09:16:46+00:00",
                    "github_user": {
                        "id": 1,
                        "display_name": "notbakaneko",
                        "github_url": "https:\/\/github.com\/notbakaneko",
                        "osu_username": "notbakaneko",
                        "user_id": 10751776,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/10751776"
                    }
                },
                {
                    "id": 11678,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5232,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5232",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update BN\/GMT listing & Staff log",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T11:08:43+00:00",
                    "github_user": {
                        "id": 262,
                        "display_name": "zeusminus",
                        "github_url": "https:\/\/github.com\/zeusminus",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11679,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5228,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5228",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "Update ppv2 link in [ZH] ppv1",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T12:30:40+00:00",
                    "github_user": {
                        "id": 37,
                        "display_name": "TPGPL",
                        "github_url": "https:\/\/github.com\/TPGPL",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11680,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5221,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5221",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"Rules\/Explicit content\" and an example screenshot",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T12:33:02+00:00",
                    "github_user": {
                        "id": 323,
                        "display_name": "Nivalyx",
                        "github_url": "https:\/\/github.com\/Nivalyx",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11681,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5200,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5200",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[ID] Add \"osu! File Formats\/{osb,osk,osz}\"",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T12:37:04+00:00",
                    "github_user": {
                        "id": 384,
                        "display_name": "mousesalt",
                        "github_url": "https:\/\/github.com\/mousesalt",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11682,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7422,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7422",
                    "url": null,
                    "type": "fix",
                    "category": "Beatmap Listing",
                    "title": "New beatmapset card",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T12:47:10+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                },
                {
                    "id": 11683,
                    "repository": "ppy\/osu-wiki",
                    "github_pull_request_id": 5151,
                    "github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/5151",
                    "url": null,
                    "type": "fix",
                    "category": "Wiki",
                    "title": "[TH] Add osu!tourney articles (multiplayer, setup, skinning, spectating, commands)",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T12:49:53+00:00",
                    "github_user": {
                        "id": 397,
                        "display_name": "C0NS03L",
                        "github_url": "https:\/\/github.com\/C0NS03L",
                        "osu_username": null,
                        "user_id": null,
                        "user_url": null
                    }
                },
                {
                    "id": 11685,
                    "repository": "ppy\/osu-web",
                    "github_pull_request_id": 7461,
                    "github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7461",
                    "url": null,
                    "type": "fix",
                    "category": "Misc",
                    "title": "Easier to read date on beatmap card",
                    "message_html": null,
                    "major": false,
                    "created_at": "2021-04-09T15:30:31+00:00",
                    "github_user": {
                        "id": 2,
                        "display_name": "nanaya",
                        "github_url": "https:\/\/github.com\/nanaya",
                        "osu_username": "nanaya",
                        "user_id": 2387883,
                        "user_url": "https:\/\/osu.ppy.sh\/users\/2387883"
                    }
                }
            ]
        }
    ],
    "search": {
        "stream": null,
        "from": null,
        "to": null,
        "max_id": null,
        "limit": 21
    }
}

HTTP Request

GET /changelog

api/v2/changelog/{changelog}

curl -X GET -G "https://osu.ppy.sh/api/v2/changelog/1" 
const url = new URL("https://osu.ppy.sh/api/v2/changelog/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (404):

{
    "error": null
}

HTTP Request

GET /changelog/{changelog}

api/v2/matches

curl -X GET -G "https://osu.ppy.sh/api/v2/matches" 
const url = new URL("https://osu.ppy.sh/api/v2/matches");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /matches

api/v2/matches/{match}

curl -X GET -G "https://osu.ppy.sh/api/v2/matches/1" 
const url = new URL("https://osu.ppy.sh/api/v2/matches/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /matches/{match}

api/v2/rooms/{mode?}

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /rooms/{mode?}

api/v2/rooms/{room}/users/{user}

curl -X PUT "https://osu.ppy.sh/api/v2/rooms/1/users/1" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1/users/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

PUT /rooms/{room}/users/{user}

api/v2/rooms/{room}/users/{user}

curl -X DELETE "https://osu.ppy.sh/api/v2/rooms/1/users/1" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1/users/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "DELETE",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

DELETE /rooms/{room}/users/{user}

api/v2/rooms/{room}/leaderboard

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/1/leaderboard" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1/leaderboard");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /rooms/{room}/leaderboard

api/v2/rooms/{room}/playlist/{playlist}/scores

curl -X POST "https://osu.ppy.sh/api/v2/rooms/1/playlist/1/scores" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1/playlist/1/scores");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

POST /rooms/{room}/playlist/{playlist}/scores

api/v2/rooms/{room}/playlist/{playlist}/scores/{score}

curl -X PUT "https://osu.ppy.sh/api/v2/rooms/1/playlist/1/scores/1" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1/playlist/1/scores/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "PUT",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

PUT /rooms/{room}/playlist/{playlist}/scores/{score}

PATCH /rooms/{room}/playlist/{playlist}/scores/{score}

api/v2/reports

curl -X POST "https://osu.ppy.sh/api/v2/reports" 
const url = new URL("https://osu.ppy.sh/api/v2/reports");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

POST /reports

api/v2/rooms

curl -X POST "https://osu.ppy.sh/api/v2/rooms" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "POST",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

OAuth lazer

HTTP Request

POST /rooms

api/v2/rooms/{room}

curl -X GET -G "https://osu.ppy.sh/api/v2/rooms/1" 
const url = new URL("https://osu.ppy.sh/api/v2/rooms/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /rooms/{room}

api/v2/seasonal-backgrounds

curl -X GET -G "https://osu.ppy.sh/api/v2/seasonal-backgrounds" 
const url = new URL("https://osu.ppy.sh/api/v2/seasonal-backgrounds");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "ends_at": "2020-12-27T16:00:00+00:00",
    "backgrounds": [
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8012\/bc2cacf70292a6fa37d7f651dc15832e391cee8b8e78ad9f659dd394c64c8455_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/7206818?1618299428.png",
                "country_code": "RU",
                "default_group": "default",
                "id": 7206818,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": true,
                "last_visit": null,
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Dem4eg-"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8066\/582b17e6ae2a608831c0092a978d06cb8e8851bce948053a12188bc11a655e76_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/14634525?1613334126.jpeg",
                "country_code": "CA",
                "default_group": "default",
                "id": 14634525,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-12T04:46:48+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Kondroel"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8072\/55c7f1bbcf64bae42b8032a5f754c783af390e6c7e27b41456b4c6f4e5bfc204_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/13103233?1620179815.jpeg",
                "country_code": "ID",
                "default_group": "default",
                "id": 13103233,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": true,
                "is_supporter": true,
                "last_visit": "2021-05-12T12:06:39+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Dreamxiety"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8111\/d08a3219d78938de7e1c2d1e4fac311522139cb9edb38b1a6b9918f9fd66716e_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/10414550?1605261578.jpeg",
                "country_code": "PH",
                "default_group": "default",
                "id": 10414550,
                "is_active": false,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-04-11T13:27:55+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Kiragi Sakki"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8113\/f7c29e692401a9436e79ed7a743ec9725ddc11d26db532e925c5c3a16b690f47_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/7295733?1620344945.jpeg",
                "country_code": "DE",
                "default_group": "default",
                "id": 7295733,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": null,
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Sjao"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8114\/586402eac456ff57f7b74f8725fc5000eb0a4bf0760a838f8e5289b0ab6b18e0_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/12694139?1620407961.jpeg",
                "country_code": "CA",
                "default_group": "default",
                "id": 12694139,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-12T04:26:22+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "McFriedFries"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8142\/156f835d86a53dda57758b6ad7d8587b7fdcbc7529cbd9df3c5e96c6530e24ea_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/7692958?1577629720.jpeg",
                "country_code": "TW",
                "default_group": "default",
                "id": 7692958,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-08T23:26:22+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Aoki chiaki"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8184\/943a3c2044b60aceed0418b18d21144f60d1185764db908c88da1299a1f0391e_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/3661521?1585236372.png",
                "country_code": "US",
                "default_group": "default",
                "id": 3661521,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-11T16:19:39+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Shuuzo"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8198\/78a04b425890e5ef534ce2b1a487cd47acd73c98b1167e50dbab490f26bd7e7c_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/9948284?1615274501.gif",
                "country_code": "ID",
                "default_group": "default",
                "id": 9948284,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": null,
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "ShovelKun"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8206\/c382c8222cc5a4aa12958ee16300adeeedf11168d9ff66fe0231804baafff6f9_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/14406940?1610194830.jpeg",
                "country_code": "ID",
                "default_group": "default",
                "id": 14406940,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": null,
                "pm_friends_only": true,
                "profile_colour": null,
                "username": "not slepp"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8209\/8cfb1c7ec28039857d8320e0f8a2ad391158ce336274859f1259f46e941197ed_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/8244635?1614351763.jpeg",
                "country_code": "SG",
                "default_group": "default",
                "id": 8244635,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": true,
                "is_supporter": true,
                "last_visit": "2021-05-12T12:10:32+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Hecatia"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8210\/bc7bacb16558ab1bb82cee7221323c30eda1e0577710ec0cba622439f6f24192_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/8377453?1511474360.png",
                "country_code": "US",
                "default_group": "default",
                "id": 8377453,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-12T08:32:00+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "PacifiedPaints"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8217\/5c9f167e5c599beec683b33eec2457ed94fd2c9862580e59d45243743675beb9_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/11516014?1578351707.jpeg",
                "country_code": "MX",
                "default_group": "default",
                "id": 11516014,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": null,
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Kwms024"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8226\/1656a81a6b8552d5a332009cc7252fa0ab85b4322c936bbe31483cd691b01ec7_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/4817223?1585443935.jpeg",
                "country_code": "US",
                "default_group": "default",
                "id": 4817223,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": false,
                "last_visit": "2021-05-12T08:02:15+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "Tofumang"
            }
        },
        {
            "url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8229\/3553d3a50502820e903e1b4a3ee688ecf3119a49d36303c9c5ad238ef9c18d34_opt.jpg",
            "user": {
                "avatar_url": "https:\/\/a.ppy.sh\/9044692?1581321965.png",
                "country_code": "JP",
                "default_group": "default",
                "id": 9044692,
                "is_active": true,
                "is_bot": false,
                "is_deleted": false,
                "is_online": false,
                "is_supporter": true,
                "last_visit": "2021-05-03T14:09:16+00:00",
                "pm_friends_only": false,
                "profile_colour": null,
                "username": "HEKUSODASU"
            }
        }
    ]
}

HTTP Request

GET /seasonal-backgrounds

api/v2/scores/{mode}/{score}/download

curl -X GET -G "https://osu.ppy.sh/api/v2/scores/1/1/download" 
const url = new URL("https://osu.ppy.sh/api/v2/scores/1/1/download");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /scores/{mode}/{score}/download

api/v2/scores/{mode}/{score}

curl -X GET -G "https://osu.ppy.sh/api/v2/scores/1/1" 
const url = new URL("https://osu.ppy.sh/api/v2/scores/1/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /scores/{mode}/{score}

api/v2/beatmapsets/search/{filters?}

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/search/" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/search/");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /beatmapsets/search/{filters?}

api/v2/beatmapsets/lookup

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/lookup" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/lookup");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /beatmapsets/lookup

api/v2/beatmapsets/{beatmapset}/download

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/1/download" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/1/download");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth lazer

HTTP Request

GET /beatmapsets/{beatmapset}/download

api/v2/beatmapsets/{beatmapset}

curl -X GET -G "https://osu.ppy.sh/api/v2/beatmapsets/1" 
const url = new URL("https://osu.ppy.sh/api/v2/beatmapsets/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth public

HTTP Request

GET /beatmapsets/{beatmapset}

api/v2/friends

curl -X GET -G "https://osu.ppy.sh/api/v2/friends" 
const url = new URL("https://osu.ppy.sh/api/v2/friends");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth friends.read

HTTP Request

GET /friends

api/v2/me/download-quota-check

curl -X GET -G "https://osu.ppy.sh/api/v2/me/download-quota-check" 
const url = new URL("https://osu.ppy.sh/api/v2/me/download-quota-check");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (401):

{
    "authentication": "basic"
}

OAuth lazer

HTTP Request

GET /me/download-quota-check

api/v2/news

curl -X GET -G "https://osu.ppy.sh/api/v2/news" 
const url = new URL("https://osu.ppy.sh/api/v2/news");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "news_posts": [
        {
            "id": 955,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-12-new-featured-artist-agressor-bunx.md",
            "first_image": "https:\/\/i.ppy.sh\/19dcce73292fb8878a45712a2c7ddb00c98c40ba\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136342f6865616465722e6a7067",
            "published_at": "2021-05-12T09:00:00+00:00",
            "updated_at": "2021-05-12T10:41:43+00:00",
            "slug": "2021-05-12-new-featured-artist-agressor-bunx",
            "title": "New Featured Artist: Agressor Bunx",
            "preview": "Agressor Bunx joins the lineup as our newest Featured Artist!"
        },
        {
            "id": 954,
            "author": "Ephemeral",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-11-spring-fanart-voting-open.md",
            "first_image": "https:\/\/i.ppy.sh\/b67a1f703510f729c5e267769363686ebb30d01c\/68747470733a2f2f6173736574732e7070792e73682f636f6e74657374732f3132352f6865616465722e6a7067",
            "published_at": "2021-05-11T10:00:00+00:00",
            "updated_at": "2021-05-11T12:46:12+00:00",
            "slug": "2021-05-11-spring-fanart-voting-open",
            "title": "Spring Fanart 2021 Contest Voting Open!",
            "preview": "124 super talented artists have come forth and put their entries in the running - so now do your part and help us decide which ones make it to the main menu!"
        },
        {
            "id": 953,
            "author": "pishifat, radar and Davvy",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-09-monthly-beatmapping-contest-may-2021.md",
            "first_image": "https:\/\/i.ppy.sh\/a82f095536d256a48fe7b8b378097ff9ae8e5b64\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6d6f6e74686c792d626561746d617070696e672d636f6e746573742e706e67",
            "published_at": "2021-05-09T18:00:00+00:00",
            "updated_at": "2021-05-11T19:07:59+00:00",
            "slug": "2021-05-09-monthly-beatmapping-contest-may-2021",
            "title": "Monthly Beatmapping Contests: May 2021",
            "preview": "Try your hand at this month's slow-slider-themed contest with a chance to become osu!'s next Elite Mapper!"
        },
        {
            "id": 952,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-08-new-featured-artist-reku-mochizuki.md",
            "first_image": "https:\/\/i.ppy.sh\/12bc4ce0ef4f4e58fb3eac8a61758a76980add98\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136332f6865616465722e6a7067",
            "published_at": "2021-05-08T08:00:00+00:00",
            "updated_at": "2021-05-08T09:21:29+00:00",
            "slug": "2021-05-08-new-featured-artist-reku-mochizuki",
            "title": "New Featured Artist: Reku Mochizuki",
            "preview": "We're proud to boost Reku Mochizuki into the Featured Artist lineup!"
        },
        {
            "id": 951,
            "author": "omgforz",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-07-osu!-world-cup-2021-staff-and-mapper-applications.md",
            "first_image": "https:\/\/i.ppy.sh\/fca63905df92341c9376e82b936c73671bb0b9e2\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f4f57435f4d61737465725f4c6f676f2e706e67",
            "published_at": "2021-05-07T16:00:00+00:00",
            "updated_at": "2021-05-07T16:31:32+00:00",
            "slug": "2021-05-07-osu!-world-cup-2021-staff-and-mapper-applications",
            "title": "osu! World Cup 2021: Staff and Mapper Applications",
            "preview": "osu! World Cup 2021 may be over 5 months away, but we are already looking to prepare and plan ahead. For anyone who is interested in helping out behind the scenes -- read on to find out more!"
        },
        {
            "id": 949,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-05-new-featured-artist-miraie.md",
            "first_image": "https:\/\/i.ppy.sh\/e368f321f971aa835e3c7d8584f0c95e183cb27b\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136322f6865616465722e6a7067",
            "published_at": "2021-05-05T08:00:00+00:00",
            "updated_at": "2021-05-05T18:51:32+00:00",
            "slug": "2021-05-05-new-featured-artist-miraie",
            "title": "New Featured Artist: miraie",
            "preview": "osu! player and modern music pioneer miraie rolls in as our latest Featured Artist!"
        },
        {
            "id": 948,
            "author": "Venix",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-04-beatmap-spotlights-season-4-spring-2021.md",
            "first_image": "https:\/\/i.ppy.sh\/9e480d14f86eb1fe08225c4e36f9de67ccf0fe44\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f626561746d61702d73706f746c69676874732e6a7067",
            "published_at": "2021-05-04T01:45:00+00:00",
            "updated_at": "2021-05-04T01:48:19+00:00",
            "slug": "2021-05-04-beatmap-spotlights-season-4-spring-2021",
            "title": "Beatmap Spotlights Season 4: Spring 2021 & Applications",
            "preview": "Spotlights rivals assemble! As many of you might've already known, the Winter Season 2021 is over, and we are finally here to announce the start of the Spring Season for 2021!"
        },
        {
            "id": 947,
            "author": "Chaos, Imakuri, Mafumafu, Milan-, Nozhomi, Pachiru and Zeus-",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-02-osu-beatmapping-world-championship-2021-registrations-open.md",
            "first_image": "https:\/\/i.ppy.sh\/b5b156c282b899048644f09698b79285db854d3f\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6f627763323032312e706e67",
            "published_at": "2021-05-02T12:00:00+00:00",
            "updated_at": "2021-05-02T14:08:06+00:00",
            "slug": "2021-05-02-osu-beatmapping-world-championship-2021-registrations-open",
            "title": "osu! Beatmapping World Championship 2021: Registrations Open",
            "preview": "Attention to all mappers! osu! Beatmapping World Championship 2021 is on the horizon!"
        },
        {
            "id": 946,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-01-new-featured-artist-m108.md",
            "first_image": "https:\/\/i.ppy.sh\/6e10693341f0b6851a6ff182045604300252cd16\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136312f6865616465722e6a7067",
            "published_at": "2021-05-01T08:00:00+00:00",
            "updated_at": "2021-05-01T08:02:05+00:00",
            "slug": "2021-05-01-new-featured-artist-m108",
            "title": "New Featured Artist: m108",
            "preview": "m108 joins the ranks as our latest Featured Artist!"
        },
        {
            "id": 945,
            "author": "RockRoller",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-29-skinning-contest-voting-open.md",
            "first_image": "https:\/\/i.ppy.sh\/1f18387b443599c6c9e4b4cd02a82d92e91862bb\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032312d30342d32392d736b696e6e696e672d636f6e746573742d766f74696e672d6f70656e2f736b696e6e696e675f636f6e746573745f62616e6e65725f766f74696e672e6a7067",
            "published_at": "2021-04-29T08:00:00+00:00",
            "updated_at": "2021-04-29T08:56:16+00:00",
            "slug": "2021-04-29-skinning-contest-voting-open",
            "title": "Skinning Contest: Voting Open",
            "preview": "Skins are aboard! Try them all out and vote for your favourite before the ship sails!"
        },
        {
            "id": 944,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-28-new-featured-artist-emilles-moonlight-serenade.md",
            "first_image": "https:\/\/i.ppy.sh\/7e22cc5f4755c21574d999d8ce3a2f40a3268e84\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136302f6865616465722e6a7067",
            "published_at": "2021-04-28T08:00:00+00:00",
            "updated_at": "2021-04-28T09:51:28+00:00",
            "slug": "2021-04-28-new-featured-artist-emilles-moonlight-serenade",
            "title": "New Featured Artist: Emille's Moonlight Serenade",
            "preview": "We're proud to pull Emille's Moonlight Serenade into the Featured Artist lineup!"
        },
        {
            "id": 943,
            "author": "pishifat",
            "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-27-results-a-labour-of-love.md",
            "first_image": "https:\/\/i.ppy.sh\/65c9c2eb2f8d9bc6008b95aba7d0ef45e1414c1e\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032302d31312d33302d612d6c61626f75722d6f662d6c6f76652f616c6f6c5f636f7665722e6a7067",
            "published_at": "2021-04-27T20:00:00+00:00",
            "updated_at": "2021-04-27T20:25:57+00:00",
            "slug": "2021-04-27-results-a-labour-of-love",
            "title": "Results - A Labour of Love",
            "preview": "Votes are tallied and locked in. Discover who won this contest celebrating one of osu!'s most memorable beatmaps!"
        }
    ],
    "news_sidebar": {
        "current_year": 2021,
        "news_posts": [
            {
                "id": 955,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-12-new-featured-artist-agressor-bunx.md",
                "first_image": "https:\/\/i.ppy.sh\/19dcce73292fb8878a45712a2c7ddb00c98c40ba\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136342f6865616465722e6a7067",
                "published_at": "2021-05-12T09:00:00+00:00",
                "updated_at": "2021-05-12T10:41:43+00:00",
                "slug": "2021-05-12-new-featured-artist-agressor-bunx",
                "title": "New Featured Artist: Agressor Bunx"
            },
            {
                "id": 954,
                "author": "Ephemeral",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-11-spring-fanart-voting-open.md",
                "first_image": "https:\/\/i.ppy.sh\/b67a1f703510f729c5e267769363686ebb30d01c\/68747470733a2f2f6173736574732e7070792e73682f636f6e74657374732f3132352f6865616465722e6a7067",
                "published_at": "2021-05-11T10:00:00+00:00",
                "updated_at": "2021-05-11T12:46:12+00:00",
                "slug": "2021-05-11-spring-fanart-voting-open",
                "title": "Spring Fanart 2021 Contest Voting Open!"
            },
            {
                "id": 953,
                "author": "pishifat, radar and Davvy",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-09-monthly-beatmapping-contest-may-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/a82f095536d256a48fe7b8b378097ff9ae8e5b64\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6d6f6e74686c792d626561746d617070696e672d636f6e746573742e706e67",
                "published_at": "2021-05-09T18:00:00+00:00",
                "updated_at": "2021-05-11T19:07:59+00:00",
                "slug": "2021-05-09-monthly-beatmapping-contest-may-2021",
                "title": "Monthly Beatmapping Contests: May 2021"
            },
            {
                "id": 952,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-08-new-featured-artist-reku-mochizuki.md",
                "first_image": "https:\/\/i.ppy.sh\/12bc4ce0ef4f4e58fb3eac8a61758a76980add98\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136332f6865616465722e6a7067",
                "published_at": "2021-05-08T08:00:00+00:00",
                "updated_at": "2021-05-08T09:21:29+00:00",
                "slug": "2021-05-08-new-featured-artist-reku-mochizuki",
                "title": "New Featured Artist: Reku Mochizuki"
            },
            {
                "id": 951,
                "author": "omgforz",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-07-osu!-world-cup-2021-staff-and-mapper-applications.md",
                "first_image": "https:\/\/i.ppy.sh\/fca63905df92341c9376e82b936c73671bb0b9e2\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f4f57435f4d61737465725f4c6f676f2e706e67",
                "published_at": "2021-05-07T16:00:00+00:00",
                "updated_at": "2021-05-07T16:31:32+00:00",
                "slug": "2021-05-07-osu!-world-cup-2021-staff-and-mapper-applications",
                "title": "osu! World Cup 2021: Staff and Mapper Applications"
            },
            {
                "id": 949,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-05-new-featured-artist-miraie.md",
                "first_image": "https:\/\/i.ppy.sh\/e368f321f971aa835e3c7d8584f0c95e183cb27b\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136322f6865616465722e6a7067",
                "published_at": "2021-05-05T08:00:00+00:00",
                "updated_at": "2021-05-05T18:51:32+00:00",
                "slug": "2021-05-05-new-featured-artist-miraie",
                "title": "New Featured Artist: miraie"
            },
            {
                "id": 948,
                "author": "Venix",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-04-beatmap-spotlights-season-4-spring-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/9e480d14f86eb1fe08225c4e36f9de67ccf0fe44\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f626561746d61702d73706f746c69676874732e6a7067",
                "published_at": "2021-05-04T01:45:00+00:00",
                "updated_at": "2021-05-04T01:48:19+00:00",
                "slug": "2021-05-04-beatmap-spotlights-season-4-spring-2021",
                "title": "Beatmap Spotlights Season 4: Spring 2021 & Applications"
            },
            {
                "id": 947,
                "author": "Chaos, Imakuri, Mafumafu, Milan-, Nozhomi, Pachiru and Zeus-",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-02-osu-beatmapping-world-championship-2021-registrations-open.md",
                "first_image": "https:\/\/i.ppy.sh\/b5b156c282b899048644f09698b79285db854d3f\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6f627763323032312e706e67",
                "published_at": "2021-05-02T12:00:00+00:00",
                "updated_at": "2021-05-02T14:08:06+00:00",
                "slug": "2021-05-02-osu-beatmapping-world-championship-2021-registrations-open",
                "title": "osu! Beatmapping World Championship 2021: Registrations Open"
            },
            {
                "id": 946,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-05-01-new-featured-artist-m108.md",
                "first_image": "https:\/\/i.ppy.sh\/6e10693341f0b6851a6ff182045604300252cd16\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136312f6865616465722e6a7067",
                "published_at": "2021-05-01T08:00:00+00:00",
                "updated_at": "2021-05-01T08:02:05+00:00",
                "slug": "2021-05-01-new-featured-artist-m108",
                "title": "New Featured Artist: m108"
            },
            {
                "id": 945,
                "author": "RockRoller",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-29-skinning-contest-voting-open.md",
                "first_image": "https:\/\/i.ppy.sh\/1f18387b443599c6c9e4b4cd02a82d92e91862bb\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032312d30342d32392d736b696e6e696e672d636f6e746573742d766f74696e672d6f70656e2f736b696e6e696e675f636f6e746573745f62616e6e65725f766f74696e672e6a7067",
                "published_at": "2021-04-29T08:00:00+00:00",
                "updated_at": "2021-04-29T08:56:16+00:00",
                "slug": "2021-04-29-skinning-contest-voting-open",
                "title": "Skinning Contest: Voting Open"
            },
            {
                "id": 944,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-28-new-featured-artist-emilles-moonlight-serenade.md",
                "first_image": "https:\/\/i.ppy.sh\/7e22cc5f4755c21574d999d8ce3a2f40a3268e84\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3136302f6865616465722e6a7067",
                "published_at": "2021-04-28T08:00:00+00:00",
                "updated_at": "2021-04-28T09:51:28+00:00",
                "slug": "2021-04-28-new-featured-artist-emilles-moonlight-serenade",
                "title": "New Featured Artist: Emille's Moonlight Serenade"
            },
            {
                "id": 943,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-27-results-a-labour-of-love.md",
                "first_image": "https:\/\/i.ppy.sh\/65c9c2eb2f8d9bc6008b95aba7d0ef45e1414c1e\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032302d31312d33302d612d6c61626f75722d6f662d6c6f76652f616c6f6c5f636f7665722e6a7067",
                "published_at": "2021-04-27T20:00:00+00:00",
                "updated_at": "2021-04-27T20:25:57+00:00",
                "slug": "2021-04-27-results-a-labour-of-love",
                "title": "Results - A Labour of Love"
            },
            {
                "id": 942,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-24-new-featured-artist-grynpyret.md",
                "first_image": "https:\/\/i.ppy.sh\/acdce813b71371b95e8240f9249c916285fdc5a0\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135392f6865616465722e6a7067",
                "published_at": "2021-04-24T08:00:00+00:00",
                "updated_at": "2021-04-24T10:23:59+00:00",
                "slug": "2021-04-24-new-featured-artist-grynpyret",
                "title": "New Featured Artist: Grynpyret"
            },
            {
                "id": 941,
                "author": "pishifat & radar",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-23-results-monthly-beatmapping-contest-march-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/a82f095536d256a48fe7b8b378097ff9ae8e5b64\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6d6f6e74686c792d626561746d617070696e672d636f6e746573742e706e67",
                "published_at": "2021-04-23T19:30:00+00:00",
                "updated_at": "2021-04-23T20:00:22+00:00",
                "slug": "2021-04-23-results-monthly-beatmapping-contest-march-2021",
                "title": "Results - Monthly Beatmapping Contest: March 2021"
            },
            {
                "id": 940,
                "author": "Ephemeral",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-23-spring-2021-fanart-contest.md",
                "first_image": "https:\/\/i.ppy.sh\/b67a1f703510f729c5e267769363686ebb30d01c\/68747470733a2f2f6173736574732e7070792e73682f636f6e74657374732f3132352f6865616465722e6a7067",
                "published_at": "2021-04-23T12:00:00+00:00",
                "updated_at": "2021-04-23T12:02:01+00:00",
                "slug": "2021-04-23-spring-2021-fanart-contest",
                "title": "Spring 2021 Fanart Contest"
            },
            {
                "id": 939,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-21-new-featured-artist-vektor.md",
                "first_image": "https:\/\/i.ppy.sh\/a186e83b4fc242c663b306d63286353bf183347f\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135382f6865616465722e6a7067",
                "published_at": "2021-04-21T09:00:00+00:00",
                "updated_at": "2021-04-21T09:54:37+00:00",
                "slug": "2021-04-21-new-featured-artist-vektor",
                "title": "New Featured Artist: Vektor"
            },
            {
                "id": 938,
                "author": "huu",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-20-project-loved-april-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/30ec6638b6e1c05807de27cea57a7a377e0a9f28\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f70726f6a6563742d6c6f7665642e6a7067",
                "published_at": "2021-04-20T12:00:00+00:00",
                "updated_at": "2021-04-20T11:55:14+00:00",
                "slug": "2021-04-20-project-loved-april-2021",
                "title": "Project Loved: April 2021"
            },
            {
                "id": 937,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-17-new-featured-artist-2tonedisco.md",
                "first_image": "https:\/\/i.ppy.sh\/bb4f448e73d8206e8b1e4ff77bde468c2b9de33a\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135372f6865616465722e6a7067",
                "published_at": "2021-04-17T09:30:00+00:00",
                "updated_at": "2021-04-17T09:28:05+00:00",
                "slug": "2021-04-17-new-featured-artist-2tonedisco",
                "title": "New Featured Artist: 2ToneDisco"
            },
            {
                "id": 936,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-14-new-featured-artist-fiend.md",
                "first_image": "https:\/\/i.ppy.sh\/944df0917d5aaa6d126acbb422a4ce7cb1494181\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135362f6865616465722e6a7067",
                "published_at": "2021-04-14T09:30:00+00:00",
                "updated_at": "2021-04-14T12:34:08+00:00",
                "slug": "2021-04-14-new-featured-artist-fiend",
                "title": "New Featured Artist: fiend"
            },
            {
                "id": 935,
                "author": "Chaos, Imakuri, Mafumafu, Milan-, Nozhomi, Pachiru and Zeus-",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-11-osu-beatmapping-world-championship-2021-call-for-judges.md",
                "first_image": "https:\/\/i.ppy.sh\/b5b156c282b899048644f09698b79285db854d3f\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6f627763323032312e706e67",
                "published_at": "2021-04-11T14:00:00+00:00",
                "updated_at": "2021-04-20T20:27:24+00:00",
                "slug": "2021-04-11-osu-beatmapping-world-championship-2021-call-for-judges",
                "title": "osu! Beatmapping World Championship 2021: Call for Judges"
            },
            {
                "id": 934,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-10-new-featured-artist-yuzukingdom.md",
                "first_image": "https:\/\/i.ppy.sh\/2777c3e7e52a6d98d0a81a104b349cf0f6045eae\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135352f6865616465722e6a7067",
                "published_at": "2021-04-10T08:30:00+00:00",
                "updated_at": "2021-04-10T10:30:58+00:00",
                "slug": "2021-04-10-new-featured-artist-yuzukingdom",
                "title": "New Featured Artist: YUZUKINGDOM"
            },
            {
                "id": 933,
                "author": "pishifat, radar and Nokashi",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-08-monthly-beatmapping-contest-april-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/a82f095536d256a48fe7b8b378097ff9ae8e5b64\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6d6f6e74686c792d626561746d617070696e672d636f6e746573742e706e67",
                "published_at": "2021-04-08T19:00:00+00:00",
                "updated_at": "2021-04-08T20:58:34+00:00",
                "slug": "2021-04-08-monthly-beatmapping-contest-april-2021",
                "title": "Monthly Beatmapping Contests: April 2021"
            },
            {
                "id": 932,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-07-new-featured-artist-boxplot.md",
                "first_image": "https:\/\/i.ppy.sh\/1a94483035aa7cde629db2979a3bb10fa87b6994\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135342f6865616465722e6a7067",
                "published_at": "2021-04-07T08:00:00+00:00",
                "updated_at": "2021-04-07T08:09:55+00:00",
                "slug": "2021-04-07-new-featured-artist-boxplot",
                "title": "New Featured Artist: Boxplot"
            },
            {
                "id": 931,
                "author": "Feerum, radar, Hivie & Zeus-",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-06-mappers-report-march.md",
                "first_image": "https:\/\/i.ppy.sh\/a30c127efa57319753fab4cbb1180b68feed9ab1\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f7468652d6d6170706572732d7265706f72742e6a7067",
                "published_at": "2021-04-06T08:00:00+00:00",
                "updated_at": "2021-04-06T13:28:50+00:00",
                "slug": "2021-04-06-mappers-report-march",
                "title": "The Mappers' Report: March"
            },
            {
                "id": 930,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-03-new-featured-artist-aethoro.md",
                "first_image": "https:\/\/i.ppy.sh\/677fc9bdbec39b1e317dade29611feba6eb47b49\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135332f6865616465722e6a7067",
                "published_at": "2021-04-03T08:00:00+00:00",
                "updated_at": "2021-04-03T09:01:24+00:00",
                "slug": "2021-04-03-new-featured-artist-aethoro",
                "title": "New Featured Artist: Aethoro"
            },
            {
                "id": 929,
                "author": "WalterToro",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-02-cwc-2021-registrations-open.md",
                "first_image": "https:\/\/i.ppy.sh\/b7dd6f8546d1309ddda14ad97b628ec570dbdb08\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f435743323032312e6a7067",
                "published_at": "2021-04-02T16:00:00+00:00",
                "updated_at": "2021-04-03T00:26:11+00:00",
                "slug": "2021-04-02-cwc-2021-registrations-open",
                "title": "osu!catch World Cup 2021: Registrations now open!"
            },
            {
                "id": 928,
                "author": "clayton",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-04-01-project-loved-march-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/30ec6638b6e1c05807de27cea57a7a377e0a9f28\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f70726f6a6563742d6c6f7665642e6a7067",
                "published_at": "2021-04-01T10:00:00+00:00",
                "updated_at": "2021-04-11T05:37:51+00:00",
                "slug": "2021-04-01-project-loved-march-2021",
                "title": "Project Loved: March 2021"
            },
            {
                "id": 927,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-31-new-featured-artist-xanthochroid.md",
                "first_image": "https:\/\/i.ppy.sh\/1987f0c1f06be26252674d32d7c26e5e2d42926e\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135322f6865616465722e6a7067",
                "published_at": "2021-03-31T09:30:00+00:00",
                "updated_at": "2021-03-31T09:39:43+00:00",
                "slug": "2021-03-31-new-featured-artist-xanthochroid",
                "title": "New Featured Artist: Xanthochroid"
            },
            {
                "id": 926,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-27-new-featured-artist-amidst.md",
                "first_image": "https:\/\/i.ppy.sh\/a5ff83f102c6539e8da250046de24a24a5a33ecb\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135312f6865616465722e6a7067",
                "published_at": "2021-03-27T09:00:00+00:00",
                "updated_at": "2021-03-27T10:13:43+00:00",
                "slug": "2021-03-27-new-featured-artist-amidst",
                "title": "New Featured Artist: Amidst"
            },
            {
                "id": 925,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-26-a-labour-of-love-voting-open.md",
                "first_image": "https:\/\/i.ppy.sh\/65c9c2eb2f8d9bc6008b95aba7d0ef45e1414c1e\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032302d31312d33302d612d6c61626f75722d6f662d6c6f76652f616c6f6c5f636f7665722e6a7067",
                "published_at": "2021-03-26T09:00:00+00:00",
                "updated_at": "2021-03-26T08:18:41+00:00",
                "slug": "2021-03-26-a-labour-of-love-voting-open",
                "title": "A Labour of Love: Voting Open!"
            },
            {
                "id": 924,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-24-new-featured-artist-blacky.md",
                "first_image": "https:\/\/i.ppy.sh\/1c39cb141c31e6311ce45bc4b33f4c10db46a123\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3135302f6865616465722d68712e6a7067",
                "published_at": "2021-03-24T08:45:00+00:00",
                "updated_at": "2021-03-24T17:06:20+00:00",
                "slug": "2021-03-24-new-featured-artist-blacky",
                "title": "New Featured Artist: BlackY"
            },
            {
                "id": 950,
                "author": "yaspo",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-22-community-mentorship-program-spring-2021-signups-now-open.md",
                "first_image": "https:\/\/i.ppy.sh\/e804199f65907595f127cf0b01cc73d293b5060b\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f636f6d6d756e6974792d6d656e746f72736869702d70726f6772616d2e6a7067",
                "published_at": "2021-03-22T08:00:00+00:00",
                "updated_at": "2021-05-05T12:25:31+00:00",
                "slug": "2021-03-22-community-mentorship-program-spring-2021-signups-now-open",
                "title": "Community Mentorship Program Spring 2021 Signups Now Open"
            },
            {
                "id": 922,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-20-new-featured-artist-urbangarde.md",
                "first_image": "https:\/\/i.ppy.sh\/373a528b2744feb9c423b1c71e7338481300bfd6\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134392f6865616465722e6a7067",
                "published_at": "2021-03-20T09:00:00+00:00",
                "updated_at": "2021-03-20T08:26:52+00:00",
                "slug": "2021-03-20-new-featured-artist-urbangarde",
                "title": "New Featured Artist: URBANGARDE"
            },
            {
                "id": 921,
                "author": "the osu!team",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-19-community-contributors-2020.md",
                "first_image": "https:\/\/i.ppy.sh\/4c340074719247669ed6fd6e60da664b75f4fe33\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032312d30332d31392d636f6d6d756e6974792d636f6e7472696275746f72732d323032302f7469746c652e6a7067",
                "published_at": "2021-03-19T10:30:00+00:00",
                "updated_at": "2021-03-19T13:43:36+00:00",
                "slug": "2021-03-19-community-contributors-2020",
                "title": "Community Contributors: 2020"
            },
            {
                "id": 920,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-17-new-featured-artist-gyze.md",
                "first_image": "https:\/\/i.ppy.sh\/0e59484e749a20395f0fc609c018ebb28617b68e\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134382f6865616465722e6a7067",
                "published_at": "2021-03-17T09:00:00+00:00",
                "updated_at": "2021-03-17T14:04:55+00:00",
                "slug": "2021-03-17-new-featured-artist-gyze",
                "title": "New Featured Artist: GYZE"
            },
            {
                "id": 919,
                "author": "Deif",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-16-osu!catch-world-cup-2021-staff-and-mapper-applications.md",
                "first_image": "https:\/\/i.ppy.sh\/fca63905df92341c9376e82b936c73671bb0b9e2\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f4f57435f4d61737465725f4c6f676f2e706e67",
                "published_at": "2021-03-16T14:00:00+00:00",
                "updated_at": "2021-03-16T21:18:50+00:00",
                "slug": "2021-03-16-osu!catch-world-cup-2021-staff-and-mapper-applications",
                "title": "osu!catch World Cup 2021: Staff and Mapper Applications"
            },
            {
                "id": 918,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-13-new-featured-artist-cres.md",
                "first_image": "https:\/\/i.ppy.sh\/dea7efb9f524d28c847b05ad11da6d6287a19231\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134372f6865616465722e6a7067",
                "published_at": "2021-03-13T09:00:00+00:00",
                "updated_at": "2021-03-13T12:51:48+00:00",
                "slug": "2021-03-13-new-featured-artist-cres",
                "title": "New Featured Artist: Cres."
            },
            {
                "id": 917,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-10-new-featured-artist-polysha.md",
                "first_image": "https:\/\/i.ppy.sh\/7d18e69e6f88435be6d4a868cb741949a947a8f2\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134362f6865616465722e6a7067",
                "published_at": "2021-03-10T08:30:00+00:00",
                "updated_at": "2021-05-09T08:37:33+00:00",
                "slug": "2021-03-10-new-featured-artist-polysha",
                "title": "New Featured Artist: polysha"
            },
            {
                "id": 916,
                "author": "RockRoller",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-08-skinning-contest-announcement.md",
                "first_image": "https:\/\/i.ppy.sh\/6b3986c26a4de6d1bcdf5bd7301b27e791e00e11\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032312d30332d30382d736b696e6e696e672d636f6e746573742d616e6e6f756e63656d656e742f736b696e6e696e675f636f6e746573745f62616e6e65725f616e6e6f756e63656d656e742e6a7067",
                "published_at": "2021-03-08T12:00:00+00:00",
                "updated_at": "2021-05-07T12:54:57+00:00",
                "slug": "2021-03-08-skinning-contest-announcement",
                "title": "Skinning Contest: Announcement"
            },
            {
                "id": 915,
                "author": "pishifat and radar",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-07-monthly-beatmapping-contest-march-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/a82f095536d256a48fe7b8b378097ff9ae8e5b64\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f6d6f6e74686c792d626561746d617070696e672d636f6e746573742e706e67",
                "published_at": "2021-03-07T09:00:00+00:00",
                "updated_at": "2021-05-06T17:46:53+00:00",
                "slug": "2021-03-07-monthly-beatmapping-contest-march-2021",
                "title": "Monthly Beatmapping Contest: March 2021"
            },
            {
                "id": 914,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-06-new-featured-artist-empty-peperoncino.md",
                "first_image": "https:\/\/i.ppy.sh\/2acaad199fadd785660bd72cccbd67726b923aa5\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134352f6865616465722e6a7067",
                "published_at": "2021-03-06T09:00:00+00:00",
                "updated_at": "2021-05-05T20:56:05+00:00",
                "slug": "2021-03-06-new-featured-artist-empty-peperoncino",
                "title": "New Featured Artist: Empty Peperoncino"
            },
            {
                "id": 913,
                "author": "Feerum, Morrighan and TheKingHenry",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-05-mappers-report-february.md",
                "first_image": "https:\/\/i.ppy.sh\/a30c127efa57319753fab4cbb1180b68feed9ab1\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f7468652d6d6170706572732d7265706f72742e6a7067",
                "published_at": "2021-03-05T08:00:00+00:00",
                "updated_at": "2021-05-05T09:30:13+00:00",
                "slug": "2021-03-05-mappers-report-february",
                "title": "The Mappers' Report: February"
            },
            {
                "id": 912,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-03-03-new-featured-artist-tanchiky.md",
                "first_image": "https:\/\/i.ppy.sh\/26f485dcd5476ae12e1cb35f18ec970e346c9b94\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134342f6865616465722e6a7067",
                "published_at": "2021-03-03T09:00:00+00:00",
                "updated_at": "2021-05-02T14:39:25+00:00",
                "slug": "2021-03-03-new-featured-artist-tanchiky",
                "title": "New Featured Artist: Tanchiky"
            },
            {
                "id": 911,
                "author": "huu",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-28-project-loved-february-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/30ec6638b6e1c05807de27cea57a7a377e0a9f28\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f70726f6a6563742d6c6f7665642e6a7067",
                "published_at": "2021-02-28T10:30:00+00:00",
                "updated_at": "2021-04-29T13:25:23+00:00",
                "slug": "2021-02-28-project-loved-february-2021",
                "title": "Project Loved: February 2021"
            },
            {
                "id": 910,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-27-new-featured-artist-extra-terra.md",
                "first_image": "https:\/\/i.ppy.sh\/74369cc6eb34b4209487974b2ed75a03889b5f03\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134332f6865616465722e6a7067",
                "published_at": "2021-02-27T10:00:00+00:00",
                "updated_at": "2021-04-28T15:43:49+00:00",
                "slug": "2021-02-27-new-featured-artist-extra-terra",
                "title": "New Featured Artist: Extra Terra"
            },
            {
                "id": 909,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-24-new-featured-artist-the-gentle-men.md",
                "first_image": "https:\/\/i.ppy.sh\/6335d9b23c5d17231b078acfcc3324e5bc1f27c4\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134322f6865616465722e6a7067",
                "published_at": "2021-02-24T09:30:00+00:00",
                "updated_at": "2021-04-25T10:44:36+00:00",
                "slug": "2021-02-24-new-featured-artist-the-gentle-men",
                "title": "New Featured Artist: The Gentle Men"
            },
            {
                "id": 908,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-20-new-featured-artist-nora2r.md",
                "first_image": "https:\/\/i.ppy.sh\/2e080b580bb1f2cc1b3a95ae1b9f2c34253d1d14\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134312f6865616465722e6a7067",
                "published_at": "2021-02-20T09:15:00+00:00",
                "updated_at": "2021-04-21T11:03:04+00:00",
                "slug": "2021-02-20-new-featured-artist-nora2r",
                "title": "New Featured Artist: nora2r"
            },
            {
                "id": 907,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-17-new-featured-artist-shawn-wasabi.md",
                "first_image": "https:\/\/i.ppy.sh\/f7cccf72ee33a27f7823bbc3e788fb4f2d27a1b7\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133392f6865616465722e6a7067",
                "published_at": "2021-02-17T19:00:00+00:00",
                "updated_at": "2021-04-18T20:16:42+00:00",
                "slug": "2021-02-17-new-featured-artist-shawn-wasabi",
                "title": "New Featured Artist: Shawn Wasabi"
            },
            {
                "id": 906,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-13-new-featured-artist-ovenola.md",
                "first_image": "https:\/\/i.ppy.sh\/39d361ac3fe47b8b769e409024e8f3f00aaf7902\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3134302f6865616465722e6a7067",
                "published_at": "2021-02-13T09:30:00+00:00",
                "updated_at": "2021-04-14T13:01:57+00:00",
                "slug": "2021-02-13-new-featured-artist-ovenola",
                "title": "New Featured Artist: ovEnola"
            },
            {
                "id": 905,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-10-new-featured-artist-selep.md",
                "first_image": "https:\/\/i.ppy.sh\/5cfedbf21f729d731cbd79bbd1c6f4cae81daf28\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133382f6865616465722e6a7067",
                "published_at": "2021-02-10T09:00:00+00:00",
                "updated_at": "2021-04-11T12:25:10+00:00",
                "slug": "2021-02-10-new-featured-artist-selep",
                "title": "New Featured Artist: seleP"
            },
            {
                "id": 904,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-06-new-featured-artist-secondwall.md",
                "first_image": "https:\/\/i.ppy.sh\/0d2cf6737be6c970a8ac02a0b32dccc017a54ebb\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133372f6865616465722e6a7067",
                "published_at": "2021-02-06T10:00:00+00:00",
                "updated_at": "2021-04-07T11:51:17+00:00",
                "slug": "2021-02-06-new-featured-artist-secondwall",
                "title": "New Featured Artist: SECONDWALL"
            },
            {
                "id": 903,
                "author": "Ephemeral",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-05-community-choice-2020-results.md",
                "first_image": "https:\/\/i.ppy.sh\/31315d1f4cac4ca9e3fb6bfd8a241d330177fe85\/68747470733a2f2f6173736574732e7070792e73682f636f6e74657374732f3131362f6363323032305f6f73752e6a7067",
                "published_at": "2021-02-05T12:00:00+00:00",
                "updated_at": "2021-04-07T03:24:48+00:00",
                "slug": "2021-02-05-community-choice-2020-results",
                "title": "Community Choice 2020: Results"
            },
            {
                "id": 902,
                "author": "WalterToro",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-04-twc-2021-registrations-open.md",
                "first_image": "https:\/\/i.ppy.sh\/4e43aacba051c53df26d1db998f55c5afe4acd01\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f5457435f323032312e6a7067",
                "published_at": "2021-02-04T15:00:00+00:00",
                "updated_at": "2021-04-05T18:31:02+00:00",
                "slug": "2021-02-04-twc-2021-registrations-open",
                "title": "osu!taiko World Cup 2021: Registrations now open!"
            },
            {
                "id": 901,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-03-new-featured-artist-masahiro-godspeed-aoki.md",
                "first_image": "https:\/\/i.ppy.sh\/278515517442f638cf2f5df4d2f2589af48f446b\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133362f6865616465722e6a7067",
                "published_at": "2021-02-03T09:15:00+00:00",
                "updated_at": "2021-04-07T08:31:20+00:00",
                "slug": "2021-02-03-new-featured-artist-masahiro-godspeed-aoki",
                "title": "New Featured Artist: Masahiro \"Godspeed\" Aoki"
            },
            {
                "id": 900,
                "author": "clayton",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-02-project-loved-january-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/30ec6638b6e1c05807de27cea57a7a377e0a9f28\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f70726f6a6563742d6c6f7665642e6a7067",
                "published_at": "2021-02-02T18:40:00+00:00",
                "updated_at": "2021-04-05T18:41:32+00:00",
                "slug": "2021-02-02-project-loved-january-2021",
                "title": "Project Loved: January 2021"
            },
            {
                "id": 899,
                "author": "Feerum, Hydria and Walavouchey",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-02-01-mappers-report-january.md",
                "first_image": "https:\/\/i.ppy.sh\/a30c127efa57319753fab4cbb1180b68feed9ab1\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f7468652d6d6170706572732d7265706f72742e6a7067",
                "published_at": "2021-02-01T20:00:00+00:00",
                "updated_at": "2021-04-05T21:52:36+00:00",
                "slug": "2021-02-01-mappers-report-january",
                "title": "The Mappers' Report: January"
            },
            {
                "id": 898,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-30-new-featured-aritst-irreversible-mechanism.md",
                "first_image": "https:\/\/i.ppy.sh\/bfa589bc3cb9bc5fdcdd23cefcf1228e9349ea9a\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133352f6865616465722e6a7067",
                "published_at": "2021-01-30T09:30:00+00:00",
                "updated_at": "2021-04-05T21:35:04+00:00",
                "slug": "2021-01-30-new-featured-aritst-irreversible-mechanism",
                "title": "New Featured Artist: Irreversible Mechanism"
            },
            {
                "id": 897,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-27-new-featured-artist-dimrain47.md",
                "first_image": "https:\/\/i.ppy.sh\/0b020f378903e78a3221f248cfcb12ea965d87ab\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133342f6865616465722e6a7067",
                "published_at": "2021-01-27T10:00:00+00:00",
                "updated_at": "2021-04-06T09:15:59+00:00",
                "slug": "2021-01-27-new-featured-artist-dimrain47",
                "title": "New Featured Artist: Dimrain47"
            },
            {
                "id": 896,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-23-new-featured-artist-geoxor.md",
                "first_image": "https:\/\/i.ppy.sh\/a4d914ef32f07abc6a2802c85a173ea7fbf3baef\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133332f6865616465722e6a70673f323032302d30312d3234",
                "published_at": "2021-01-23T09:30:00+00:00",
                "updated_at": "2021-04-06T00:20:37+00:00",
                "slug": "2021-01-23-new-featured-artist-geoxor",
                "title": "New Featured Artist: Geoxor"
            },
            {
                "id": 895,
                "author": "Ephemeral",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-21-community-choice-2020-voting-open.md",
                "first_image": "https:\/\/i.ppy.sh\/31315d1f4cac4ca9e3fb6bfd8a241d330177fe85\/68747470733a2f2f6173736574732e7070792e73682f636f6e74657374732f3131362f6363323032305f6f73752e6a7067",
                "published_at": "2021-01-21T06:00:00+00:00",
                "updated_at": "2021-04-05T18:08:51+00:00",
                "slug": "2021-01-21-community-choice-2020-voting-open",
                "title": "Community Choice 2020: Voting Open"
            },
            {
                "id": 894,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-20-new-featured-artist-yuyoyuppe-dj-tekina-something.md",
                "first_image": "https:\/\/i.ppy.sh\/09f63462f6232a34d396e122c3eeff8da85a6ead\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133322f6865616465722e6a7067",
                "published_at": "2021-01-20T08:00:00+00:00",
                "updated_at": "2021-04-05T18:47:41+00:00",
                "slug": "2021-01-20-new-featured-artist-yuyoyuppe-dj-tekina-something",
                "title": "New Featured Artist: Yuyoyuppe \/ DJ'TEKINA\/\/SOMETHING"
            },
            {
                "id": 893,
                "author": "Venix",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-18-beatmap-spotlights-season-3-winter-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/9e480d14f86eb1fe08225c4e36f9de67ccf0fe44\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f626561746d61702d73706f746c69676874732e6a7067",
                "published_at": "2021-01-18T10:00:00+00:00",
                "updated_at": "2021-04-05T18:37:34+00:00",
                "slug": "2021-01-18-beatmap-spotlights-season-3-winter-2021",
                "title": "Beatmap Spotlights Season 3: Winter 2021 & Applications"
            },
            {
                "id": 892,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-17-new-featured-artist-tiny-waves.md",
                "first_image": "https:\/\/i.ppy.sh\/7d39ec0008e92b61c1dce729e6aff0eda283a8e8\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133312f6865616465722e6a7067",
                "published_at": "2021-01-17T09:00:00+00:00",
                "updated_at": "2021-04-06T02:55:58+00:00",
                "slug": "2021-01-17-new-featured-artist-tiny-waves",
                "title": "New Featured Artist: Tiny Waves"
            },
            {
                "id": 891,
                "author": "osu!team",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-14-performance-points-updates.md",
                "first_image": "https:\/\/i.ppy.sh\/ed5b6e88d1a5f105ed829d65091bf341b22b3271\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f323032312d30312d31342d706572666f726d616e63652d706f696e74732d757064617465732f737461722d726174696e672e6a7067",
                "published_at": "2021-01-16T05:00:00+00:00",
                "updated_at": "2021-04-05T18:08:47+00:00",
                "slug": "2021-01-14-performance-points-updates",
                "title": "Performance Points Updates"
            },
            {
                "id": 890,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-13-new-featured-artist-symholic.md",
                "first_image": "https:\/\/i.ppy.sh\/b5a457eb7160bb546af930f8e19b278430e48a93\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3133302f6865616465722e6a7067",
                "published_at": "2021-01-13T10:00:00+00:00",
                "updated_at": "2021-04-06T09:37:47+00:00",
                "slug": "2021-01-13-new-featured-artist-symholic",
                "title": "New Featured Artist: Symholic"
            },
            {
                "id": 889,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-09-new-featured-artist-phantom-sage.md",
                "first_image": "https:\/\/i.ppy.sh\/98fb74b577e110ecdc981b1b7ac68f555d8cb34d\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3132392f6865616465722e6a7067",
                "published_at": "2021-01-09T09:00:00+00:00",
                "updated_at": "2021-04-06T23:55:57+00:00",
                "slug": "2021-01-09-new-featured-artist-phantom-sage",
                "title": "New Featured Artist: Phantom Sage"
            },
            {
                "id": 888,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-06-new-featured-artist-getty.md",
                "first_image": "https:\/\/i.ppy.sh\/86a77d746330f7c75bf22e23efadb482211cad99\/68747470733a2f2f6173736574732e7070792e73682f617274697374732f3132382f6865616465722e6a7067",
                "published_at": "2021-01-06T09:00:00+00:00",
                "updated_at": "2021-04-06T15:24:48+00:00",
                "slug": "2021-01-06-new-featured-artist-getty",
                "title": "New Featured Artist: Getty"
            },
            {
                "id": 887,
                "author": "mangomizer",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-04-osu!taiko-world-cup-2021-staff-and-mapper-applications.md",
                "first_image": "https:\/\/i.ppy.sh\/4e43aacba051c53df26d1db998f55c5afe4acd01\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f5457435f323032312e6a7067",
                "published_at": "2021-01-04T12:00:00+00:00",
                "updated_at": "2021-04-05T19:41:00+00:00",
                "slug": "2021-01-04-osu!taiko-world-cup-2021-staff-and-mapper-applications",
                "title": "osu!taiko World Cup 2021: Staff and Mapper Applications"
            },
            {
                "id": 886,
                "author": "pishifat",
                "edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2021-01-02-featured-artist-updates-january-2021.md",
                "first_image": "https:\/\/i.ppy.sh\/2c599f8ef010307562c66fbe17a553ca142304ec\/68747470733a2f2f6f73752e7070792e73682f77696b692f696d616765732f7368617265642f6e6577732f62616e6e6572732f66656174757265642d6172746973742e6a7067",
                "published_at": "2021-01-02T01:30:00+00:00",
                "updated_at": "2021-04-05T19:49:29+00:00",
                "slug": "2021-01-02-featured-artist-updates-january-2021",
                "title": "Featured Artist Track Updates: January 2021"
            }
        ],
        "years": [
            2021,
            2020,
            2019,
            2018,
            2017,
            2016,
            2015,
            2014,
            2013
        ]
    },
    "search": {
        "limit": 12,
        "sort": "published_desc"
    },
    "cursor": {
        "published_at": "2021-04-27T20:00:00.000000Z",
        "id": 943
    }
}

HTTP Request

GET /news

api/v2/news/{news}

curl -X GET -G "https://osu.ppy.sh/api/v2/news/1" 
const url = new URL("https://osu.ppy.sh/api/v2/news/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (404):

{
    "error": ""
}

HTTP Request

GET /news/{news}

Users

Get Own Data

curl -X GET -G "https://osu.ppy.sh/api/v2/me/osu" 
const url = new URL("https://osu.ppy.sh/api/v2/me/osu");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

"See User object section"

Similar to Get User but with authenticated user (token owner) as user id.

OAuth identify

HTTP Request

GET /me/{mode?}

URL Parameters

Parameter Status Description
mode optional GameMode. User default mode will be used if not specified.

Response format

See Get User.

Get User Kudosu

curl -X GET -G "https://osu.ppy.sh/api/v2/users/1/kudosu?limit=12&offset=1" 
const url = new URL("https://osu.ppy.sh/api/v2/users/1/kudosu");

let params = {
    "limit": "12",
    "offset": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "id": 1,
        "other": "attributes..."
    },
    {
        "id": 2,
        "other": "attributes..."
    }
]

Returns kudosu history.

OAuth public

HTTP Request

GET /users/{user}/kudosu

URL Parameters

Parameter Status Description
user required Id of the user.

Query Parameters

Parameter Status Description
limit optional Maximum number of results.
offset optional Result offset for pagination.

Response format

Array of KudosuHistory.

Get User Scores

curl -X GET -G "https://osu.ppy.sh/api/v2/users/1/scores/best?include_fails=0&mode=osu&limit=12&offset=1" 
const url = new URL("https://osu.ppy.sh/api/v2/users/1/scores/best");

let params = {
    "include_fails": "0",
    "mode": "osu",
    "limit": "12",
    "offset": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "id": 1,
        "other": "attributes..."
    },
    {
        "id": 2,
        "other": "attributes..."
    }
]

This endpoint returns the scores of specified user.

OAuth public

HTTP Request

GET /users/{user}/scores/{type}

URL Parameters

Parameter Status Description
user required Id of the user.
type required Score type. Must be one of these: best, firsts, recent.

Query Parameters

Parameter Status Description
include_fails optional Only for recent scores, include scores of failed plays. Set to 1 to include them. Defaults to 0.
mode optional GameMode of the scores to be returned. Defaults to the specified user's mode.
limit optional Maximum number of results.
offset optional Result offset for pagination.

Response format

Array of Score. Following attributes are included in the response object when applicable.

Attribute Notes
beatmap
beatmapset
weight Only for type best.
user

Get User Beatmaps

curl -X GET -G "https://osu.ppy.sh/api/v2/users/1/beatmapsets/favourite?limit=12&offset=1" 
const url = new URL("https://osu.ppy.sh/api/v2/users/1/beatmapsets/favourite");

let params = {
    "limit": "12",
    "offset": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "id": 1,
        "other": "attributes..."
    },
    {
        "id": 2,
        "other": "attributes..."
    }
]

Returns the beatmaps of specified user.

Type
favourite
graveyard
loved
most_played
ranked_and_approved
unranked

OAuth public

HTTP Request

GET /users/{user}/beatmapsets/{type}

URL Parameters

Parameter Status Description
user required Id of the user.
type required Beatmap type.

Query Parameters

Parameter Status Description
limit optional Maximum number of results.
offset optional Result offset for pagination.

Response format

Array of Beatmapset.

Get User Recent Activity

curl -X GET -G "https://osu.ppy.sh/api/v2/users/1/recent_activity?limit=12&offset=1" 
const url = new URL("https://osu.ppy.sh/api/v2/users/1/recent_activity");

let params = {
    "limit": "12",
    "offset": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

[
    {
        "id": 1,
        "other": "attributes..."
    },
    {
        "id": 2,
        "other": "attributes..."
    }
]

Returns recent activity.

OAuth public

HTTP Request

GET /users/{user}/recent_activity

URL Parameters

Parameter Status Description
user required Id of the user.

Query Parameters

Parameter Status Description
limit optional Maximum number of results.
offset optional Result offset for pagination.

Response format

Array of Event.

Get User

curl -X GET -G "https://osu.ppy.sh/api/v2/users/1/osu?key=culpa" 
const url = new URL("https://osu.ppy.sh/api/v2/users/1/osu");

let params = {
    "key": "culpa",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

"See User object section"

This endpoint returns the detail of specified user.

OAuth public

HTTP Request

GET /users/{user}/{mode?}

URL Parameters

Parameter Status Description
user required Id or username of the user. Id lookup is prioritised unless key parameter is specified. Previous usernames are also checked in some cases.
mode optional GameMode. User default mode will be used if not specified.

Query Parameters

Parameter Status Description
key optional Type of user passed in url parameter. Can be either id or username to limit lookup by their respective type. Passing empty or invalid value will result in id lookup followed by username lookup if not found.

Response format

Returns User object. Following attributes are included in the response object when applicable.

Attribute Notes
account_history
active_tournament_banner
badges
beatmap_playcounts_count
favourite_beatmapset_count
follower_count
graveyard_beatmapset_count
groups
loved_beatmapset_count
monthly_playcounts
page
previous_usernames
rank_history For specified mode.
ranked_and_approved_beatmapset_count
replays_watched_counts
scores_best_count For specified mode.
scores_first_count For specified mode.
scores_recent_count For specified mode.
statistics For specified mode. Inluces rank and variants attributes.
support_level
unranked_beatmapset_count
user_achievements

Get Users

curl -X GET -G "https://osu.ppy.sh/api/v2/users?ids%5B%5D=1" 
const url = new URL("https://osu.ppy.sh/api/v2/users");

let params = {
    "ids[]": "1",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (200):

{
    "users": [
        {
            "id": 1,
            "other": "attributes..."
        },
        {
            "id": 2,
            "other": "attributes..."
        }
    ]
}

Returns list of users.

OAuth lazer

HTTP Request

GET /users

Query Parameters

Parameter Status Description
ids[] optional User id to be returned. Specify once for each user id requested. Up to 50 users can be requested at once.

Response format

Field Type Description
users UserCompact[] Includes: country, cover, groups, statistics_fruits, statistics_mania, statistics_osu, statistics_taiko.

Wiki

Get Wiki Page

curl -X GET -G "https://osu.ppy.sh/api/v2/wiki/1/1" 
const url = new URL("https://osu.ppy.sh/api/v2/wiki/1/1");

let headers = {
    "Accept": "application/json",
    "Content-Type": "application/json",
}

fetch(url, {
    method: "GET",
    headers: headers,
})
.then(response => response.json())
.then(json => console.log(json));

Example response (302):

null

The wiki article or image data.

HTTP Request

GET /wiki/{locale}/{path}

URL Parameters

Parameter Status Description
page optional The path name of the wiki page.

Response Format

Returns WikiPage.

Notification Websocket

Connection

wscat -c "{notification_endpoint}"
  -H "Authorization: Bearer {{token}}"

The above command will wait and display new notifications as they arrive

This endpoint allows you to receive notifications without constantly polling the server. Correct notification will be a JSON string with at least event field:

Field Type Description
event string See below

Events:

logout event

Server will disconnect session after sending this event so don't try to reconnect.

Field Type Description
event string logout

new event

New notification. See Notification object for notification types.

Field Type Description
event string new
data Notification

read event

Notification has been read.

Field Type Description
event string read
ids number[] id of Notifications which are read

Object Structures

Beatmap

Represent a beatmap. This extends BeatmapCompact with additional attributes.

Additional attributes:

Field Type Description
accuracy float
ar float
beatmapset_id integer
bpm float
convert boolean
count_circles integer
count_sliders integer
count_spinners integer
cs float
deleted_at Timestamp?
drain float
hit_length integer
is_scoreable boolean
last_updated Timestamp
mode_int integer
passcount integer
playcount integer
ranked integer See Rank status for list of possible values.
url string

BeatmapCompact

Represent a beatmap.

Field Type Description
difficulty_rating float
id integer
mode GameMode
status string See Rank status for list of possible values.
total_length integer
version string

Optional attributes:

Field Type Description
beatmapset Beatmapset|BeatmapsetCompact|null Beatmapset for Beatmap object, BeatmapsetCompact for BeatmapCompact object. null if the beatmap doesn't have associated beatmapset (e.g. deleted).
checksum string?
failtimes Failtimes
max_combo integer

Failtimes

All fields are optional but there's always at least one field returned.

Field Type Description
exit integer[]? Array of length 100.
fail integer[]? Array of length 100.

BeatmapScores

{
  "scores": [],
  "userScore": {}
}
Field Type Description
scores Score[] The list of top scores for the beatmap in descending order.
userScore BeatmapUserScore? The score of the current user. This is not returned if the current user does not have a score. Note: will be moved to user_score in the future

BeatmapUserScore

{
  "position": 1,
  "score": {}
}
Field Type Description
position number The position of the score within the requested beatmap ranking.
score Score The details of the score.

Beatmapset

Represents a beatmapset. This extends BeatmapsetCompact with additional attributes.

Field Type Description
availability.download_disabled boolean
availability.more_information string?
bpm float
can_be_hyped boolean
creator string Username of the mapper at the time of beatmapset creation.
discussion_enabled boolean
discussion_locked boolean
hype.current integer
hype.required integer
is_scoreable boolean
last_updated Timestamp
legacy_thread_url string?
nominations.current integer
nominations.required integer
ranked integer See Rank status for list of possible values.
ranked_date Timestamp?
source string
storyboard boolean
submitted_date Timestamp?
tags string

The following attributes are always included as well:

Field
has_favourited

BeatmapsetCompact

Represents a beatmapset.

Field Type Description
artist string
artist_unicode string
covers Covers
creator string
favourite_count number
id number
nsfw boolean
play_count number
preview_url string
source string
status string
title string
title_unicode string
user_id number
video string

Those fields are optional.

Field Type Description
beatmaps Beatmap[]
converts
current_user_attributes
description
discussions
events
genre
has_favourited boolean
language
nominations
ratings
recent_favourites
related_users
user

Covers

Field Type
cover string
cover@2x string
card string
card@2x string
list string
list@2x string
slimcover string
slimcover@2x string

Rank status

The possible values are denoted either as integer or string.

Integer String
-2 graveyard
-1 wip
0 pending
1 ranked
2 approved
3 qualified
4 loved

BeatmapsetDiscussion

Represents a Beatmapset modding discussion.

Field Type Description
beatmap BeatmapCompact?
beatmap_id number
beatmapset BeatmapsetCompact?
beatmapset_id number
can_be_resolved boolean
can_grant_kudosu boolean
created_at Timestamp
current_user_attributes CurrentUserAttributes
deleted_at Timestamp?
deleted_by_id number
id number
kudosu_denied boolean
last_post_at Timestamp
message_type MessageType
parent_id number?
posts BeatmapsetDiscussionPost[]
resolved boolean
starting_post BeatmapsetDiscussionPost
timestamp number?
updated_at Timestamp
user_id number
votes object[] TODO: change structure

MessageType

Name Description
hype
mapper_note
praise
problem
review
suggestion

BeatmapsetDiscussionPost

Represents a post in a BeatmapsetDiscussion.

Field Type Description
beatmapset_discussion_id number
created_at Timestamp
deleted_at Timestamp?
deleted_by_id number
id number
last_editor_id number
message string
system boolean
updated_at Timestamp
user_id number

BeatmapsetDiscussionVote

Represents a vote on a BeatmapsetDiscussion.

Field Type Description
beatmapset_discussion_id number
created_at Timestamp
id number
score number
updated_at Timestamp
user_id number

ChatChannel

{
  "channel_id": 1337,
  "name": "test channel",
  "description": "wheeeee",
  "icon": "/images/layout/avatar-guest@2x.png",
  "type": "GROUP",
  "first_message_id": 10,
  "last_read_id": 9150005005,
  "last_message_id": 9150005005,
  "moderated": false,
  "users": [
    2,
    3,
    102
  ]
}

Represents an individual chat "channel" in the game.

Field Type Description
channel_id number
name string
description string?
icon* string display icon for the channel
type string see channel types below
first_message_id* number? message_id of first message (only returned in presence responses)
last_read_id* number? message_id of last message read (only returned in presence responses)
last_message_id* number? message_id of last known message (only returned in presence responses)
recent_messages ChatMessage[]? up to 50 most recent messages
moderated* boolean user can't send message when the value is true (only returned in presence responses)
users* number[]? array of user_id that are in the channel (not included for PUBLIC channels)

Channel Types

Type Permission Check for Joining/Messaging
PUBLIC
PRIVATE is player in the allowed groups? (channel.allowed_groups)
MULTIPLAYER is player currently in the mp game?
SPECTATOR
TEMPORARY deprecated
PM see below (user_channels)
GROUP is player in channel? (user_channels)

For PMs, two factors are taken into account:

ChatMessage

{
  "message_id": 9150005004,
  "sender_id": 2,
  "channel_id": 5,
  "timestamp": "2018-07-06T06:33:34+00:00",
  "content": "i am a lazerface",
  "is_action": 0,
  "sender": {
    "id": 2,
    "username": "peppy",
    "profile_colour": "#3366FF",
    "avatar_url": "https://a.ppy.sh/2?1519081077.png",
    "country_code": "AU",
    "is_active": true,
    "is_bot": false,
    "is_online": true,
    "is_supporter": true
  }
}

Represents an individual Message within a ChatChannel.

Field Type Description
message_id number unique identifier for message
sender_id number user_id of the sender
channel_id number channel_id of where the message was sent
timestamp string when the message was sent, ISO-8601
content string message content
is_action boolean was this an action? i.e. /me dances
sender UserCompact embeded UserCompact object to save additional api lookups

Comment

{
  "commentable_id": 407,
  "commentable_type": "news_post",
  "created_at": "2019-09-05T06:31:20+00:00",
  "deleted_at": null,
  "edited_at": null,
  "edited_by_id": null,
  "id": 276,
  "legacy_name": null,
  "message": "yes",
  "message_html": "<div class='osu-md-default'><p class=\"osu-md-default__paragraph\">yes</p>\n</div>",
  "parent_id": null,
  "pinned": true,
  "replies_count": 0,
  "updated_at": "2019-09-05T06:31:20+00:00",
  "user_id": 1,
  "votes_count": 0
}

Represents an single comment.

Field Type Description
commentable_id number ID of the object the comment is attached to
commentable_type string type of object the comment is attached to
created_at string ISO 8601 date
deleted_at string? ISO 8601 date if the comment was deleted; null, otherwise
edited_at string? ISO 8601 date if the comment was edited; null, otherwise
edited_by_id number? user id of the user that edited the post; null, otherwise
id number the ID of the comment
legacy_name string? username displayed on legacy comments
message string? markdown of the comment's content
message_html string? html version of the comment's content
parent_id number? ID of the comment's parent
pinned boolean Pin status of the comment
replies_count number number of replies to the comment
updated_at string ISO 8601 date
user_id number user ID of the poster
votes_count number number of votes

CommentBundle

{
  "commentable_meta": [
    {
      "id": 407,
      "title": "Clicking circles linked to increased performance",
      "type": "news_post",
      "url": "https://osu.ppy.sh/home"
    }
  ],
  "comments": [
    {
      "commentable_id": 407,
      "commentable_type": "news_post",
      "created_at": "2019-09-05T06:31:20+00:00",
      "deleted_at": null,
      "edited_at": null,
      "edited_by_id": null,
      "id": 276,
      "legacy_name": null,
      "message": "yes",
      "message_html": "<div class='osu-md-default'><p class=\"osu-md-default__paragraph\">yes</p>\n</div>",
      "parent_id": null,
      "replies_count": 0,
      "updated_at": "2019-09-05T06:31:20+00:00",
      "user_id": 1,
      "votes_count": 1337
    },
    {
      "commentable_id": 407,
      "commentable_type": "news_post",
      "created_at": "2019-09-05T07:31:20+00:00",
      "deleted_at": null,
      "edited_at": null,
      "edited_by_id": null,
      "id": 277,
      "legacy_name": null,
      "message": "absolutely",
      "message_html": "<div class='osu-md-default'><p class=\"osu-md-default__paragraph\">absolutely</p>\n</div>",
      "parent_id": null,
      "replies_count": 0,
      "updated_at": "2019-09-05T07:31:20+00:00",
      "user_id": 2,
      "votes_count": 1337
    }
  ],
  "has_more": true,
  "has_more_id": 276,
  "included_comments": [],
  "pinned_comments": [],
  "sort": "new",
  "user_follow": false,
  "user_votes": [277],
  "users": [
    {
      "avatar_url": "https://a.ppy.sh/2?1519081077.png",
      "country_code": "AU",
      "default_group": "pippi",
      "id": 1,
      "is_active": true,
      "is_bot": false,
      "is_online": true,
      "is_supporter": true,
      "last_visit": "2025-09-05T08:35:00+00:00",
      "pm_friends_only": false,
      "profile_colour": null,
      "username": "pippi"
    },
    {
      "avatar_url": "https://a.ppy.sh/2?1519081077.png",
      "country_code": "AU",
      "default_group": "yuzu",
      "id": 2,
      "is_active": true,
      "is_bot": false,
      "is_online": false,
      "is_supporter": true,
      "last_visit": "2025-09-04T09:28:00+00:00",
      "pm_friends_only": false,
      "profile_colour": null,
      "username": "yuzu"
     }
  ]
}

Comments and related data.

Field Type Description
commentable_meta CommentableMeta[] ID of the object the comment is attached to
comments Comment[] Array of comments ordered according to sort;
cursor Cursor
has_more boolean If there are more comments or replies available
has_more_id number?
included_comments Comment[] Related comments; e.g. parent comments and nested replies
pinned_comments Comment[]? Pinned comments
sort string one of the CommentSort types
top_level_count number? Number of comments at the top level. Not returned for replies.
total number? Total number of comments. Not retuned for replies.
user_follow boolean is the current user watching the comment thread?
user_votes number[] IDs of the comments in the bundle the current user has upvoted
users UserCompact[] array of users related to the comments

CommentSort

Available sort types are new, old, top.

Type Sort Fields
new created_at (descending), id (descending)
old created_at (ascending), id (ascending)
top votes_count (descending), created_at (descending), id (descending)

Building cursor for comments listing

The returned response will be for comments after the specified sort fields.

For example, use last loaded comment for the fields value to load more comments. Also make sure to use same sort and parent_id values.

CommentableMeta

{
  "id": 407,
  "title": "Clicking circles linked to increased performance",
  "type": "news_post",
  "url": "https://osu.ppy.sh/home/"
}

Metadata of the object that a comment is attached to.

Field Type Description
id number the ID of the object
title string display title
type string the type of the object
url string url of the object

CurrentUserAttributes

An object listing various related permissions and states for the current user, related to the object it is attached to.

BeatmapsetDiscussionPermissions

TODO: needs a better name.

Name Description
can_destroy Can delete the discussion.
can_reopen Can reopen the discussion.
can_moderate_kudosu Can allow or deny kudosu.
can_resolve Can resolve the discussion.
vote_score Current vote given to the discussion.

Cursor

{
  "_id": 5,
  "_score": 36.234
}
// query string: cursor[_id]=5&cursor[_score]=36.234
{
  "page": 2,
}
// query string: cursor[page]=2

A structure included in some API responses containing the parameters to get the next set of results.

The values of the cursor should be provided to next request of the same endpoint to get the next set of results.

If there are no more results available, a cursor with a value of null is returned: "cursor": null.

Note that sort option should also be specified for it to work.

Event

The object has different attributes depending on its type. Following are attributes available to all types.

Field Type Description
created_at Timestamp
id number
type Event.Type

Additional objects

Beatmap

Field Type
title string
url string

Beatmapset

Field Type
title string
url string

User

Field Type Description
username string
url string
previousUsername string? Only for usernameChange event.

Available Types

achievement

When user obtained an achievement.

Field Type
achievement Achievement
user Event.User

beatmapPlaycount

When a beatmap has been played for certain number of times.

Field Type
beatmap Event.Beatmap
count number

beatmapsetApprove

When a beatmapset changes state.

Field Type Description
approval string ranked, approved, qualified, loved.
beatmapset Event.Beatmapset
user Event.User Beatmapset owner.

beatmapsetDelete

When a beatmapset is deleted.

Field Type
beatmapset Event.Beatmapset

beatmapsetRevive

When a beatmapset in graveyard state is updated.

Field Type Description
beatmapset Event.Beatmapset
user Event.User Beatmapset owner.

beatmapsetUpdate

When a beatmapset is updated.

Field Type Description
beatmapset Event.Beatmapset
user Event.User Beatmapset owner.

beatmapsetUpload

When a new beatmapset is uploaded.

Field Type Description
beatmapset Event.Beatmapset
user Event.User Beatmapset owner.

rank

When a user achieves a certain rank on a beatmap.

Field Type Description
scoreRank string (FIXME)
rank number
mode GameMode
beatmap Event.Beatmap
user Event.User

rankLost

When a user loses first place to another user.

Field Type
mode GameMode
beatmap Event.Beatmap
user Event.User

userSupportAgain

When a user supports osu! for the second and onwards.

Field Type
user Event.User

userSupportFirst

When a user becomes a supporter for the first time.

Field Type
user Event.User

userSupportGift

When a user is gifted a supporter tag by another user.

Field Type Description
user Event.User Recipient user.

usernameChange

When a user changes their username.

Field Type Description
user Event.User Includes previousUsername.

Forum Post

Field Type Description
created_at Timestamp
deleted_at Timestamp
edited_at Timestamp
edited_by_id number
forum_id number
id number
topic_id number
user_id number

Following fields are optional.

Field Type Description
body.html string Post content in HTML format.
body.raw string Post content in BBCode format.

Forum Topic

Field Type Description
created_at Timestamp
deleted_at Timestamp
first_post_id number
forum_id number
id number
is_locked boolean
last_post_id number
post_count number
title string
type string normal, sticky, or announcement
updated_at Timestamp
user_id number

GameMode

Available game modes:

Name Description
fruits osu!catch
mania osu!mania
osu osu!standard
taiko osu!taiko

Group

This object isn't returned by any endpoints yet, it is here purely as a reference for UserGroup

Field Type Description
id number
identifier string Unique string to identify the group.
is_probationary string Whether members of this group are considered probationary.
has_playmodes boolean If this group associates GameModes with a user's membership, e.g. BN/NAT members
name string
short_name string Short name of the group for display.
description string
colour string

KudosuHistory

Field Type Description
id number
action string Either give, reset, or revoke.
amount number
model string Object type which the exchange happened on (forum_post, etc).
created_at Timestamp
giver Giver? Simple detail of the user who started the exchange.
post Post Simple detail of the object for display.

Giver

Field Type
url string
username string

Post

Field Type Description
url string? Url of the object.
title string Title of the object. It'll be "[deleted beatmap]" for deleted beatmaps.

MultiplayerScore

Score data.

Field Type Description
id number
user_id number
room_id number
playlist_item_id number
beatmap_id number
rank rank
total_score number
accuracy number
max_combo number
mods Mod[]
statistics Statistics
passed bool
position number?
scores_around MultiplayerScoresAround? Scores around the specified score.
user User

MultiplayerScores

An object which contains scores and related data for fetching next page of the result.

Field Type Description
cursor MultiplayerScoresCursor To be used to fetch the next page.
params object To be used to fetch the next page.
scores MultiplayerScore[]
total number? Index only. Total scores of the specified playlist item.
user_score MultiplayerScore? Index only. Score of the accessing user if exists.

To fetch the next page, make request to scores index with relevant room and playlist, with parameters which consists of:

For example, given a response which params contains

Key Value
sort score_asc
limit 10

and cursor of

Key Value
score_id 1
total_score 10

then the parameters would be

Field Value
sort score_asc
limit 10
cursor[score_id] 1
cursor[total_score] 10

and thus the query string is sort=score_asc&limit=10&cursor[score_id]=1&cursor[total_score]=10.

MultiplayerScoresAround

Field Type Description
higher MultiplayerScores
lower MultiplayerScores

MultiplayerScoresCursor

An object which contains pointer for fetching further results of a request. It depends on the sort option.

Field Type Description
score_id number Last score id of current result (score_asc, score_desc).
total_score number Last score's total score of current result (score_asc, score_desc).

MultiplayerScoresSort

Sort option for multiplayer scores index.

Name Description
score_asc Sort by scores, ascending.
score_desc Sort by scores, descending.

Notification

{
  "id": 1,
  "name": "channel_message",
  "created_at": "2019-04-24T07:12:43+00:00",
  "object_type": "channel",
  "object_id": 1,
  "source_user_id": 1,
  "is_read": true,
  "details": {
    "username": "someone",
    ...
  }
}

Represents a notification object.

Field Type Description
id number
name string Name of the event
created_at string ISO 8601 date
object_type string
object_id number
source_user_id number?
is_read boolean
details object message_id of last known message (only returned in presence responses)

Event Names

Name Description
beatmapset_discussion_lock Discussion on beatmap has been locked
beatmapset_discussion_post_new New discussion post on beatmap
beatmapset_discussion_unlock Discussion on beatmap has been unlocked
beatmapset_disqualify Beatmap was disqualified
beatmapset_love Beatmap was promoted to loved
beatmapset_nominate Beatmap was nominated
beatmapset_qualify Beatmap has gained enough nominations and entered the ranking queue
beatmapset_remove_from_loved Beatmap was removed from Loved
beatmapset_reset_nominations Nomination of beatmap was reset
channel_message Someone sent chat message
forum_topic_reply Someone replied on forum topic

beatmapset_discussion_lock

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who locked discussion

Details object:

Field Type Description
cover_url string Beatmap cover
title string Beatmap title
username string Username of source_user_id

beatmapset_discussion_post_new

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number Poster of the discussion

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
discussion_id number
post_id number
beatmap_id number? null if posted to general all
username string Username of source_user_id

beatmapset_discussion_unlock

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who unlocked discussion

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_disqualify

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who disqualified beatmapset

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_love

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who promoted beatmapset to loved

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_nominate

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who nominated beatmapset

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_qualify

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User whom beatmapset nomination triggered qualification

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_remove_from_loved

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who removed beatmapset from Loved

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

beatmapset_reset_nominations

Field Type Description
object_id number Beatmapset id
object_type string beatmapset
source_user_id number User who triggered nomination reset

Details object:

Field Type Description
title string Beatmap title
cover_url string Beatmap cover
username string Username of source_user_id

channel_message

Field Type Description
object_id number Channel id
object_type string channel
source_user_id number User who posted message

Details object:

Field Type Description
title string Up to 36 characters of the message (ends with ... when exceeding 36 characters)
cover_url string Avatar of source_user_id
username string Username of source_user_id

forum_topic_reply

Field Type Description
object_id number Topic id
object_type string forum_topic
source_user_id number User who posted message

Details object:

Field Type Description
title string Title of the replied topic
cover_url string Topic cover
post_id number Post id
username string? Username of source_user_id

RankingType

Available ranking types:

Name Description
charts Spotlight
country Country
performance Performance
score Score

Rankings

{
  "cursor": {

  },
  "ranking": [
    {
      "grade_counts": {
          "a": 3,
          "s": 2,
          "sh": 6,
          "ss": 2,
          "ssh": 3
      },
      "hit_accuracy": 92.19,
      "is_ranked": true,
      "level": {
          "current": 30,
          "progress": 0
      },
      "maximum_combo": 3948,
      "play_count": 228050,
      "play_time": null,
      "pp": 990,
      "global_rank": 87468,
      "ranked_score": 1502995536,
      "replays_watched_by_others": 0,
      "total_hits": 5856573,
      "total_score": 2104193750,
      "user": {
          "avatar_url": "/images/layout/avatar-guest.png",
          "country": {
              "code": "GF",
              "name": "French Guiana"
          },
          "country_code": "GF",
          "cover": {
              "custom_url": null,
              "id": "3",
              "url": "http://osuweb.test/images/headers/profile-covers/c3.jpg"
          },
          "default_group": "default",
          "id": 458402,
          "is_active": false,
          "is_bot": false,
          "is_online": false,
          "is_supporter": true,
          "last_visit": "2017-02-22T11:07:10+00:00",
          "pm_friends_only": false,
          "profile_colour": null,
          "username": "serdman"
      }
    }
  ],
  "total": 100
}
Field Type Description
beatmapsets Beatmapset[]? The list of beatmaps in the requested spotlight for the given mode; only available if type is charts
cursor Cursor A cursor
ranking UserStatistics[] Score details ordered by rank in descending order.
spotlight Spotlight? Spotlight details; only available if type is charts
total number An approximate count of ranks available

Score

Field Type Description
id
best_id
user_id
accuracy
mods
score
max_combo
perfect
statistics.count_50
statistics.count_100
statistics.count_300
statistics.count_geki
statistics.count_katu
statistics.count_miss
pp
rank
created_at
mode
mode_int
replay

Optional attributes:

Field Type Description
beatmap
beatmapset
rank_country
rank_global
weight
user
match

Spotlight

{
  "end_date": "2019-03-22T00:00:00+00:00",
  "id": 1,
  "mode_specific": false,
  "name": "Best spinning circles 2019",
  "start_date": "2019-02-22T00:00:00+00:00",
  "type": "yearly",
}

The details of a spotlight.

Field Type Description
end_date DateTime The end date of the spotlight.
id number The ID of this spotlight.
mode_specific boolean If the spotlight has different mades specific to each GameMode.
participant_count number? The number of users participating in this spotlight. This is only shown when viewing a single spotlight.
name string The name of the spotlight.
start_date DateTime The starting date of the spotlight.
type string The type of spotlight.

Spotlights

{
  "spotlights": [
    {
      "end_date": "2019-03-22T00:00:00+00:00",
      "id": 1,
      "mode_specific": false,
      "name": "Best spinning circles 2019",
      "start_date": "2019-02-22T00:00:00+00:00",
      "type": "yearly",
    },
    {
      "end_date": "2019-03-22T00:00:00+00:00",
      "id": 2,
      "mode_specific": true,
      "name": "Ultimate fruit collector February 2019",
      "start_date": "2019-02-22T00:00:00+00:00",
      "type": "monthly",
    }
  ],
}
Field Type Description
spotlights Spotlight[] An array of spotlights

Timestamp

  "2020-01-01T00:00:00+00:00"

Timestamp string in ISO 8601 format.

User

{
  "avatar_url": "https://a.ppy.sh/1?1501234567.jpeg",
  "country_code": "AU",
  "default_group": "default",
  "id": 1,
  "is_active": true,
  "is_bot": false,
  "is_deleted": false,
  "is_online": false,
  "is_supporter": true,
  "last_visit": "2020-01-01T00:00:00+00:00",
  "pm_friends_only": false,
  "profile_colour": "#000000",
  "username": "osuuser",
  "cover_url": "https://assets.ppy.sh/user-profile-covers/1/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.jpeg",
  "discord": "osuuser#1337",
  "has_supported": true,
  "interests": null,
  "join_date": "2010-01-01T00:00:00+00:00",
  "kudosu": {
    "total": 20,
    "available": 10
  },
  "location": null,
  "max_blocks": 50,
  "max_friends": 500,
  "occupation": null,
  "playmode": "osu",
  "playstyle": [
    "mouse",
    "touch"
  ],
  "post_count": 100,
  "profile_order": [
    "me",
    "recent_activity",
    "beatmaps",
    "historical",
    "kudosu",
    "top_ranks",
    "medals"
  ],
  "title": null,
  "twitter": "osuuser",
  "website": "https://osu.ppy.sh",
  "country": {
    "code": "AU",
    "name": "Australia"
  },
  "cover": {
    "custom_url": "https://assets.ppy.sh/user-profile-covers/1/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.jpeg",
    "url": "https://assets.ppy.sh/user-profile-covers/1/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.jpeg",
    "id": null
  },
  "account_history": [],
  "active_tournament_banner": null,
  "badges": [
    {
      "awarded_at": "2015-01-01T00:00:00+00:00",
      "description": "Test badge",
      "image_url": "https://assets.ppy.sh/profile-badges/test.png",
      "url": ""
    }
  ],
  "favourite_beatmapset_count": 10,
  "follower_count": 100,
  "graveyard_beatmapset_count": 10,
  "groups": [
    {
      "id": 1,
      "identifier": "gmt",
      "name": "gmt",
      "short_name": "GMT",
      "description": "",
      "colour": "#FF0000"
    }
  ],
  "loved_beatmapset_count": 0,
  "monthly_playcounts": [
    {
      "start_date": "2019-11-01",
      "count": 100
    },
    {
      "start_date": "2019-12-01",
      "count": 150
    },
    {
      "start_date": "2020-01-01",
      "count": 20
    }
  ],
  "page": {
    "html": "<div class='bbcode bbcode--profile-page'><center>Hello</center></div>",
    "raw": "[centre]Hello[/centre]"
  },
  "previous_usernames": [],
  "ranked_and_approved_beatmapset_count": 10,
  "replays_watched_counts": [
    {
      "start_date": "2019-11-01",
      "count": 10
    },
    {
      "start_date": "2019-12-01",
      "count": 12
    },
    {
      "start_date": "2020-01-01",
      "count": 1
    }
  ],
  "scores_first_count": 0,
  "statistics": {
    "level": {
      "current": 60,
      "progress": 55
    },
    "pp": 100,
    "global_rank": 2000,
    "ranked_score": 2000000,
    "hit_accuracy": 90.5,
    "play_count": 1000,
    "play_time": 100000,
    "total_score": 3000000,
    "total_hits": 6000,
    "maximum_combo": 500,
    "replays_watched_by_others": 270,
    "is_ranked": true,
    "grade_counts": {
      "ss": 10,
      "ssh": 5,
      "s": 50,
      "sh": 0,
      "a": 40
    },
    "rank": {
      "global": 15000,
      "country": 30000
    }
  },
  "support_level": 3,
  "unranked_beatmapset_count": 0,
  "user_achievements": [
    {
      "achieved_at": "2020-01-01T00:00:00+00:00",
      "achievement_id": 1
    }
  ],
  "rank_history": {
    "mode": "osu",
    "data": [
      16200,
      15500,
      15000
    ]
  }
}

Represents a User. Extends UserCompact object with additional attributes.

Field Type Description
cover_url string url of profile cover
discord string?
has_supported boolean whether or not ever being a supporter in the past
interests string?
join_date Timestamp
kudosu.available number
kudosu.total number
location string?
max_blocks number maximum number of users allowed to be blocked
max_friends number maximum number of friends allowed to be added
occupation string?
playmode GameMode
playstyle string[] Device choices of the user.
post_count number number of forum posts
profile_order ProfilePage[] ordered array of sections in user profile page
title string? user-specific title
title_url string?
twitter string?
website string?

In addition, following attributes are always included:

Attribute
country
cover
is_admin
is_bng
is_full_bn
is_gmt
is_limited_bn
is_moderator
is_nat
is_restricted
is_silenced

ProfilePage

Section
me
recent_activity
beatmaps
historical
kudosu
top_ranks
medals

UserCompact

{
  "id": 2,
  "username": "peppy",
  "profile_colour": "#3366FF",
  "avatar_url": "https://a.ppy.sh/2?1519081077.png",
  "country_code": "AU",
  "is_active": true,
  "is_bot": false,
  "is_deleted": false,
  "is_online": true,
  "is_supporter": true
}

Mainly used for embedding in certain responses to save additional api lookups.

Field Type Description
avatar_url string url of user's avatar
country_code string two-letter code representing user's country
default_group string Identifier of the default Group the user belongs to.
id number unique identifier for user
is_active boolean has this account been active in the last x months?
is_bot boolean is this a bot account?
is_deleted boolean
is_online boolean is the user currently online? (either on lazer or the new website)
is_supporter boolean does this user have supporter?
last_visit Timestamp? last access time. null if the user hides online presence
pm_friends_only boolean whether or not the user allows PM from other than friends
profile_colour string colour of username/profile highlight, hex code (e.g. #333333)
username string user's display name

Optional attributes

Following are attributes which may be additionally included in the response. Relevant endpoints should list them if applicable.

Field Type
account_history UserAccountHistory[]
active_tournament_banner UserCompact.ProfileBanner
badges UserBadge[]
beatmap_playcounts_count number
blocks
country
cover
favourite_beatmapset_count number
follower_count number
friends
graveyard_beatmapset_count number
groups UserGroup[]
is_admin boolean
is_bng boolean
is_full_bn boolean
is_gmt boolean
is_limited_bn boolean
is_moderator boolean
is_nat boolean
is_restricted boolean
is_silenced boolean
loved_beatmapset_count number
monthly_playcounts UserMonthlyPlaycount[]
page
previous_usernames
ranked_and_approved_beatmapset_count
replays_watched_counts
scores_best_count number
scores_first_count number
scores_recent_count number
statistics
statistics_rulesets UserStatisticsRulesets
support_level
unranked_beatmapset_count
unread_pm_count
user_achievements
user_preferences
rank_history

ProfileBanner

Field Type Description
id number
tournament_id number
image string

UserAccountHistory

Field Type Description
description string?
type string note, restriction, or silence.
timestamp Timestamp
length number In seconds.

UserBadge

Field Type Description
awarded_at Timestamp
description string
image_url string
url string

UserGroup

Describes the Group membership of a User - most of the attributes will be the same as the relevant Group

Field Type Description
id number ID (of Group)
identifier string Unique string to identify the group.
is_probationary boolean Whether members of this group are considered probationary.
name string
short_name string Short name of the group for display.
description string
colour string
playmodes string[]? GameModes which the member is responsible for, e.g. in the case of BN/NAT (only present when has_playmodes is set on Group)

UserStatistics

{
  "grade_counts": {
      "a": 3,
      "s": 2,
      "sh": 6,
      "ss": 2,
      "ssh": 3
  },
  "hit_accuracy": 92.19,
  "is_ranked": true,
  "level": {
      "current": 30,
      "progress": 0
  },
  "maximum_combo": 3948,
  "play_count": 228050,
  "play_time": null,
  "pp": 990,
  "global_rank": 87468,
  "ranked_score": 1502995536,
  "replays_watched_by_others": 0,
  "total_hits": 5856573,
  "total_score": 2104193750,
  "user": {
      "avatar_url": "https://a.ppy.sh/2?1519081077.png",
      "country": {
          "code": "AU",
          "name": "Australia"
      },
      "country_code": "AU",
      "cover": {
          "custom_url": null,
          "id": "3",
          "url": "https://assets.ppy.sh/user-profile-covers/2/baba245ef60834b769694178f8f6d4f6166c5188c740de084656ad2b80f1eea7.jpeg"
      },
      "default_group": "ppy",
      "id": 2,
      "is_active": false,
      "is_bot": false,
      "is_online": false,
      "is_supporter": true,
      "last_visit": "2019-02-22T11:07:10+00:00",
      "pm_friends_only": false,
      "profile_colour": "#3366FF",
      "username": "peppy"
  }
}

A summary of various gameplay statistics for a User. Specific to a GameMode

Field Type Description
grade_counts.a number Number of A ranked scores.
grade_counts.s number Number of S ranked scores.
grade_counts.sh number Number of Silver S ranked scores.
grade_counts.ss number Number of SS ranked scores.
grade_counts.ssh number Number of Silver SS ranked scores.
hit_accuracy number Hit accuracy percentage
is_ranked boolean Is actively ranked
level.current number Current level.
level.progress number Progress to next level.
maximum_combo number Highest maximum combo.
play_count number Number of maps played.
play_time number Cumulative time played.
pp number Performance points
global_rank number? Current rank according to pp.
ranked_score number Current ranked score.
replays_watched_by_others number Number of replays watched by other users.
total_hits number Total number of hits.
total_score number Total score.
user UserCompact The associated user.

WikiPage

{
    "layout": "markdown_page",
    "locale": "en",
    "markdown": "# osu! (game mode)\n\n![Gameplay of osu!](/wiki/shared/Interface_osu.jpg \"osu! Interface\")\n\nMarkdownMarkdownTruncated",
    "path": "Game_Modes/osu!",
    "subtitle": "Game Modes",
    "tags": ["tap", "circles"],
    "title": "osu! (game mode)"
}

Represents a wiki article

Field Type Description
layout string The layout type for the page.
locale string All lowercase BCP 47 language tag.
markdown string Markdown content.
path string Path of the article.
subtitle string? The article's subtitle.
tags string[] Associated tags for the article.
title string The article's title.