Commit be2704f2 authored by SpinShare's avatar SpinShare

added api documentation

parent 3c37e064
# SpinShare API
## Connect API
### Introduction
Welcome to the API documentations to the SpinShare Connect API. This document outlines how to connect a SpinShare userprofile with your application and how you can use this connection to perform user actions such as creating reviews or adding charts to playlists.
### Terminology
| Name | Description |
| ---- | ----------- |
| User | A "User" is a SpinShare userprofile. |
| ConnectApp | A "ConnectApp" is your application, bot or whatever. |
| Connection | A "Connection" is a relationship between a ConnectApp and a User. A User can always revoke access to a ConnectApp by going into the usersettings on SpinShare |
| ConnectCode | A "ConnectCode" is a 6 character code that is used for establishing the connection between a User and a ConnectApp. This code will change every 15 seconds as long as the user is on the SpinShare connect page. |
| ConnectToken | A "ConnectToken" is a series of characters used along with your ApiKey to verify you are allowed to perform certain actions and ping certain api endpoints. This token is valid until the user revokes access. |
### Getting Access
API access is handled privately as of now. Please refer to the developers on the SpinShare Discord to receive API access.
### Creating a Connection
The SpinShare API does not consume login credentials for protected API endpoints but rather a simple apikey/token solution. Users have to connect to a ConnectApp once by inputting a 6 character long ConnectCode that changes every 15 seconds.
**Steps to establish a Connection**
- Prompt the user to input their connect code. The code can be found on within the profile settings under the "Connect" tab.
- Put the ConnectCode through the /getToken API endpoint along with your ApiKey to generate a ConnectToken.
- Save the ConnectToken locally and use it for protected API endpoints. If you need to verify if your ConnectToken is still valid, you can use the /validateToken API endpoint.
### API Endpoints
#### /api/connect/getToken
This API endpoint gives you a ConnectToken.
**Parameters**
(string) connectCode
(string) connectAppApiKey
**Response**
200 - OK. The body contains the ConnectToken
400 - Parameters are missing. The body contains the needed parameters and their value
404 - The ConnectCode or ApiKey was wrong.
#### /api/connect/validateToken
This API endpoint checks if a ConnectToken is still valid.
**Parameters**
(string) connectToken
**Response**
200 - The ConnectToken is valid.
404 - The ConnectToken is not valid.
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Authentication - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Authentication
</h1>
<p>Open APIs don't require any type of authentication, these APIs are read-only and only give you publicly accessible data. If you need to modify content and/or want more detailled data (as well as user-private data), you need to use our Connect Authentication system. More information about how to register an app and authenticate it can be found on the <a href="connect-connect.htm">Connect</a> page.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Discovery - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Connect
</h1>
<div class="card" id="introduction">
<h2 class="card-title">Introduction</h2>
<p>This document outlines how to connect a SpinShare userprofile with your application and how you can use this connection to perform user actions such as creating reviews or adding charts to playlists.</p>
</div>
<div class="card" id="terminology">
<h2 class="card-title">Terminology</h2>
<table class="table table-bordered">
<tr>
<th>User</th>
<td>A "User" is a SpinShare userprofile.</td>
</tr>
<tr>
<th>ConnectApp</th>
<td>A "ConnectApp" is your application, bot or whatever.</td>
</tr>
<tr>
<th>Connection</th>
<td>A "Connection" is a relationship between a ConnectApp and a User. A User can always revoke access to a ConnectApp by going into the usersettings on SpinShare.</td>
</tr>
<tr>
<th>ConnectCode</th>
<td>A "ConnectCode" is a 6 character code that is used for establishing the connection between a User and a ConnectApp. This code will change every 15 seconds as long as the user is on the SpinShare connect page.</td>
</tr>
<tr>
<th>ConnectToken</th>
<td>A "ConnectToken" is a series of characters used along with your ApiKey to verify you are allowed to perform certain actions and ping certain api endpoints. This token is valid until the user revokes access.</td>
</tr>
</table>
</div>
<div class="card" id="creating-a-connection">
<h2 class="card-title">Creating a Connection</h2>
<div class="alert alert-secondary" role="alert">
<h4 class="alert-heading">Attention</h4>
API access is handled privately as of now. Please refer to the developers on the SpinShare Discord to receive API access.
</div>
<p>The SpinShare API does not consume login credentials for protected API endpoints but rather a simple apikey/token solution. Users have to connect to a ConnectApp once by inputting a 6 character long ConnectCode that changes every 15 seconds.</p>
<strong>Steps to establish a Connection</strong>
<p>Prompt the user to input their connect code. The code can be found on within the profile settings under the "Connect" tab.</p>
<p>Put the ConnectCode through the <a href="#getting-a-token">Getting a Token</a> API endpoint along with your ApiKey to generate a ConnectToken.</p>
<p>Save the ConnectToken locally and use it for protected API endpoints. If you need to verify if your ConnectToken is still valid, you can use the <a href="#validating-a-token">Validating a Token</a> API endpoint.</p>
</div>
<div class="card" id="getting-a-token">
<h2 class="card-title">Getting a Token</h2>
<p>Returns a ConnectToken.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/connect/getToken</td>
</tr>
<tr>
<th>Query Parameters</th>
<td>(string) connectCode<br />
(string) connectAppApiKey</td>
</tr>
</table>
<br />
<br />
<strong>Responses</strong>
<br /><br />
<table class="table table-bordered">
<thead>
<tr>
<th>Code</th>
<th>Explaination</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>OK. The body contains the ConnectToken</td>
</tr>
<tr>
<td>400</td>
<td>Parameters are missing. The body contains the needed parameters and their value</td>
</tr>
<tr>
<td>403</td>
<td>The ConnectCode or ApiKey was wrong.</td>
</tr>
</tbody>
</table>
</div>
<div class="card" id="validating-a-token">
<h2 class="card-title">Validating a Token</h2>
<p>Checks if a ConnectToken is still valid.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/connect/validateToken</td>
</tr>
<tr>
<th>Query Parameters</th>
<td>(string) connectCode<br />
(string) connectAppApiKey</td>
</tr>
</table>
<br /><br />
<strong>Responses</strong>
<br /><br />
<table class="table table-bordered">
<thead>
<tr>
<th>Code</th>
<th>Explaination</th>
</tr>
</thead>
<tbody>
<tr>
<td>200</td>
<td>The ConnectToken is valid.</td>
</tr>
<tr>
<td>403</td>
<td>The ConnectToken is not valid.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#introduction">Introduction</a>
<a href="#terminology">Terminology</a>
<a href="#creating-a-connection">Creating a Connection</a>
<a href="#getting-a-token">Getting a Token</a>
<a href="#validating-a-token">Validating a Token</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
html {
font-size: 12px !important;
}
.sidebar-group {
margin-top: 25px;
}
.navbar-brand span {
font-size: 14px;
}
.content-wrapper {
padding: 30px 0px;
}
.sidebar-link-with-icon.active {
color: #e22c78 !important;
}
.sidebar-link-with-icon.active .sidebar-icon {
color: #e22c78 !important;
}
.content .card {
margin: 1rem 0rem;
}
.content .card pre {
overflow-y: auto;
}
/* Sidenav */
@media (max-width: 992px) {
.on-this-page-nav-container {
display: none;
}
}
.on-this-page-nav {
position: fixed;
margin-right: 1rem;
z-index: 20;
background-color: #ffffff;
padding: 0.5rem;
border-radius: 4px;
}
.dark-mode .on-this-page-nav {
background-color: #25282c;
}
.on-this-page-nav .title {
font-weight: 500;
font-size: 1.5rem;
margin-bottom: 1rem;
}
.on-this-page-nav a {
text-align: left;
display: block;
padding: 0.5rem 0 0.5rem 1.5rem;
line-height: 1.6rem;
color: rgba(0, 0, 0, 0.7);
border-left: 1px solid rgba(0, 0, 0, 0.15);
}
.dark-mode .on-this-page-nav a {
color: rgba(255, 255, 255, 0.65);
border-color: rgba(255, 255, 255, 0.15);
}
.on-this-page-nav a:hover,
.dark-mode .on-this-page-nav a:hover {
color: #1890ff;
text-decoration: none;
}
html {
font-size: 12px !important;
}
.sidebar-group {
margin-top: 25px;
}
.navbar-brand span {
font-size: 14px;
}
.content-wrapper {
padding: 30px 0px;
}
.sidebar-link-with-icon.active {
color: #e22c78 !important;
}
.sidebar-link-with-icon.active .sidebar-icon {
color: #e22c78 !important;
}
.content .card {
margin: 1rem 0rem;
}
.content .card pre {
overflow-y: auto;
}
/* Sidenav */
@media (max-width: 992px) {
.on-this-page-nav-container {
display: none;
}
}
.on-this-page-nav {
position: fixed;
margin-right: 1rem;
z-index: 20;
background-color: #ffffff;
padding: 0.5rem;
border-radius: 4px;
}
.dark-mode .on-this-page-nav {
background-color: #25282c;
}
.on-this-page-nav .title {
font-weight: 500;
font-size: 1.5rem;
margin-bottom: 1rem;
}
.on-this-page-nav a {
text-align: left;
display: block;
padding: 0.5rem 0 0.5rem 1.5rem;
line-height: 1.6rem;
color: rgba(0, 0, 0, 0.7);
border-left: 1px solid rgba(0, 0, 0, 0.15);
}
.dark-mode .on-this-page-nav a {
color: rgba(255, 255, 255, 0.65);
border-color: rgba(255, 255, 255, 0.15);
}
.on-this-page-nav a:hover,
.dark-mode .on-this-page-nav a:hover {
color: #1890ff;
text-decoration: none;
}
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Endpoints & Versioning - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Endpoints & Versioning
</h1>
<p>Every API-Endpoint is prefixed with <code class="code">https://spinsha.re/api/</code>. Additionally, every API-call reports back the API-version in form of the <code class="code">version</code> property. If you want to ping the API (to check if it's online), you can run the Ping API-call.</p>
<div class="card" id="detail">
<h2 class="card-title">Ping</h2>
<p>Pong's back.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/ping</td>
</tr>
</table>
<br /><br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"pong":true
}
</pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Introduction - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Introduction
</h1>
<p>Welcome to the SpinShare API Documentation! These pages focus on all the data you can access from SpinSha.re to make cool stuff. Whether you're working on a Twitch bot, a mod for the game or anything else helping, we want you to be able to use our platform to make your projects even better!<br /><br />So what are we waiting for? Let's create something awesome together!</p>
</div>
<div class="content">
<h1 class="content-title">
Changelog
</h1>
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Last Update</h4>
This documentation was last updated on 08/12/2020 at 15:01 CEST
</div>
<div class="card">
<h2 class="card-title">08/12/2020</h2>
Initial release.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Discovery - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Discovery
</h1>
<div class="card" id="search">
<h2 class="card-title">Search</h2>
<p>Returns songs and users based on the <code class="code">searchQuery</code> provided.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/search/<code class="code">searchQuery</code></td>
</tr>
</table>
<br /><br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"users":[
{
"id":4,
"username":"thatanimeweirdo",
"isVerified":true,
"isPatreon":null,
"avatar":"https:\/\/spinsha.re\/uploads\/avatar\/5ef8cddb50106.png"
},
...
],
"songs":[
{
"id":1024,
"title":"Keyboard Combos XD",
"subtitle":"Charted in XD because WHY NOT",
"artist":"Discord",
"charter":"Raoul1808",
"hasEasyDifficulty":false,
"hasNormalDifficulty":false,
"hasHardDifficulty":false,
"hasExtremeDifficulty":false,
"hasXDDifficulty":true,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5f2d157f6e44a.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/1024\/download"
},
...
]
}
}
</pre>
</div>
<div class="card" id="searchAll">
<h2 class="card-title">Search All</h2>
<p>Returns all songs and users.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/searchAll</td>
</tr>
</table>
<br /><br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"users":[
{
"id":4,
"username":"thatanimeweirdo",
"isVerified":true,
"isPatreon":null,
"avatar":"https:\/\/spinsha.re\/uploads\/avatar\/5ef8cddb50106.png"
},
...
],
"songs":[
{
"id":1024,
"title":"Keyboard Combos XD",
"subtitle":"Charted in XD because WHY NOT",
"artist":"Discord",
"charter":"Raoul1808",
"hasEasyDifficulty":false,
"hasNormalDifficulty":false,
"hasHardDifficulty":false,
"hasExtremeDifficulty":false,
"hasXDDifficulty":true,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5f2d157f6e44a.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/1024\/download"
},
...
]
}
}
</pre>
</div>
<div class="card" id="new">
<h2 class="card-title">New Songs</h2>
<p>Returns the 12 newest songs. Use <code class="code">offset</code> for pagination.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/songs/new/<code class="code">offset</code></td>
</tr>
</table>
<br /><br />
<strong>Output Body (Success)</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":[
{
"id": 3,
"title": "Isabelle Singing",
"subtitle": "K.K. Bubblegum",
"artist": "K.K. Slider",
"charter": "Ellite",
"hasEasyDifficulty": false,
"hasNormalDifficulty": false,
"hasHardDifficulty": true,
"hasExtremeDifficulty": false,
"hasXDDifficulty": false,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5e8df6fb90bd7.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/3\/download"
},
...
]
}
</pre>
<br />
<strong>Output Body (Not Found)</strong>
<pre class="code">
{
"version":1,
"status":404,
"data":[]
}
</pre>
</div>
<div class="card" id="hot">
<h2 class="card-title">Hot Songs</h2>
<p>Returns the 12 most popular songs from the last 7 days. Use <code class="code">offset</code> for pagination.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/songs/hot/<code class="code">offset</code></td>
</tr>
</table>
<br /><br />
<strong>Output Body (Success)</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":[
{
"id": 3,
"title": "Isabelle Singing",
"subtitle": "K.K. Bubblegum",
"artist": "K.K. Slider",
"charter": "Ellite",
"hasEasyDifficulty": false,
"hasNormalDifficulty": false,
"hasHardDifficulty": true,
"hasExtremeDifficulty": false,
"hasXDDifficulty": false,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5e8df6fb90bd7.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/3\/download"
},
...
]
}
</pre>
<br />
<strong>Output Body (Not Found)</strong>
<pre class="code">
{
"version":1,
"status":404,
"data":[]
}
</pre>
</div>
<div class="card" id="popular">
<h2 class="card-title">Popular Songs</h2>
<p>Returns the 12 most popular songs of all time. Use <code class="code">offset</code> for pagination.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/songs/popular/<code class="code">offset</code></td>
</tr>
</table>
<br /><br />
<strong>Output Body (Success)</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":[
{
"id": 3,
"title": "Isabelle Singing",
"subtitle": "K.K. Bubblegum",
"artist": "K.K. Slider",
"charter": "Ellite",
"hasEasyDifficulty": false,
"hasNormalDifficulty": false,
"hasHardDifficulty": true,
"hasExtremeDifficulty": false,
"hasXDDifficulty": false,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5e8df6fb90bd7.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/3\/download"
},
...
]
}
</pre>
<br />
<strong>Output Body (Not Found)</strong>
<pre class="code">
{
"version":1,
"status":404,
"data":[]
}
</pre>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#search">Search</a>
<a href="#searchAll">Search All</a>
<a href="#new">New Songs</a>
<a href="#hot">Hot Songs</a>
<a href="#popular">Popular Songs</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Promos - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Promos
</h1>
<div class="card" id="active">
<h2 class="card-title">Active Promos</h2>
<p>Returns the 2 active promos.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/promos</td>
</tr>
</table>
<br />
<div class="alert alert-secondary" role="alert">
<h4 class="alert-heading">Attention</h4>
The <code class="code">title</code> property has to be parsed as HTML.
</div>
<br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":[
{
"id":2,
"title":"Support\u003Cbr\/\u003ESpinSha.re!",
"type":"SUPPORT",
"textColor":"#222222",
"color":"#f96753",
"button":{
"type":3,
"data":"https:\/\/patreon.com\/spinshare"
},
"isVisible":true,
"image_path":"https:\/\/spinsha.re\/uploads\/promo\/promo_5e8de86c19536.png"
},
{
"id":1,
"title":"Join our\u003Cbr \/\u003EDiscord!",
"type":"SOCIAL",
"textColor":"#222",
"color":"#7289DA",
"button":{
"type":3,
"data":"https:\/\/spinsha.re\/discord"
},
"isVisible":true,
"image_path":"https:\/\/spinsha.re\/uploads\/promo\/promo_5e8de7f753038.png"
}
]
}
</pre>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#active">Active Promos</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Songs - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Songs
</h1>
<div class="card" id="detail">
<h2 class="card-title">Detail</h2>
<p>Returns more detailled information about a song.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/song/<code class="code">songID</code></td>
</tr>
</table>
<br />
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Information</h4>
Instead of a <code class="code">songID</code> you can also provide a <code class="code">fileReference</code>, which start with <code class="code">spinshare_</code>.
</div>
<br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"id":3,
"title":"Isabelle Singing",
"subtitle":"K.K. Bubblegum",
"artist":"K.K. Slider",
"charter":"Ellite",
"uploader":3,
"fileReference":"spinshare_5e8df6fb90bd7",
"tags":[
"isabelle",
"singing",
"easy",
"cute",
"animal",
"crossing",
"acnh",
"new",
"horizons"
],
"views":774,
"downloads":98,
"isExplicit":false,
"isTournament":false,
"hasEasyDifficulty":false,
"hasNormalDifficulty":false,
"hasHardDifficulty":true,
"hasExtremeDifficulty":false,
"hasXDDifficulty":false,
"uploadDate":{
"date":"2020-05-01 00:00:00.000000",
"timezone_type":3,
"timezone":"Europe\/Berlin"
},
"description":null,
"paths":{
"ogg":"https:\/\/spinsha.re\/uploads\/audio\/spinshare_5e8df6fb90bd7_0.ogg",
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5e8df6fb90bd7.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/3\/download"
}
}
}
</pre>
<br />
<strong>Output Body (Not Found)</strong>
<pre class="code">
{
"version":1,
"status":404,
"data":[]
}
</pre>
</div>
<div class="card" id="reviews">
<h2 class="card-title">Reviews</h2>
<p>Returns all active reviews of a song.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/song/<code class="code">songID</code>/reviews</td>
</tr>
</table>
<br />
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Information</h4>
Instead of a <code class="code">songID</code> you can also provide a <code class="code">fileReference</code>, which start with <code class="code">spinshare_</code>.
</div>
<br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"average":91.7,
"reviews":[
{
"id":632,
"user":{
"id":47,
"username":"NicolasPL",
"coverReference":"5e98e02997f6c.png",
"isVerified":null,
"isPatreon":null
},
"recommended":true,
"comment":"Really good. I played it on Expert, really fun.",
"reviewDate":{
"date":"2020-08-03 01:19:43.000000",
"timezone_type":3,
"timezone":"Europe\/Berlin"
}
},
...
]
}
}
</pre>
</div>
<div class="card" id="spinplays">
<h2 class="card-title">SpinPlays</h2>
<p>Returns all active SpinPlays of a song.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/song/<code class="code">songID</code>/spinplays</td>
</tr>
</table>
<br />
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Information</h4>
Instead of a <code class="code">songID</code> you can also provide a <code class="code">fileReference</code>, which start with <code class="code">spinshare_</code>.
</div>
<br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"spinPlays":[
{
"id":150,
"user":{
"id":20,
"username":"Zick407",
"coverReference":"5e9935a0afa55.png",
"isVerified":false,
"isPatreon":null
},
"videoUrl":"https:\/\/www.youtube.com\/watch?v=bEVdyM5_qxA",
"videoThumbnail":"https:\/\/i.ytimg.com\/vi\/bEVdyM5_qxA\/maxresdefault.jpg",
"submitDate":{
"date":"2020-07-01 02:10:39.000000",
"timezone_type":3,
"timezone":"Europe\/Berlin"
},
"isActive":true
}
]
}
}
</pre>
</div>
<div class="card" id="download">
<h2 class="card-title">Download</h2>
<p>Generates a download zip and returns it.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/song/<code class="code">songID</code>/download</td>
</tr>
</table>
<br />
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Information</h4>
Instead of a <code class="code">songID</code> you can also provide a <code class="code">fileReference</code>, which start with <code class="code">spinshare_</code>.
</div>
<br />
<div class="alert alert-primary" role="alert">
<h4 class="alert-heading">Information</h4>
This API endpoint returns a zip attachment as a Spin Rhythm XD backup.
</div>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#detail">Detail</a>
<a href="#reviews">Reviews</a>
<a href="#spinplays">SpinPlays</a>
<a href="#download">Download</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Tournaments - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Tournaments
</h1>
<div class="alert alert-secondary" role="alert">
<h4 class="alert-heading">Attention</h4>
The Tournaments API was created as a last minute addition to the SpinShare SpeenOpen Summer 2020. It's usecase is very limited and will likely change after the tournament.
</div>
<div class="card" id="mappool">
<h2 class="card-title">Mappool</h2>
<p>Returns the mappool of the current tournament.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/tournament/mappool</td>
</tr>
</table>
<br /><br />
<strong>Output Body</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":[
{
"id":183,
"title":"Immortal Flame",
"subtitle":"",
"artist":"Panda Eyes \u0026 Teminite",
"charter":"Aren Eternal \u0026 TheWay123",
"uploader":99,
"fileReference":"spinshare_5e9b78d27ee28",
"tags":[
"EDM",
"Dubstep",
"CTM-Friendly",
"XD",
"Diff 20-29"
],
"views":543,
"downloads":38,
"isExplicit":false,
"isTournament":true,
"hasEasyDifficulty":false,
"hasNormalDifficulty":false,
"hasHardDifficulty":false,
"hasExtremeDifficulty":false,
"hasXDDifficulty":true,
"uploadDate":{
"date":"2020-05-01 00:00:00.000000",
"timezone_type":3,
"timezone":"Europe\/Berlin"
},
"description":"Revision 1:\r\n - Added more movement in the intro\r\n - Revamped the build\r\n - Added some beats to the drop\r\n - Made more CTM friendly\r\n - Additional changes made by TheWay123\r\n - Assigned a difficulty\r\n - Assigned a background",
"srtbMD5":"fda722a33fb8655b3b803c821d7366e2",
"paths":{
"ogg":"https:\/\/spinsha.re\/uploads\/audio\/spinshare_5e9b78d27ee28_0.ogg",
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5e9b78d27ee28.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/183\/download"
}
},
...
]
}
</pre>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#mappool">Mappool</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Users - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Users
</h1>
<div class="card" id="detail">
<h2 class="card-title">Detail</h2>
<p>Returns more detailled information about a user.</p>
<table class="table table-bordered">
<tr>
<th>Method</th>
<td>GET</td>
</tr>
<tr>
<th>Endpoint</th>
<td>/user/<code class="code">userID</code></td>
</tr>
</table>
<br /><br />
<strong>Output Body (Success)</strong>
<pre class="code">
{
"version":1,
"status":200,
"data":{
"id":4,
"username":"thatanimeweirdo",
"isVerified":true,
"isPatreon":null,
"avatar":"https:\/\/spinsha.re\/uploads\/avatar\/5ef8cddb50106.png",
"songs":[
{
"id":1018,
"title":"Keyboard Combos",
"subtitle":"",
"artist":"Discord",
"charter":"taw.moe",
"uploader":4,
"hasEasyDifficulty":false,
"hasNormalDifficulty":false,
"hasHardDifficulty":true,
"hasExtremeDifficulty":false,
"hasXDDifficulty":false,
"cover":"https:\/\/spinsha.re\/uploads\/thumbnail\/spinshare_5f2c729b8ea3b.jpg",
"zip":"https:\/\/spinsha.re\/api\/song\/1018\/download"
}
]
}
}
</pre>
<br />
<strong>Output Body (Not Found)</strong>
<pre class="code">
{
"version":1,
"status":404,
"data":[]
}
</pre>
</div>
</div>
</div>
<div class="col-lg-3">
<div class="content">
<div class="on-this-page-nav">
<div class="title">On this page</div>
<a href="#detail">Detail</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<meta name="viewport" content="width=device-width" />
<!-- Meta -->
<link rel="icon" href="https://spinsha.re/assets/img/favicon.png" />
<title>Usage Policy - SpinShare API</title>
<!-- Style -->
<link href="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/css/halfmoon.min.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.materialdesignicons.com/5.4.55/css/materialdesignicons.min.css" />
<link rel="stylesheet" href="css/style.css" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-set-preferred-theme-onload="true">
<div class="page-wrapper with-navbar with-sidebar">
<nav class="navbar">
<a href="#" class="navbar-brand">
<img class="hidden-lm" src="https://spinsha.re/assets/img/logo_colored_ondark.svg" />
<img class="hidden-dm" src="https://spinsha.re/assets/img/logo_colored_onwhite.svg" />
<span>API Documentation</span>
</a>
</nav>
<div class="sidebar">
<div class="sidebar-group">
<h5 class="sidebar-title">Getting started</h5>
<div class="sidebar-divider"></div>
<a href="index.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-hand-peace-variant" aria-hidden="true"></i>
</span>
Introduction
</a>
<a href="usage-policy.htm" class="sidebar-link sidebar-link-with-icon active">
<span class="sidebar-icon">
<i class="mdi mdi-police-badge" aria-hidden="true"></i>
</span>
Usage Policy
</a>
<a href="endpoints-versioning.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-api" aria-hidden="true"></i>
</span>
Endpoints & Versioning
</a>
<a href="authentication.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-shield-account" aria-hidden="true"></i>
</span>
Authentication
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Open APIs</h5>
<div class="sidebar-divider"></div>
<a href="open-discovery.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-magnify" aria-hidden="true"></i>
</span>
Discovery
</a>
<a href="open-promos.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-cursor-default-click" aria-hidden="true"></i>
</span>
Promos
</a>
<a href="open-songs.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-music-circle" aria-hidden="true"></i>
</span>
Songs
</a>
<a href="open-users.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-account-circle" aria-hidden="true"></i>
</span>
Users
</a>
<a href="open-tournaments.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-boxing-glove" aria-hidden="true"></i>
</span>
Tournaments
</a>
</div>
<div class="sidebar-group">
<h5 class="sidebar-title">Connect APIs</h5>
<div class="sidebar-divider"></div>
<a href="connect-connect.htm" class="sidebar-link sidebar-link-with-icon">
<span class="sidebar-icon">
<i class="mdi mdi-toy-brick" aria-hidden="true"></i>
</span>
Connect
</a>
</div>
</div>
<div class="content-wrapper">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-lg-7">
<div class="content">
<h1 class="content-title">
Usage Policy
</h1>
<p>Our Usage Policy serves as the Terms of Service of the SpinShare API. Please follow this ruleset if you are using the SpinShare API.</p>
<div class="card">
<h2 class="card-title">DO</h2>
<ul>
<li>Protect userdata.</li>
<li>Provide users with information about which data you access</li>
<li>Add a label or a backlink to SpinShare</li>
</ul>
</div>
<div class="card">
<h2 class="card-title">DON'T</h2>
<ul>
<li>Use API data for a purpose not connected to SpinShare or Spin Rhythm XD</li>
<li>Obtain passwords or other credentials</li>
<li>Use userdata for marketing or advertisements</li>
<li>Sell or license API data</li>
<li>Scrape API data (caching is excluded from this)</li>
<li>Use this API data to do anything illegal or harmful</li>
</ul>
</div>
<p>We currently don't ratelimit our open APIs. However, we still would like you to keep an eye on your API usage and cache API data whenever possible.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/gh/halfmoonui/halfmoon@1.0.3/js/halfmoon.min.js"></script>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment