2021-12-25 02:38:42 +00:00
<!doctype html>
< html >
< head >
< meta charset = "utf-8" >
< meta content = "IE=edge,chrome=1" http-equiv = "X-UA-Compatible" >
< meta name = "viewport" content = "width=device-width, initial-scale=1, maximum-scale=1" >
< meta
name="description"
content="Documentation for the GoScrobble API"
>
< title > GoScrobble API Documentation< / title >
< style media = "screen" >
.highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight .gh {
color: #999999;
}
.highlight .sr {
color: #f6aa11;
}
.highlight .go {
color: #888888;
}
.highlight .gp {
color: #555555;
}
.highlight .gs {
}
.highlight .gu {
color: #aaaaaa;
}
.highlight .nb {
color: #f6aa11;
}
.highlight .cm {
color: #75715e;
}
.highlight .cp {
color: #75715e;
}
.highlight .c1 {
color: #75715e;
}
.highlight .cs {
color: #75715e;
}
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cpf {
color: #75715e;
}
.highlight .err {
color: #960050;
}
.highlight .gr {
color: #960050;
}
.highlight .gt {
color: #960050;
}
.highlight .gd {
color: #49483e;
}
.highlight .gi {
color: #49483e;
}
.highlight .ge {
color: #49483e;
}
.highlight .kc {
color: #66d9ef;
}
.highlight .kd {
color: #66d9ef;
}
.highlight .kr {
color: #66d9ef;
}
.highlight .no {
color: #66d9ef;
}
.highlight .kt {
color: #66d9ef;
}
.highlight .mf {
color: #ae81ff;
}
.highlight .mh {
color: #ae81ff;
}
.highlight .il {
color: #ae81ff;
}
.highlight .mi {
color: #ae81ff;
}
.highlight .mo {
color: #ae81ff;
}
.highlight .m, .highlight .mb, .highlight .mx {
color: #ae81ff;
}
.highlight .sc {
color: #ae81ff;
}
.highlight .se {
color: #ae81ff;
}
.highlight .ss {
color: #ae81ff;
}
.highlight .sd {
color: #e6db74;
}
.highlight .s2 {
color: #e6db74;
}
.highlight .sb {
color: #e6db74;
}
.highlight .sh {
color: #e6db74;
}
.highlight .si {
color: #e6db74;
}
.highlight .sx {
color: #e6db74;
}
.highlight .s1 {
color: #e6db74;
}
.highlight .s, .highlight .sa, .highlight .dl {
color: #e6db74;
}
.highlight .na {
color: #a6e22e;
}
.highlight .nc {
color: #a6e22e;
}
.highlight .nd {
color: #a6e22e;
}
.highlight .ne {
color: #a6e22e;
}
.highlight .nf, .highlight .fm {
color: #a6e22e;
}
.highlight .vc {
color: #ffffff;
}
.highlight .nn {
color: #ffffff;
}
.highlight .ni {
color: #ffffff;
}
.highlight .bp {
color: #ffffff;
}
.highlight .vg {
color: #ffffff;
}
.highlight .vi {
color: #ffffff;
}
.highlight .nv, .highlight .vm {
color: #ffffff;
}
.highlight .w {
color: #ffffff;
}
.highlight {
color: #ffffff;
}
.highlight .n, .highlight .py, .highlight .nx {
color: #ffffff;
}
.highlight .nl {
color: #f92672;
}
.highlight .ow {
color: #f92672;
}
.highlight .nt {
color: #f92672;
}
.highlight .k, .highlight .kv {
color: #f92672;
}
.highlight .kn {
color: #f92672;
}
.highlight .kp {
color: #f92672;
}
.highlight .o {
color: #f92672;
}
< / style >
< style media = "print" >
* {
-webkit-transition:none!important;
transition:none!important;
}
.highlight table td { padding: 5px; }
.highlight table pre { margin: 0; }
.highlight, .highlight .w {
color: #586e75;
}
.highlight .err {
color: #002b36;
background-color: #dc322f;
}
.highlight .c, .highlight .ch, .highlight .cd, .highlight .cm, .highlight .cpf, .highlight .c1, .highlight .cs {
color: #657b83;
}
.highlight .cp {
color: #b58900;
}
.highlight .nt {
color: #b58900;
}
.highlight .o, .highlight .ow {
color: #93a1a1;
}
.highlight .p, .highlight .pi {
color: #93a1a1;
}
.highlight .gi {
color: #859900;
}
.highlight .gd {
color: #dc322f;
}
.highlight .gh {
color: #268bd2;
background-color: #002b36;
font-weight: bold;
}
.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {
color: #6c71c4;
}
.highlight .kc {
color: #cb4b16;
}
.highlight .kt {
color: #cb4b16;
}
.highlight .kd {
color: #cb4b16;
}
.highlight .s, .highlight .sb, .highlight .sc, .highlight .dl, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {
color: #859900;
}
.highlight .sa {
color: #6c71c4;
}
.highlight .sr {
color: #2aa198;
}
.highlight .si {
color: #d33682;
}
.highlight .se {
color: #d33682;
}
.highlight .nn {
color: #b58900;
}
.highlight .nc {
color: #b58900;
}
.highlight .no {
color: #b58900;
}
.highlight .na {
color: #268bd2;
}
.highlight .m, .highlight .mb, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mx {
color: #859900;
}
.highlight .ss {
color: #859900;
}
< / style >
< link href = "stylesheets/screen-cfdc3565.css" rel = "stylesheet" media = "screen" / >
< link href = "stylesheets/print-953e3353.css" rel = "stylesheet" media = "print" / >
< script src = "javascripts/all-b12a2749.js" > < / script >
< script >
$(function() { setupCodeCopy(); });
< / script >
< / head >
< body class = "index" data-languages = "["shell"]" >
< a href = "#" id = "nav-button" >
< span >
NAV
< img src = "images/navbar-cad8cdcb.png" alt = "" / >
< / span >
< / a >
< div class = "toc-wrapper" >
< img src = "images/logo-7aa55c75.png" class = "logo" alt = "" / >
< div class = "lang-selector" >
< a href = "#" data-language-name = "shell" > shell< / a >
< / div >
< div class = "search" >
< input type = "text" class = "search" id = "input-search" placeholder = "Search" >
< / div >
< ul class = "search-results" > < / ul >
< ul id = "toc" class = "toc-list-h1" >
< li >
< a href = "#introduction" class = "toc-h1 toc-link" data-title = "Introduction" > Introduction< / a >
< / li >
2021-12-25 04:27:35 +00:00
< li >
< a href = "#rate-limits" class = "toc-h1 toc-link" data-title = "Rate Limits" > Rate Limits< / a >
< / li >
2021-12-25 02:38:42 +00:00
< li >
< a href = "#server-info" class = "toc-h1 toc-link" data-title = "Server Info" > Server Info< / a >
< ul class = "toc-list-h2" >
< li >
2021-12-25 04:27:35 +00:00
< a href = "#get-v1-serverinfo" class = "toc-h2 toc-link" data-title = "GET v1/serverinfo" > GET v1/serverinfo< / a >
< / li >
< / ul >
< / li >
< li >
< a href = "#ingress-endpoints" class = "toc-h1 toc-link" data-title = "Ingress Endpoints" > Ingress Endpoints< / a >
< ul class = "toc-list-h2" >
< li >
< a href = "#post-v1-ingress-jellyfin" class = "toc-h2 toc-link" data-title = "POST v1/ingress/jellyfin" > POST v1/ingress/jellyfin< / a >
< / li >
< li >
< a href = "#post-v1-ingress-multiscrobbler" class = "toc-h2 toc-link" data-title = "POST v1/ingress/multiscrobbler" > POST v1/ingress/multiscrobbler< / a >
2021-12-25 02:38:42 +00:00
< / li >
< / ul >
< / li >
< li >
< a href = "#authentication" class = "toc-h1 toc-link" data-title = "Authentication" > Authentication< / a >
< ul class = "toc-list-h2" >
< li >
2021-12-25 04:27:35 +00:00
< a href = "#post-v1-login" class = "toc-h2 toc-link" data-title = "POST v1/login" > POST v1/login< / a >
2021-12-25 02:38:42 +00:00
< / li >
< li >
2021-12-25 04:27:35 +00:00
< a href = "#post-v1-register" class = "toc-h2 toc-link" data-title = "POST v1/register" > POST v1/register< / a >
2021-12-25 02:38:42 +00:00
< / li >
< li >
2021-12-25 04:27:35 +00:00
< a href = "#post-v1-sendreset" class = "toc-h2 toc-link" data-title = "POST v1/sendreset" > POST v1/sendreset< / a >
2021-12-25 02:38:42 +00:00
< / li >
< li >
2021-12-25 04:27:35 +00:00
< a href = "#post-v1-resetpassword" class = "toc-h2 toc-link" data-title = "POST v1/resetpassword" > POST v1/resetpassword< / a >
< / li >
< li >
< a href = "#post-v1-refresh" class = "toc-h2 toc-link" data-title = "POST v1/refresh" > POST v1/refresh< / a >
< / li >
< / ul >
< / li >
< li >
< a href = "#admin-endpoints" class = "toc-h1 toc-link" data-title = "Admin Endpoints" > Admin Endpoints< / a >
< ul class = "toc-list-h2" >
< li >
< a href = "#get-v1-config" class = "toc-h2 toc-link" data-title = "GET v1/config" > GET v1/config< / a >
< / li >
< li >
< a href = "#post-v1-config" class = "toc-h2 toc-link" data-title = "POST v1/config" > POST v1/config< / a >
2021-12-25 02:38:42 +00:00
< / li >
< / ul >
< / li >
< / ul >
< ul class = "toc-footer" >
< li > < a href = 'https://goscrobble.com' > GoScrobble website< / a > < / li >
< li > < a href = 'https://gitlab.com/goscrobble/goscrobble-api' > Backend Repository< / a > < / li >
< li > < a href = 'https://gitlab.com/goscrobble/goscrobble-web' > Frontend Repository< / a > < / li >
< / ul >
< / div >
< div class = "page-wrapper" >
< div class = "dark-box" > < / div >
< div class = "content" >
< h1 id = 'introduction' > Introduction< / h1 >
< p > Welcome to the GoScrobble API documentation.< / p >
2021-12-25 04:27:35 +00:00
< p > The majority of these API endpoints are public with rate limiting and do not require authentication.< / p >
< h1 id = 'rate-limits' > Rate Limits< / h1 >
< p > There are 3 tiers of rate-limiting:< br >
Light rate-limiting: 1 request per 4 seconds with a max burst of 2.< br >
Standard rate-limiting: 5 requests per second with a burst of 5.< br >
Heavy rate-limiting: 10 requests per second with a burst of 10. < / p >
< p > The rate limits work as a ' bucket' system where there is a max (burst) and a regenerative rate. More info can be found in the source file server_middleware.go.< / p >
< p > Each endpoint will depict which rate limit applies.< / p >
< p > For example:
On the medium rate-limiter, you start with 5 requests available to you instantly, and this replenishes 5 requests per second.< / p >
< h1 id = 'server-info' > Server Info< / h1 > < h2 id = 'get-v1-serverinfo' > GET v1/serverinfo< / h2 >
2021-12-25 02:38:42 +00:00
< blockquote >
< p > Check server version and registration status:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/serverinfo"< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "version"< / span > < span class = "p" > :< / span > < span class = "s2" > "0.1.1"< / span > < span class = "p" > ,< / span > < span class = "w" >
< / span > < span class = "nl" > "registration_enabled"< / span > < span class = "p" > :< / span > < span class = "s2" > "1"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > This endpoint is used to get server API version and registration status.< / p >
< h3 id = 'http-request' > HTTP Request< / h3 >
< p > < code > GET https://goscrobble.com/api/v1/serverstatus< / code > < / p >
2021-12-25 04:27:35 +00:00
< h1 id = 'ingress-endpoints' > Ingress Endpoints< / h1 >
< p > Spotify and Navidrome both work on a poll based system and do not require incoming webhooks/endpoints.< / p >
< h2 id = 'post-v1-ingress-jellyfin' > POST v1/ingress/jellyfin< / h2 >
< blockquote >
< p > Submit a scrobble:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/ingress/jellyfin"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"< / span > < span class = "se" > \< / span >
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
< span class = "nt" > --data< / span > < span class = "s1" > '{"Name":"< Full JSON structure located in ingress_jellyfin.go> ", "Album":"Best Album","Artist":"Best Artist"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "success"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > Adds a scrobble from Jellyfin into the database. Please view < code > type JellyfinRequest struct< / code > in ingress_jellyfin.go for the full request format. You need to install the webhook plugin for this to work.< / p >
< aside class = "notice" >
Light rate-limiting applies
< / aside >
< h3 id = 'http-request' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/ingress/jellyfin< / code > < / p >
< h3 id = 'query-parameters' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > Album< / td >
< td > true< / td >
< td > string< / td >
< td > Album title< / td >
< / tr >
< tr >
< td > Artist< / td >
< td > true< / td >
< td > string< / td >
< td > Artist name< / td >
< / tr >
< tr >
< td > Name< / td >
< td > true< / td >
< td > string< / td >
< td > Song title< / td >
< / tr >
< tr >
< td > ItemType< / td >
< td > true< / td >
< td > string< / td >
< td > Will only scrobble type ' Audio' < / td >
< / tr >
< tr >
< td > ClientName< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > DeviceId< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > DeviceName< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > IsAutomated< / td >
< td > false< / td >
< td > bool< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > IsPaused< / td >
< td > false< / td >
< td > bool< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > ItemId< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > MediaSourceId< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > NotificationType< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Overview< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > PlaybackPosition< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > PlaybackPositionTicks< / td >
< td > false< / td >
< td > int< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Provider_musicbrainzalbum< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Provider_musicbrainzalbumartist< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Provider_musicbrainzartist< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Provider_musicbrainzreleasegroup< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Provider_musicbrainztrack< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > RunTime< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > RunTimeTicks< / td >
< td > false< / td >
< td > int< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > ServerId< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > ServerName< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > ServerUrl< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > ServerVersion< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > Timestamp< / td >
< td > false< / td >
< td > string< / td >
< td > TBD< / td >
< / tr >
< tr >
< td > UserId< / td >
< td > false< / td >
< td > TBD< / td >
< td > < / td >
< / tr >
< tr >
< td > Username< / td >
< td > false< / td >
< td > TBD< / td >
< td > < / td >
< / tr >
< tr >
< td > UtcTimestamp< / td >
< td > false< / td >
< td > TBD< / td >
< td > < / td >
< / tr >
< tr >
< td > Year< / td >
< td > false< / td >
< td > int< / td >
< td > TBD< / td >
< / tr >
< / tbody > < / table >
< h2 id = 'post-v1-ingress-multiscrobbler' > POST v1/ingress/multiscrobbler< / h2 >
< blockquote >
< p > Submit a scrobble:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/ingress/multiscrobbler"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"< / span > < span class = "se" > \< / span >
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
< span class = "nt" > --data< / span > < span class = "s1" > '{"Track":"< Full JSON structure located in ingress_multiscrobbler.go> ", "Album":"Best Album","Artist":["Best Artist1", "Best Artist2"]}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "success"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > Adds a scrobble from MultiScrobbler into the database. Please view < code > type MultiScrobblerRequest struct< / code > in ingress_multiscrobbler.go for the full request format.< / p >
< aside class = "notice" >
Light rate-limiting applies
< / aside >
< h3 id = 'http-request-2' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/ingress/multiscrobbler< / code > < / p >
< h3 id = 'query-parameters-2' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > Album< / td >
< td > true< / td >
< td > string< / td >
< td > Album title< / td >
< / tr >
< tr >
< td > Artist< / td >
< td > true< / td >
< td > array< / td >
< td > Array of Artist names< / td >
< / tr >
< tr >
< td > Track< / td >
< td > true< / td >
< td > string< / td >
< td > Song title< / td >
< / tr >
< tr >
< td > PlayedAt< / td >
< td > true< / td >
< td > int< / td >
< td > Unix Timestamp of scrobble time< / td >
< / tr >
< tr >
< td > Duration< / td >
< td > true< / td >
< td > int< / td >
< td > Song length in seconds< / td >
< / tr >
< / tbody > < / table >
< h1 id = 'authentication' > Authentication< / h1 > < h2 id = 'post-v1-login' > POST v1/login< / h2 >
2021-12-25 02:38:42 +00:00
< blockquote >
< p > To obtain a JWT token (Replace default credentials):< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/login"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
2021-12-25 04:27:35 +00:00
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
2021-12-25 02:38:42 +00:00
< span class = "nt" > --data< / span > < span class = "s1" > '{"username":"abc","password":"def"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "token"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > This endpoint is used to authenticate and retrieve a JWT token.< / p >
2021-12-25 04:27:35 +00:00
< aside class = "notice" >
Standard rate-limiting applies
< / aside >
2021-12-25 02:38:42 +00:00
< h3 id = 'http-request' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/login< / code > < / p >
< h3 id = 'query-parameters' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > username< / td >
< td > true< / td >
< td > Account username< / td >
< / tr >
< tr >
< td > password< / td >
< td > true< / td >
< td > Account password< / td >
< / tr >
< / tbody > < / table >
2021-12-25 04:27:35 +00:00
< h2 id = 'post-v1-register' > POST v1/register< / h2 >
2021-12-25 02:38:42 +00:00
< blockquote >
< p > Create a new account (Replace default credentials):< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/register"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
2021-12-25 04:27:35 +00:00
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
2021-12-25 02:38:42 +00:00
< span class = "nt" > --data< / span > < span class = "s1" > '{"email": "test@test.com", "username":"abc","password":"def"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "User created succesfully. You may now login"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > If the server has REGISTRATION_ENABLED=true set, this endpoint will allow you to create a new account. Password must be at least 8 characters long.< / p >
2021-12-25 04:27:35 +00:00
< aside class = "notice" >
Heavy rate-limiting applies
< / aside >
2021-12-25 02:38:42 +00:00
< h3 id = 'http-request-2' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/register< / code > < / p >
< h3 id = 'query-parameters-2' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > email< / td >
< td > true< / td >
< td > Account email< / td >
< / tr >
< tr >
< td > username< / td >
< td > true< / td >
< td > Account username< / td >
< / tr >
< tr >
< td > password< / td >
< td > true< / td >
< td > Account password< / td >
< / tr >
< / tbody > < / table >
2021-12-25 04:27:35 +00:00
< h2 id = 'post-v1-sendreset' > POST v1/sendreset< / h2 >
2021-12-25 02:38:42 +00:00
< blockquote >
< p > Trigger a password reset email:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/sendreset"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
2021-12-25 04:27:35 +00:00
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
2021-12-25 02:38:42 +00:00
< span class = "nt" > --data< / span > < span class = "s1" > '{"email":"test@test.com"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "Password reset email sent"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > This endpoint triggers a password reset email to be sent to the email on an account.< / p >
2021-12-25 04:27:35 +00:00
< aside class = "notice" >
Heavy rate-limiting applies
< / aside >
2021-12-25 02:38:42 +00:00
< h3 id = 'http-request-3' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/sendreset< / code > < / p >
< h3 id = 'query-parameters-3' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > email< / td >
< td > true< / td >
< td > Account username< / td >
< / tr >
< / tbody > < / table >
2021-12-25 04:27:35 +00:00
< h2 id = 'post-v1-resetpassword' > POST v1/resetpassword< / h2 >
2021-12-25 02:38:42 +00:00
< blockquote >
< p > Trigger a password reset email:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/resetpassword"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
2021-12-25 04:27:35 +00:00
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
2021-12-25 02:38:42 +00:00
< span class = "nt" > --data< / span > < span class = "s1" > '{"token":"abcdefghijklmnopqrstuvwxyz", "password": "Hunter1"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "Password updated successfully!"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > This endpoint confirms a password reset with a valid hash from the reset email. You must call v1/sendreset first and obtain the hash.< / p >
2021-12-25 04:27:35 +00:00
< aside class = "notice" >
Heavy rate-limiting applies
< / aside >
2021-12-25 02:38:42 +00:00
< h3 id = 'http-request-4' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/resetpassword< / code > < / p >
< h3 id = 'query-parameters-4' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > token< / td >
< td > true< / td >
< td > Reset token from the password reset email< / td >
< / tr >
< tr >
< td > password< / td >
< td > true< / td >
< td > New account password< / td >
< / tr >
2021-12-25 04:27:35 +00:00
< / tbody > < / table >
< h2 id = 'post-v1-refresh' > POST v1/refresh< / h2 >
< blockquote >
< p > Fetch a new JWT with a refresh token:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/refresh"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
< span class = "nt" > --data< / span > < span class = "s1" > '{"token":"abcdefghijklmnopqrstuvwxyz"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "token"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsInJlZnJlc2hfZXhwIjoxNjQxMDAyNTE5LCJyZWZyZXNoX3Rva2VuIjoiYWJjZGVmZ2hqaWtsbW5vcHF3ZXJ0dXZ3eHl6Iiwic3ViIjoiNDE4ZmRkZmItOGIxYi01MWFiLTliZHMtNGZnMDhjYTYzY2ZmIiwidXNlcm5hbWUiOiJ0ZXN0In0.fuPXjQ7IzNyttgIKpdS4-KBQ-QeHTl-BfgYkSnMCmpVrBunzMrSwr1RzxI7Xg2WWF-FHtW3Bnv9RpSqLDN4F2g"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > Returns a new JWT token by passing a refresh token.< / p >
< aside class = "notice" >
Standard rate-limiting applies
< / aside >
< h3 id = 'http-request-5' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/refresh< / code > < / p >
< h3 id = 'query-parameters-5' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > token< / td >
< td > true< / td >
< td > Refresh token from previously issued JWT< / td >
< / tr >
< / tbody > < / table >
< h1 id = 'admin-endpoints' > Admin Endpoints< / h1 >
< aside class = "warning" >
An admin JWT token is required for the below endpoints
< / aside >
< h2 id = 'get-v1-config' > GET v1/config< / h2 >
< blockquote >
< p > Fetch configuration values:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/config"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "SPOTIFY_API_ID"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "abc"< / span > < span class = "p" > ,< / span > < span class = "w" >
< / span > < span class = "nl" > "SPOTIFY_API_SECRET"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "def"< / span > < span class = "p" > ,< / span > < span class = "w" >
< / span > < span class = "nl" > "REGISTRATION_ENABLED"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "kc" > true< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > Fetch instance configuration values.< / p >
< aside class = "notice" >
Standard rate-limiting applies
< / aside >
< h3 id = 'http-request' > HTTP Request< / h3 >
< p > < code > GET https://goscrobble.com/api/v1/config< / code > < / p >
< h2 id = 'post-v1-config' > POST v1/config< / h2 >
< blockquote >
< p > Update a configuration parameter:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight shell tab-shell" > < code > curl < span class = "s2" > "https://goscrobble.com/api/v1/config"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Content-Type: application/json"< / span > < span class = "se" > \< / span >
< span class = "nt" > -H< / span > < span class = "s2" > "Authorization: Bearer eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ZmFsc2UsImVtYWlsIjoidGVzdEB0ZXN0LmNvbSIsImV4cCI6MTY0MTAwMjUxOSwiaWF0IjoxNjQwMzk3NzE5LCJtb2QiOnRydWUsI"< / span > < span class = "se" > \< / span >
< span class = "nt" > -X< / span > POST < span class = "se" > \< / span >
< span class = "nt" > --data< / span > < span class = "s1" > '{"SPOTIFY_API_ID":"notarealapikey","SPOTIFY_API_SECRET":"notarealsecret"}'< / span >
< / code > < / pre > < / div >
< blockquote >
< p > Response:< / p >
< / blockquote >
< div class = "highlight" > < pre class = "highlight json tab-json" > < code > < span class = "p" > {< / span > < span class = "w" >
< / span > < span class = "nl" > "message"< / span > < span class = "p" > :< / span > < span class = "w" > < / span > < span class = "s2" > "Config updated successfully"< / span > < span class = "w" >
< / span > < span class = "p" > }< / span > < span class = "w" >
< / span > < / code > < / pre > < / div >
< p > Updates instance configuration values.< / p >
< aside class = "notice" >
Standard rate-limiting applies
< / aside >
< h3 id = 'http-request-2' > HTTP Request< / h3 >
< p > < code > POST https://goscrobble.com/api/v1/config< / code > < / p >
< h3 id = 'query-parameters' > Query Parameters< / h3 >
< table > < thead >
< tr >
< th > Parameter< / th >
< th > Required< / th >
< th > Description< / th >
< / tr >
< / thead > < tbody >
< tr >
< td > key< / td >
< td > true< / td >
< td > Array of key/value pairs to update. See example.< / td >
< / tr >
2021-12-25 02:38:42 +00:00
< / tbody > < / table >
< / div >
< div class = "dark-box" >
< div class = "lang-selector" >
< a href = "#" data-language-name = "shell" > shell< / a >
< / div >
< / div >
< / div >
< / body >
< / html >