-
-
Save JBou/0538a57df21a2b3479c152ab7d4601e7 to your computer and use it in GitHub Desktop.
| //Authorization | |
| { ApiCommand.AuthorizationCodeFlow, new Uri("https://soundcloud.com/connect?scope=non-expiring&client_id={0}&response_type={1}&redirect_uri={2}") }, | |
| { ApiCommand.UserAgentFlow, new Uri("https://soundcloud.com/connect?client_id={0}&response_type=token&redirect_uri={1}") }, | |
| { ApiCommand.UserCredentialsFlow, new Uri("https://api.soundcloud.com/oauth2/token?client_id={0}&client_secret={1}&grant_type=password&username={2}&password={3}") }, | |
| { ApiCommand.RefreshToken, new Uri("https://api.soundcloud.com/oauth2/token?client_id={0}&client_secret={1}&grant_type=refresh_token&refresh_token={2}") }, | |
| //Me | |
| { ApiCommand.Me, new Uri("https://api.soundcloud.com/me.json") }, | |
| { ApiCommand.MeTracks, new Uri("https://api.soundcloud.com/me/tracks.json") }, | |
| { ApiCommand.MeComments, new Uri("https://api.soundcloud.com/me/comments.json") }, | |
| { ApiCommand.MeFollowings, new Uri("https://api.soundcloud.com/me/followings.json") }, | |
| { ApiCommand.MeFollowingsContact, new Uri("https://api.soundcloud.com/me/followings/{0}.json") }, | |
| { ApiCommand.MeFollowers, new Uri("https://api.soundcloud.com/me/followers.json") }, | |
| { ApiCommand.MeFollowersContact, new Uri("https://api.soundcloud.com/me/followers/{0}.json") }, | |
| { ApiCommand.MeFavorites, new Uri("https://api.soundcloud.com/me/favorites.json") }, | |
| { ApiCommand.MeFavoritesTrack, new Uri("https://api.soundcloud.com/me/favorites/{0}.json") }, | |
| { ApiCommand.MeGroups, new Uri("https://api.soundcloud.com/me/groups.json") }, | |
| { ApiCommand.MePlaylists, new Uri("https://api.soundcloud.com/me/playlists.json") }, | |
| { ApiCommand.MeConnections, new Uri("https://api.soundcloud.com/me/connections.json") }, | |
| //Users | |
| { ApiCommand.Users, new Uri("https://api.soundcloud.com/users.json") }, | |
| { ApiCommand.User, new Uri("https://api.soundcloud.com/users/{0}.json") }, | |
| { ApiCommand.UserTracks, new Uri("https://api.soundcloud.com/users/{0}/tracks.json") }, | |
| { ApiCommand.UserComments, new Uri("https://api.soundcloud.com/users/{0}/comments.json") }, | |
| { ApiCommand.UserFollowings, new Uri("https://api.soundcloud.com/users/{0}/followings.json") }, | |
| { ApiCommand.UserFollowingsContact, new Uri("https://api.soundcloud.com/users/{0}/followings/{contact_id}.json") }, | |
| { ApiCommand.UserFollowers, new Uri("https://api.soundcloud.com/users/{0}/followers.json") }, | |
| { ApiCommand.UserFollowersContact, new Uri("https://api.soundcloud.com/users/{0}/followers/{1}.json?consumer_key={2}") }, | |
| { ApiCommand.UserFavorites, new Uri("https://api.soundcloud.com/users/{0}/favorites.json?linked_partitioning=1") }, | |
| { ApiCommand.UserFavoritesTrack, new Uri("https://api.soundcloud.com/users/{0}/favorites/{1}.json") }, | |
| { ApiCommand.UserGroups, new Uri("https://api.soundcloud.com/users/{0}/groups.json") }, | |
| { ApiCommand.UserPlaylists, new Uri("https://api.soundcloud.com/users/{0}/playlists.json?linked_partitioning=1") }, | |
| //Tracks | |
| { ApiCommand.Tracks, new Uri("https://api.soundcloud.com/tracks.json") }, | |
| { ApiCommand.Track, new Uri("https://api.soundcloud.com/tracks/{0}.json") }, | |
| { ApiCommand.TrackComments, new Uri("https://api.soundcloud.com/tracks/{0}/comments.json") }, | |
| { ApiCommand.TrackPermissions, new Uri("https://api.soundcloud.com/tracks/{0}/permissions.json") }, | |
| { ApiCommand.TrackSecretToken, new Uri("https://api.soundcloud.com/tracks/{0}/secret-token.json") }, | |
| { ApiCommand.TrackShare, new Uri("https://api.soundcloud.com/tracks/{0}/shared-to/connections") }, | |
| //Comments | |
| { ApiCommand.Comment, new Uri("https://api.soundcloud.com/comments/{0}.json") }, | |
| //Groups | |
| { ApiCommand.Groups, new Uri("https://api.soundcloud.com/groups.json") }, | |
| { ApiCommand.Group, new Uri("https://api.soundcloud.com/groups/{0}.json") }, | |
| { ApiCommand.GroupUsers, new Uri("https://api.soundcloud.com/groups/{0}/users.json") }, | |
| { ApiCommand.GroupModerators, new Uri("https://api.soundcloud.com/groups/{0}/moderators.json") }, | |
| { ApiCommand.GroupMembers, new Uri("https://api.soundcloud.com/groups/{0}/members.json") }, | |
| { ApiCommand.GroupContributors, new Uri("https://api.soundcloud.com/groups/{0}/contributors.json") }, | |
| { ApiCommand.GroupTracks, new Uri("https://api.soundcloud.com/groups/{0}/tracks.json") }, | |
| //Playlists | |
| { ApiCommand.Playlists, new Uri("https://api.soundcloud.com/playlists.json") }, | |
| { ApiCommand.Playlist, new Uri("https://api.soundcloud.com/playlists/{0}.json") }, | |
| //Resolver | |
| { ApiCommand.Resolve, new Uri("https://api.soundcloud.com/resolve.json?url={0}") }, | |
| Soundcloud API V2 | |
| ==================================================== | |
| Get likes and playlists (private & public and all own and liked) without tracklist (oauth needed) | |
| https://api-v2.soundcloud.com/users/23667548/playlists/liked_and_owned?limit=12&client_id=fDoItMDbsbZz8dY16ZzARCZmzgHBPotA&app_version=1484833232&oauth_token= | |
| Get only playlist ids: (I think they don't include private playlists) (oauth needed) | |
| https://api-v2.soundcloud.com/me/playlist_likes/ids?limit=5000&linked_partitioning=1&client_id=fDoItMDbsbZz8dY16ZzARCZmzgHBPotA&app_version=1484833232&oauth_token= | |
| Get playlist by id (followed by the previous request) | |
| https://api-v2.soundcloud.com/playlists/272857198?representation=full&client_id=fDoItMDbsbZz8dY16ZzARCZmzgHBPotA&app_version=1484833232 | |
| Get stream from homepage (oauth needed): | |
| https://api-v2.soundcloud.com/stream?promoted_playlist=true&client_id=fDoItMDbsbZz8dY16ZzARCZmzgHBPotA&limit=10&offset=0&linked_partitioning=1&app_version=1484833232&oauth_token= | |
| Get stream (oauth needed): | |
| https://api.soundcloud.com/e1/me/stream?limit=10&offset=0&linked_partitioning=1&client_id=fDoItMDbsbZz8dY16ZzARCZmzgHBPotA&oauth_token= | |
| Get play-history tracks (right side homepage): | |
| https://api-v2.soundcloud.com/me/play-history/tracks | |
| Get all track likes (right side homepage): | |
| https://api-v2.soundcloud.com/users/23667548/track_likes | |
| Get who to follow (right side homepage): | |
| https://api-v2.soundcloud.com/me/suggested/users/who_to_follow?view=recommended-first | |
| User total plays: | |
| https://api-v2.soundcloud.com/users/soundcloud:users:23667548/stats/totals/plays | |
| Comments: | |
| https://api.soundcloud.com/app/v2/tracks/302492774/comments?filter_replies=1&limit=200&offset=0&linked_partitioning=1 | |
| Liked Playlists: | |
| https://api.soundcloud.com/e1/users/23667548/playlist_likes | |
| Playlists: | |
| https://api.soundcloud.com/users/gabrielpatzleiner/playlists | |
| Playlist: | |
| https://api.soundcloud.com/playlists/26704712.json | |
| Get multiple tracks by id | |
| http://api.soundcloud.com/tracks?ids=123,234,765,456,etc | |
| Soundcloud App.js V2 endpoints taken from https://gist.github.com/JBou/9ed3ee830e04387811bc48fbcadc04fd | |
| =============================================================== | |
| announcement: [i, a, "announcements/:id"], | |
| announcements: [i, a, "announcements"], | |
| app: [i, a, "app/:id"], | |
| appV2TrackComments: [i, a, "app/v2/tracks/:id/comments"], | |
| audioAd: [i, l, "audio-ad"], | |
| charts: [i, l, "charts"], | |
| checkIdentifier: [i, u, "identifier", { | |
| q: null | |
| }], | |
| collectionPlaylists: [i, l, "users/:id/playlists/liked_and_owned"], | |
| comment: [i, l, "comments/:id"], | |
| developerApps: [i, l, "apps"], | |
| playlistLikesIds: [i, l, "me/playlist_likes/ids"], | |
| playlistLikesCreate: [o, l, "users/:userId/playlist_likes/:id"], | |
| playlistLikesDelete: [s, l, "users/:userId/playlist_likes/:id"], | |
| playlistRepostsIds: [i, a, "e1/me/playlist_reposts/ids"], | |
| playlistRepostsCreate: [o, a, "e1/me/playlist_reposts/:id"], | |
| playlistRepostsDelete: [s, a, "e1/me/playlist_reposts/:id"], | |
| soundLikesIds: [i, a, "e1/me/track_likes/ids"], | |
| soundLikesCreate: [o, l, "users/:userId/track_likes/:id"], | |
| soundLikesDelete: [s, l, "users/:userId/track_likes/:id"], | |
| edgePlaylistCategory: [i, a, "e1/playlists/:id/:category"], | |
| edgeTrackCategory: [i, a, "e1/tracks/:id/:category"], | |
| soundReposters: [i, l, "tracks/:id/reposters"], | |
| soundRepostsIds: [i, a, "e1/me/track_reposts/ids"], | |
| soundRepostsCreate: [o, a, "e1/me/track_reposts/:id"], | |
| soundRepostsDelete: [s, a, "e1/me/track_reposts/:id"], | |
| featuredProfiles: [i, l, "users/:id/featured-profiles"], | |
| feedPlaylistUpdate: [o, l, "feed-playlists/:id"], | |
| feedTrackUpdate: [o, l, "feed-tracks/:urn"], | |
| me: [i, l, "me"], | |
| meConnections: [i, a, "me/connections"], | |
| meRightsholders: [i, l, "me/rightsholders"], | |
| meUpdate: [o, l, "me"], | |
| myActivitiesTracks: [i, a, "me/activities/tracks"], | |
| myConnection: [i, a, "me/connections/:id"], | |
| myFollowersIds: [i, l, "me/followers/ids"], | |
| myFollowingsIds: [i, l, "users/:userId/followings/ids"], | |
| myFollowingsCreate: [r, l, "me/followings/:id"], | |
| myFollowingsDelete: [s, l, "me/followings/:id"], | |
| mySuggestedUsers: [i, l, "me/suggested/users/:category"], | |
| newForYou: [i, l, "me/new-for-you"], | |
| onboardingTrackRecommendations: [i, l, "onboarding/tracks/recommendations"], | |
| oscpStatus: [i, l, "oscp/status"], | |
| oscpUserCreate: [r, l, "oscp/user_info"], | |
| oscpPayoutCreate: [r, l, "oscp/payout"], | |
| oscpAvailableContract: [i, l, "oscp/contracts/available/:variant"], | |
| oscpActiveContract: [i, l, "oscp/contracts/active/:id"], | |
| oscpContractSign: [r, l, "oscp/contracts/sign/:variant"], | |
| paymentCheckout: [i, l, "payments/checkout"], | |
| paymentCheckoutItem: [i, l, "payments/checkout/:id"], | |
| paymentOrders: [i, l, "payments/orders/:type"], | |
| paymentQuotations: [i, l, "payments/quotations/:category"], | |
| paymentQuotationsCode: [i, l, "payments/quotations/code/:id"], | |
| paymentsConsumerSubscriptionsActive: [i, l, "payments/consumer-subscriptions/active"], | |
| paymentsSubscriptionsActive: [i, l, "payments/subscriptions/active"], | |
| personalizedTracks: [i, l, "me/personalized-tracks"], | |
| playHistoryTracks: [i, l, "me/play-history/tracks"], | |
| playHistoryContexts: [i, l, "me/play-history/contexts"], | |
| playHistoryAdd: [r, l, "me/play-history"], | |
| playHistoryClear: [s, l, "me/play-history"], | |
| playlist: [i, l, "playlists/:id"], | |
| playlistUpdate: [o, l, "playlists/:id"], | |
| playlistArtworkUpdate: [o, a, "playlists/:id"], | |
| playlistDelete: [s, a, "playlists/:id"], | |
| playlistCategory: [i, l, "playlists/:id/:category"], | |
| playlistCreate: [r, l, "playlists"], | |
| playlistDiscovery: [i, l, "playlists/discovery"], | |
| playlistsForTrack: [i, l, "tracks/:trackId/playlists"], | |
| playlistsWithoutAlbumsForTrack: [i, l, "tracks/:trackId/playlists_without_albums"], | |
| albumsForTrack: [i, l, "tracks/:trackId/albums"], | |
| promotedSearch: [i, l, "promoted/search"], | |
| promotedUploadTakeover: [i, l, "promoted/upload-takeover"], | |
| promotedUploadText: [i, l, "promoted/upload-text"], | |
| promotedUsers: [i, l, "promoted/users"], | |
| recommendedStations: [i, l, "stations/:type"], | |
| relatedSounds: [i, l, "tracks/:track_id/related"], | |
| reportCopyrightInfringement: [r, l, "copyright_reports"], | |
| resetPassword: [r, l, "users/password_reset", { | |
| email: null | |
| }], | |
| resolve: [i, l, "resolve", { | |
| url: "" | |
| }], | |
| search: [i, l, "search"], | |
| searchQueries: [i, l, "search/queries"], | |
| searchCategory: [i, l, "search/:category"], | |
| searchSounds: [i, a, "search/sounds"], | |
| searchSuggestTags: [i, a, "search/suggest/tags"], | |
| shortcutsFollowings: [i, l, "me/shortcuts/followings"], | |
| shortcutsTrackLikes: [i, l, "me/shortcuts/track-likes"], | |
| signinWithFacebook: [r, u, "sign-in/facebook"], | |
| signinWithGoogle: [r, u, "sign-in/google"], | |
| signinWithPassword: [r, u, "sign-in/password"], | |
| signupWithEmail: [r, u, "sign-up/email"], | |
| signupWithEmailToken: [r, u, "sign-up/email/token"], | |
| signupWithFacebook: [r, u, "sign-up/facebook"], | |
| signupWithGoogle: [r, u, "sign-up/google"], | |
| station: [i, l, "stations/:urn"], | |
| stationBatch: [i, l, "stations", { | |
| urns: null | |
| }], | |
| stationTracks: [i, l, "stations/:urn/tracks"], | |
| likedStations: [i, l, "stations/liked"], | |
| likedStationIds: [i, l, "stations/liked/ids"], | |
| likeStation: [o, l, "stations/liked/:id"], | |
| unlikeStation: [s, l, "stations/liked/:id"], | |
| staticPage: [i, d, ":pageName.html"], | |
| stream: [i, l, "stream"], | |
| streamNotifications: [i, l, "stream/notifications"], | |
| streamUserProfile: [i, l, "stream/users/:id"], | |
| streamUserReposts: [i, l, "stream/users/:id/reposts"], | |
| tagsSuggested: [i, l, "tags/suggested/:urn"], | |
| tagsSuggestedCategory: [i, l, "tags/suggested/:category/:urn"], | |
| territoriesWhichRequireExplicitRightsholder: [i, l, "tracks/explicit-rightsholder-required-in"], | |
| timeseriesTrack: [i, l, "users/:user_id/tracks/:track_id/stats/timeseries/:metric"], | |
| timeseriesUser: [i, l, "users/:user_id/stats/timeseries/:metric"], | |
| track: [i, l, "tracks/:urn"], | |
| trackAsOwner: [i, l, "tracks/:urn", { | |
| representation: "owner" | |
| }], | |
| trackBatch: [i, l, "tracks"], | |
| trackCategory: [i, l, "tracks/:id/:category"], | |
| trackCreate: [i, l, "tracks"], | |
| trackComments: [i, l, "tracks/:id/comments"], | |
| trackDelete: [s, l, "tracks/:id"], | |
| trackImageUpdate: [o, a, "tracks/:id"], | |
| trackPatchUpdate: [o, a, "tracks/:id"], | |
| trackPermalinkAvailability: [i, l, "track_permalink_availability", { | |
| permalink: null | |
| }], | |
| trackStreams: [i, a, "i1/tracks/:id/streams"], | |
| trackUpdate: [i, l, "tracks/:urn"], | |
| trinityPublish: [i, a, "tpub/publish"], | |
| trinitySubscribe: [i, a, "tsub/subscribe"], | |
| user: [i, a, "users/:id"], | |
| userAlbums: [i, l, "users/:id/albums"], | |
| userAsOwner: [i, l, "users/:urn", { | |
| representation: "owner" | |
| }], | |
| userComments: [i, a, "users/:id/comments"], | |
| userDelete: [r, l, "users/:urn/deletion"], | |
| userEmailCreate: [r, l, "users/:user_id/emails"], | |
| userEmailDelete: [s, l, "users/:user_id/emails/:id"], | |
| userEmailResendConfirmation: [r, l, "users/:user_id/emails/:id/confirmation"], | |
| userEmailUpdate: [o, l, "users/:user_id/emails/:id"], | |
| userEmails: [i, l, "users/:id/emails"], | |
| userFollowers: [i, l, "users/:id/followers"], | |
| userFollowersFollowedBy: [i, l, "users/:id/followers/followed_by/:followed_by"], | |
| userFollowings: [i, l, "users/:id/followings"], | |
| userFollowingsNotFollowedBy: [i, l, "users/:id/followings/not_followed_by/:not_followed_by"], | |
| userImageUpdate: [o, a, "users/:id"], | |
| userLikes: [i, l, "users/:id/likes"], | |
| userTrackLikes: [i, l, "users/:id/track_likes"], | |
| userNotificationsPreferences: [i, l, "users/:id/notifications/preferences"], | |
| userPlaylists: [i, l, "users/:id/playlists"], | |
| userPlaylistsWithoutAlbums: [i, l, "users/:id/playlists_without_albums"], | |
| userResetPassword: [r, l, "users/:id/password_reset"], | |
| userSettings: [i, l, "users/:id/settings"], | |
| userSpotlight: [i, l, "users/:id/spotlight"], | |
| userTracks: [i, l, "users/:id/tracks"], | |
| userWebProfiles: [i, l, "users/:urn/web-profiles"], | |
| userWebProfilesUpdate: [r, l, "users/:urn/web-profiles"], | |
| visuals: [i, c, "visuals"], | |
| userBlockingsIds: [i, a, "me/mutings/users/ids"], | |
| userBlockingsDelete: [s, a, "me/mutings/users/:id"], | |
| userBlockingsCreate: [r, a, "me/blockings", { | |
| user_id: null, | |
| reported: null, | |
| remove_activities: null | |
| }] |
I just debugged the request using chrome's dev tools. Seems like you have to send a PUT request to the following url (replace the playlist-id and api key): https://api-v2.soundcloud.com/playlists/playlistid?client_id=123456789&app_version=1619164206&app_locale=en
with the following payload:
{
"playlist": {
"artwork_url": null,
"created_at": "2016-12-27T14:26:53Z",
"duration": 225118,
"id": 286853773,
"kind": "playlist",
"last_modified": "2017-06-24T17:16:56Z",
"likes_count": 1,
"managed_by_feeds": false,
"permalink": "test",
"permalink_url": "https://soundcloud.com/gabrielpatzleiner/sets/test2",
"public": true,
"reposts_count": 0,
"secret_token": "s-abcd",
"sharing": "public",
"title": "Test",
"track_count": 1,
"uri": "https://api.soundcloud.com/playlists/286853773",
"user_id": 23667548,
"set_type": null,
"is_album": false,
"published_at": "2017-06-24T17:16:56Z",
"display_date": "2017-06-24T17:16:56Z",
"user": {
"avatar_url": "https://i1.sndcdn.com/avatars-000130283698-nicyf2-large.jpg",
"first_name": "Gabriel",
"followers_count": 44,
"full_name": "Gabriel Patzleiner",
"id": 23667548,
"kind": "user",
"last_modified": "2018-01-27T16:10:02Z",
"last_name": "Patzleiner",
"permalink": "gabrielpatzleiner",
"permalink_url": "https://soundcloud.com/gabrielpatzleiner",
"uri": "https://api.soundcloud.com/users/23667548",
"urn": "soundcloud:users:23667548",
"username": "Gabriel Patzleiner",
"verified": false,
"city": "",
"country_code": null,
"badges": {
"pro": false,
"pro_unlimited": false,
"verified": false
}
},
"description": "",
"embeddable_by": "all",
"genre": "",
"label_name": "",
"license": "all-rights-reserved",
"purchase_title": null,
"purchase_url": null,
"release_date": null,
"tag_list": "",
"tracks": [
301577744
],
"caption": "",
"ean": null,
"release": null,
"_resource_id": 286853773,
"_resource_type": "playlist"
}
}As you can see, the permalink is test (new) but the permalink_url is still test2 (old). In the response the permalink is changed to test (new). The soundcloud website sends all of the information, maybe it's enough to just send the properties you want to change. Otherwise you have to request the playlist-data, change the permalink and send the whole data as PUT request to the server, it should work like this. But as I haven't used this API since 4 years, I haven't tested and don't know what has changed. Good luck 😃
Any idea how to modify the playlist permalink in V2? I know the command for V1 but somehow it doesn't work for me. I'm guessing the V1 command is no longer used?