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
- have registered an OAuth Application.
- 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:
- Requesting authorization from users
- Users are redirected back to your site
- 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 |
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
2020-09-08
presence
removed fromchat/new
response.
2020-08-28
/rooms/{room_id}/leaderboard
no longer returns an array at the top level; an object with keys is now returned.
2020-05-01
users.read
scope removed, replaced with more generalpublic
scope.
2020-02-18
- Beatmap
max_combo
and build update streamuser_count
now return the values as primitives instead of numbers wrapped in an array.
2019-10-09
- Ranking API response no longer returns an array at the top level; an object with keys is now returned.
2019-07-18
User
now returns counts directly as primitives instead of numbers wrapped in an array.
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.
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.
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.
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.
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.
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.
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
.
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.
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.
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.
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.
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": 6,
"votes_count": 5,
"commentable_type": "news_post",
"commentable_id": 409,
"legacy_name": null,
"created_at": "2018-09-11T08:45:49+00:00",
"updated_at": "2020-12-28T15:47:01+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": 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-01-27T05:34:00+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": true,
"is_bot": false,
"is_deleted": false,
"is_online": false,
"is_supporter": false,
"last_visit": "2021-01-18T19:59:44+00:00",
"pm_friends_only": false,
"profile_colour": null,
"username": "Dem0n"
},
{
"avatar_url": "https:\/\/a.ppy.sh\/8256770?1609773566.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-01-27T03:45:23+00:00",
"pm_friends_only": false,
"profile_colour": null,
"username": "_Illustrious_"
},
{
"avatar_url": "https:\/\/a.ppy.sh\/13094046?1598244696.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-01-26T16:04:32+00:00",
"pm_friends_only": false,
"profile_colour": null,
"username": "BlackSoftCow"
},
{
"avatar_url": "https:\/\/a.ppy.sh\/18230139?1605995504.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-01-26T14:01:31+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.
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.
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.
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.
HTTP Request
DELETE /comments/{comment}/vote
Response Format
Returns CommentBundle
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"
}
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"
}
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"
}
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.
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.
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.
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.
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.
HTTP Request
GET /spotlights
Response Format
Returns Spotlights
Undocumented
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"
}
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));
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"
}
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": 5586,
"version": "20210125.1",
"display_version": "20210125.1",
"users": 19050,
"created_at": "2021-01-25T00:55:42+00:00",
"update_stream": {
"id": 5,
"name": "stable40",
"display_name": "Stable",
"is_featured": true
}
},
"user_count": 20623
},
{
"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": 5585,
"version": "20210125",
"display_version": "20210125",
"users": 135,
"created_at": "2021-01-24T15:14:50+00:00",
"update_stream": {
"id": 6,
"name": "beta40",
"display_name": "Beta",
"is_featured": false
}
},
"user_count": 135
},
{
"id": 3,
"name": "cuttingedge",
"display_name": "Cutting Edge",
"is_featured": false,
"latest_build": {
"id": 5589,
"version": "20210127",
"display_version": "20210127",
"users": 376,
"created_at": "2021-01-27T04:40:58+00:00",
"update_stream": {
"id": 3,
"name": "cuttingedge",
"display_name": "Cutting Edge",
"is_featured": false
}
},
"user_count": 558
},
{
"id": 7,
"name": "lazer",
"display_name": "Lazer",
"is_featured": false,
"latest_build": {
"id": 5575,
"version": "2021.118.1",
"display_version": "2021.118.1",
"users": 0,
"created_at": "2021-01-18T14:46:12+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": 5588,
"version": "2021.126.0",
"display_version": "2021.126.0",
"users": 0,
"created_at": "2021-01-26T04:40:40+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
}
},
"user_count": 0
}
],
"builds": [
{
"id": 5589,
"version": "20210127",
"display_version": "20210127",
"users": 376,
"created_at": "2021-01-27T04:40:58+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": "Fix stack lenience getting reset on entering song setup",
"message_html": null,
"major": false,
"created_at": "2021-01-25T15:38: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": "Misc",
"title": "Ensure custom frame limit is not exceeded outside of gameplay",
"message_html": null,
"major": false,
"created_at": "2021-01-26T01:23: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": "Misc",
"title": "Fix compatibility mode not working on some systems",
"message_html": null,
"major": false,
"created_at": "2021-01-27T04:35:28+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": 5588,
"version": "2021.126.0",
"display_version": "2021.126.0",
"users": 0,
"created_at": "2021-01-26T04:40:40+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10688,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4834,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4834",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Geoxor FA news post",
"message_html": null,
"major": false,
"created_at": "2021-01-23T09:33:46+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": 10690,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4833,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4833",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Minor host namechange on 4DM3 tournament",
"message_html": null,
"major": false,
"created_at": "2021-01-23T12:04:54+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": 10691,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4835,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4835",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Bust the cache on Geoxor's FA header to fix",
"message_html": null,
"major": false,
"created_at": "2021-01-23T15:03:26+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": 10692,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4837,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4837",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add the article about SOFT5 tournament",
"message_html": null,
"major": false,
"created_at": "2021-01-24T13:35:57+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": 10693,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7111,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7111",
"url": null,
"type": "fix",
"category": "Performance",
"title": "Simplify event sort query",
"message_html": null,
"major": false,
"created_at": "2021-01-25T03:45:05+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": 10695,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4843,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4843",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix a typo in Making Good Sliders article",
"message_html": null,
"major": false,
"created_at": "2021-01-25T06:45:21+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": 10699,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7113,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7113",
"url": null,
"type": "fix",
"category": "Notifications",
"title": "Send user notification digest by user_notification.id",
"message_html": null,
"major": false,
"created_at": "2021-01-25T09:06: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": 10703,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4830,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4830",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Update BanchoBot and osu! Program Files",
"message_html": null,
"major": false,
"created_at": "2021-01-25T11:51:01+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": 10704,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4842,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4842",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BGTS 2020 to Finals",
"message_html": null,
"major": false,
"created_at": "2021-01-25T11:52: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": 10705,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4841,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4841",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update 3TWC to Quarterfinals",
"message_html": null,
"major": false,
"created_at": "2021-01-25T11:54:09+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": 10706,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4840,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4840",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update CFB5 to Quarterfinals",
"message_html": null,
"major": false,
"created_at": "2021-01-25T11:55:56+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": 10707,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4816,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4816",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Update BanchoBot",
"message_html": null,
"major": false,
"created_at": "2021-01-25T12:00:49+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": 10708,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4817,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4817",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Add Mappers_Gulid",
"message_html": null,
"major": false,
"created_at": "2021-01-25T12:04:21+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": 10709,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4346,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4346",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Add seasonal information to Beatmap Spotlights",
"message_html": null,
"major": false,
"created_at": "2021-01-25T12:13:24+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": 10711,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4814,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4814",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Update osu!mania ranking criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-25T12:15:02+00:00",
"github_user": {
"id": 264,
"display_name": "mcendu",
"github_url": "https:\/\/github.com\/mcendu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10712,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4061,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4061",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add osu!lazer tournament client article",
"message_html": null,
"major": false,
"created_at": "2021-01-25T16:16:53+00:00",
"github_user": {
"id": 330,
"display_name": "MiraiSubject",
"github_url": "https:\/\/github.com\/MiraiSubject",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10713,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4844,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4844",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update osu! South East Asia Tournament 4 to Finals week 2",
"message_html": null,
"major": false,
"created_at": "2021-01-25T16:44:55+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": 10715,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4845,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4845",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH\/EN] Clarify the mod selection screen caption",
"message_html": null,
"major": false,
"created_at": "2021-01-25T20:39:46+00:00",
"github_user": {
"id": 269,
"display_name": "cdwcgt",
"github_url": "https:\/\/github.com\/cdwcgt",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10716,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7115,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7115",
"url": null,
"type": "add",
"category": "Beatmap Info",
"title": "Add option to fetch user score rank from cache server",
"message_html": null,
"major": false,
"created_at": "2021-01-26T04:07: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": 10717,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7116,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7116",
"url": null,
"type": "add",
"category": "Reliability",
"title": "Add null check for beatmap play stats",
"message_html": null,
"major": false,
"created_at": "2021-01-26T05:08: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": 10718,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7117,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7117",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Configurable cached rank lookup timeout",
"message_html": null,
"major": false,
"created_at": "2021-01-26T05:27: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": 5587,
"version": "20210125.2",
"display_version": "20210125.2",
"users": 165,
"created_at": "2021-01-25T05:49:40+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": "Disallow saving a new beatmap difficulty if any of the metadata fields are empty",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Of course, people are shitting on this change because it's TAKING SOMETHING AWAY. Yes, taking something away that makes NO SENSE. Oh, it also fixes the editor, you know, <a class=\"changelog-md__link\" href=\"https:\/\/github.com\/ppy\/osu-stable-issues\/issues\/628\">WIPING YOUR BEATMAP BY ACCIDENT<\/a>. If you are having issues accommodating to this change, fill in each field with "poop", but beware that you may encounter data loss by overwriting your own beatmaps.<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-25T05:01:25+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": 5586,
"version": "20210125.1",
"display_version": "20210125.1",
"users": 19050,
"created_at": "2021-01-25T00:55:42+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": "Adjust minimum stack lenience in song setup UI in line with ranking criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-04T14:25:52+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 excessive circle size values being reverted on opening song setup dialog",
"message_html": null,
"major": false,
"created_at": "2021-01-05T11:59:01+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": "Reliability",
"title": "Add fallback startup mode on optimus-based hardware startup crashes",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A driver update was pushed out over the last week by NVIDIA which has caused startup crashes for some users, with osu! showing an error message reading "Can't find the Intel graphcs".<\/p>\n<p class=\"changelog-md__paragraph\">We are still looking at a permanent solution for this (if it is something that NVIDIA don't fix at their end), but this update will at least allow osu! to continue to startup even if this message displays.<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-24T11:17:21+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": 5585,
"version": "20210125",
"display_version": "20210125",
"users": 135,
"created_at": "2021-01-24T15:14:50+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": "Reliability",
"title": "Add fallback startup mode on optimus-based hardware startup crashes",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A driver update was pushed out over the last week by NVIDIA which has caused startup crashes for some users, with osu! showing an error message reading "Can't find the Intel graphcs".<\/p>\n<p class=\"changelog-md__paragraph\">We are still looking at a permanent solution for this (if it is something that NVIDIA don't fix at their end), but this update will at least allow osu! to continue to startup even if this message displays.<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-24T11:17:21+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": 5584,
"version": "20210124.2",
"display_version": "20210124.2",
"users": 4,
"created_at": "2021-01-24T13:07:50+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": "Reliability",
"title": "Add fallback startup mode on optimus-based hardware startup crashes",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">A driver update was pushed out over the last week by NVIDIA which has caused startup crashes for some users, with osu! showing an error message reading "Can't find the Intel graphcs".<\/p>\n<p class=\"changelog-md__paragraph\">We are still looking at a permanent solution for this (if it is something that NVIDIA don't fix at their end), but this update will at least allow osu! to continue to startup even if this message displays.<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-24T11:17:21+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": 5583,
"version": "20210124.1",
"display_version": "20210124.1",
"users": 2,
"created_at": "2021-01-24T09:27:12+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": "Bug fixes and minor improvements",
"message_html": null,
"major": false,
"created_at": "1970-01-01T00:00:00+00:00",
"github_user": {
"id": null,
"display_name": "peppy",
"github_url": "https:\/\/github.com\/peppy",
"osu_username": null,
"user_id": null,
"user_url": null
}
}
]
},
{
"id": 5582,
"version": "20210124",
"display_version": "20210124",
"users": 1,
"created_at": "2021-01-24T09:06:56+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": "Output whether server GC is active on startup",
"message_html": null,
"major": false,
"created_at": "2021-01-17T08:17:50+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": "Misc",
"title": "Add method of compacting LOH on demand",
"message_html": null,
"major": false,
"created_at": "2021-01-17T08:17:50+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": "Attempt switching to ConcurrentQueue to reduce memory churn",
"message_html": null,
"major": false,
"created_at": "2021-01-17T08:17:50+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": "Enable server GC in csproj",
"message_html": null,
"major": false,
"created_at": "2021-01-17T13:26:26+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": "Misc",
"title": "Add fallback execution path when angle initialisation fails",
"message_html": null,
"major": false,
"created_at": "2021-01-24T08:57:45+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": "Drummer wip",
"message_html": null,
"major": false,
"created_at": "2021-01-24T08:57:45+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": 5581,
"version": "2021.123.0",
"display_version": "2021.123.0",
"users": 0,
"created_at": "2021-01-23T05:09:06+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10595,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4786,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4786",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] peppy",
"message_html": null,
"major": false,
"created_at": "2021-01-16T23:57:19+00:00",
"github_user": {
"id": 326,
"display_name": "Randelman4ik",
"github_url": "https:\/\/github.com\/Randelman4ik",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10596,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4787,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4787",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] Update Project Loved",
"message_html": null,
"major": false,
"created_at": "2021-01-17T01:56:54+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": 10597,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4789,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4789",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Tiny Waves Featured Artist newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-17T09:37:43+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": 10598,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4784,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4784",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update miss count plot in performance points newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-17T10:06:40+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": 10603,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4722,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4722",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "osu!catch Ranking Criteria update",
"message_html": null,
"major": false,
"created_at": "2021-01-17T14:58:00+00:00",
"github_user": {
"id": 463,
"display_name": "osuSpectator",
"github_url": "https:\/\/github.com\/osuSpectator",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10604,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4785,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4785",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] Update osu! Installation on Windows",
"message_html": null,
"major": false,
"created_at": "2021-01-17T16:16:55+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": 10605,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4744,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4744",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] Actualize Article styling criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-17T23:04:04+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": 10606,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4792,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4792",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Make the new miss count plot show up in the newspost ",
"message_html": null,
"major": false,
"created_at": "2021-01-18T00:32:46+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": 10607,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4782,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4782",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Performance Points",
"message_html": null,
"major": false,
"created_at": "2021-01-18T01:06:11+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": 10609,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4791,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4791",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Interlink some articles and their disambiguation pages",
"message_html": null,
"major": false,
"created_at": "2021-01-18T04:40:58+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": 10610,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7064,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7064",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix various wiki redirect",
"message_html": null,
"major": false,
"created_at": "2021-01-18T04:47: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": 10611,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7071,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7071",
"url": null,
"type": "fix",
"category": "Beatmap Info",
"title": "Log beatmap explicit state change",
"message_html": null,
"major": false,
"created_at": "2021-01-18T04:58: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": 10612,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7072,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7072",
"url": null,
"type": "fix",
"category": "Beatmap Info",
"title": "Keep current beatmap id when switching mode in beatmapset page",
"message_html": null,
"major": false,
"created_at": "2021-01-18T05:31: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": 10613,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7069,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7069",
"url": null,
"type": "fix",
"category": "Ux",
"title": "Fix follow mapper toggle button state refresh",
"message_html": null,
"major": false,
"created_at": "2021-01-18T06:22:42+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": 10618,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4771,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4771",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Retranslate Visual_Settings",
"message_html": null,
"major": false,
"created_at": "2021-01-18T10:17:25+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10620,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4776,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4776",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Spotlights Winter Season 2021 newspost & season wiki article",
"message_html": null,
"major": false,
"created_at": "2021-01-18T13:16:50+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": 10623,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4797,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4797",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Rename one of images in the performance points-related newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-18T16:34:52+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": 10624,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4800,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4800",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Spotlights Winter 2021 fixes",
"message_html": null,
"major": false,
"created_at": "2021-01-18T18:29:49+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": 10625,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4795,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4795",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BGTS 2020 to Semifinals",
"message_html": null,
"major": false,
"created_at": "2021-01-18T23:28:16+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": 10626,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4794,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4794",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update 3TWC to Round of 16",
"message_html": null,
"major": false,
"created_at": "2021-01-18T23:29:13+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": 10627,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4801,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4801",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update osu! South East Asia Tournament 4 to Finals week 1",
"message_html": null,
"major": false,
"created_at": "2021-01-18T23:31:05+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": 10628,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4773,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4773",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Beatmap and Difficulties to underline the difference between two concepts",
"message_html": null,
"major": false,
"created_at": "2021-01-18T23:35:08+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": 10629,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4802,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4802",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Remove Beatmap_ID and Beatmapset_ID articles",
"message_html": null,
"major": false,
"created_at": "2021-01-19T00:21:43+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": 10634,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7060,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7060",
"url": null,
"type": "fix",
"category": "Ux",
"title": "Correctly display deleted user",
"message_html": null,
"major": false,
"created_at": "2021-01-19T06:02:42+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": 10635,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7082,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7082",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Don't show verification for wiki pages",
"message_html": null,
"major": false,
"created_at": "2021-01-19T06:34: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": 10636,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7084,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7084",
"url": null,
"type": "fix",
"category": "Beatmap Listing",
"title": "Update explicit content beatmap filter label",
"message_html": null,
"major": false,
"created_at": "2021-01-19T07:04:13+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": 10637,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4718,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4718",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[TH] Banchobot",
"message_html": null,
"major": false,
"created_at": "2021-01-19T10:49:01+00:00",
"github_user": {
"id": 465,
"display_name": "IkaWaAyuMu",
"github_url": "https:\/\/github.com\/IkaWaAyuMu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10638,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4778,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4778",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Project Loved update",
"message_html": null,
"major": false,
"created_at": "2021-01-19T11:10:38+00:00",
"github_user": {
"id": 417,
"display_name": "atimonder1",
"github_url": "https:\/\/github.com\/atimonder1",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10639,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4807,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4807",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Correct the mistake in o!mAC2020 article",
"message_html": null,
"major": false,
"created_at": "2021-01-19T12:22:08+00:00",
"github_user": {
"id": 42,
"display_name": "kj415j45",
"github_url": "https:\/\/github.com\/kj415j45",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10641,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4810,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4810",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Arcaea section to include Beyond diff name",
"message_html": null,
"major": false,
"created_at": "2021-01-19T19:40:16+00:00",
"github_user": {
"id": 466,
"display_name": "Rekunan",
"github_url": "https:\/\/github.com\/Rekunan",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10644,
"repository": "ppy\/osu-web",
"github_pull_request_id": 6809,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/6809",
"url": null,
"type": "add",
"category": "Chat",
"title": "Add OAuth scope for sending chat PMs",
"message_html": null,
"major": false,
"created_at": "2021-01-20T04:49:03+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": 10645,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7083,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7083",
"url": null,
"type": "fix",
"category": "Ux",
"title": "Fix include for user card in score detail json",
"message_html": null,
"major": false,
"created_at": "2021-01-20T06:43: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": 10646,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4811,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4811",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix typo on [TH] BanchoBot article.",
"message_html": null,
"major": false,
"created_at": "2021-01-20T08:02:00+00:00",
"github_user": {
"id": 465,
"display_name": "IkaWaAyuMu",
"github_url": "https:\/\/github.com\/IkaWaAyuMu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10648,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7065,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7065",
"url": null,
"type": "fix",
"category": "Beatmap Discussions",
"title": "Fix beatmap nomination reset button label",
"message_html": null,
"major": false,
"created_at": "2021-01-20T08:46: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": 10650,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7087,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7087",
"url": null,
"type": "fix",
"category": "Settings",
"title": "Don't trim account setting fields",
"message_html": null,
"major": false,
"created_at": "2021-01-20T09:32:51+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": 10651,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4813,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4813",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix a typo in Ranking Criteria Council article",
"message_html": null,
"major": false,
"created_at": "2021-01-20T10:08:26+00:00",
"github_user": {
"id": 264,
"display_name": "mcendu",
"github_url": "https:\/\/github.com\/mcendu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10652,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4812,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4812",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Yuyoyuppe FA news post",
"message_html": null,
"major": false,
"created_at": "2021-01-20T10:22:23+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": 10653,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4806,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4806",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix links to a list of osu! wiki's locales",
"message_html": null,
"major": false,
"created_at": "2021-01-20T10:33:06+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": 10654,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4805,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4805",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Clean up references to Beatmap[Set]ID",
"message_html": null,
"major": false,
"created_at": "2021-01-20T10:35:04+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": 10658,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4803,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4803",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Remove the Beatmap\/Beatmapsets directory",
"message_html": null,
"major": false,
"created_at": "2021-01-20T15:22:26+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": 10663,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4689,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4689",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Game modifier",
"message_html": null,
"major": false,
"created_at": "2021-01-21T09:39:17+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10664,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4690,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4690",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Summary of game modifiers",
"message_html": null,
"major": false,
"created_at": "2021-01-21T09:50:25+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10665,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4743,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4743",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Update General Ranking Criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-21T10:06:31+00:00",
"github_user": {
"id": 269,
"display_name": "cdwcgt",
"github_url": "https:\/\/github.com\/cdwcgt",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10666,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7088,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7088",
"url": null,
"type": "fix",
"category": "Chat",
"title": "Reduce queries for user chat",
"message_html": null,
"major": false,
"created_at": "2021-01-21T10:09: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": 10667,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7090,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7090",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Refactor user profile page masking into component",
"message_html": null,
"major": false,
"created_at": "2021-01-21T10:25:38+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": 10669,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4821,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4821",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Community Choice 2020 newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-21T10:44:02+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": 10670,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4715,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4715",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ES] Add Writing",
"message_html": null,
"major": false,
"created_at": "2021-01-21T13:07:58+00:00",
"github_user": {
"id": 438,
"display_name": "MagoSimon",
"github_url": "https:\/\/github.com\/MagoSimon",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10671,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4819,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4819",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Link to a list of important skinning guides and threads from Guides; update the Russian translation of Guides",
"message_html": null,
"major": false,
"created_at": "2021-01-21T18:04:49+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": 10672,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4808,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4808",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Set the correct title and a proper category for Difficulties",
"message_html": null,
"major": false,
"created_at": "2021-01-21T18:30:29+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": 10674,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4826,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4826",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Clean up Storyboard Scripting",
"message_html": null,
"major": false,
"created_at": "2021-01-21T21:09:32+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": 10675,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7076,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7076",
"url": null,
"type": "add",
"category": "Design",
"title": "Add Thai specific font",
"message_html": null,
"major": false,
"created_at": "2021-01-22T05:22:10+00:00",
"github_user": {
"id": 469,
"display_name": "Varkaria",
"github_url": "https:\/\/github.com\/Varkaria",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10678,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4754,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4754",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Cleanup osu! World Cup #2 wiki article",
"message_html": null,
"major": false,
"created_at": "2021-01-22T09:25:21+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": 10679,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4829,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4829",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Update hatnote in Game modifier article",
"message_html": null,
"major": false,
"created_at": "2021-01-22T09:51:43+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10680,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7092,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7092",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Remove \"default\" github token",
"message_html": null,
"major": false,
"created_at": "2021-01-22T10:43: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": 10681,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7107,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7107",
"url": null,
"type": "fix",
"category": "Design",
"title": "Update country flag",
"message_html": null,
"major": false,
"created_at": "2021-01-22T11:44: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": 10683,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4831,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4831",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BN listing and Staff log",
"message_html": null,
"major": false,
"created_at": "2021-01-22T15:47:58+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": 10684,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4832,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4832",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix broken table in osu! World Cup #2 wiki article",
"message_html": null,
"major": false,
"created_at": "2021-01-22T17:50:27+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": 10686,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4788,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4788",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "4DM3: Initial Article",
"message_html": null,
"major": false,
"created_at": "2021-01-23T03:17:48+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": 10687,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4798,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4798",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "CFB5: Initial Article",
"message_html": null,
"major": false,
"created_at": "2021-01-23T03:22:33+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": 5575,
"version": "2021.118.1",
"display_version": "2021.118.1",
"users": 0,
"created_at": "2021-01-18T14:46:12+00:00",
"update_stream": {
"id": 7,
"name": "lazer",
"display_name": "Lazer",
"is_featured": false
},
"changelog_entries": [
{
"id": 10522,
"repository": "ppy\/osu",
"github_pull_request_id": 11353,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11353",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Disable multiplayer action buttons after clicks to prevent double operations",
"message_html": null,
"major": false,
"created_at": "2021-01-09T08:42:39+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": 10529,
"repository": "ppy\/osu",
"github_pull_request_id": 11448,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11448",
"url": null,
"type": "fix",
"category": "Editor",
"title": "Fix editor crashing on enter if login overlay was previously opened",
"message_html": null,
"major": false,
"created_at": "2021-01-10T03:59:47+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": 10531,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4142,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4142",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Close MIDI devices when disposing of \/ disabling MIDI input handler",
"message_html": null,
"major": false,
"created_at": "2021-01-10T07:38:55+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": 10532,
"repository": "ppy\/osu",
"github_pull_request_id": 11452,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11452",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Improve safety of ongoing operation tracker",
"message_html": null,
"major": false,
"created_at": "2021-01-10T14:41:14+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": 10536,
"repository": "ppy\/osu",
"github_pull_request_id": 11386,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11386",
"url": null,
"type": "fix",
"category": "Song Select",
"title": "Fix selected mods properties not copied to overlay mods",
"message_html": null,
"major": false,
"created_at": "2021-01-10T15:37:26+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": 10537,
"repository": "ppy\/osu",
"github_pull_request_id": 11447,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11447",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix track previews crashing on completion",
"message_html": null,
"major": false,
"created_at": "2021-01-10T18:10:18+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": 10543,
"repository": "ppy\/osu",
"github_pull_request_id": 11118,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11118",
"url": null,
"type": "add",
"category": "Tournament",
"title": "Add the ability to switch tournaments at the setup screen",
"message_html": null,
"major": true,
"created_at": "2021-01-11T07:36:46+00:00",
"github_user": {
"id": 330,
"display_name": "MiraiSubject",
"github_url": "https:\/\/github.com\/MiraiSubject",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10545,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4143,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4143",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix `GetLoadableTypes()` extension potentially including null `Type` instances",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Also not entirely sure how to handle that <code>ConditionIsAlwaysTrueOrFalse<\/code> resharper warning, the array is declared as <code>Type[]?<\/code>, which, if I understand correctly, means it's either a null array, or an array with non-null type elements. But the array indeed had a null <code>Type<\/code> element sticking inside...<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-11T14:18:21+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": 10546,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4103,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4103",
"url": null,
"type": "add",
"category": "Framework",
"title": "Add filtering mode support to FontStore",
"message_html": null,
"major": false,
"created_at": "2021-01-12T04:32:34+00:00",
"github_user": {
"id": 460,
"display_name": "boswelja",
"github_url": "https:\/\/github.com\/boswelja",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10550,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4146,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4146",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Fix windows key disable not working when raw input is enabled",
"message_html": null,
"major": false,
"created_at": "2021-01-12T10:39:41+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": 10553,
"repository": "ppy\/osu",
"github_pull_request_id": 11465,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11465",
"url": null,
"type": "fix",
"category": "Gameplay",
"title": "Fix taiko bpm multiplier losing too much precision",
"message_html": null,
"major": false,
"created_at": "2021-01-12T19:43: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": 10556,
"repository": "ppy\/osu",
"github_pull_request_id": 11467,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11467",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix non-hosts crashing on load requested",
"message_html": null,
"major": false,
"created_at": "2021-01-13T02:39:00+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": 10562,
"repository": "ppy\/osu",
"github_pull_request_id": 11474,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11474",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Rename download state `Downloaded` to `Importing`",
"message_html": null,
"major": false,
"created_at": "2021-01-13T19: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": 10563,
"repository": "ppy\/osu",
"github_pull_request_id": 11476,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11476",
"url": null,
"type": "fix",
"category": "Gameplay (osu!)",
"title": "Revert overlooked AR<8 speed buff",
"message_html": null,
"major": false,
"created_at": "2021-01-14T02:13:38+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": 10565,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4144,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4144",
"url": null,
"type": "add",
"category": "Code Quality",
"title": "Add IKeyBinding interface type for flexibility in key bindings",
"message_html": null,
"major": false,
"created_at": "2021-01-14T04:06: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": 10566,
"repository": "ppy\/osu",
"github_pull_request_id": 11479,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11479",
"url": null,
"type": "fix",
"category": "Gameplay",
"title": "Fix default judgement text mispositioned for one frame",
"message_html": null,
"major": false,
"created_at": "2021-01-14T04:14: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": 10570,
"repository": "ppy\/osu",
"github_pull_request_id": 11410,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11410",
"url": null,
"type": "add",
"category": "Multiplayer",
"title": "Add change state methods for multiplayer user beatmap availability",
"message_html": null,
"major": false,
"created_at": "2021-01-14T09:42:27+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": 10571,
"repository": "ppy\/osu",
"github_pull_request_id": 11483,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11483",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix deadlock scenario when calculating fallback difficulty",
"message_html": null,
"major": false,
"created_at": "2021-01-14T12:30: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": 10572,
"repository": "ppy\/osu",
"github_pull_request_id": 11462,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11462",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix users not showing up in multiplayer lounge",
"message_html": null,
"major": false,
"created_at": "2021-01-14T13:07: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": 10573,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4151,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4151",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix possible GlobalStatistics thread races",
"message_html": null,
"major": false,
"created_at": "2021-01-14T15:48: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": 10574,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4012,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4012",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Target .NET 5",
"message_html": null,
"major": true,
"created_at": "2021-01-15T04:01:01+00:00",
"github_user": {
"id": 7,
"display_name": "UselessToucan",
"github_url": "https:\/\/github.com\/UselessToucan",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10575,
"repository": "ppy\/osu",
"github_pull_request_id": 11464,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11464",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix non-threadsafe usage of MultiplayerClient.IsConnected",
"message_html": null,
"major": false,
"created_at": "2021-01-15T05:10: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": 10576,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4152,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4152",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Update native libs package to net5.0 supporting version",
"message_html": null,
"major": false,
"created_at": "2021-01-15T05:20: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": 10577,
"repository": "ppy\/osu",
"github_pull_request_id": 11494,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11494",
"url": null,
"type": "fix",
"category": "Song Select",
"title": "Fix the beatmap carousel playing the difficulty change sample on beatmap change",
"message_html": null,
"major": false,
"created_at": "2021-01-15T05:47: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": 10580,
"repository": "ppy\/osu",
"github_pull_request_id": 11498,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11498",
"url": null,
"type": "fix",
"category": "Editor",
"title": "Fix editor timeline not snapping on non-precise wheel scroll",
"message_html": null,
"major": false,
"created_at": "2021-01-15T09:16: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": 10582,
"repository": "ppy\/osu",
"github_pull_request_id": 11501,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11501",
"url": null,
"type": "fix",
"category": "Testing",
"title": "Fix spinner tests not playing spinning sound due to empty hitsamples",
"message_html": null,
"major": false,
"created_at": "2021-01-15T19:25:57+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": 10584,
"repository": "ppy\/osu",
"github_pull_request_id": 11496,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11496",
"url": null,
"type": "fix",
"category": "Gameplay (osu!)",
"title": "Fix wrong judgement animation being applied to some legacy skins",
"message_html": null,
"major": false,
"created_at": "2021-01-15T21:59:56+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": 10589,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4154,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4154",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Update .NET SDK requirements in README",
"message_html": null,
"major": false,
"created_at": "2021-01-16T06:56:44+00:00",
"github_user": {
"id": 16,
"display_name": "HoutarouOreki",
"github_url": "https:\/\/github.com\/HoutarouOreki",
"osu_username": "Houtarou Oreki",
"user_id": 4185566,
"user_url": "https:\/\/osu.ppy.sh\/users\/4185566"
}
},
{
"id": 10590,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4155,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4155",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Correct documentation typos",
"message_html": null,
"major": false,
"created_at": "2021-01-16T13:17:10+00:00",
"github_user": {
"id": 16,
"display_name": "HoutarouOreki",
"github_url": "https:\/\/github.com\/HoutarouOreki",
"osu_username": "Houtarou Oreki",
"user_id": 4185566,
"user_url": "https:\/\/osu.ppy.sh\/users\/4185566"
}
},
{
"id": 10593,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4139,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4139",
"url": null,
"type": "fix",
"category": "Audio",
"title": "Fix playing back SampleChannels ending previous playbacks",
"message_html": null,
"major": false,
"created_at": "2021-01-16T17: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": 10594,
"repository": "ppy\/osu",
"github_pull_request_id": 11212,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11212",
"url": null,
"type": "add",
"category": "Platform",
"title": "Add ability to import multiple files at once on android",
"message_html": null,
"major": false,
"created_at": "2021-01-16T23:44:51+00:00",
"github_user": {
"id": 167,
"display_name": "Game4all",
"github_url": "https:\/\/github.com\/Game4all",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10599,
"repository": "ppy\/osu",
"github_pull_request_id": 11472,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11472",
"url": null,
"type": "add",
"category": "Overlays",
"title": "Add explicit content markers to beatmap panels and overlay",
"message_html": null,
"major": true,
"created_at": "2021-01-17T12:44: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": 10601,
"repository": "ppy\/osu",
"github_pull_request_id": 11519,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11519",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix android users not being able to join multiplayer rooms",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">I nuked the timeout because I figure that if it ever deadlocks then we have bigger issues. Can bring back on request but I believe it was always arbitrary-ish.<\/p>\n<\/div>",
"major": true,
"created_at": "2021-01-17T14:24:06+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": 10602,
"repository": "ppy\/osu",
"github_pull_request_id": 11473,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11473",
"url": null,
"type": "add",
"category": "Overlays",
"title": "Add \"explicit maps\" search filter control to beatmap listing",
"message_html": null,
"major": false,
"created_at": "2021-01-17T14:27:16+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": 10608,
"repository": "ppy\/osu",
"github_pull_request_id": 11523,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11523",
"url": null,
"type": "add",
"category": "Tooling",
"title": "Add nuget deploys for all rulesets",
"message_html": null,
"major": false,
"created_at": "2021-01-18T02:47: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": 10614,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4156,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4156",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Attempt to fix macOS GPU crash on Big Sur",
"message_html": null,
"major": false,
"created_at": "2021-01-18T07:03: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": 10615,
"repository": "ppy\/osu",
"github_pull_request_id": 11469,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11469",
"url": null,
"type": "add",
"category": "Gameplay",
"title": "Add ability to toggle beatmap colours separate from skins",
"message_html": null,
"major": true,
"created_at": "2021-01-18T07:46:53+00:00",
"github_user": {
"id": 464,
"display_name": "Mysfit",
"github_url": "https:\/\/github.com\/Mysfit",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10616,
"repository": "ppy\/osu",
"github_pull_request_id": 11525,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11525",
"url": null,
"type": "fix",
"category": "Editor",
"title": "Fix selection box not updating with hitcircles\/sliders far in the future or past",
"message_html": null,
"major": false,
"created_at": "2021-01-18T08:34: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": 10617,
"repository": "ppy\/osu",
"github_pull_request_id": 11526,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11526",
"url": null,
"type": "fix",
"category": "Editor",
"title": "Fix sliders with an even number of repeats not allowing rotation\/scale transforms",
"message_html": null,
"major": false,
"created_at": "2021-01-18T09:56: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": 10619,
"repository": "ppy\/osu",
"github_pull_request_id": 11529,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11529",
"url": null,
"type": "fix",
"category": "Tooling",
"title": "Restore nuget packages per project to avoid toolchain incompatibilities",
"message_html": null,
"major": false,
"created_at": "2021-01-18T13:04: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": 10621,
"repository": "ppy\/osu",
"github_pull_request_id": 11502,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11502",
"url": null,
"type": "fix",
"category": "Gameplay",
"title": "Fix some issues with spinner spin sound",
"message_html": null,
"major": false,
"created_at": "2021-01-18T13:50: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": 10622,
"repository": "ppy\/osu",
"github_pull_request_id": 11520,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11520",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix playlist item download button never shown back after hiding",
"message_html": null,
"major": false,
"created_at": "2021-01-18T14:37:33+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": 5569,
"version": "2021.116.0",
"display_version": "2021.116.0",
"users": 0,
"created_at": "2021-01-16T13:13:59+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10581,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7062,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7062",
"url": null,
"type": "fix",
"category": "Performance",
"title": "Declare missing base model properties",
"message_html": null,
"major": false,
"created_at": "2021-01-15T11:47:42+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": 10583,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4779,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4779",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] Update macOS Installation",
"message_html": null,
"major": false,
"created_at": "2021-01-15T19:44:14+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": 10585,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4713,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4713",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ES] Add Article Styling Criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-15T23:48:22+00:00",
"github_user": {
"id": 438,
"display_name": "MagoSimon",
"github_url": "https:\/\/github.com\/MagoSimon",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10586,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4705,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4705",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add Ranking",
"message_html": null,
"major": false,
"created_at": "2021-01-16T00:03:10+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": 10587,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4703,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4703",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Update Visual Content Considerations",
"message_html": null,
"major": false,
"created_at": "2021-01-16T00:15:32+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": 10588,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4768,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4768",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Performance Points Updates (2021)",
"message_html": null,
"major": false,
"created_at": "2021-01-16T06:01:38+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": 10592,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7074,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7074",
"url": null,
"type": "fix",
"category": "Chat",
"title": "Preload some user data for sending chat",
"message_html": null,
"major": false,
"created_at": "2021-01-16T16:49:26+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": 5568,
"version": "2021.115.0",
"display_version": "2021.115.0",
"users": 0,
"created_at": "2021-01-15T11:43:51+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10557,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4760,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4760",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update SEAC 2020 to Round of 16",
"message_html": null,
"major": false,
"created_at": "2021-01-13T03:47: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": 10558,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4775,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4775",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Symholic FA news post",
"message_html": null,
"major": false,
"created_at": "2021-01-13T10:07:42+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": 10559,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4762,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4762",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BGTS 2020 to Quarterfinals",
"message_html": null,
"major": false,
"created_at": "2021-01-13T17:08:26+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": 10560,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4755,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4755",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update 3TWC to Round of 24",
"message_html": null,
"major": false,
"created_at": "2021-01-13T17:16:00+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": 10561,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4761,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4761",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update osu! South East Asia Tournament 4 to Semifinals",
"message_html": null,
"major": false,
"created_at": "2021-01-13T17:26:33+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": 10568,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7063,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7063",
"url": null,
"type": "fix",
"category": "Store",
"title": "Fix confusing error message in store",
"message_html": null,
"major": false,
"created_at": "2021-01-14T07:37:04+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": 10569,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7061,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7061",
"url": null,
"type": "fix",
"category": "Performance",
"title": "Reduce number of casting when accessing user settings",
"message_html": null,
"major": false,
"created_at": "2021-01-14T08:10:58+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": 10578,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7070,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7070",
"url": null,
"type": "fix",
"category": "Localisation",
"title": "Show translated scope description",
"message_html": null,
"major": false,
"created_at": "2021-01-15T08:56: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": 10579,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7067,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7067",
"url": null,
"type": "fix",
"category": "Localisation",
"title": "Update translations from crowdin",
"message_html": null,
"major": false,
"created_at": "2021-01-15T09:04: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": 5567,
"version": "2021.113.0",
"display_version": "2021.113.0",
"users": 0,
"created_at": "2021-01-13T02:42:25+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10538,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4679,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4679",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add No Fail",
"message_html": null,
"major": false,
"created_at": "2021-01-10T22:06:27+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10539,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4687,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4687",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Perfect",
"message_html": null,
"major": false,
"created_at": "2021-01-11T03:44:20+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10540,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4688,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4688",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Sudden Death",
"message_html": null,
"major": false,
"created_at": "2021-01-11T03:48:08+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10541,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4756,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4756",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add flags to Mapping and modding timeline",
"message_html": null,
"major": false,
"created_at": "2021-01-11T05:46:16+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": 10542,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4757,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4757",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix some typos in Mapping and modding timeline",
"message_html": null,
"major": false,
"created_at": "2021-01-11T06:50:56+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": 10544,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4758,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4758",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Minor namefix on TSCW 2020",
"message_html": null,
"major": false,
"created_at": "2021-01-11T12:23:53+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": 10547,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7054,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7054",
"url": null,
"type": "fix",
"category": "Misc",
"title": "Fix error on dashboard page when user has no profile settings",
"message_html": null,
"major": false,
"created_at": "2021-01-12T07:05:32+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": 10548,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7056,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7056",
"url": null,
"type": "fix",
"category": "Misc",
"title": "Correctly hide explicit cover for search header based on user setting",
"message_html": null,
"major": false,
"created_at": "2021-01-12T07:39: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": 10549,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7057,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7057",
"url": null,
"type": "fix",
"category": "Beatmap Listing",
"title": "Fix setting of beatmap nsfw search parameter",
"message_html": null,
"major": false,
"created_at": "2021-01-12T09:57:27+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": 10551,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4724,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4724",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Rename articles and fix links (Beatmaps -> Beatmap)",
"message_html": null,
"major": false,
"created_at": "2021-01-12T15:06:53+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": 10552,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4772,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4772",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix remaining beatmap links",
"message_html": null,
"major": false,
"created_at": "2021-01-12T15:28:49+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": 10554,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4774,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4774",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add missing space to osu!catch",
"message_html": null,
"major": false,
"created_at": "2021-01-12T20:50:45+00:00",
"github_user": {
"id": 461,
"display_name": "TTTaevas",
"github_url": "https:\/\/github.com\/TTTaevas",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10555,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4769,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4769",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update SOL2 for Grand Finals",
"message_html": null,
"major": false,
"created_at": "2021-01-12T21:15:27+00:00",
"github_user": {
"id": 307,
"display_name": "ItsMestro",
"github_url": "https:\/\/github.com\/ItsMestro",
"osu_username": null,
"user_id": null,
"user_url": null
}
}
]
},
{
"id": 5566,
"version": "2021.110.0",
"display_version": "2021.110.0",
"users": 0,
"created_at": "2021-01-10T15:13:57+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10489,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4733,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4733",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Staff log 2021 and update BN listing",
"message_html": null,
"major": false,
"created_at": "2021-01-05T16:32:20+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": 10490,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4734,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4734",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix Hivie's profile link in the BN listing",
"message_html": null,
"major": false,
"created_at": "2021-01-05T18:59:05+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": 10493,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4735,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4735",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Clean up Project Loved",
"message_html": null,
"major": false,
"created_at": "2021-01-05T22:25:20+00:00",
"github_user": {
"id": 454,
"display_name": "GeraldAzgore",
"github_url": "https:\/\/github.com\/GeraldAzgore",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10495,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4736,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4736",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add New FA Getty news post",
"message_html": null,
"major": false,
"created_at": "2021-01-06T08:38: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": 10496,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4738,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4738",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix Getty FA new line",
"message_html": null,
"major": false,
"created_at": "2021-01-06T08:46: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": 10497,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4739,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4739",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add map to Getty news post",
"message_html": null,
"major": false,
"created_at": "2021-01-06T09:10:50+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": 10505,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4672,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4672",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add Beatmap Discussion ",
"message_html": null,
"major": false,
"created_at": "2021-01-06T16:15:07+00:00",
"github_user": {
"id": 458,
"display_name": "CodeTrojan",
"github_url": "https:\/\/github.com\/CodeTrojan",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10508,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4740,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4740",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Project Loved Wiki Page",
"message_html": null,
"major": false,
"created_at": "2021-01-07T00:47:00+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": 10510,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4741,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4741",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Mark translations of Project Loved as outdated",
"message_html": null,
"major": false,
"created_at": "2021-01-07T02:10:43+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": 10511,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4742,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4742",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Remove 18+ warning rule from Ranking Criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-07T12:47:57+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": 10512,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4677,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4677",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Update and rework The Team",
"message_html": null,
"major": false,
"created_at": "2021-01-07T13:33:55+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": 10513,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4731,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4731",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Clean up the osu! World Cup #1 wiki article",
"message_html": null,
"major": false,
"created_at": "2021-01-07T15:11:05+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": 10515,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4737,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4737",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Add Account Restrictions, Help Centre, Installation (macOS), Installation, Registration, and Welcome",
"message_html": null,
"major": false,
"created_at": "2021-01-08T16:02:46+00:00",
"github_user": {
"id": 417,
"display_name": "atimonder1",
"github_url": "https:\/\/github.com\/atimonder1",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10516,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4746,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4746",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Update group-info and related articles",
"message_html": null,
"major": false,
"created_at": "2021-01-08T16:09:49+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": 10521,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4747,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4747",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Don't use redirects when referring to the osu! wiki contribution guide",
"message_html": null,
"major": false,
"created_at": "2021-01-09T02:27:02+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": 10523,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4750,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4750",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Phantom Sage FA news post",
"message_html": null,
"major": false,
"created_at": "2021-01-09T09:10:21+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": 10524,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4751,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4751",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Main Page",
"message_html": null,
"major": false,
"created_at": "2021-01-09T12:50:27+00:00",
"github_user": {
"id": 417,
"display_name": "atimonder1",
"github_url": "https:\/\/github.com\/atimonder1",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10525,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 3483,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/3483",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Interface",
"message_html": null,
"major": false,
"created_at": "2021-01-09T17:25:37+00:00",
"github_user": {
"id": 334,
"display_name": "KevKjef",
"github_url": "https:\/\/github.com\/KevKjef",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10526,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4748,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4748",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[RU] Update Bot account, People, The Team, and Support Team",
"message_html": null,
"major": false,
"created_at": "2021-01-09T20:22:36+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": 10527,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4752,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4752",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Minor clean up for the osu! Program files article",
"message_html": null,
"major": false,
"created_at": "2021-01-09T21:49:29+00:00",
"github_user": {
"id": 459,
"display_name": "MishterKirby",
"github_url": "https:\/\/github.com\/MishterKirby",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10528,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7050,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7050",
"url": null,
"type": "fix",
"category": "Documentation",
"title": "Clarify API key origin in setup procedure",
"message_html": null,
"major": false,
"created_at": "2021-01-10T03:35:50+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": 10533,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4682,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4682",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Spun Out",
"message_html": null,
"major": false,
"created_at": "2021-01-10T14:48:33+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10534,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4680,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4680",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Autopilot",
"message_html": null,
"major": false,
"created_at": "2021-01-10T14:52:57+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10535,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4674,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4674",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Nightcore",
"message_html": null,
"major": false,
"created_at": "2021-01-10T15:00:48+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
}
]
},
{
"id": 5561,
"version": "2021.109.0",
"display_version": "2021.109.0",
"users": 0,
"created_at": "2021-01-08T17:31:24+00:00",
"update_stream": {
"id": 7,
"name": "lazer",
"display_name": "Lazer",
"is_featured": false
},
"changelog_entries": [
{
"id": 10426,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4115,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4115",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Improve exception handling in WebRequest",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:48:41+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": 10430,
"repository": "ppy\/osu",
"github_pull_request_id": 11359,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11359",
"url": null,
"type": "fix",
"category": "UX",
"title": "Silence network errors that don't need to be shown to the user",
"message_html": null,
"major": false,
"created_at": "2020-12-29T16:33: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": 10436,
"repository": "ppy\/osu",
"github_pull_request_id": 11373,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11373",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Move thread safety \/ locking logic from MultiplayerRoom",
"message_html": null,
"major": false,
"created_at": "2020-12-30T14:27: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": 10438,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4117,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4117",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Remove duplicated license header",
"message_html": null,
"major": false,
"created_at": "2020-12-30T18:28:08+00:00",
"github_user": {
"id": 167,
"display_name": "Game4all",
"github_url": "https:\/\/github.com\/Game4all",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10440,
"repository": "ppy\/osu",
"github_pull_request_id": 11346,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11346",
"url": null,
"type": "fix",
"category": "UI",
"title": "Fix changelog header staying dimmed after build show",
"message_html": null,
"major": false,
"created_at": "2020-12-31T07:15:25+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": 10441,
"repository": "ppy\/osu",
"github_pull_request_id": 11379,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11379",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix actions which need to run from main menu occasionally failing to run",
"message_html": null,
"major": false,
"created_at": "2020-12-31T10:10: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": 10443,
"repository": "ppy\/osu",
"github_pull_request_id": 11382,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11382",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Move SkinnableHealthDisplay to osu.Game.Screens.Play.HUD",
"message_html": null,
"major": false,
"created_at": "2020-12-31T13:39:49+00:00",
"github_user": {
"id": 264,
"display_name": "mcendu",
"github_url": "https:\/\/github.com\/mcendu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10461,
"repository": "ppy\/osu",
"github_pull_request_id": 11404,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11404",
"url": null,
"type": "fix",
"category": "Tooling",
"title": "Bump InspectCode tool to 2020.3.2",
"message_html": null,
"major": false,
"created_at": "2021-01-02T12:17:34+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": 10462,
"repository": "ppy\/osu",
"github_pull_request_id": 11401,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11401",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix multiplayer client not reconnecting on all disconnection types",
"message_html": null,
"major": true,
"created_at": "2021-01-02T12:50: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": 10463,
"repository": "ppy\/osu",
"github_pull_request_id": 11344,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11344",
"url": null,
"type": "fix",
"category": "Mobile",
"title": "Fix file and share associations on Android ",
"message_html": null,
"major": false,
"created_at": "2021-01-02T13:44:13+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": 10464,
"repository": "ppy\/osu",
"github_pull_request_id": 11380,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11380",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Catch multiplayer errors better (and avoid crashing the game)",
"message_html": null,
"major": false,
"created_at": "2021-01-02T14:36:50+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": 10466,
"repository": "ppy\/osu",
"github_pull_request_id": 11413,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11413",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix difficulty adjust settings not being transferred correctly in multiplayer\/playlists",
"message_html": null,
"major": true,
"created_at": "2021-01-03T13:38: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": 10472,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4132,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4132",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Improve reliability and performance of GL disposals",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Fixes potential crashes during texture clean-up.<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-04T13:04:36+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": 10479,
"repository": "ppy\/osu",
"github_pull_request_id": 11418,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11418",
"url": null,
"type": "fix",
"category": "Gameplay",
"title": "Fix storyboard skip not skipping to correct point in some specific beatmaps",
"message_html": null,
"major": false,
"created_at": "2021-01-04T19:09:00+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": 10484,
"repository": "ppy\/osu",
"github_pull_request_id": 11415,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11415",
"url": null,
"type": "fix",
"category": "Multiplayer",
"title": "Fix multiplayer ready button crashing when deleting selected beatmap set",
"message_html": null,
"major": false,
"created_at": "2021-01-05T06:58:10+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": 10485,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 3353,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/3353",
"url": null,
"type": "add",
"category": "Framework",
"title": "Add interface for leased bindables",
"message_html": null,
"major": false,
"created_at": "2021-01-05T07:48:20+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": 10487,
"repository": "ppy\/osu",
"github_pull_request_id": 11420,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11420",
"url": null,
"type": "fix",
"category": "UI",
"title": "Fix some toolbar tooltips leaving the edge of the screen to the right",
"message_html": null,
"major": false,
"created_at": "2021-01-05T08:43:32+00:00",
"github_user": {
"id": 456,
"display_name": "kyekiller",
"github_url": "https:\/\/github.com\/kyekiller",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10491,
"repository": "ppy\/osu",
"github_pull_request_id": 11419,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11419",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix RemoveBlockingOverlay causing transform mutation from disposal threads",
"message_html": null,
"major": false,
"created_at": "2021-01-05T19:45: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": 10492,
"repository": "ppy\/osu",
"github_pull_request_id": 11405,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11405",
"url": null,
"type": "fix",
"category": "Song Select",
"title": "Fix the beatmap carousel not returning to centre correctly after resizing window",
"message_html": null,
"major": false,
"created_at": "2021-01-05T21:03:40+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": 10494,
"repository": "ppy\/osu",
"github_pull_request_id": 11426,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11426",
"url": null,
"type": "fix",
"category": "UI",
"title": "Refactor LoadingLayer to avoid applying effects to external drawables",
"message_html": null,
"major": false,
"created_at": "2021-01-05T22:45: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": 10498,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4135,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4135",
"url": null,
"type": "fix",
"category": "Framework",
"title": "Enforce thread safety on common transform operations",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">This is a huge improvement in guaranteed reliability (ie. we will know there is an issue before it crashes for an end user).<\/p>\n<\/div>",
"major": true,
"created_at": "2021-01-06T09:23:37+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": 10499,
"repository": "ppy\/osu",
"github_pull_request_id": 11428,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11428",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix display settings binding to configuration bindables in async load",
"message_html": null,
"major": false,
"created_at": "2021-01-06T09:46: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": 10500,
"repository": "ppy\/osu",
"github_pull_request_id": 11425,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11425",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix transform mutation on background screens",
"message_html": null,
"major": false,
"created_at": "2021-01-06T11:01: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": 10501,
"repository": "ppy\/osu",
"github_pull_request_id": 11429,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11429",
"url": null,
"type": "fix",
"category": "Song Select",
"title": "Fix carousel beatmap set panels applying transforms to difficulties while they are loading",
"message_html": null,
"major": false,
"created_at": "2021-01-06T13:22:06+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": 10502,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4136,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4136",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix potential crash on shutdown due to thread race condition",
"message_html": null,
"major": false,
"created_at": "2021-01-06T13:33: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": 10503,
"repository": "ppy\/osu",
"github_pull_request_id": 11434,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11434",
"url": null,
"type": "fix",
"category": "UI",
"title": "Only show \"development build\" footer on debug releases",
"message_html": null,
"major": true,
"created_at": "2021-01-06T15:15: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": 10504,
"repository": "ppy\/osu",
"github_pull_request_id": 11411,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11411",
"url": null,
"type": "add",
"category": "Settings",
"title": "Add ability to toggle discord rich presence",
"message_html": null,
"major": true,
"created_at": "2021-01-06T15:52:39+00:00",
"github_user": {
"id": 457,
"display_name": "LavaDesu",
"github_url": "https:\/\/github.com\/LavaDesu",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10506,
"repository": "ppy\/osu-framework",
"github_pull_request_id": 4137,
"github_url": "https:\/\/github.com\/ppy\/osu-framework\/pull\/4137",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Update references to current year",
"message_html": null,
"major": false,
"created_at": "2021-01-06T16:50:34+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": 10507,
"repository": "ppy\/osu",
"github_pull_request_id": 11433,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11433",
"url": null,
"type": "fix",
"category": "UI",
"title": "Update main menu wording for better consistency",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">"osu!editor" became "edit". "osu!direct" became "browse"<\/p>\n<\/div>",
"major": false,
"created_at": "2021-01-06T17:05:00+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": 10509,
"repository": "ppy\/osu",
"github_pull_request_id": 11436,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11436",
"url": null,
"type": "fix",
"category": "Code Quality",
"title": "Update references to current year",
"message_html": null,
"major": false,
"created_at": "2021-01-07T01:25:53+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": 10514,
"repository": "ppy\/osu",
"github_pull_request_id": 11423,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11423",
"url": null,
"type": "fix",
"category": "Editor",
"title": "Fix control point changes not correctly updating all components",
"message_html": null,
"major": true,
"created_at": "2021-01-07T18:37: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": 10517,
"repository": "ppy\/osu",
"github_pull_request_id": 11438,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11438",
"url": null,
"type": "fix",
"category": "Gameplay",
"title": "Fix difficulty adjust mod treating default values as user overrides",
"message_html": null,
"major": false,
"created_at": "2021-01-08T16:18: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": 10518,
"repository": "ppy\/osu",
"github_pull_request_id": 11444,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11444",
"url": null,
"type": "add",
"category": "Tournament",
"title": "Fix tournament client crashing on startup when reading an existing bracket",
"message_html": null,
"major": true,
"created_at": "2021-01-08T16:32: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": 10519,
"repository": "ppy\/osu",
"github_pull_request_id": 11424,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11424",
"url": null,
"type": "fix",
"category": "Reliability",
"title": "Fix ModSelection making unsafe advances of ModSection",
"message_html": null,
"major": false,
"created_at": "2021-01-08T17:21:57+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": 10520,
"repository": "ppy\/osu",
"github_pull_request_id": 11439,
"github_url": "https:\/\/github.com\/ppy\/osu\/pull\/11439",
"url": null,
"type": "fix",
"category": "Audio",
"title": "Improve hover sounds playback (to reduce volume saturation and latency)",
"message_html": null,
"major": false,
"created_at": "2021-01-08T17:31:02+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": 5560,
"version": "20210108",
"display_version": "20210108",
"users": 5,
"created_at": "2021-01-08T04:31:32+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": "Misc",
"title": "Adjust minimum stack lenience in song setup UI in line with ranking criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-04T14:25:52+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": "Fix excessive circle size values being reverted on opening song setup dialog",
"message_html": null,
"major": false,
"created_at": "2021-01-05T11:59:01+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": 5559,
"version": "2021.105.0",
"display_version": "2021.105.0",
"users": 0,
"created_at": "2021-01-05T14:48:53+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10425,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4708,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4708",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update SEAC 2020 for Post-Qualifiers",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:45: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": 10427,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4706,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4706",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update group-info to include Danish",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:52:35+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": 10428,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4707,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4707",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BN listing and Staff log",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:54:12+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": 10429,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4704,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4704",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Information in osu!tourney page",
"message_html": null,
"major": false,
"created_at": "2020-12-29T15:10:27+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": 10431,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4694,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4694",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Cemara Mania Cup #1 (2020) wiki article",
"message_html": null,
"major": false,
"created_at": "2020-12-29T17:21: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": 10432,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4591,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4591",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add RC, Scaling BPM, and Difficulty Naming",
"message_html": null,
"major": false,
"created_at": "2020-12-29T17:22:19+00:00",
"github_user": {
"id": 442,
"display_name": "rorre",
"github_url": "https:\/\/github.com\/rorre",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10433,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4583,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4583",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Add Visual Settings",
"message_html": null,
"major": false,
"created_at": "2020-12-29T17:26:08+00:00",
"github_user": {
"id": 269,
"display_name": "cdwcgt",
"github_url": "https:\/\/github.com\/cdwcgt",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10434,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4691,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4691",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Rewrite the livestreaming guide",
"message_html": null,
"major": false,
"created_at": "2020-12-29T19:29:12+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": 10435,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4701,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4701",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Beatmap category article and fix URLs across the wiki",
"message_html": null,
"major": false,
"created_at": "2020-12-29T20:28:01+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": 10437,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4499,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4499",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ES] Update Rules, Add COC and Abuse",
"message_html": null,
"major": false,
"created_at": "2020-12-30T15:16:24+00:00",
"github_user": {
"id": 378,
"display_name": "Panchosauriooo",
"github_url": "https:\/\/github.com\/Panchosauriooo",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10439,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4712,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4712",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Apply several minor corrections to Cemara Mania Cup #1 (2020) wiki article",
"message_html": null,
"major": false,
"created_at": "2020-12-30T19:04: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": 10442,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4494,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4494",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Mappers' Report: Fall news post",
"message_html": null,
"major": false,
"created_at": "2020-12-31T13:19:24+00:00",
"github_user": {
"id": 211,
"display_name": "Feerum",
"github_url": "https:\/\/github.com\/Feerum",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10444,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4716,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4716",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update BN listing and Staff log",
"message_html": null,
"major": false,
"created_at": "2021-01-01T05:50:41+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": 10445,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4717,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4717",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Featured Artist track updates news post",
"message_html": null,
"major": false,
"created_at": "2021-01-02T01:32:36+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": 10465,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7037,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7037",
"url": null,
"type": "fix",
"category": "Misc",
"title": "Fix typo on store page",
"message_html": null,
"major": false,
"created_at": "2021-01-03T06:50:20+00:00",
"github_user": {
"id": 157,
"display_name": "Phippe",
"github_url": "https:\/\/github.com\/Phippe",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10467,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4698,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4698",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add T-lettered article stubs",
"message_html": null,
"major": false,
"created_at": "2021-01-04T01:37:31+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": 10468,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4667,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4667",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add Beatmap Spotlights group articles",
"message_html": null,
"major": false,
"created_at": "2021-01-04T08:16:35+00:00",
"github_user": {
"id": 446,
"display_name": "SeverinoAji",
"github_url": "https:\/\/github.com\/SeverinoAji",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10469,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4655,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4655",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ES] Add Account Support Team",
"message_html": null,
"major": false,
"created_at": "2021-01-04T08:27:50+00:00",
"github_user": {
"id": 438,
"display_name": "MagoSimon",
"github_url": "https:\/\/github.com\/MagoSimon",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10470,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4721,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4721",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add osu!taiko world cup 2021 staff and mapper applications news post",
"message_html": null,
"major": false,
"created_at": "2021-01-04T12:14:27+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": 10471,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4725,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4725",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix headers in TWC2021 Staff and Mapper Application newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-04T13:02:28+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": 10473,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4710,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4710",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix formatting issues of osu!weekly articles",
"message_html": null,
"major": false,
"created_at": "2021-01-04T14:03:56+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": 10474,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4727,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4727",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Fix image parsing issues in osu!weekly #100",
"message_html": null,
"major": false,
"created_at": "2021-01-04T15:45:53+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": 10475,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4728,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4728",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Trim loose closing div tag from osu!weekly #100 newspost",
"message_html": null,
"major": false,
"created_at": "2021-01-04T16:18:15+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": 10476,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4638,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4638",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Add Project Loved",
"message_html": null,
"major": false,
"created_at": "2021-01-04T17:21:09+00:00",
"github_user": {
"id": 454,
"display_name": "GeraldAzgore",
"github_url": "https:\/\/github.com\/GeraldAzgore",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10477,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4719,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4719",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[UK] Add Storyboards",
"message_html": null,
"major": false,
"created_at": "2021-01-04T17:21:58+00:00",
"github_user": {
"id": 404,
"display_name": "Esutarosa",
"github_url": "https:\/\/github.com\/Esutarosa",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10478,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4726,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4726",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update SOL2 for Finals",
"message_html": null,
"major": false,
"created_at": "2021-01-04T17:29:54+00:00",
"github_user": {
"id": 307,
"display_name": "ItsMestro",
"github_url": "https:\/\/github.com\/ItsMestro",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10480,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4729,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4729",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update osu! South East Asia Tournament 4 to Quarterfinals",
"message_html": null,
"major": false,
"created_at": "2021-01-04T19:55: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": 10481,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4640,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4640",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Add Project Loved",
"message_html": null,
"major": false,
"created_at": "2021-01-05T02:17:26+00:00",
"github_user": {
"id": 269,
"display_name": "cdwcgt",
"github_url": "https:\/\/github.com\/cdwcgt",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10482,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4660,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4660",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add Accounts Support Team",
"message_html": null,
"major": false,
"created_at": "2021-01-05T02:27:17+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": 10483,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4664,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4664",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add Double Time",
"message_html": null,
"major": false,
"created_at": "2021-01-05T02:30:25+00:00",
"github_user": {
"id": 455,
"display_name": "Ge-n-z",
"github_url": "https:\/\/github.com\/Ge-n-z",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10488,
"repository": "ppy\/osu-web",
"github_pull_request_id": 6575,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/6575",
"url": null,
"type": "add",
"category": "Beatmap Info",
"title": "Add marker and warning for beatmaps with NSFW content",
"message_html": null,
"major": false,
"created_at": "2021-01-05T14:42:53+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": 5558,
"version": "20210105",
"display_version": "20210105",
"users": 10,
"created_at": "2021-01-05T12:22:02+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": "Adjust minimum stack lenience in song setup UI in line with ranking criteria",
"message_html": null,
"major": false,
"created_at": "2021-01-04T14:25:52+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": "Fix excessive circle size values being reverted on opening song setup dialog",
"message_html": null,
"major": false,
"created_at": "2021-01-05T11:59:01+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": 5557,
"version": "2020.1229.0",
"display_version": "2020.1229.0",
"users": 0,
"created_at": "2020-12-29T14:32:18+00:00",
"update_stream": {
"id": 8,
"name": "web",
"display_name": "Web",
"is_featured": false
},
"changelog_entries": [
{
"id": 10375,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4673,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4673",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[TR] Add Account support team and update related articles",
"message_html": null,
"major": false,
"created_at": "2020-12-25T12:49:47+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": 10376,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4675,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4675",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[TR] Update Visual Content Considerations",
"message_html": null,
"major": false,
"created_at": "2020-12-25T13:16:05+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": 10378,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4676,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4676",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[TR] Update Using custom hitsounds and Visual Settings",
"message_html": null,
"major": false,
"created_at": "2020-12-25T15:56: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": 10379,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4678,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4678",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[TR] Add Expectations for Beatmap Nominators and update related articles",
"message_html": null,
"major": false,
"created_at": "2020-12-25T22:12:38+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": 10381,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4681,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4681",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add Aitsuki Nakuru FA news post",
"message_html": null,
"major": false,
"created_at": "2020-12-26T09:50:06+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": 10383,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4683,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4683",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Recapitulate number of new FAs announced in 2020 on Featured Artist articles",
"message_html": null,
"major": false,
"created_at": "2020-12-26T11:40:04+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": 10386,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4567,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4567",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Add gameplay-related articles (Fingerlock, Mind block, Slider break, Tablet cover) and their index",
"message_html": null,
"major": false,
"created_at": "2020-12-26T17:54:34+00:00",
"github_user": {
"id": 442,
"display_name": "rorre",
"github_url": "https:\/\/github.com\/rorre",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10387,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4684,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4684",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Gameplay translation improvements",
"message_html": null,
"major": false,
"created_at": "2020-12-26T18:46:30+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": 10393,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4692,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4692",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update images for game modifier articles",
"message_html": null,
"major": false,
"created_at": "2020-12-28T01:57:18+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": 10402,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4695,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4695",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add report link to VCC",
"message_html": null,
"major": false,
"created_at": "2020-12-28T14:56:43+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": 10403,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4693,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4693",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Conclude Taiko Suiji Cup Winter 2020",
"message_html": null,
"major": false,
"created_at": "2020-12-28T16:44: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": 10404,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4696,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4696",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update Alumni\/BN\/NAT listing and Staff log",
"message_html": null,
"major": false,
"created_at": "2020-12-28T17:17:37+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": 10405,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4615,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4615",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID] Fix wording of BAT history in Beatmap Nominators",
"message_html": null,
"major": false,
"created_at": "2020-12-28T20:48:58+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": 10406,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4614,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4614",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ID\/EN] Add and update Disambiguation and group articles",
"message_html": null,
"major": false,
"created_at": "2020-12-28T21:04:31+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": 10407,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4626,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4626",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH] Conclude OWC 2020",
"message_html": null,
"major": false,
"created_at": "2020-12-28T21:13:00+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": 10408,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4594,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4594",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add mappers' guild translation",
"message_html": null,
"major": false,
"created_at": "2020-12-28T21:24:00+00:00",
"github_user": {
"id": 390,
"display_name": "hikizisa",
"github_url": "https:\/\/github.com\/hikizisa",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10409,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4586,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4586",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ZH\/EN] Add Interface, update information in English article",
"message_html": null,
"major": false,
"created_at": "2020-12-28T21:53:26+00:00",
"github_user": {
"id": 269,
"display_name": "cdwcgt",
"github_url": "https:\/\/github.com\/cdwcgt",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10410,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4566,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4566",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[ES] Update Support Team",
"message_html": null,
"major": false,
"created_at": "2020-12-28T23:31:17+00:00",
"github_user": {
"id": 438,
"display_name": "MagoSimon",
"github_url": "https:\/\/github.com\/MagoSimon",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10411,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4593,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4593",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "[KO] Add a few Beatmapping articles",
"message_html": null,
"major": false,
"created_at": "2020-12-29T00:05:44+00:00",
"github_user": {
"id": 450,
"display_name": "inix1257",
"github_url": "https:\/\/github.com\/inix1257",
"osu_username": null,
"user_id": null,
"user_url": null
}
},
{
"id": 10412,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4652,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4652",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Rewrite Beatmaps and Beatmapsets",
"message_html": null,
"major": false,
"created_at": "2020-12-29T00:40:59+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": 10413,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4600,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4600",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Cleanup BBCode",
"message_html": null,
"major": false,
"created_at": "2020-12-29T01:07:17+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": 10414,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4697,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4697",
"url": null,
"type": "add",
"category": "Wiki",
"title": "Add a query string to the BBCode editor image",
"message_html": null,
"major": false,
"created_at": "2020-12-29T01:17:52+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": 10415,
"repository": "ppy\/osu-wiki",
"github_pull_request_id": 4700,
"github_url": "https:\/\/github.com\/ppy\/osu-wiki\/pull\/4700",
"url": null,
"type": "fix",
"category": "Wiki",
"title": "Update osu! South East Asia Tournament 4 to Round of 16",
"message_html": null,
"major": false,
"created_at": "2020-12-29T02:05: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": 10422,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7032,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7032",
"url": null,
"type": "fix",
"category": "Misc",
"title": "Fix placeholder image for test",
"message_html": null,
"major": false,
"created_at": "2020-12-29T13:58:08+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": 10423,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7033,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7033",
"url": null,
"type": "fix",
"category": "Misc",
"title": "Fix wiki url encoding",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:11: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": 10424,
"repository": "ppy\/osu-web",
"github_pull_request_id": 7030,
"github_url": "https:\/\/github.com\/ppy\/osu-web\/pull\/7030",
"url": null,
"type": "fix",
"category": "Localisation",
"title": "Update translations from crowdin",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14: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": 5556,
"version": "20201229.2",
"display_version": "20201229.2",
"users": 1413,
"created_at": "2020-12-29T14:27:53+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": "Misc",
"title": "Fix potential bloom shader error",
"message_html": null,
"major": false,
"created_at": "2020-12-16T09:13:20+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": "Bring an end to christmas",
"message_html": "<div class='changelog-md'><p class=\"changelog-md__paragraph\">Want to listen to the christmas theme some more? You can find it on <a class=\"changelog-md__link\" href=\"https:\/\/www.youtube.com\/watch?v=rv7Vjk7nKgc\">youtube<\/a>!<\/p>\n<\/div>",
"major": false,
"created_at": "2020-12-29T14:09:10+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": 5555,
"version": "20201229.1",
"display_version": "20201229.1",
"users": 1,
"created_at": "2020-12-29T14:21:40+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": "Misc",
"title": "Bump MySqlConnector from 1.2.0 to 1.2.1",
"message_html": null,
"major": false,
"created_at": "2020-12-14T06:08:29+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": "Fix potential bloom shader error",
"message_html": null,
"major": false,
"created_at": "2020-12-16T09:13:20+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": "Bring an end to christmas",
"message_html": null,
"major": false,
"created_at": "2020-12-29T14:09:10+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"
}
}
]
}
],
"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/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"
}
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));
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));
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"
}
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));
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));
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));
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));
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"
}
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?1605106297.jpeg",
"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?1603857096.jpeg",
"country_code": "CA",
"default_group": "default",
"id": 14634525,
"is_active": true,
"is_bot": false,
"is_deleted": false,
"is_online": true,
"is_supporter": true,
"last_visit": "2021-01-27T06:38:45+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?1611318641.jpeg",
"country_code": "ID",
"default_group": "default",
"id": 13103233,
"is_active": true,
"is_bot": false,
"is_deleted": false,
"is_online": false,
"is_supporter": true,
"last_visit": "2021-01-27T04:24:00+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": true,
"is_bot": false,
"is_deleted": false,
"is_online": false,
"is_supporter": true,
"last_visit": "2021-01-25T12:10:00+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?1538433345.jpeg",
"country_code": "DE",
"default_group": "default",
"id": 7295733,
"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": "Sjao"
}
},
{
"url": "https:\/\/assets.ppy.sh\/user-contest-entries\/8114\/586402eac456ff57f7b74f8725fc5000eb0a4bf0760a838f8e5289b0ab6b18e0_opt.jpg",
"user": {
"avatar_url": "https:\/\/a.ppy.sh\/12694139?1611714796.jpeg",
"country_code": "CA",
"default_group": "default",
"id": 12694139,
"is_active": true,
"is_bot": false,
"is_deleted": false,
"is_online": false,
"is_supporter": true,
"last_visit": "2021-01-27T05:14:00+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": true,
"last_visit": "2021-01-22T17:53:00+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": true,
"last_visit": "2021-01-26T04:18:46+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?1611377090.jpeg",
"country_code": "ID",
"default_group": "default",
"id": 9948284,
"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": "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": true,
"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?1610767993.jpeg",
"country_code": "SG",
"default_group": "default",
"id": 8244635,
"is_active": true,
"is_bot": false,
"is_deleted": false,
"is_online": false,
"is_supporter": true,
"last_visit": "2021-01-26T23:09:00+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": true,
"last_visit": "2021-01-26T06:48: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": true,
"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": true,
"last_visit": "2021-01-22T00:31:00+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-01-26T03:00:00+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"
}
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"
}
HTTP Request
GET /scores/{mode}/{score}
api/v2/beatmaps/{id}/scores
curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/1/scores"
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/1/scores");
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"
}
HTTP Request
GET /beatmaps/{id}/scores
api/v2/beatmaps/lookup
curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/lookup"
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/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"
}
HTTP Request
GET /beatmaps/lookup
api/v2/beatmaps/{beatmap}
curl -X GET -G "https://osu.ppy.sh/api/v2/beatmaps/1"
const url = new URL("https://osu.ppy.sh/api/v2/beatmaps/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"
}
HTTP Request
GET /beatmaps/{beatmap}
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"
}
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"
}
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"
}
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"
}
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"
}
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"
}
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": 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:\/\/assets.ppy.sh\/artists\/133\/header.jpg?2020-01-24",
"published_at": "2021-01-23T09:30:00+00:00",
"updated_at": "2021-01-23T15:03:29+00:00",
"slug": "2021-01-23-new-featured-artist-geoxor",
"title": "New Featured Artist: Geoxor",
"preview": "We're proud to welcome Geoxor, our latest Featured Artist!"
},
{
"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:\/\/assets.ppy.sh\/contests\/116\/cc2020_osu.jpg",
"published_at": "2021-01-21T06:00:00+00:00",
"updated_at": "2021-01-21T10:44:07+00:00",
"slug": "2021-01-21-community-choice-2020-voting-open",
"title": "Community Choice 2020: Voting Open",
"preview": "2020 was osu!'s biggest year for mapping - ever. Have your say in helping decide the Community Favourite in all four game modes and vote today!"
},
{
"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:\/\/assets.ppy.sh\/artists\/132\/header.jpg",
"published_at": "2021-01-20T08:00:00+00:00",
"updated_at": "2021-01-20T10:22:25+00:00",
"slug": "2021-01-20-new-featured-artist-yuyoyuppe-dj-tekina-something",
"title": "New Featured Artist: Yuyoyuppe \/ DJ'TEKINA\/\/SOMETHING",
"preview": "Yuyoyuppe thrashes their way into the Featured Artist roster!"
},
{
"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": "\/wiki\/images\/shared\/news\/banners\/beatmap-spotlights.jpg",
"published_at": "2021-01-18T10:00:00+00:00",
"updated_at": "2021-01-27T04:18:36+00:00",
"slug": "2021-01-18-beatmap-spotlights-season-3-winter-2021",
"title": "Beatmap Spotlights Season 3: Winter 2021 & Applications",
"preview": "Spotlights rivals assemble! As many of you might've already known, the Autumn Season 2020 is over, and after a little bit of a delay, we're finally here to announce the start of the Winter Season for 2021!"
},
{
"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:\/\/assets.ppy.sh\/artists\/131\/header.jpg",
"published_at": "2021-01-17T09:00:00+00:00",
"updated_at": "2021-01-17T09:37:46+00:00",
"slug": "2021-01-17-new-featured-artist-tiny-waves",
"title": "New Featured Artist: Tiny Waves",
"preview": "Electronic record label Tiny Waves joins the Featured Artist lineup!"
},
{
"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": "\/wiki\/images\/shared\/news\/2021-01-14-performance-points-updates\/star-rating.jpg",
"published_at": "2021-01-16T05:00:00+00:00",
"updated_at": "2021-01-18T16:34:55+00:00",
"slug": "2021-01-14-performance-points-updates",
"title": "Performance Points Updates",
"preview": "Thanks to the effort of a number of public contributors, we're excited to announce a new set of changes to osu!'s performance points (pp) algorithm that should help freshen things up at high levels of play. Read on for more details!"
},
{
"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:\/\/assets.ppy.sh\/artists\/130\/header.jpg",
"published_at": "2021-01-13T10:00:00+00:00",
"updated_at": "2021-01-13T10:07:44+00:00",
"slug": "2021-01-13-new-featured-artist-symholic",
"title": "New Featured Artist: Symholic",
"preview": "An addiction stronger than circle clicking, Symholic takes the stage as our latest Featured Artist!"
},
{
"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:\/\/assets.ppy.sh\/artists\/129\/header.jpg",
"published_at": "2021-01-09T09:00:00+00:00",
"updated_at": "2021-01-09T09:10:26+00:00",
"slug": "2021-01-09-new-featured-artist-phantom-sage",
"title": "New Featured Artist: Phantom Sage",
"preview": "We're proud to introduce Phantom Sage as our latest Featured Artist!"
},
{
"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:\/\/assets.ppy.sh\/artists\/128\/header.jpg",
"published_at": "2021-01-06T09:00:00+00:00",
"updated_at": "2021-01-06T09:10:53+00:00",
"slug": "2021-01-06-new-featured-artist-getty",
"title": "New Featured Artist: Getty",
"preview": "Dive into the bass-filled tunes of Getty, our latest Featured Artist!"
},
{
"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": "\/wiki\/images\/shared\/news\/banners\/TWC2020.jpg",
"published_at": "2021-01-04T12:00:00+00:00",
"updated_at": "2021-01-04T13:02:32+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",
"preview": "Happy new year from the osu! World Cup team! Applications for staffing positions in the osu!taiko World Cup 2021 have opened up, along with a few general announcements regarding the other gamemodes - read on to find out more!"
},
{
"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": "\/wiki\/images\/shared\/news\/banners\/featured-artist.jpg",
"published_at": "2021-01-02T01:30:00+00:00",
"updated_at": "2021-01-02T01:32:40+00:00",
"slug": "2021-01-02-featured-artist-updates-january-2021",
"title": "Featured Artist Track Updates: January 2021",
"preview": "Our older talent is here to kick off the new year! We've added over 50 songs from 10 of our current Featured Artists, all prepped and ready for mapping!"
},
{
"id": 885,
"author": "Feerum, Noffy, Capu, radar, Jemzuu, autofanboy, Davvy and Unpredictable",
"edit_url": "https:\/\/github.com\/ppy\/osu-wiki\/tree\/master\/news\/2020-31-12-mappers-report-fall.md",
"first_image": "\/wiki\/images\/shared\/news\/banners\/the-mappers-report.jpg",
"published_at": "2020-12-31T00:00:00+00:00",
"updated_at": "2020-12-31T13:19:29+00:00",
"slug": "2020-31-12-mappers-report-fall",
"title": "The Mappers' Report: Fall",
"preview": "We are back with the Mappers' Report! This time covering a whole season full of news about happenings in the mapping and modding scene of osu! I hope you are ready because there is a lot of stuff to cover. So let's jump right into it!"
}
],
"search": {
"cursor": null,
"limit": 12
},
"cursor": {
"published_at": "2020-12-31T00:00:00.000000Z",
"id": 885
}
}
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.
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.
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.
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 |
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.
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"
const url = new URL("https://osu.ppy.sh/api/v2/users/1/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"
This endpoint returns the detail of specified user.
HTTP Request
GET /users/{user}/{mode?}
URL Parameters
Parameter | Status | Description |
---|---|---|
user | required | Id of the user. |
mode | optional | GameMode. User default mode will be used if not specified. |
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.
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. |
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
: user session using same authentication key has been logged out (not yet implemented for OAuth authentication)new
: new notificationread
: notification has been read
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. |
status | string | See Rank status for list of possible values. |
url | string |
BeatmapCompact
Represent a beatmap.
Field | Type | Description |
---|---|---|
difficulty_rating | float | |
id | integer | |
mode | GameMode | |
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. |
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 | |
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 |
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:
- Is either user blocking the other? If so, deny.
- Does the target only accept PMs from friends? Is the current user a friend? If not, deny.
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 ; |
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 |
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
.
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 . |
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:
- everything in
params
- everything in
cursor
as sub field ofcursor
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,
"pp_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 | number | 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 | number | 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"
],
"skype": null,
"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": [],
"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,
"pp_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 |
skype | string? | |
title | string? | user-specific title |
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 | |
current_mode_rank | |
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 | |
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 |
---|---|---|
id | number | |
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,
"pp_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.cuurent | 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 | Cummulative time played. |
pp | number | Performance points |
pp_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\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. |