{"id":31887800,"url":"https://github.com/Moestash/soundcloud.ts","last_synced_at":"2025-10-13T06:02:14.237Z","repository":{"id":35174583,"uuid":"216397148","full_name":"Moestash/soundcloud.ts","owner":"Moestash","description":"Wrapper for the Soundcloud API with typings","archived":false,"fork":false,"pushed_at":"2025-10-06T08:27:13.000Z","size":2361,"stargazers_count":77,"open_issues_count":0,"forks_count":19,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-07T23:56:00.584Z","etag":null,"topics":["soundcloud","soundcloud-api","wrapper"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Moestash.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-10-20T17:05:48.000Z","updated_at":"2025-10-06T22:02:42.000Z","dependencies_parsed_at":"2024-06-18T15:31:21.421Z","dependency_job_id":"2ade794e-81c6-4a4b-811f-320e7922932e","html_url":"https://github.com/Moestash/soundcloud.ts","commit_stats":{"total_commits":120,"total_committers":9,"mean_commits":"13.333333333333334","dds":0.4833333333333333,"last_synced_commit":"aa4c73c00be9517ddefaae70c9e3e6f274e5f84b"},"previous_names":["moebits/soundcloud.ts","tenpi/soundcloud.ts","moebytes/soundcloud.ts","moestash/soundcloud.ts"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Moestash/soundcloud.ts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moestash%2Fsoundcloud.ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moestash%2Fsoundcloud.ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moestash%2Fsoundcloud.ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moestash%2Fsoundcloud.ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Moestash","download_url":"https://codeload.github.com/Moestash/soundcloud.ts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Moestash%2Fsoundcloud.ts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279008296,"owners_count":26084427,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["soundcloud","soundcloud-api","wrapper"],"created_at":"2025-10-13T06:01:22.742Z","updated_at":"2025-10-13T06:02:14.223Z","avatar_url":"https://github.com/Moestash.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cdiv align=\"left\"\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://moestash.github.io/soundcloud.ts/\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/moestash/soundcloud.ts/master/images/soundcloud.tslogo.gif\" width=\"500\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"https://nodei.co/npm/soundcloud.ts/\"\u003e\u003cimg src=\"https://nodei.co/npm/soundcloud.ts.png\" /\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n### About\n\nThis is a wrapper for the Soundcloud API that includes typings and various utility functions\nto make getting tracks, users, and playlists easier! You can also download single tracks, or download tracks in mass programmatically.\n\n### Insall\n\n```ts\nnpm install soundcloud.ts\n```\n\n### Useful Links\n\n-   [**SoundCloud API Documentation**](https://developers.soundcloud.com/docs/api/reference)\n-   [**Soundcloud.ts Documentation**](https://moestash.github.io/soundcloud.ts/)\n\n### Getting Started\n\nAuthenticating with your account is **optional**, but I still recommend it. If you don't authenticate, you won't be able to use private endpoints such as `/me`. Soundcloud has closed down their API applications, but you are still able to get your client id and oauth token by inspecting the network traffic.\n\n-   Go to soundcloud.com and login (skip if you are already logged in)\n-   Open up the dev tools (Right click -\u003e inspect) and go to the Network tab\n-   Go to soundcloud.com, and you should see a bunch of requests in the network tab\n-   Find the request that has the name `session` (you can filter by typing `session` in the filter box) and click on it\n-   Go to the Payload tab\n-   You should see your client id in the Query String Parameters section, and your oauth token (`access_token`) in the Request Payload section\n\n```ts\nconst soundcloud = new Soundcloud(process.env.SOUNDCLOUD_CLIENT_ID, process.env.SOUNDCLOUD_OAUTH_TOKEN)\n/*Get track v2*/\nconst track = await soundcloud.tracks.get(\"succducc/azure\")\n/*Search tracks v2*/\nconst tracks = await soundcloud.tracks.search({q: \"cool track name\"})\n\n/*Get user v2*/\nconst user = await soundcloud.playlists.get(\"someone\")\n/*Search users v2*/\nconst users = await soundcloud.users.search({q: \"cool username\"})\n\n/*Get playlist (web scraping)*/\nconst playlist = await soundcloud.playlists.getAlt(\"virtual-riot/sets/throwback-ep\")\n/*Search playlists v2*/\nconst playlists = await soundcloud.playlists.search({q: \"cool playlist name\"})\n```\n\n#### Searching for tracks and playlists\n\n```ts\nimport Soundcloud from \"soundcloud.ts\"\n\nasync function useAPI() {\n    /*Credentials are optional, client id is manually found if omitted.*/\n    const soundcloud = new Soundcloud(process.env.SOUNDCLOUD_CLIENT_ID, process.env.SOUNDCLOUD_OAUTH_TOKEN)\n\n    /*You can get tracks by URL or ID (which can only be gotten from the API)*/\n    const track = await soundcloud.tracks.get(\"https://soundcloud.com/user/mysong\")\n\n    /*Worth to mention that you can omit the soundcloud.com part.*/\n    const trackShorthand = await soundcloud.tracks.get(\"user/mysong\")\n\n    /*To get the ID with the url of a track/playlist/user, you can use the resolve endpoint.*/\n    const id = await soundcloud.resolve.get(\"https://soundcloud.com/user/mysong\")\n\n    /*You can search for tracks... with nothing?*/\n    const randomSearch = await soundcloud.tracks.search()\n\n    /*But more commonly, you will want to add parameters such as the search query.*/\n    const search = await soundcloud.tracks.search({q: \"artist\"})\n\n    /*You can also get the super secret token that is used on private tracks. Authentication required, \n  and only works with your own tracks.*/\n    const secretToken = await soundcloud.tracks.secretToken(\"user/mysecretsong\")\n\n    /*Playlists are largely the same, you can use the get() and search() methods.*/\n    const playlist = await soundcloud.playlists.get(\"https://soundcloud.com/user/sets/my-songs\")\n}\n```\n\n#### Searching for users and comments\n\n```ts\nasync function useAPI() {\n    /*Users also have a get() and search() method.*/\n    const user = await soundcloud.users.get(\"user\")\n    const userSearch = await soundcloud.users.search({q: \"some user\"})\n\n    /*You can get the followers and following of a user.*/\n    const following = await soundcloud.users.following(\"user\")\n    const followers = await soundcloud.users.followers(\"user\")\n\n    /*Favorite tracks too.*/\n    const favorites = await soundcloud.users.favorites(\"user\")\n\n    /*The web profiles are the social links that show on the side of a user's profile*/\n    const socialLinks = await soundcloud.users.webProfiles(\"user\")\n\n    /*It's very easy to get all of the comments on a track, or all of the comments by a user.*/\n    const userComments = await soundcloud.users.comments(\"user\")\n    const trackComments = await soundcloud.tracks.comments(\"user/mysong\")\n\n    /*And you can get a specific comment from its ID (must make an API call to get it).*/\n    const comment = await soundcloud.comments.get(577904916)\n}\n```\n\n#### Downloading and streaming tracks\n\n```ts\nasync function useAPI() {\n    /*If downloads aren't enabled, it will download the stream instead of the original file.*/\n    await soundcloud.util.downloadTrack(\"user/mysong\", \"./tracks\")\n\n    /*You can download multiple tracks by passing them as an array to downloadTracks(). The third\n  parameter is the limit of tracks to download.*/\n    const tracks = await soundcloud.tracks.search({q: \"cool track\"})\n    await soundcloud.util.downloadTracks(tracks, \"./tracks\", 10)\n\n    /*In addition, there are a bunch of utilities that do the above automatically for convenience.*/\n    await soundcloud.util.downloadSearch(\"artist\", \"./tracks\")\n    await soundcloud.util.downloadFavorites(\"user\", \"./tracks\")\n    await soundcloud.util.downloadPlaylist(\"https://soundcloud.com/user/sets/my-songs\", \"./tracks\")\n\n    /*streamTrack() will download the track and will return a stream.Readable automatically.*/\n    const readableStream = await soundcloud.util.streamTrack(\"https://soundcloud.com/virtual-riot/emotionalrmx\")\n}\n```\n\n### Other Endpoints\n\nThere are more less commonly used endpoints such as **me**, **apps**, and **oembed**. Refer to the [**SoundCloud API Documentation**](https://developers.soundcloud.com/docs/api/reference) for their usage.\n\n### Common Types\n\n\u003cdetails\u003e\n\u003csummary\u003eSoundCloudTrack\u003c/summary\u003e\n\n```ts\nexport interface SoundcloudTrack {\n    comment_count: number\n    full_duration: number\n    downloadable: boolean\n    created_at: string\n    description: string | null\n    media: {\n        transcodings: SoundcloudTranscoding[]\n    }\n    title: string\n    publisher_metadata: {\n        id: number\n        urn: string\n        artist: string\n        album_title: string\n        contains_music: boolean\n        upc_or_ean: string\n        isrc: string\n        explicit: boolean\n        p_line: string\n        p_line_for_display: string\n        c_line: string\n        c_line_for_display: string\n        writer_composer: string\n        release_title: string\n        publisher: string\n    }\n    duration: number\n    has_downloads_left: boolean\n    artwork_url: string\n    public: boolean\n    streamable: boolean\n    tag_list: string\n    genre: string\n    id: number\n    reposts_count: number\n    state: \"processing\" | \"failed\" | \"finished\"\n    label_name: string | null\n    last_modified: string\n    commentable: boolean\n    policy: string\n    visuals: string | null\n    kind: string\n    purchase_url: string | null\n    sharing: \"private\" | \"public\"\n    uri: string\n    secret_token: string | null\n    download_count: number\n    likes_count: number\n    urn: string\n    license: SoundcloudLicense\n    purchase_title: string | null\n    display_date: string\n    embeddable_by: \"all\" | \"me\" | \"none\"\n    release_date: string\n    user_id: number\n    monetization_model: string\n    waveform_url: string\n    permalink: string\n    permalink_url: string\n    user: SoundcloudUser\n    playback_count: number\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSoundCloudPlaylist\u003c/summary\u003e\n\n```ts\nexport interface SoundcloudPlaylist {\n    duration: number\n    permalink_url: string\n    reposts_count: number\n    genre: string | null\n    permalink: string\n    purchase_url: string | null\n    description: string | null\n    uri: string\n    label_name: string | null\n    tag_list: string\n    set_type: string\n    public: boolean\n    track_count: number\n    user_id: number\n    last_modified: string\n    license: SoundcloudLicense\n    tracks: SoundcloudTrack[]\n    id: number\n    release_date: string | null\n    display_date: string\n    sharing: \"public\" | \"private\"\n    secret_token: string | null\n    created_at: string\n    likes_count: number\n    kind: string\n    title: string\n    purchase_title: string | null\n    managed_by_feeds: boolean\n    artwork_url: string | null\n    is_album: boolean\n    user: SoundcloudUser\n    published_at: string | null\n    embeddable_by: \"all\" | \"me\" | \"none\"\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSoundCloudUser\u003c/summary\u003e\n\n```ts\nexport interface SoundcloudUser {\n    avatar_url: string\n    city: string\n    comments_count: number\n    country_code: number | null\n    created_at: string\n    creator_subscriptions: SoundcloudCreatorSubscription[]\n    creator_subscription: SoundcloudCreatorSubscription\n    description: string\n    followers_count: number\n    followings_count: number\n    first_name: string\n    full_name: string\n    groups_count: number\n    id: number\n    kind: string\n    last_modified: string\n    last_name: string\n    likes_count: number\n    playlist_likes_count: number\n    permalink: string\n    permalink_url: string\n    playlist_count: number\n    reposts_count: number | null\n    track_count: number\n    uri: string\n    urn: string\n    username: string\n    verified: boolean\n    visuals: {\n        urn: string\n        enabled: boolean\n        visuals: SoundcloudVisual[]\n        tracking: null\n    }\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSoundCloudComment\u003c/summary\u003e\n\n```ts\nexport interface SoundCloudComment {\n    kind: \"comment\"\n    id: number\n    created_at: string\n    user_id: number\n    track_id: number\n    timestamp: number\n    body: string\n    uri: string\n    user: SoundCloudUserMini\n    self: {\n        urn: string\n    }\n}\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMoestash%2Fsoundcloud.ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FMoestash%2Fsoundcloud.ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FMoestash%2Fsoundcloud.ts/lists"}