---
title: "SoundCloud Artist Tracks API"
method: GET
path: "/v1/soundcloud/artist-tracks"
tags: ["SoundCloud"]
---

# SoundCloud Artist Tracks API

`GET /v1/soundcloud/artist-tracks`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/soundcloud/artist-tracks`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Artist track list — opaque cursor, native-window when the api-v2 page ends (2 credits; empty is 0).

Pass a SoundCloud artist URL or username and get that artist's tracks as clean JSON. Each track row matches /soundcloud/track (title, plays/likes/reposts/comments/downloads, license, genre/tags[], artwork, streamable/downloadable, isrc/releaseDate when exposed) — without repeating artist{} on every row. The envelope names the yield: requested, listingHits (rows SoundCloud sent this page), hydrateFailures (received rows that did not become a track), totalReturned, nextCursor, hasMore, and truncatedReason=platform-page | catalog-end | native-window | extended-window. SoundCloud linked_partitioning can return listingHits < requested with hasMore still true — that is a platform page, not a drop. nextCursor is emitted only when the next native page has rows — a token is never issued and then refused. The public api-v2 window usually ends before the artist's full catalogue: that stop is native-window (hasMore false), not a 400. catalog-end is only when SoundCloud itself omits next_href on a native page. extended-window is the first-page fallback path (no cursor). Empty pages (native-window or extended-window with 0 rows) bill 0 credits. Top-level artistId + artist{id,handle,name,url,avatar,followers,verified} join to /soundcloud/artist; artistUrl is the profile URL. nextCursor is an opaque token (not a SoundCloud api-v2 URL). Flat 2 credits when tracks return (limit default 20, max 100).

Docs: https://captapi.com/apis/soundcloud-artist-tracks

## Query parameters

- `url` string, required
- `limit` integer
- `cursor` string
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `platform` string: Always "soundcloud" on this endpoint.
    - `artistId` string: SoundCloud numeric artist id — join key for /soundcloud/artist.
    - `artistUrl` string: Artist profile URL (also on top-level artist.url).
    - `artist` object
      - `id` string: Id of this artist item.
      - `handle` string: Account handle.
      - `name` string: Name of this artist item.
      - `url` string: Canonical URL of the item.
      - `avatar` string: Avatar / profile picture URL. Canonical across profile endpoints.
      - `followers` integer: Follower count.
      - `verified` boolean: Whether the account is verified on this platform.
    - `requested` integer: The limit you sent (default 20, max 100).
    - `totalReturned` integer: Number of items returned in this response.
    - `listingHits` integer: Rows SoundCloud sent in this linked-partition page (may be below requested even when hasMore is true).
    - `hydrateFailures` integer: Rows SoundCloud sent that did not become a track. 0 means we mapped every listing hit.
    - `nextCursor` string: Opaque pagination token, emitted only when the next native page has rows. Pass as cursor on the next call. Not a SoundCloud URL — do not edit.
    - `hasMore` boolean: Whether more results are available beyond this page. When true, pass nextCursor to fetch the next page.
    - `tracks` object[]
      - `platform` string: Always "soundcloud" on this endpoint.
      - `id` string: Id of this tracks item.
      - `url` string: Canonical URL of the item.
      - `title` string: Title of this tracks item.
      - `genre` string: Music genre.
      - `durationMs` integer: Full track length in milliseconds (SoundCloud full_duration — not the 30s preview clip).
      - `plays` integer: Playback count for the track.
      - `likes` integer: Like count (number).
      - `reposts` integer: Repost count.
      - `downloads` integer: Downloads. Example: 0.
      - `comments` integer: Comment count as a number, including 0. Every measured artist-tracks row (350+) ships this key; omit-if-null remains only as a safety net if SoundCloud sends a null count.
      - `publishedAt` string: Publish date (ISO 8601) when the platform exposes an absolute timestamp.
      - `releaseDate` string: Release date as ISO-8601 when SoundCloud exposes it; omitted otherwise.
      - `license` string: License identifier.
      - `isrc` string: ISRC when SoundCloud's publisher_metadata exposes it; omitted otherwise.
      - `downloadable` boolean: Downloadable. Example: false.
      - `streamable` boolean: Streamable. Example: true.
      - `waveformUrl` string: Waveform url URL.
      - `artwork` string: Artwork URL.
      - `tags` unknown[]: Track tags from SoundCloud's tag_list. Always an array — [] when the track has none.
        - unknown

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
