├── .github └── ISSUE_TEMPLATE.md ├── README.md └── specifications └── raml ├── api.raml ├── examples ├── delete-playlist-tracks.json ├── ids.json ├── post-playlist.json ├── put-playlist-followers.json ├── put-playlist-tracks.json └── put-playlist.json └── schemas ├── album-simple-page.json ├── album-simple.json ├── album-track-page.json ├── album.json ├── artist-simple.json ├── artist.json ├── category-page.json ├── category.json ├── current-user-profile.json ├── delete-playlist-tracks.json ├── featured-playlists.json ├── followers.json ├── image.json ├── playlist-simple-page.json ├── playlist-simple.json ├── playlist-snapshot.json ├── playlist-track-page.json ├── playlist-track.json ├── playlist.json ├── post-playlist.json ├── put-playlist-tracks.json ├── put-playlist.json ├── saved-track-page.json ├── saved-track.json ├── search.json ├── track-simple-page.json ├── track-simple.json ├── track.json ├── user-followed.json └── user-profile.json /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | Issue found on February 19th 2015. 12 | 13 | #### Endpoint(s): 14 | * `GET /v1/users/{user_id}` 15 | 16 | #### Scope(s): 17 | * None (application is not using authentication) 18 | 19 | #### Steps to reproduce: 20 | 1. Open the API Console 21 | 2. Call the `get-users-profile` endpoint with `user_id` `%5E` 22 | 23 | #### Expected behaviour: 24 | A public user object as described on `https://developer.spotify.com/web-api/object-model/#user-object-public`. 25 | 26 | #### Actual behaviour: 27 | 500 Server Error (consistently) 28 | 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | We've moved! Visit the [Spotify for Developers community forum](https://community.spotify.com/t5/Spotify-for-Developers/bd-p/Spotify_Developer) to find help with the Web API. -------------------------------------------------------------------------------- /specifications/raml/api.raml: -------------------------------------------------------------------------------- 1 | #%RAML 0.8 2 | title: Spotify Web API 3 | version: v1 4 | baseUri: https://api.spotify.com/{version} 5 | mediaType: application/json 6 | documentation: 7 | - title: Spotify Web API Docs 8 | content: | 9 | Welcome to the _Spotify Web API_ specification. For more information about 10 | how to use the API, check out [Spotify's developer site](https://developer.spotify.com/web-api/). 11 | schemas: 12 | - Playlist: !include schemas/playlist.json 13 | resourceTypes: 14 | - base: 15 | get?: &common 16 | headers: 17 | Accept: 18 | description: Is used to set specified media type. 19 | type: string 20 | responses: 21 | 429: 22 | description: | 23 | API rate limit exceeded. See http://developer.spotify.com/web-api/user-guide/#rate-limiting for details. 24 | post?: *common 25 | - item: 26 | type: base 27 | get?: 28 | - collection: 29 | type: base 30 | get?: 31 | securitySchemes: 32 | - oauth_2_0: 33 | description: | 34 | Spotify supports OAuth 2.0 for authenticating all API requests. 35 | type: OAuth 2.0 36 | describedBy: 37 | headers: 38 | Authorization: 39 | description: | 40 | Used to send a valid OAuth 2 access token. 41 | type: string 42 | responses: 43 | 401: 44 | description: | 45 | Bad or expired token. This can happen if the user revoked a token or 46 | the access token has expired. You should re-authenticate the user. 47 | 403: 48 | description: | 49 | Bad OAuth request (wrong consumer key, bad nonce, expired 50 | timestamp...). Unfortunately, re-authenticating the user won't help here. 51 | settings: 52 | authorizationUri: https://accounts.spotify.com/authorize 53 | accessTokenUri: https://accounts.spotify.com/api/token 54 | authorizationGrants: [ code, token ] 55 | scopes: 56 | - "playlist-read-private" 57 | - "playlist-read-collaborative" 58 | - "playlist-modify-public" 59 | - "playlist-modify-private" 60 | - "user-library-read" 61 | - "user-library-modify" 62 | - "user-read-private" 63 | - "user-read-birthdate" 64 | - "user-read-email" 65 | - "user-follow-read" 66 | - "user-follow-modify" 67 | - "user-top-read" 68 | traits: 69 | - filterable: 70 | queryParameters: 71 | fields: 72 | description: A comma-separated list of fields to filter query 73 | type: string 74 | example: items(added_by.id,track(name,href,album(name,href))) 75 | displayName: Fields 76 | - paged: 77 | queryParameters: 78 | limit: 79 | displayName: Limit 80 | description: The maximum number of track objects to return 81 | type: integer 82 | example: 10 83 | minimum: 0 84 | default: 20 85 | maximum: 50 86 | required: false 87 | offset: 88 | displayName: Offset 89 | description: The index of the first track to return 90 | type: integer 91 | example: 5 92 | default: 0 93 | required: false 94 | /albums: 95 | displayName: several-albums 96 | get: 97 | description: | 98 | [Get Several Albums](https://developer.spotify.com/web-api/get-several-albums/) 99 | securedBy: [ null, oauth_2_0: { scopes: []}] 100 | queryParameters: 101 | ids: 102 | displayName: Spotify Album IDs 103 | type: string 104 | description: A comma-separated list of IDs 105 | required: true 106 | example: "382ObEPsp2rxGrnsizN5TX,1A2GTWGtFfWp7KSQTwWOyo,2noRn2Aes5aoNVsU6iWThc" 107 | market: 108 | displayName: Market 109 | description: The market (an ISO 3166-1 alpha-2 country code) 110 | type: string 111 | example: ES 112 | required: false 113 | /{id}: 114 | displayName: album 115 | uriParameters: 116 | id: 117 | displayName: Spotify Album ID 118 | type: string 119 | description: The Spotify ID for the album 120 | example: 4aawyAB9vmqN3uQ7FjRGTy 121 | get: 122 | description: | 123 | [Get an Album](https://developer.spotify.com/web-api/get-album/) 124 | securedBy: [ null, oauth_2_0: { scopes: []}] 125 | queryParameters: 126 | market: 127 | displayName: Market 128 | description: The market (an ISO 3166-1 alpha-2 country code) 129 | type: string 130 | example: ES 131 | required: false 132 | /tracks: 133 | displayName: album-tracks 134 | get: 135 | is: [ paged ] 136 | description: | 137 | [Get an Album's Tracks](https://developer.spotify.com/web-api/get-albums-tracks/) 138 | securedBy: [ null, oauth_2_0: { scopes: []}] 139 | queryParameters: 140 | market: 141 | displayName: Market 142 | description: The market (an ISO 3166-1 alpha-2 country code) 143 | type: string 144 | example: ES 145 | required: false 146 | /artists: 147 | displayName: several-artists 148 | get: 149 | description: | 150 | [Get Several Artists](https://developer.spotify.com/web-api/get-several-artists/) 151 | securedBy: [ null, oauth_2_0: { scopes: []}] 152 | queryParameters: 153 | ids: 154 | displayName: Spotify Artist IDs 155 | type: string 156 | description: A comma-separated list of IDs 157 | required: true 158 | example: '2CIMQHirSU0MQqyYHq0eOx,57dN52uHvrHOxijzpIgu3E,1vCWHaC5f2uS3yhpwWbIA6' 159 | /{id}: 160 | displayName: artist 161 | uriParameters: 162 | id: 163 | displayName: Spotify Artist ID 164 | type: string 165 | description: The Spotify ID for the artist 166 | example: 0TnOYISbd1XYRBk9myaseg 167 | required: true 168 | get: 169 | description: | 170 | [Get an Artist](https://developer.spotify.com/web-api/get-artist/) 171 | securedBy: [ null, oauth_2_0: { scopes: []}] 172 | /top-tracks: 173 | displayName: artist-top-tracks 174 | get: 175 | description: | 176 | [Get an Artist's Top Tracks](https://developer.spotify.com/web-api/get-artists-top-tracks/) 177 | securedBy: [ null, oauth_2_0: { scopes: []}] 178 | queryParameters: 179 | country: 180 | displayName: Country 181 | description: The country (an ISO 3166-1 alpha-2 country code) 182 | type: string 183 | example: ES 184 | required: true 185 | /related-artists: 186 | displayName: artist-related-artists 187 | get: 188 | description: | 189 | [Get an Artist's Related Artists](https://developer.spotify.com/web-api/get-related-artists/) 190 | securedBy: [ null, oauth_2_0: { scopes: []}] 191 | /albums: 192 | displayName: artist-albums 193 | get: 194 | is: [ paged ] 195 | description: | 196 | [Get an Artist's Albums](https://developer.spotify.com/web-api/get-artists-albums/) 197 | securedBy: [ null, oauth_2_0: { scopes: []}] 198 | queryParameters: 199 | album_type: 200 | displayName: Album Type (single, album, appears_on, compilation) 201 | description: Filter by album types 202 | type: string 203 | required: false 204 | example: single,album 205 | market: 206 | displayName: Market 207 | description: The market (an ISO 3166-1 alpha-2 country code) 208 | type: string 209 | example: ES 210 | required: false 211 | /tracks: 212 | displayName: several-tracks 213 | get: 214 | description: | 215 | [Get Several Tracks](https://developer.spotify.com/web-api/get-several-tracks/) 216 | securedBy: [ null, oauth_2_0: { scopes: []}] 217 | queryParameters: 218 | ids: 219 | displayName: Spotify Track IDs 220 | type: string 221 | description: A comma-separated list of IDs 222 | required: true 223 | example: '7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B' 224 | market: 225 | displayName: Market 226 | description: The market (an ISO 3166-1 alpha-2 country code) 227 | type: string 228 | example: ES 229 | required: false 230 | /{id}: 231 | displayName: track 232 | uriParameters: 233 | id: 234 | type: string 235 | displayName: Spotify Track ID 236 | example: 1zHlj4dQ8ZAtrayhuDDmkY 237 | get: 238 | description: | 239 | [Get a Track](https://developer.spotify.com/web-api/get-track/) 240 | securedBy: [ null, oauth_2_0: { scopes: []}] 241 | queryParameters: 242 | market: 243 | displayName: Market 244 | description: The market (an ISO 3166-1 alpha-2 country code) 245 | type: string 246 | example: ES 247 | required: false 248 | /search: 249 | displayName: search-item 250 | get: 251 | is: [ paged ] 252 | description: | 253 | [Search for an Item](https://developer.spotify.com/web-api/search-item/) 254 | securedBy: [ null, oauth_2_0: { scopes: []}] 255 | queryParameters: 256 | q: 257 | displayName: Query 258 | type: string 259 | description: "The search query's keywords (and optional field filters). The search is not case-sensitive: 'roadhouse' will match 'Roadhouse', 'roadHouse', etc. Keywords will be matched in any order unless surrounded by quotes, thus q=roadhouse&20blues will match both 'Blues Roadhouse' and 'Roadhouse of the Blues'. Quotation marks can be used to limit the match to a phrase: q=roadhouse&20blues will match 'My Roadhouse Blues' but not 'Roadhouse of the Blues'. By default, results are returned when a match is found in any field of the target object type. Searches can be made more specific by specifying an album, artist or track field filter. For example q=album:gold%20artist:abba&type=album will search for albums with the text 'gold' in the album name and the text 'abba' in an artist name. Other possible field filters, depending on object types being searched, include year, genre, upc, and isrc. For example, q=damian%20genre:reggae-pop&type=artist. The asterisk (*) character can, with some limitations, be used as a wildcard (maximum: 2 per query). It will match a variable number of non-white-space characters. It cannot be used in a quoted phrase, in a field filter, or as the first character of the keyword string. Searching for playlists will return results matching the playlist's name and/or description." 260 | example: Muse 261 | required: true 262 | type: 263 | displayName: Item Type (album, artist, track, playlist) 264 | description: A comma-separated list of item types to search across. Search results will include hits from all the specified item types; for example q=name:abacab&type=album,track will return both albums and tracks with "abacab" in their name. 265 | type: string 266 | example: track,artist 267 | required: true 268 | market: 269 | displayName: Market 270 | type: string 271 | description: The market (an ISO 3166-1 alpha-2 country code). If given, only items with content playable in that market will be returned. 272 | example: 'US' 273 | /me: 274 | displayName: current-user 275 | securedBy: [ oauth_2_0: {scopes: ['user-read-private', 'user-read-birthdate', 'user-read-email']} ] 276 | get: 277 | description: | 278 | [Get Current User's Profile](https://developer.spotify.com/web-api/get-current-users-profile/) 279 | /playlists: 280 | displayName: current-user-playlists 281 | type: collection 282 | get: 283 | is: [ paged ] 284 | description: | 285 | [Get a List of Current User's Playlists](https://developer.spotify.com/web-api/get-a-list-of-current-users-playlists/) 286 | securedBy: [ oauth_2_0: {scopes: ['playlist-read-private']}] 287 | responses: 288 | 200: 289 | body: 290 | application/json: 291 | schema: | 292 | { 293 | "$schema": "http://json-schema.org/draft-03/schema", 294 | "type": "array", 295 | "items": { 296 | "$ref": "schemas/playlist.json" 297 | } 298 | } 299 | /albums: 300 | displayName: current-user-saved-albums 301 | type: collection 302 | get: 303 | is: [ paged ] 304 | description: | 305 | [Get Current User's Saved Albums](https://developer.spotify.com/web-api/get-users-saved-albums/) 306 | securedBy: [ oauth_2_0: {scopes: ['user-library-read']}] 307 | put: 308 | description: | 309 | [Save Albums for Current User](https://developer.spotify.com/web-api/save-albums-user/) 310 | securedBy: [ oauth_2_0: {scopes: ['user-library-modify']}] 311 | queryParameters: 312 | ids: 313 | displayName: Spotify Album IDs 314 | type: string 315 | description: A comma-separated list of IDs 316 | required: true 317 | example: '07bYtmE3bPsLB6ZbmmFi8d,48JYNjh7GMie6NjqYHMmtT,27cZdqrQiKt3IT00338dws' 318 | delete: 319 | description: | 320 | [Remove Albums for Current User](https://developer.spotify.com/web-api/remove-albums-user/) 321 | securedBy: [ oauth_2_0: {scopes: ['user-library-modify']}] 322 | queryParameters: 323 | ids: 324 | displayName: Spotify Album IDs 325 | type: string 326 | description: A comma-separated list of IDs 327 | required: true 328 | example: '07bYtmE3bPsLB6ZbmmFi8d,48JYNjh7GMie6NjqYHMmtT,27cZdqrQiKt3IT00338dws' 329 | /contains: 330 | displayName: current-user-contains-saved-albums 331 | get: 332 | description: | 333 | [Check Current User's Saved Albums](https://developer.spotify.com/web-api/check-users-saved-albums/) 334 | securedBy: [ oauth_2_0: {scopes: ['user-library-read']}] 335 | queryParameters: 336 | ids: 337 | displayName: Spotify Album IDs 338 | type: string 339 | description: A comma-separated list of IDs 340 | required: true 341 | example: '07bYtmE3bPsLB6ZbmmFi8d,48JYNjh7GMie6NjqYHMmtT,27cZdqrQiKt3IT00338dws' 342 | /tracks: 343 | displayName: current-user-saved-tracks 344 | type: collection 345 | get: 346 | is: [ paged ] 347 | description: | 348 | [Get Current User's Saved Tracks](https://developer.spotify.com/web-api/get-users-saved-tracks/) 349 | securedBy: [ oauth_2_0: {scopes: ['user-library-read']}] 350 | queryParameters: 351 | market: 352 | displayName: Market 353 | description: The market (an ISO 3166-1 alpha-2 country code) 354 | type: string 355 | example: ES 356 | required: false 357 | put: 358 | description: | 359 | [Save Tracks for Current User](https://developer.spotify.com/web-api/save-tracks-user/) 360 | securedBy: [ oauth_2_0: {scopes: ['user-library-modify']}] 361 | queryParameters: 362 | ids: 363 | displayName: Spotify Track IDs 364 | type: string 365 | description: A comma-separated list of IDs 366 | required: true 367 | example: '7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B' 368 | delete: 369 | description: | 370 | [Remove Tracks for Current User](https://developer.spotify.com/web-api/remove-tracks-user/) 371 | securedBy: [ oauth_2_0: {scopes: ['user-library-modify']}] 372 | queryParameters: 373 | ids: 374 | displayName: Spotify Track IDs 375 | type: string 376 | description: A comma-separated list of IDs 377 | required: true 378 | example: '7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B' 379 | /contains: 380 | displayName: current-user-contains-saved-tracks 381 | get: 382 | description: | 383 | [Check Current User's Saved Tracks](https://developer.spotify.com/web-api/check-users-saved-tracks/) 384 | securedBy: [ oauth_2_0: {scopes: ['user-library-read']}] 385 | queryParameters: 386 | ids: 387 | displayName: Spotify Track IDs 388 | type: string 389 | description: A comma-separated list of IDs 390 | required: true 391 | example: '7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B' 392 | /top/{type}: 393 | displayName: current-user-top-artists-and-tracks 394 | uriParameters: 395 | type: 396 | displayName: Type 397 | type: string 398 | description: The type of item. "artists" or "tracks" 399 | example: artists 400 | get: 401 | is: [paged] 402 | description: | 403 | [Get User's Top Artists and Tracks](https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/) 404 | securedBy: [ oauth_2_0: {scopes: ['user-top-read']}] 405 | queryParameters: 406 | time_range: 407 | displayName: Time Range 408 | type: string 409 | description: Over what timeframe are the affinities computed. "long-term", "medium-term" or "short-term" 410 | required: false 411 | default: medium-term 412 | /users/{user_id}: 413 | displayName: users-profile 414 | uriParameters: 415 | user_id: 416 | displayName: User ID 417 | type: string 418 | description: The user's Spotify user ID. 419 | example: smedjan 420 | get: 421 | description: | 422 | [Get a User's Profile](https://developer.spotify.com/web-api/get-users-profile/) 423 | securedBy: [ null, oauth_2_0: { scopes: []}] 424 | /users/{user_id}/playlists: 425 | type: collection 426 | uriParameters: 427 | user_id: 428 | displayName: Owner ID 429 | type: string 430 | description: The user's Spotify user ID. 431 | example: jmperezperez 432 | displayName: playlists 433 | get: 434 | is: [ paged ] 435 | description: | 436 | [Get a List of a User's Playlists](https://developer.spotify.com/web-api/get-list-users-playlists/) 437 | securedBy: [ oauth_2_0: {scopes: ['playlist-read-private', 'playlist-read-collaborative']}] 438 | responses: 439 | 200: 440 | body: 441 | application/json: 442 | schema: | 443 | { 444 | "$schema": "http://json-schema.org/draft-03/schema", 445 | "type": "array", 446 | "items": { 447 | "$ref": "schemas/playlist.json" 448 | } 449 | } 450 | post: 451 | description: | 452 | [Create a Playlist](https://developer.spotify.com/web-api/create-playlist/) 453 | securedBy: [ oauth_2_0: {scopes: ['playlist-modify-public', 'playlist-modify-private']}] 454 | body: 455 | application/json: 456 | schema: !include schemas/post-playlist.json 457 | example: !include examples/post-playlist.json 458 | responses: 459 | 201: 460 | body: 461 | application/json: 462 | schema: Playlist 463 | /{playlist_id}: 464 | type: item 465 | displayName: playlist 466 | uriParameters: 467 | playlist_id: 468 | displayName: Playlist ID 469 | description: The Spotify playlist ID. 470 | example: 3cEYpjA9oz9GiPac4AsH4n 471 | type: string 472 | required: true 473 | get: 474 | description: | 475 | [Get a Playlist](https://developer.spotify.com/web-api/get-playlist/) 476 | securedBy: [ oauth_2_0: { scopes: []}] 477 | is: [ filterable ] 478 | queryParameters: 479 | market: 480 | displayName: Market 481 | description: The market (an ISO 3166-1 alpha-2 country code) 482 | type: string 483 | example: ES 484 | required: false 485 | responses: 486 | 200: 487 | body: 488 | application/json: 489 | schema: Playlist 490 | put: 491 | description: | 492 | [Change a Playlist's Details](https://developer.spotify.com/web-api/change-playlist-details/) 493 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 494 | body: 495 | application/json: 496 | schema: !include schemas/put-playlist.json 497 | example: !include examples/put-playlist.json 498 | /tracks: 499 | type: collection 500 | displayName: playlist-tracks 501 | get: 502 | description: | 503 | [Get a Playlist's Tracks](https://developer.spotify.com/web-api/get-playlists-tracks/) 504 | securedBy: [ oauth_2_0: { scopes: []}] 505 | is: [ filterable, paged ] 506 | queryParameters: 507 | market: 508 | displayName: Market 509 | description: The market (an ISO 3166-1 alpha-2 country code) 510 | type: string 511 | example: ES 512 | required: false 513 | post: 514 | description: | 515 | [Add Tracks to a Playlist](https://developer.spotify.com/web-api/add-tracks-to-playlist/) 516 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 517 | queryParameters: 518 | position: 519 | displayName: Position (append by default) 520 | description: The position to insert the tracks, a zero-based index 521 | example: 0 522 | type: integer 523 | required: false 524 | uris: 525 | displayName: Spotify Track URIs 526 | description: A comma-separated list of Spotify track URIs to add. A maximum of 100 tracks can be added in one request. 527 | type: string 528 | required: true 529 | example: 'spotify:track:4iV5W9uYEdYUVa79Axb7Rh,spotify:track:1301WleyT98MSxVHPZCA6M' 530 | put: 531 | description: | 532 | [Reorder or replace a Playlist's Tracks](https://developer.spotify.com/web-api/reorder-playlists-tracks/) 533 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 534 | body: 535 | application/json: 536 | schema: !include schemas/put-playlist-tracks.json 537 | example: !include examples/put-playlist-tracks.json 538 | delete: 539 | description: | 540 | [Remove Tracks from a Playlist](https://developer.spotify.com/web-api/remove-tracks-playlist/) 541 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 542 | body: 543 | application/json: 544 | schema: !include schemas/delete-playlist-tracks.json 545 | example: !include examples/delete-playlist-tracks.json 546 | /followers: 547 | displayName: playlist-followers 548 | put: 549 | description: | 550 | [Follow a Playlist](https://developer.spotify.com/web-api/follow-playlist/) 551 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 552 | body: 553 | application/json: 554 | schema: | 555 | { 556 | "type": "object", 557 | "$schema": "http://json-schema.org/draft-03/schema", 558 | "id": "http://jsonschema.net", 559 | "required": false, 560 | "properties": { 561 | "public": { 562 | "type": "boolean", 563 | "required": false 564 | } 565 | } 566 | } 567 | example: !include examples/put-playlist-followers.json 568 | delete: 569 | description: | 570 | [Unfollow a Playlist](https://developer.spotify.com/web-api/unfollow-playlist/) 571 | securedBy: [ oauth_2_0: { scopes: ['playlist-modify-public', 'playlist-modify-private']}] 572 | /contains: 573 | displayName: playlist-followers-contains 574 | get: 575 | description: | 576 | [Check if Users Follow a Playlist](https://developer.spotify.com/web-api/check-user-following-playlist/) 577 | securedBy: [ oauth_2_0: { scopes: []}] 578 | queryParameters: 579 | ids: 580 | displayName: Spotify user IDs 581 | type: string 582 | description: A comma-separated list of users ids 583 | required: true 584 | example: 'jmperezperez,thelinmichael,wizzler' 585 | 586 | /browse/new-releases: 587 | displayName: new-releases 588 | type: collection 589 | get: 590 | is: [ paged ] 591 | description: | 592 | [Get a List of New Releases](https://developer.spotify.com/web-api/get-list-new-releases/) 593 | securedBy: [ oauth_2_0: {scopes: []} ] 594 | queryParameters: 595 | country: 596 | displayName: Country 597 | description: The country (an ISO 3166-1 alpha-2 country code) 598 | type: string 599 | example: SE 600 | required: false 601 | /browse/featured-playlists: 602 | displayName: featured-playlists 603 | type: collection 604 | get: 605 | is: [ paged ] 606 | description: | 607 | [Get a List of Featured Playlists](https://developer.spotify.com/web-api/get-list-featured-playlists/) 608 | securedBy: [ oauth_2_0: {scopes: []} ] 609 | queryParameters: 610 | country: 611 | displayName: Country 612 | description: The country (an ISO 3166-1 alpha-2 country code) 613 | type: string 614 | example: SE 615 | required: false 616 | locale: 617 | displayName: Locale 618 | description: | 619 | The desired language, consisting of an ISO 639 language code and an ISO 3166-1 alpha-2 country code, joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)". 620 | type: string 621 | example: sv_SE 622 | required: false 623 | timestamp: 624 | displayName: Timestamp 625 | description: | 626 | A timestamp in ISO 8601 format (yyyy-MM-dd'T'HH:mm:ss) with the user's local time to get results tailored to a specific date and time in the day. If not provided, it defaults to the current UTC time. Example: "2014-10-23T09:00:00" for a user whose local time is 9AM. 627 | type: string 628 | example: '2014-10-23T09:00:00' 629 | required: false 630 | /browse/categories: 631 | displayName: browse-categories 632 | type: collection 633 | get: 634 | description: | 635 | [Get a List of Browse Categories](https://developer.spotify.com/web-api/get-list-categories/) 636 | securedBy: [ oauth_2_0: {scopes: []} ] 637 | queryParameters: 638 | country: 639 | displayName: Country 640 | description: The country (an ISO 3166-1 alpha-2 country code) 641 | type: string 642 | example: SE 643 | required: false 644 | locale: 645 | displayName: Locale 646 | description: | 647 | The desired language, consisting of an ISO 639 language code and an ISO 3166-1 alpha-2 country code, joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)". 648 | type: string 649 | example: sv_SE 650 | required: false 651 | limit: 652 | displayName: Limit 653 | description: The maximum number of category objects to return 654 | type: integer 655 | example: 10 656 | minimum: 0 657 | default: 20 658 | maximum: 50 659 | required: false 660 | offset: 661 | displayName: Offset 662 | description: The index of the first category to return 663 | type: integer 664 | example: 5 665 | default: 0 666 | required: false 667 | /{category_id}: 668 | displayName: browse-category 669 | type: item 670 | uriParameters: 671 | category_id: 672 | displayName: Category ID 673 | type: string 674 | description: The Spotify ID of the category you wish to fetch. 675 | example: dinner 676 | get: 677 | description: | 678 | [Get a Single Browse Category](https://developer.spotify.com/web-api/get-category/) 679 | securedBy: [ oauth_2_0: {scopes: []} ] 680 | queryParameters: 681 | country: 682 | displayName: Country 683 | description: The country (an ISO 3166-1 alpha-2 country code) 684 | type: string 685 | example: SE 686 | required: false 687 | locale: 688 | displayName: Locale 689 | description: | 690 | The desired language, consisting of an ISO 639 language code and an ISO 3166-1 alpha-2 country code, joined by an underscore. For example: es_MX, meaning "Spanish (Mexico)". 691 | type: string 692 | example: sv_SE 693 | required: false 694 | /playlists: 695 | displayName: category-playlists 696 | type: collection 697 | get: 698 | description: | 699 | [Get a Category's playlists](https://developer.spotify.com/web-api/get-categorys-playlists/) 700 | securedBy: [ oauth_2_0: {scopes: []} ] 701 | queryParameters: 702 | country: 703 | displayName: Country 704 | description: The country (an ISO 3166-1 alpha-2 country code) 705 | type: string 706 | example: SE 707 | required: false 708 | limit: 709 | displayName: Limit 710 | description: The maximum number of playlist objects to return 711 | type: integer 712 | example: 10 713 | minimum: 0 714 | default: 20 715 | maximum: 50 716 | required: false 717 | offset: 718 | displayName: Offset 719 | description: The index of the first playlist to return 720 | type: integer 721 | example: 5 722 | default: 0 723 | required: false 724 | /me/following: 725 | displayName: following 726 | get: 727 | description: | 728 | [Get User's Followed Artists](https://developer.spotify.com/web-api/get-followed/) 729 | securedBy: [ oauth_2_0: {scopes: ['user-follow-read']} ] 730 | queryParameters: 731 | type: 732 | displayName: Item Type 733 | description: The type to unfollow (only artist is supported so far). 734 | type: string 735 | example: artist 736 | enum: ["artist"] 737 | required: true 738 | after: 739 | displayName: After 740 | description: The last artist ID retrieved from the previous request. 741 | type: string 742 | example: '0I2XqVXqHScXjHhk6AYYRe' 743 | required: false 744 | limit: 745 | displayName: Limit 746 | description: The maximum number of track objects to return 747 | type: integer 748 | example: 10 749 | minimum: 0 750 | default: 20 751 | maximum: 50 752 | required: false 753 | put: 754 | description: | 755 | [Follow Artists or Users](https://developer.spotify.com/web-api/follow-artists-users/) 756 | securedBy: [ oauth_2_0: {scopes: ['user-follow-modify']} ] 757 | queryParameters: 758 | type: 759 | displayName: Item Type 760 | description: The type to follow. 761 | type: string 762 | example: artist 763 | enum: ["artist", "user"] 764 | required: true 765 | ids: 766 | displayName: Spotify IDs 767 | type: string 768 | description: A comma-separated list of the artists or users ids 769 | required: true 770 | example: '2CIMQHirSU0MQqyYHq0eOx,57dN52uHvrHOxijzpIgu3E,1vCWHaC5f2uS3yhpwWbIA6' 771 | delete: 772 | description: | 773 | [Unfollow Artists or Users](https://developer.spotify.com/web-api/unfollow-artists-users/) 774 | securedBy: [ oauth_2_0: {scopes: ['user-follow-modify']} ] 775 | queryParameters: 776 | type: 777 | displayName: Item Type 778 | description: The type to unfollow. 779 | type: string 780 | example: artist 781 | enum: ["artist", "user"] 782 | required: true 783 | ids: 784 | displayName: Spotify IDs 785 | type: string 786 | description: A comma-separated list of the artists or users ids 787 | required: true 788 | example: '2CIMQHirSU0MQqyYHq0eOx,57dN52uHvrHOxijzpIgu3E,1vCWHaC5f2uS3yhpwWbIA6' 789 | /contains: 790 | displayName: following-contains 791 | get: 792 | description: | 793 | [Check if Current User Follows Artists or Users](https://developer.spotify.com/web-api/check-current-user-follows/) 794 | securedBy: [ oauth_2_0: {scopes: ['user-follow-read']} ] 795 | queryParameters: 796 | type: 797 | displayName: Item Type 798 | description: The type to follow. 799 | type: string 800 | example: artist 801 | enum: ["artist", "user"] 802 | required: true 803 | ids: 804 | displayName: Spotify IDs 805 | description: A comma-separated string of the artists or users ids. 806 | type: string 807 | example: '2CIMQHirSU0MQqyYHq0eOx,57dN52uHvrHOxijzpIgu3E,1vCWHaC5f2uS3yhpwWbIA6' 808 | required: true 809 | /audio-features: 810 | displayName: audio-features-several-tracks 811 | get: 812 | description: | 813 | [Get Audio Features for Several Tracks](https://developer.spotify.com/web-api/get-several-audio-features/) 814 | securedBy: [ oauth_2_0: { scopes: []}] 815 | queryParameters: 816 | ids: 817 | displayName: Spotify Track IDs 818 | type: string 819 | description: A comma-separated list of IDs 820 | required: true 821 | example: '7ouMYWpwJ422jRcDASZB7P,4VqPOruhp5EdPBeR92t6lQ,2takcwOaAZWiXQijPHIx7B' 822 | /{id}: 823 | displayName: audio-features-track 824 | uriParameters: 825 | id: 826 | type: string 827 | displayName: Spotify Track ID 828 | example: 1zHlj4dQ8ZAtrayhuDDmkY 829 | get: 830 | description: | 831 | [Get Audio Features for a Track](https://developer.spotify.com/web-api/get-audio-features/) 832 | securedBy: [ oauth_2_0: { scopes: []}] 833 | /audio-analysis/{id}: 834 | displayName: audio-analysis-track 835 | uriParameters: 836 | id: 837 | type: string 838 | displayName: Spotify Track ID 839 | example: 1zHlj4dQ8ZAtrayhuDDmkY 840 | get: 841 | description: | 842 | [Get Audio Analysis for a Track](https://developer.spotify.com/web-api/get-audio-analysis/) 843 | securedBy: [ oauth_2_0: { scopes: []}] 844 | /recommendations: 845 | displayName: recommendations 846 | get: 847 | description: | 848 | [Get Recommendations Based on Seeds](https://developer.spotify.com/web-api/get-recommendations/) 849 | securedBy: [ oauth_2_0: { scopes: []}] 850 | queryParameters: 851 | limit: 852 | type: integer 853 | example: 10 854 | minimum: 1 855 | default: 20 856 | maximum: 100 857 | required: false 858 | displayName: Limit 859 | description: The target size of the list of recommended tracks. For seeds with unusually small pools or when highly restrictive filtering is applied, it may be impossible to generate the requested number of recommended tracks. Debugging information for such cases is available in the response. 860 | market: 861 | displayName: Market 862 | description: The market (an ISO 3166-1 alpha-2 country code). Because min_*, max_* and target_* are applied to pools before relinking, the generated results may not precisely match the filters applied. Original, non-relinked tracks are available via the linked_from attribute of the relinked track response. 863 | type: string 864 | example: ES 865 | required: false 866 | seed_artists: 867 | displayName: Spotify Artist ID Seeds 868 | type: string 869 | description: A comma-separated list of Spotify Artist IDs 870 | required: false 871 | example: '4NHQUGzhtTLFvgF5SZesLK' 872 | seed_genres: 873 | displayName: Genres Seeds 874 | type: string 875 | description: A comma separated list of genres. See the endpoint for fetching the list of genres. 876 | required: false 877 | example: 'classical,country' 878 | seed_tracks: 879 | displayName: Spotify Track ID Seeds 880 | type: string 881 | description: A comma-separated list of Spotify Track IDs 882 | required: false 883 | example: '0c6xIDDpzE81m2q797ordA' 884 | min_acousticness: 885 | displayName: Min. Acousticness 886 | type: number 887 | description: Minimum acousticness 888 | required: false 889 | minimum: 0 890 | maximum: 1 891 | max_acousticness: 892 | displayName: Max. Acousticness 893 | type: number 894 | description: Maximum acousticness 895 | required: false 896 | minimum: 0 897 | maximum: 1 898 | target_acousticness: 899 | displayName: Target Acousticness 900 | type: number 901 | description: Target acousticness 902 | required: false 903 | minimum: 0 904 | maximum: 1 905 | min_danceability: 906 | displayName: Min. Danceability 907 | type: number 908 | description: Minimum danceability 909 | required: false 910 | minimum: 0 911 | maximum: 1 912 | max_danceability: 913 | displayName: Max. Danceability 914 | type: number 915 | description: Maximum danceability 916 | required: false 917 | minimum: 0 918 | maximum: 1 919 | target_danceability: 920 | displayName: Target Danceability 921 | type: number 922 | description: Target danceability 923 | required: false 924 | minimum: 0 925 | maximum: 1 926 | min_duration_ms: 927 | displayName: Min. Duration (ms) 928 | type: integer 929 | description: Minimum duration of the track (ms) 930 | required: false 931 | max_duration_ms: 932 | displayName: Max. Duration (ms) 933 | type: integer 934 | description: Maximum duration of the track (ms) 935 | required: false 936 | target_duration_ms: 937 | displayName: Target Duration (ms) 938 | type: integer 939 | description: Target duration of the track (ms) 940 | required: false 941 | min_energy: 942 | displayName: Min. Energy 943 | type: number 944 | description: Minimum energy 945 | required: false 946 | minimum: 0 947 | maximum: 1 948 | max_energy: 949 | displayName: Max. Energy 950 | type: number 951 | description: Maximum energy 952 | required: false 953 | minimum: 0 954 | maximum: 1 955 | target_energy: 956 | displayName: Target Energy 957 | type: number 958 | description: Target energy 959 | required: false 960 | minimum: 0 961 | maximum: 1 962 | min_instrumentalness: 963 | displayName: Min. Instrumentalness 964 | type: number 965 | description: Minimum instrumentalness 966 | required: false 967 | minimum: 0 968 | maximum: 1 969 | max_instrumentalness: 970 | displayName: Max. Instrumentalness 971 | type: number 972 | description: Maximum instrumentalness 973 | required: false 974 | minimum: 0 975 | maximum: 1 976 | target_instrumentalness: 977 | displayName: Target Instrumentalness 978 | type: number 979 | description: Target instrumentalness 980 | required: false 981 | minimum: 0 982 | maximum: 1 983 | min_key: 984 | displayName: Min. Key 985 | type: integer 986 | description: Minimum key 987 | required: false 988 | minimum: 0 989 | maximum: 11 990 | max_key: 991 | displayName: Max. Key 992 | type: integer 993 | description: Maximum key 994 | required: false 995 | minimum: 0 996 | maximum: 11 997 | target_key: 998 | displayName: Target Key 999 | type: integer 1000 | description: Target key 1001 | required: false 1002 | minimum: 0 1003 | maximum: 11 1004 | min_liveness: 1005 | displayName: Min. Liveness 1006 | type: number 1007 | description: Minimum liveness 1008 | required: false 1009 | minimum: 0 1010 | maximum: 1 1011 | max_liveness: 1012 | displayName: Max. Liveness 1013 | type: number 1014 | description: Maximum liveness 1015 | required: false 1016 | minimum: 0 1017 | maximum: 1 1018 | target_liveness: 1019 | displayName: Target Liveness 1020 | type: number 1021 | description: Target liveness 1022 | required: false 1023 | minimum: 0 1024 | maximum: 1 1025 | min_loudness: 1026 | displayName: Min. Loudness 1027 | type: number 1028 | description: Minimum loudness 1029 | required: false 1030 | max_loudness: 1031 | displayName: Max. Loudness 1032 | type: number 1033 | description: Maximum loudness 1034 | required: false 1035 | target_loudness: 1036 | displayName: Target Loudness 1037 | type: number 1038 | description: Target loudness 1039 | required: false 1040 | min_mode: 1041 | displayName: Min. Mode 1042 | type: integer 1043 | description: Minimum mode (Major is represented by 1 and minor is 0) 1044 | required: false 1045 | minimum: 0 1046 | maximum: 1 1047 | max_mode: 1048 | displayName: Max. Mode 1049 | type: integer 1050 | description: Maximum mode (Major is represented by 1 and minor is 0) 1051 | required: false 1052 | minimum: 0 1053 | maximum: 1 1054 | target_mode: 1055 | displayName: Target Mode 1056 | type: integer 1057 | description: Target mode (Major is represented by 1 and minor is 0) 1058 | required: false 1059 | minimum: 0 1060 | maximum: 1 1061 | min_popularity: 1062 | displayName: Min. Popularity 1063 | type: integer 1064 | description: Minimum popularity 1065 | required: false 1066 | minimum: 0 1067 | maximum: 100 1068 | max_popularity: 1069 | displayName: Max. Popularity 1070 | type: integer 1071 | description: Maximum popularity 1072 | required: false 1073 | minimum: 0 1074 | maximum: 100 1075 | target_popularity: 1076 | displayName: Target Popularity 1077 | type: integer 1078 | description: Target popularity 1079 | required: false 1080 | minimum: 0 1081 | maximum: 100 1082 | min_speechiness: 1083 | displayName: Min. Speechiness 1084 | type: number 1085 | description: Minimum speechiness 1086 | required: false 1087 | minimum: 0 1088 | maximum: 1 1089 | max_speechiness: 1090 | displayName: Max. Speechiness 1091 | type: number 1092 | description: Maximum speechiness 1093 | required: false 1094 | minimum: 0 1095 | maximum: 1 1096 | target_speechiness: 1097 | displayName: Target Speechiness 1098 | type: number 1099 | description: Target speechiness 1100 | required: false 1101 | minimum: 0 1102 | maximum: 1 1103 | min_tempo: 1104 | displayName: Min. Tempo 1105 | type: number 1106 | description: Minimum tempo (BPM) 1107 | required: false 1108 | max_tempo: 1109 | displayName: Max. Tempo 1110 | type: number 1111 | description: Maximum tempo (BPM) 1112 | required: false 1113 | target_tempo: 1114 | displayName: Target Tempo 1115 | type: number 1116 | description: Target tempo (BPM) 1117 | required: false 1118 | min_time_signature: 1119 | displayName: Min. Time Signature 1120 | type: integer 1121 | description: Minimum time signature 1122 | required: false 1123 | maximum: 11 1124 | max_time_signature: 1125 | displayName: Max. Time Signature 1126 | type: integer 1127 | description: Maximum time signature 1128 | required: false 1129 | target_time_signature: 1130 | displayName: Target Time Signature 1131 | type: integer 1132 | description: Target time signature 1133 | required: false 1134 | min_valence: 1135 | displayName: Min. Valence 1136 | type: number 1137 | description: Minimum valence 1138 | required: false 1139 | minimum: 0 1140 | maximum: 1 1141 | max_valence: 1142 | displayName: Max. Valence 1143 | type: number 1144 | description: Maximum valence 1145 | required: false 1146 | minimum: 0 1147 | maximum: 1 1148 | target_valence: 1149 | displayName: Target Valence 1150 | type: number 1151 | description: Target valence 1152 | required: false 1153 | minimum: 0 1154 | maximum: 1 1155 | /available-genre-seeds: 1156 | displayName: available-genre-seeds 1157 | get: 1158 | description: | 1159 | [Get Available Genre Seeds](https://developer.spotify.com/web-api/get-recommendations/#available-genre-seeds) 1160 | securedBy: [ oauth_2_0: { scopes: []}] 1161 | 1162 | -------------------------------------------------------------------------------- /specifications/raml/examples/delete-playlist-tracks.json: -------------------------------------------------------------------------------- 1 | { 2 | "tracks": [ 3 | { 4 | "uri": "spotify:track:2DB2zVP1LVu6jjyrvqD44z", 5 | "positions": [0]}, 6 | { 7 | "uri": "spotify:track:5ejwTEOCsaDEjvhZTcU6lg", 8 | "positions": [1] 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /specifications/raml/examples/ids.json: -------------------------------------------------------------------------------- 1 | { 2 | "ids" : ["06HL4z0CvFAxyc27GXpf02", "4CvTDPKA6W06DRfBnZKrau"] 3 | } -------------------------------------------------------------------------------- /specifications/raml/examples/post-playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "New Playlist", 3 | "public": false 4 | } 5 | -------------------------------------------------------------------------------- /specifications/raml/examples/put-playlist-followers.json: -------------------------------------------------------------------------------- 1 | { 2 | "public": false 3 | } 4 | -------------------------------------------------------------------------------- /specifications/raml/examples/put-playlist-tracks.json: -------------------------------------------------------------------------------- 1 | { 2 | "range_start": 1, 3 | "range_length": 2, 4 | "insert_before": 3 5 | } 6 | -------------------------------------------------------------------------------- /specifications/raml/examples/put-playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Updated Playlist Name", 3 | "public": false 4 | } 5 | -------------------------------------------------------------------------------- /specifications/raml/schemas/album-simple-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "album-simple" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/album-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "album_type": { 6 | "type": "string", 7 | "description": "The type of the album: one of 'album', 'single', or 'compilation'." 8 | }, 9 | "available_markets": { 10 | "type": "array", 11 | "description": "The markets in which the album is available: ISO 3166-1 alpha-2 country codes. Note that an album is considered available in a market when at least 1 of its tracks is available in that market.", 12 | "items": { 13 | "type": "string" 14 | } 15 | }, 16 | "external_urls": { 17 | "type": "object", 18 | "description": "Known external URLs for this album.", 19 | "properties": { 20 | "": [{ 21 | "type": "string", 22 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 23 | }] 24 | } 25 | }, 26 | "href": { 27 | "type": "string", 28 | "description": "A link to the Web API endpoint providing full details of the album." 29 | }, 30 | "id": { 31 | "type": "string", 32 | "description": "The Spotify ID for the album." 33 | }, 34 | "images": { 35 | "type": "array", 36 | "description": "The cover art for the album in various sizes, widest first.", 37 | "items": { "$ref": "image" } 38 | }, 39 | "name": { 40 | "type": "string", 41 | "description": "The name of the album." 42 | }, 43 | "type": { 44 | "type": "string", 45 | "description": "The object type: 'album'." 46 | }, 47 | "uri": { 48 | "type": "string", 49 | "description": "The Spotify URI for the album." 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /specifications/raml/schemas/album-track-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "track-simple" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/album.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "album_type": { 6 | "type": "string", 7 | "description": "The type of the album: one of 'album', 'single', or 'compilation'." 8 | }, 9 | "artists": [ 10 | { 11 | "type": "array", 12 | "description": "The artists of the album. Each artist object includes a link in href to more detailed information about the artist.", 13 | "items": { "$ref": "artist" } 14 | } 15 | ], 16 | "available_markets": { 17 | "type": "array", 18 | "description": "The markets in which the album is available: ISO 3166-1 alpha-2 country codes. Note that an album is considered available in a market when at least 1 of its tracks is available in that market.", 19 | "items": { 20 | "type": "string" 21 | } 22 | }, 23 | "copyrights": { 24 | "type": "array", 25 | "description": "The copyright statements of the album.", 26 | "items": { 27 | "type": "object", 28 | "properties": { 29 | "text": { 30 | "type": "string", 31 | "description": "The copyright text for this album." 32 | }, 33 | "type": { 34 | "type": "string", 35 | "description": "The type of copyright: C = the copyright, P = the sound recording (performance) copyright." 36 | } 37 | } 38 | } 39 | }, 40 | "external_ids": { 41 | "type": "object", 42 | "description": "Known external IDs for this album.", 43 | "properties": { 44 | "": [{ 45 | "type": "string", 46 | "description": "The identifier type, for example: 'isrc' - International Standard Recording Code, 'ean' - International Article Number, 'upc' - Universal Product Code" 47 | }] 48 | } 49 | }, 50 | "external_urls": { 51 | "type": "object", 52 | "description": "Known external URLs for this album.", 53 | "properties": { 54 | "": [{ 55 | "type": "string", 56 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 57 | }] 58 | } 59 | }, 60 | "genres": { 61 | "type": "array", 62 | "description": "A list of the genres used to classify the album. For example: 'Prog Rock', 'Post-Grunge'. (If not yet classified, the array is empty.)", 63 | "items": { 64 | "type": "string" 65 | } 66 | }, 67 | "href": { 68 | "type": "string", 69 | "description": "A link to the Web API endpoint providing full details of the album." 70 | }, 71 | "id": { 72 | "type": "string", 73 | "description": "The Spotify ID for the album." 74 | }, 75 | "images": { 76 | "type": "array", 77 | "description": "The cover art for the album in various sizes, widest first.", 78 | "items": { "$ref": "image" } 79 | }, 80 | "name": { 81 | "type": "string", 82 | "description": "The name of the album." 83 | }, 84 | "popularity": { 85 | "type": "integer", 86 | "description": "The popularity of the album. The value will be between 0 and 100, with 100 being the most popular. The popularity is calculated from the popularity of the album's individual tracks." 87 | }, 88 | "release_date": { 89 | "type": "string", 90 | "description": "The date the album was first released, for example '1981-12-15'. Depending on the precision, it might be shown as '1981' or '1981-12'." 91 | }, 92 | "release_date_precision": { 93 | "type": "string", 94 | "description": "The precision with which release_date value is known: 'year', 'month', or 'day'." 95 | }, 96 | "tracks": { 97 | "$ref": "track-simple-page" 98 | }, 99 | "type": { 100 | "type": "string", 101 | "description": "The object type: 'album'." 102 | }, 103 | "uri": { 104 | "type": "string", 105 | "description": "The Spotify URI for the album." 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /specifications/raml/schemas/artist-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "external_urls": { 6 | "type": "object", 7 | "description": "Known external URLs for this artist.", 8 | "": [{ 9 | "type": "string" 10 | }] 11 | }, 12 | "href": { 13 | "type": "string", 14 | "description": "A link to the Web API endpoint providing full details of the artist." 15 | }, 16 | "id": { 17 | "type": "string", 18 | "description": "The Spotify ID for the artist." 19 | }, 20 | "name": { 21 | "type": "string", 22 | "description": "The name of the artist." 23 | }, 24 | "type": { 25 | "type": "string", 26 | "description": "The object type: 'artist'" 27 | }, 28 | "uri": { 29 | "type": "string", 30 | "description": "The Spotify URI for the artist." 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /specifications/raml/schemas/artist.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "external_urls": { 6 | "type": "object", 7 | "description": "Known external URLs for this artist.", 8 | "": [{ 9 | "type": "string" 10 | }] 11 | }, 12 | "followers": { "$ref": "followers" }, 13 | "genres": { 14 | "type": "array", 15 | "description": "A list of the genres the artist is associated with. For example: 'Prog Rock', 'Post-Grunge'. (If not yet classified, the array is empty.)", 16 | "items": { 17 | "type": "string" 18 | } 19 | }, 20 | "href": { 21 | "type": "string", 22 | "description": "A link to the Web API endpoint providing full details of the artist." 23 | }, 24 | "id": { 25 | "type": "string", 26 | "description": "The Spotify ID for the artist." 27 | }, 28 | "images": { 29 | "type": "array", 30 | "description": "Images of the artist in various sizes, widest first.", 31 | "items": { 32 | "$ref": "image" 33 | } 34 | }, 35 | "name": { 36 | "type": "string", 37 | "description": "The name of the artist." 38 | }, 39 | "popularity": { 40 | "type": "integer", 41 | "description": "The popularity of the artist. The value will be between 0 and 100, with 100 being the most popular. The artist's popularity is calculated from the popularity of all the artist's tracks." 42 | }, 43 | "type": { 44 | "type": "string", 45 | "description": "The object type: 'artist'" 46 | }, 47 | "uri": { 48 | "type": "string", 49 | "description": "The Spotify URI for the artist." 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /specifications/raml/schemas/category-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "category" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/category.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning full details of the category." 8 | }, 9 | "icons": { 10 | "type": "array", 11 | "items": {"$ref": "image"} 12 | }, 13 | "id": { 14 | "type": "string", 15 | "description": "The Spotify category ID of the category." 16 | }, 17 | "name": { 18 | "type": "string", 19 | "description": "The name of the category." 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /specifications/raml/schemas/current-user-profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "birthdate": { 6 | "type": "string", 7 | "description": "The user's date-of-birth. This field is only available when the current user has granted access to the user-read-birthdate scope." 8 | }, 9 | "country": { 10 | "type": "string", 11 | "description": "The country of the user, as set in the user's account profile. An ISO 3166-1 alpha-2 country code. This field is only available when the current user has granted access to the user-read-private scope." 12 | }, 13 | "displayName": { 14 | "type": "string", 15 | "description": "The name displayed on the user's profile." 16 | }, 17 | "email": { 18 | "type": "string", 19 | "description": "The user's email address, as entered by the user when creating their account. This email address is unverified; there is no proof that it actually belongs to the user. This field is only available when the current user has granted access to the user-read-email scope." 20 | }, 21 | "external_urls": { 22 | "type": "object", 23 | "description": "Known external URLs for this user.", 24 | "": [{ 25 | "type": "string" 26 | }] 27 | }, 28 | "followers": { "$ref": "followers" }, 29 | "href": { 30 | "type": "string", 31 | "description": "A link to the Web API endpoint for this user." 32 | }, 33 | "id": { 34 | "type": "string", 35 | "description": "The Spotify ID for this user." 36 | }, 37 | "product": { 38 | "type": "string", 39 | "description": "The user's Spotify subscription level: 'premium', 'free', etc. (The subscription level 'open' can be considered the same as 'free'.) This field is only available when the current user has granted access to the user-read-private scope." 40 | }, 41 | "type": { 42 | "type": "string", 43 | "description": "The object type: 'user'" 44 | }, 45 | "uri": { 46 | "type": "string", 47 | "description": "The Spotify URI for the user." 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /specifications/raml/schemas/delete-playlist-tracks.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "$schema": "http://json-schema.org/draft-03/schema", 4 | "id": "http://jsonschema.net", 5 | "required": true, 6 | "properties": { 7 | "tracks": { 8 | "type": "array", 9 | "required": true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /specifications/raml/schemas/featured-playlists.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "message": { 6 | "type": "string", 7 | "description": "A sentence describing the context for the featured playlists." 8 | }, 9 | "playlists": { 10 | "$ref": "playlist-simple-page" 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /specifications/raml/schemas/followers.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "description": "Information about the followers of the artist.", 5 | "properties": { 6 | "href": { 7 | "type": "string", 8 | "description": "A link to the Web API endpoint providing full details of the followers; null if not available." 9 | }, 10 | "total": { 11 | "type": "integer", 12 | "description": "The total number of followers." 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /specifications/raml/schemas/image.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "height": { 6 | "type": "integer", 7 | "description": "The image height in pixels. If unknown: null or not returned." 8 | }, 9 | "url": { 10 | "type": "string", 11 | "description": "The source URL of the image." 12 | }, 13 | "width": { 14 | "type": "integer", 15 | "description": "The image width in pixels. If unknown: null or not returned." 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist-simple-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "playlist-simple" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "collaborative": { 6 | "type": "boolean", 7 | "description": "True if the owner allows other users to modify the playlist." 8 | }, 9 | "external_urls": { 10 | "type": "object", 11 | "description": "Known external URLs for this album.", 12 | "properties": { 13 | "": [{ 14 | "type": "string", 15 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 16 | }] 17 | } 18 | }, 19 | "href": { 20 | "type": "string", 21 | "description": "A link to the Web API endpoint providing full details of the playlist." 22 | }, 23 | "id": { 24 | "type": "string", 25 | "description": "The Spotify ID of the playlist." 26 | }, 27 | "images": { 28 | "type": "array", 29 | "description": "The cover art for the album in various sizes, widest first.", 30 | "items": { "$ref": "image" } 31 | }, 32 | "name": { 33 | "type": "string", 34 | "description": "The name of the playlist." 35 | }, 36 | "owner": { "$ref": "user-profile" }, 37 | "public": { 38 | "type": "boolean", 39 | "description": "The playlist's public/private status: true the playlist is public, false the playlist is private, null the playlist status is not relevant. For more about public/private status, see Working with Playlists." 40 | }, 41 | "snapshot_id": { 42 | "type": "string", 43 | "description": "The version identifier for the current playlist. Can be supplied in other requests to target a specific playlist version" 44 | }, 45 | "tracks": { 46 | "type": "object", 47 | "properties": { 48 | "href": { 49 | "type": "string", 50 | "description": "A link to the Web API endpoint returning the full result of the request." 51 | }, 52 | "total": { 53 | "type": "integer", 54 | "description": "The total number of tracks available to return." 55 | } 56 | } 57 | }, 58 | "type": { 59 | "type": "string", 60 | "description": "The object type: 'playlist'." 61 | }, 62 | "uri": { 63 | "type": "string", 64 | "description": "Spotify URI of the playlist." 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist-snapshot.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "snapshot_id": { 6 | "type": "string", 7 | "description": "The version identifier for the modified playlist. Can be supplied in other requests to target a specific playlist version." 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist-track-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "playlist-track" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist-track.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "added_at": { 6 | "type": "string", 7 | "description": "The date and time the track was added in ISO 8601 format. Note that some very old playlists may return null in this field." 8 | }, 9 | "added_by": { "$ref": "user-profile" }, 10 | "is_local": { 11 | "type": "boolean", 12 | "description": "Whether this track is a [local file](https://developer.spotify.com/web-api/local-files-spotify-playlists/) or not." 13 | }, 14 | "track": { "$ref": "track" } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /specifications/raml/schemas/playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "collaborative": { 6 | "type": "boolean", 7 | "description": "True if the owner allows other users to modify the playlist." 8 | }, 9 | "description": { 10 | "type": "string", 11 | "description": "The playlist description. Only returned for modified, verified playlists, otherwise null." 12 | }, 13 | "external_urls": { 14 | "type": "object", 15 | "description": "Known external URLs for this album.", 16 | "properties": { 17 | "": [{ 18 | "type": "string", 19 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 20 | }] 21 | } 22 | }, 23 | "followers": { 24 | "type": "object", 25 | "description": "Information about the followers of the playlist.", 26 | "properties": { 27 | "href": { 28 | "type": "string", 29 | "description": "A link to the Web API endpoint providing full details of the followers; null if not available." 30 | }, 31 | "total": { 32 | "type": "integer", 33 | "description": "The total number of followers." 34 | } 35 | } 36 | }, 37 | "href": { 38 | "type": "string", 39 | "description": "A link to the Web API endpoint providing full details of the playlist." 40 | }, 41 | "id": { 42 | "type": "string", 43 | "description": "The Spotify ID of the playlist." 44 | }, 45 | "images": { 46 | "type": "array", 47 | "description": "The cover art for the album in various sizes, widest first.", 48 | "items": { "$ref": "image" } 49 | }, 50 | "name": { 51 | "type": "string", 52 | "description": "The name of the playlist." 53 | }, 54 | "owner": { "$ref": "user-profile" }, 55 | "public": { 56 | "type": "boolean", 57 | "description": "The playlist's public/private status: true the playlist is public, false the playlist is private, null the playlist status is not relevant. For more about public/private status, see Working with Playlists." 58 | }, 59 | "snapshot_id": { 60 | "type": "string", 61 | "description": "The version identifier for the current playlist. Can be supplied in other requests to target a specific playlist version" 62 | }, 63 | "tracks": { 64 | "$ref": "playlist-track-page" 65 | }, 66 | "type": { 67 | "type": "string", 68 | "description": "The object type: 'playlist'." 69 | }, 70 | "uri": { 71 | "type": "string", 72 | "description": "Spotify URI of the playlist." 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /specifications/raml/schemas/post-playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "$schema": "http://json-schema.org/draft-03/schema", 4 | "id": "http://jsonschema.net", 5 | "required": true, 6 | "properties": { 7 | "name": { 8 | "type": "string", 9 | "required": true 10 | }, 11 | "public": { 12 | "type": "boolean", 13 | "required": false 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /specifications/raml/schemas/put-playlist-tracks.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "$schema": "http://json-schema.org/draft-03/schema", 4 | "id": "http://jsonschema.net", 5 | "required": true, 6 | "properties": { 7 | "uris": { 8 | "type": "array", 9 | "required": true 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /specifications/raml/schemas/put-playlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "$schema": "http://json-schema.org/draft-03/schema", 4 | "id": "http://jsonschema.net", 5 | "required": true, 6 | "properties": { 7 | "name": { 8 | "type": "string", 9 | "required": false 10 | }, 11 | "public": { 12 | "type": "boolean", 13 | "required": false 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /specifications/raml/schemas/saved-track-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "saved-track" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/saved-track.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "added_at": { 6 | "type": "string", 7 | "description": "The date and time the track was added in ISO 8601 format. Note that some very old playlists may return null in this field." 8 | }, 9 | "track": { "$ref": "track" } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /specifications/raml/schemas/search.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "artists": { 6 | "type": "object", 7 | "description": "Present if the type of search includes 'artist'.", 8 | "properties": { 9 | "href": { 10 | "type": "string", 11 | "description": "A link to the Web API endpoint returning the full result of the request." 12 | }, 13 | "items": { 14 | "type": "array", 15 | "description": "The requested data.", 16 | "items": { 17 | "$ref": "artist" 18 | } 19 | }, 20 | "limit": { 21 | "type": "integer", 22 | "description": "The maximum number of items in the response (as set in the query or by default)." 23 | }, 24 | "next": { 25 | "type": "string", 26 | "description": "URL to the next page of items. (null if none)" 27 | }, 28 | "offset": { 29 | "type": "integer", 30 | "description": "The offset of the items returned (as set in the query or by default)." 31 | }, 32 | "previous": { 33 | "type": "string", 34 | "description": "URL to the previous page of items. (null if none)" 35 | }, 36 | "total": { 37 | "type": "integer", 38 | "description": "The total number of items available to return." 39 | } 40 | } 41 | }, 42 | "albums": { 43 | "type": "object", 44 | "description": "Present if the type of search includes 'album'.", 45 | "properties": { 46 | "href": { 47 | "type": "string", 48 | "description": "A link to the Web API endpoint returning the full result of the request." 49 | }, 50 | "items": { 51 | "type": "array", 52 | "description": "The requested data.", 53 | "items": { 54 | "$ref": "album-simple" 55 | } 56 | }, 57 | "limit": { 58 | "type": "integer", 59 | "description": "The maximum number of items in the response (as set in the query or by default)." 60 | }, 61 | "next": { 62 | "type": "string", 63 | "description": "URL to the next page of items. (null if none)" 64 | }, 65 | "offset": { 66 | "type": "integer", 67 | "description": "The offset of the items returned (as set in the query or by default)." 68 | }, 69 | "previous": { 70 | "type": "string", 71 | "description": "URL to the previous page of items. (null if none)" 72 | }, 73 | "total": { 74 | "type": "integer", 75 | "description": "The total number of items available to return." 76 | } 77 | } 78 | }, 79 | "tracks": { 80 | "type": "object", 81 | "description": "Present if the type of search includes 'track'.", 82 | "properties": { 83 | "href": { 84 | "type": "string", 85 | "description": "A link to the Web API endpoint returning the full result of the request." 86 | }, 87 | "items": { 88 | "type": "array", 89 | "description": "The requested data.", 90 | "items": { 91 | "$ref": "track" 92 | } 93 | }, 94 | "limit": { 95 | "type": "integer", 96 | "description": "The maximum number of items in the response (as set in the query or by default)." 97 | }, 98 | "next": { 99 | "type": "string", 100 | "description": "URL to the next page of items. (null if none)" 101 | }, 102 | "offset": { 103 | "type": "integer", 104 | "description": "The offset of the items returned (as set in the query or by default)." 105 | }, 106 | "previous": { 107 | "type": "string", 108 | "description": "URL to the previous page of items. (null if none)" 109 | }, 110 | "total": { 111 | "type": "integer", 112 | "description": "The total number of items available to return." 113 | } 114 | } 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /specifications/raml/schemas/track-simple-page.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "href": { 6 | "type": "string", 7 | "description": "A link to the Web API endpoint returning the full result of the request." 8 | }, 9 | "items": { 10 | "type": "array", 11 | "description": "The requested data.", 12 | "items": { "$ref": "track-simple" } 13 | }, 14 | "limit": { 15 | "type": "integer", 16 | "description": "The maximum number of items in the response (as set in the query or by default)." 17 | }, 18 | "next": { 19 | "type": "string", 20 | "description": "URL to the next page of items. (null if none)" 21 | }, 22 | "offset": { 23 | "type": "integer", 24 | "description": "The offset of the items returned (as set in the query or by default)." 25 | }, 26 | "previous": { 27 | "type": "string", 28 | "description": "URL to the previous page of items. (null if none)" 29 | }, 30 | "total": { 31 | "type": "integer", 32 | "description": "The total number of items available to return." 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /specifications/raml/schemas/track-simple.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "artists": [ 6 | { 7 | "type": "array", 8 | "description": "The artists who performed the track. Each artist object includes a link in href to more detailed information about the artist.", 9 | "items": { "$ref": "artist-simple" } 10 | } 11 | ], 12 | "available_markets": { 13 | "type": "array", 14 | "description": "A list of the countries in which the track can be played, identified by their ISO 3166-1 alpha-2 code. ", 15 | "items": { 16 | "type": "string" 17 | } 18 | }, 19 | "disc_number": { 20 | "type": "integer", 21 | "description": "The disc number (usually 1 unless the album consists of more than one disc)." 22 | }, 23 | "duration_ms": { 24 | "type": "integer", 25 | "description": "The track length in milliseconds." 26 | }, 27 | "explicit": { 28 | "type": "boolean", 29 | "description": "Whether or not the track has explicit lyrics (true = yes it does; false = no it does not OR unknown)." 30 | }, 31 | "external_urls": { 32 | "type": "object", 33 | "description": "Known external URLs for this track.", 34 | "properties": { 35 | "": [{ 36 | "type": "string", 37 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 38 | }] 39 | } 40 | }, 41 | "href": { 42 | "type": "string", 43 | "description": "A link to the Web API endpoint providing full details of the track." 44 | }, 45 | "id": { 46 | "type": "string", 47 | "description": "The Spotify ID for the track." 48 | }, 49 | "is_playable": { 50 | "type": "boolean", 51 | "description": "Part of the response when Track Relinking is applied. If true, the track is playable in the given market. Otherwise false." 52 | }, 53 | "linked_from": { 54 | "type": "object", 55 | "description": "Part of the response when Track Relinking is applied, and the requested track has been replaced with different track. The track in the linked_from object contains information about the originally requested track.", 56 | "properties": { 57 | "external_urls": { 58 | "type": "object", 59 | "description": "Known external URLs for this track.", 60 | "properties": { 61 | "": [{ 62 | "type": "string", 63 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 64 | }] 65 | } 66 | }, 67 | "href": { 68 | "type": "string", 69 | "description": "A link to the Web API endpoint providing full details of the track." 70 | }, 71 | "id": { 72 | "type": "string", 73 | "description": "The Spotify ID for the track." 74 | }, 75 | "type": { 76 | "type": "string", 77 | "description": "The object type: 'track'." 78 | }, 79 | "uri": { 80 | "type": "string", 81 | "description": "The Spotify URI for the track." 82 | } 83 | } 84 | }, 85 | "name": { 86 | "type": "string", 87 | "description": "The name of the track." 88 | }, 89 | "preview_url": { 90 | "type": "string", 91 | "description": "A URL to a 30 second preview (MP3 format) of the track." 92 | }, 93 | "track_number": { 94 | "type": "integer", 95 | "description": "The number of the track. If an album has several discs, the track number is the number on the specified disc." 96 | }, 97 | "type": { 98 | "type": "string", 99 | "description": "The object type: 'track'." 100 | }, 101 | "uri": { 102 | "type": "string", 103 | "description": "The Spotify URI for the track." 104 | } 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /specifications/raml/schemas/track.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "album": { "$ref": "album-simple" }, 6 | "artists": [ 7 | { 8 | "type": "array", 9 | "description": "The artists who performed the track. Each artist object includes a link in href to more detailed information about the artist.", 10 | "items": { "$ref": "artist-simple" } 11 | } 12 | ], 13 | "available_markets": { 14 | "type": "array", 15 | "description": "A list of the countries in which the track can be played, identified by their ISO 3166-1 alpha-2 code. ", 16 | "items": { 17 | "type": "string" 18 | } 19 | }, 20 | "disc_number": { 21 | "type": "integer", 22 | "description": "The disc number (usually 1 unless the album consists of more than one disc)." 23 | }, 24 | "duration_ms": { 25 | "type": "integer", 26 | "description": "The track length in milliseconds." 27 | }, 28 | "explicit": { 29 | "type": "boolean", 30 | "description": "Whether or not the track has explicit lyrics (true = yes it does; false = no it does not OR unknown)." 31 | }, 32 | "external_ids": { 33 | "type": "object", 34 | "description": "Known external IDs for the track.", 35 | "properties": { 36 | "": [{ 37 | "type": "string", 38 | "description": "The identifier type, for example: 'isrc' - International Standard Recording Code, 'ean' - International Article Number, 'upc' - Universal Product Code" 39 | }] 40 | } 41 | }, 42 | "external_urls": { 43 | "type": "object", 44 | "description": "Known external URLs for this track.", 45 | "properties": { 46 | "": [{ 47 | "type": "string", 48 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 49 | }] 50 | } 51 | }, 52 | "href": { 53 | "type": "string", 54 | "description": "A link to the Web API endpoint providing full details of the track." 55 | }, 56 | "id": { 57 | "type": "string", 58 | "description": "The Spotify ID for the track." 59 | }, 60 | "is_playable": { 61 | "type": "boolean", 62 | "description": "Part of the response when Track Relinking is applied. If true, the track is playable in the given market. Otherwise false." 63 | }, 64 | "linked_from": { 65 | "type": "object", 66 | "description": "Part of the response when Track Relinking is applied, and the requested track has been replaced with different track. The track in the linked_from object contains information about the originally requested track.", 67 | "properties": { 68 | "external_urls": { 69 | "type": "object", 70 | "description": "Known external URLs for this track.", 71 | "properties": { 72 | "": [{ 73 | "type": "string", 74 | "description": "The type of the URL, for example: 'spotify' - The Spotify URL for the object." 75 | }] 76 | } 77 | }, 78 | "href": { 79 | "type": "string", 80 | "description": "A link to the Web API endpoint providing full details of the track." 81 | }, 82 | "id": { 83 | "type": "string", 84 | "description": "The Spotify ID for the track." 85 | }, 86 | "type": { 87 | "type": "string", 88 | "description": "The object type: 'track'." 89 | }, 90 | "uri": { 91 | "type": "string", 92 | "description": "The Spotify URI for the track." 93 | } 94 | } 95 | }, 96 | "name": { 97 | "type": "string", 98 | "description": "The name of the track." 99 | }, 100 | "preview_url": { 101 | "type": "string", 102 | "description": "A URL to a 30 second preview (MP3 format) of the track." 103 | }, 104 | "track_number": { 105 | "type": "integer", 106 | "description": "The number of the track. If an album has several discs, the track number is the number on the specified disc." 107 | }, 108 | "type": { 109 | "type": "string", 110 | "description": "The object type: 'track'." 111 | }, 112 | "uri": { 113 | "type": "string", 114 | "description": "The Spotify URI for the track." 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /specifications/raml/schemas/user-followed.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "artists": { 6 | "type": "object", 7 | "description": "Present if the type of followe items is 'artist'.", 8 | "properties": { 9 | "href": { 10 | "type": "string", 11 | "description": "A link to the Web API endpoint returning the full result of the request." 12 | }, 13 | "items": { 14 | "type": "array", 15 | "description": "The requested data.", 16 | "items": { 17 | "$ref": "artist" 18 | } 19 | }, 20 | "limit": { 21 | "type": "integer", 22 | "description": "The maximum number of items in the response (as set in the query or by default)." 23 | }, 24 | "next": { 25 | "type": "string", 26 | "description": "URL to the next page of items. (null if none)" 27 | }, 28 | "cursor": { 29 | "type": "object", 30 | "description": "The cursors used to find the next set of items.", 31 | "properties": { 32 | "after": { 33 | "type": "string", 34 | "description": "The cursor to use as key to find the next page of items." 35 | } 36 | } 37 | }, 38 | "total": { 39 | "type": "integer", 40 | "description": "The total number of items available to return." 41 | } 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /specifications/raml/schemas/user-profile.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-03/schema", 3 | "type": "object", 4 | "properties": { 5 | "displayName": { 6 | "type": "string", 7 | "description": "The name displayed on the user's profile." 8 | }, 9 | "external_urls": { 10 | "type": "object", 11 | "description": "Known external URLs for this user.", 12 | "": [{ 13 | "type": "string" 14 | }] 15 | }, 16 | "followers": { "$ref": "followers" }, 17 | "href": { 18 | "type": "string", 19 | "description": "A link to the Web API endpoint for this user." 20 | }, 21 | "id": { 22 | "type": "string", 23 | "description": "The Spotify ID for this user." 24 | }, 25 | "type": { 26 | "type": "string", 27 | "description": "The object type: 'user'" 28 | }, 29 | "uri": { 30 | "type": "string", 31 | "description": "The Spotify URI for the user." 32 | } 33 | } 34 | } 35 | --------------------------------------------------------------------------------