Download OpenAPI specification:Download
Learn how to interact with the o!rdr API in this documentation.
If you plan on using this API, consider getting a key to bypass the rate limit of 1 render request per 5 minutes, and getting a BOT badge on the render list page.
DM "masterioo" on Discord to get one.
When tesing your code against the API and Websocket, please use the dev mode, to not flood o!rdr with useless render requests. It simulates what would happen if you sent a real render request. Check the "Developer mode" section to learn more about it.
The o!rdr Websocket can be accessed at https://apis.issou.best/ordr/ws.
It is powered by socket.io! Make sure to use a library that is compatible with socket.io websockets.
Note: most socket.io libraries require you to set the path of the URL (/ordr/ws) in a separate parameter. So the websocket URL is https://apis.issou.best, the path is /ordr/ws.
It sends 4 events:
Check this example in NodeJS to communicate with the Websocket.
Since rev12, error codes are sent after every POST request to send a render, and with the render_fail event on the Websocket.
Error codes that can be sent to the render_fail event on the Websocket:
Error codes that can be used before the request has been sent (http code 400/500)
This mode is used when testing your code against the API and Websocket to avoid flooding o!rdr with useless render requests.
It simulates what would happen if you sent a real render request. The renderIDs of simulated renders are random and between 1 and 20000.
The websocket used by this mode is the same as the websocket used by o!rdr globally.
To use the dev mode, add a verificationKey key in your form data API request if you do not already have it, and as value you can use:
Default audio codec is AAC, bitrate is 192kbps
See the default video codecs used here
pageSize | number Examples:
The number of renders the query will return you in the page. If not specified, 50 is the default. |
page | number Examples:
The page |
ordrUsername | string Examples:
Search by o!rdr username, can be used at the same time as replayUsername |
replayUsername | string Examples:
Search by replay username, can be used at the same time as ordrUsername |
renderID | number Examples:
The renderID of a render |
nobots | any Hide bots from the returned render query. |
link | string Examples:
The path of a shortlink (for example |
beatmapsetid | number Examples:
Get renders with this specific beatmapset ID |
{- "renders": [
- {
- "date": "2024-05-03T10:35:36.381Z",
- "renderID": 1985515,
- "username": "gurabot",
- "userId": 2,
- "userHasAvatar": true,
- "progress": "Done.",
- "errorCode": 0,
- "removed": false,
- "renderer": "Yuu's PC",
- "description": "Player: lpokm0624, Map: Panda Eyes - ILY [Fanteer's Final Level] by M a r v o l l o, song length is 1:36 (6.99 ⭐) | Accuracy: 89.26%",
- "title": "[6.99 ⭐] lpokm0624 | Panda Eyes - ILY [Fanteers Final Level] 89.26%",
- "replayUsername": "lpokm0624",
- "replayMods": "None",
- "needToRedownload": false,
- "emergencyStop": false,
- "resolution": "1280x720",
- "globalVolume": 50,
- "musicVolume": 50,
- "hitsoundVolume": 50,
- "useSkinHitsounds": true,
- "playNightcoreSamples": true,
- "showHitErrorMeter": true,
- "showUnstableRate": true,
- "showScore": true,
- "showHPBar": true,
- "showComboCounter": true,
- "showPPCounter": true,
- "showKeyOverlay": true,
- "showScoreboard": false,
- "showAvatarsOnScoreboard": false,
- "showBorders": false,
- "showMods": true,
- "showResultScreen": true,
- "showHitCounter": false,
- "showSliderBreaks": false,
- "showAimErrorMeter": false,
- "showStrainGraph": false,
- "customSkin": false,
- "skin": "sakamata_chloe_nyuh",
- "useSkinCursor": true,
- "useSkinColors": false,
- "cursorScaleToCS": false,
- "cursorRainbow": false,
- "cursorTrailGlow": false,
- "cursorSize": 1,
- "cursorTrail": true,
- "drawFollowPoints": true,
- "drawComboNumbers": true,
- "scaleToTheBeat": false,
- "sliderMerge": false,
- "objectsRainbow": false,
- "objectsFlashToTheBeat": false,
- "useHitCircleColor": true,
- "seizureWarning": false,
- "loadStoryboard": true,
- "loadVideo": true,
- "introBGDim": 0,
- "inGameBGDim": 75,
- "breakBGDim": 30,
- "BGParallax": false,
- "showDanserLogo": true,
- "ignoreFail": false,
- "motionBlur960fps": false,
- "motionBlurForce": 0,
- "skip": true,
- "cursorRipples": false,
- "useBeatmapColors": true,
- "sliderSnakingIn": true,
- "sliderSnakingOut": false,
- "isVerified": true,
- "isBot": true,
- "renderStartTime": 1714732536800,
- "renderEndTime": 1714732549900,
- "renderTotalTime": 13101,
- "uploadEndTime": 1714732554044,
- "uploadTotalTime": 4144,
- "mapTitle": "ILY",
- "mapLength": 96,
- "drainTime": 95,
- "replayDifficulty": "Fanteer's Final Level",
- "mapID": 653534
}
], - "maxRenders": 1985596
}
Remember that when sending a form in post-data format, every value needs to be a string, even booleans!
Boolean values also need to be written in lowercase!
Make sure to enter all required fields in the request!
replayFile required | object (file) The replay file |
replayURL | string The replay URL for the server to download, required if there is no replayFile, non-direct links are supported, redirections are handled |
username required | string The username that will be displayed on o!rdr |
resolution required | string Can be 720x480 (30fps), 960x540, 1280x720 (60fps) |
globalVolume | number The global volume for the video. Default: 50 |
musicVolume | number The music volume for the video. Default: 50 |
hitsoundVolume | number The hitsounds volume for the video. Default: 50 |
showHitErrorMeter | boolean Show the hit error meter. Default: true |
showUnstableRate | boolean Show the unstable rate, only takes effect if showHitErrorMeter is set to true. Default: true |
showScore | boolean Show the score. Default: true |
showHPBar | boolean Show the HP bar. Default: true |
showComboCounter | boolean Show the combo counter. Default: true |
showPPCounter | boolean Show the PP Counter or not. Default: true |
showScoreboard | boolean Show the scoreboard or not (requires a client that has an osu! api key). Default: false |
showBorders | boolean Show the playfield borders or not. Default: false |
showMods | boolean Show the mods used during the game or not. Default: true |
showResultScreen | boolean Show the result screen or not. Default: true |
skin required | string The skin to use. Can be the ID of a skin, or its name. If customSkin is true, this is the custom skin ID. |
useSkinCursor | boolean Use the skin cursor or not. If not, danser cursor will be used. Default: true |
useSkinColors | boolean Use the skin combo colors or not. Default: false |
useSkinHitsounds | boolean Use skin hitsounds, if false beatmap hitsounds will be used. Default: true |
useBeatmapColors | boolean Use the beatmap combo colors or not, overrides useSkinColors if true. Default: true |
cursorScaleToCS | boolean Scale cursor to circle size. Does not do anything at the moment. Default: false |
cursorRainbow | boolean Makes the cursor rainbow, only takes effect if useSkinCursor is set to false. Default: false |
cursorTrailGlow | boolean Have a glow with the trail or not. Default: false |
drawFollowPoints | boolean Draw follow points between objects or not. Default: true |
scaleToTheBeat | boolean Scale objects to the beat. Default: false |
sliderMerge | boolean Merge sliders or not. Default: false |
objectsRainbow | boolean Makes the objects rainbow, overrides useSkinColors and useBeatmapColors. Default: false |
objectsFlashToTheBeat | boolean Makes the objects flash to the beat. Default: false |
useHitCircleColor | boolean Makes the slider body have the same color as the hit circles. Default: true |
seizureWarning | boolean Display a 5 second seizure warning before the video. Default: false |
loadStoryboard | boolean Load the background storyboard. Default: true |
loadVideo | boolean Load the background video (loadStoryboard has to be set to true). Default: true |
introBGDim | number Background dim for the intro, in percent, from 0 to 100. Default: 0 |
inGameBGDim | number Background dim in game, in percent, from 0 to 100. Default: 75 |
breakBGDim | number Background dim in break, in percent, from 0 to 100. Default: 30 |
BGParallax | boolean Adds a parallax effect. Default: false |
showDanserLogo | boolean Show danser logo on the intro. Default: true |
skip | boolean Skip the intro or not. Default: true |
cursorRipples | boolean Show cursor ripples when keypress. Default: false |
cursorSize | number Set the cursor size, multiplier from 0.5 to 2. Default: 1 |
cursorTrail | boolean Show the cursor trail or not. Default: true |
drawComboNumbers | boolean Show the combo numbers in objects. Default: true |
sliderSnakingIn | boolean Have slider snaking in. Default: true |
sliderSnakingOut | boolean Have slider snaking out. Default: true |
verificationKey | string Your API key if you have any |
showHitCounter | boolean Shows a hit counter (100, 50, miss) below the PP counter. Default: false |
showKeyOverlay | boolean Show the key overlay or not. Default: true |
showAvatarsOnScoreboard | boolean Show avatars on the left of the username of a player on the scoreboard. May break some skins because the width of the scoreboard increases. Default: false |
showAimErrorMeter | boolean Show the Aim Error Meter or not. Default: false. |
playNightcoreSamples | boolean Play nightcore hitsounds or not. Default: true |
customSkin | boolean Set to true to use a custom skin (the id must be in the skin property), or false to use an "official" skin. Default: false |
showStrainGraph | boolean Show the strain graph or not. Default: false |
showSliderBreaks | boolean Show the slider breaks count in the hit counter. Default: false |
ignoreFail | boolean Ignores fail in the replay or not. Default: false |
{- "message": "Render added successfully",
- "renderID": 95,
- "errorCode": 0
}
If you have a good skin that is not available, you can send it in the o!rdr Discord server (channel #suggestions) and we'll probably add it!
pageSize | number Examples:
The number of skins the API will return you in the page. If not specified, 100 is the default. |
page | number Examples:
The page |
search | string Examples:
Get the skins that matches the most your string |
{- "message": "Available skins:",
- "skins": [
- {
- "skin": "whitecatCK1.0",
- "presentationName": "WhiteCat (CK 1.0)",
- "id": 60,
- "hasCursorMiddle": false
}, - {
- "skin": "whitecatCK2.0",
- "presentationName": "WhiteCat (CK 2.0)",
- "id": 61,
- "hasCursorMiddle": false
}
], - "maxSkins": 68
}
{- "found": true,
- "removed": false,
- "message": "Found skin",
- "skinName": "MasterIO's skin v1 fixed",
- "skinAuthor": "masterio",
}