Apple Music Artist API. Send an artist link or ID.
Bio, origin, genres, top songs and albums. We handle the proxies, blocks and platform changes.
Apple Music Artist API at a glance
Returns an Apple Music artist from its link or ID in any country's store, with its bio, genres, origin, top songs and albums. It also has the picture and banner, whether it is a person or a group, when it was born or formed, and its page's latest release, singles and EPs, music videos, playlists and similar artists, each with its ID, link, artwork and date.
GET /v1/applemusic/artist
- 1 credit per request, $0.75–$1.97 per 1,000 requests
- 19 typed fields null when unknown
handleis all it needs, e.g.159260351- 100 credits free when you sign up, no card, so you can build before you spend
Send one request. Get 19 fields back.
Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.
$ npm install socialtaphandle = 159260351const params = new URLSearchParams({
handle: "159260351",
});
const res = await fetch(`https://socialtap.dev/v1/applemusic/artist?${params}`, {
headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);import os
import requests
res = requests.get(
"https://socialtap.dev/v1/applemusic/artist",
params={"handle": "159260351"},
headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])require "json"
require "net/http"
uri = URI("https://socialtap.dev/v1/applemusic/artist")
uri.query = URI.encode_www_form('handle' => '159260351')
req = Net::HTTP::Get.new(uri)
req["x-api-key"] = ENV.fetch("SOCIALTAP_API_KEY")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") { |http| http.request(req) }
body = JSON.parse(res.body)
raise "#{body["error"]["code"]}: #{body["error"]["message"]}" unless res.is_a?(Net::HTTPSuccess)
pp body["data"]
puts body["meta"]["credits_charged"]<?php
$query = http_build_query([
'handle' => '159260351',
]);
$ch = curl_init('https://socialtap.dev/v1/applemusic/artist?' . $query);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: ' . getenv('SOCIALTAP_API_KEY')],
]);
$body = json_decode(curl_exec($ch), true);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) >= 400) {
throw new RuntimeException($body['error']['code'] . ': ' . $body['error']['message']);
}
print_r($body['data']);
echo $body['meta']['credits_charged'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"net/url"
"os"
)
func main() {
q := url.Values{}
q.Set("handle", "159260351")
req, err := http.NewRequest("GET", "https://socialtap.dev/v1/applemusic/artist?"+q.Encode(), nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
var body struct {
Data json.RawMessage `json:"data"`
Meta map[string]any `json:"meta"`
Error *struct {
Code string `json:"code"`
Message string `json:"message"`
} `json:"error"`
}
if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
log.Fatal(err)
}
if body.Error != nil {
log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
}
fmt.Println(string(body.Data), body.Meta["credits_charged"])
}curl 'https://socialtap.dev/v1/applemusic/artist?handle=159260351' \
-H "x-api-key: $SOCIALTAP_API_KEY"{
"data": {
"approximate_fields": [],
"avatar_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages221/v4/6d/67/88/6d67888b-9e7f-53af-7853-0f91d6fd2332/ami_U003aidentity_U003a994af5c375f4c3aa96cd6ced4a700799-2026-09-25T04-00-05.358Z_cropped.png/1640x1640bb.jpg",
"banner_url": "https://is1-ssl.mzstatic.com/image/thumb/Features221/v4/a1/15/69/a11569c5-ad98-8244-db89-508129f379d6/9b2c00c3-0828-4828-b3e5-0f96e9c2650d.png/4320x1080sr.jpg",
"bio": "The country world feigned surprise when, after three albums of Music Row-indebted songcraft, Taylor Swift formally embraced pop on 2012’s Red. But no one should have been shocked: Any 14-year-old capable of persuading her parents to move from suburban Pennsylvania to Nashville fo…",
"category": null,
"country_code": null,
"created_at": null,
"display_name": "Taylor Swift",
"external_links": [],
"id": "159260351",
"is_private": null,
"is_verified": null,
"location": "West Reading, PA, United States",
"metrics": {
"follower_count": null,
"following_count": null,
"post_count": null,
"total_like_count": null,
"total_view_count": null
},
"platform": "applemusic",
"platform_specific": {
"applemusic": {
"albums": [
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/a0/dd/fd/a0ddfd72-ee9e-f046-6466-a5dbefc696fa/26UM1IM21436.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "6814997249",
"is_explicit": true,
"kind": "album",
"released_at": "2026-09-24T00:00:00Z",
"title": "The Life of a Showgirl: The Encore",
"track_count": 16,
"url": "https://music.apple.com/us/album/the-life-of-a-showgirl-the-encore/6814997249"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/47/8a/b8/478ab8ac-d134-bad3-f700-364c83323bc6/26UMGIM11621.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "1875381397",
"is_explicit": false,
"kind": "album",
"released_at": "2026-02-13T00:00:00Z",
"title": "Opalite (Official Music Video Extended Versions) - Single",
"track_count": 4,
"url": "https://music.apple.com/us/album/opalite-official-music-video-extended-versions-single/1875381397"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/0e/e5/c7/0ee5c717-114f-f4e8-9f7c-e92dd6eb9152/25UM1IM74420.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "1850496031",
"is_explicit": true,
"kind": "album",
"released_at": "2025-11-07T00:00:00Z",
"title": "The Life of a Showgirl + Acoustic Collection",
"track_count": 19,
"url": "https://music.apple.com/us/album/the-life-of-a-showgirl-acoustic-collection/1850496031"
}
],
"amg_artist_id": null,
"born_or_formed": "December 13, 1989",
"editorial_summary": "Favorite Taylor’s artist page for updates on The Life of a Showgirl.",
"genres": [
"Pop"
],
"is_group": false,
"latest_release": {
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/89/98/98/8998984f-9a80-c3e1-d59d-e6a6db859e0c/26UM1IM31403.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "6821937445",
"is_explicit": false,
"kind": "album",
"released_at": "2026-10-16T00:00:00Z",
"title": "Patient Zero - Single",
"track_count": 3,
"url": "https://music.apple.com/us/album/patient-zero-single/6821937445"
},
"music_videos": [
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Video221/v4/02/21/39/022139aa-083d-21c1-f0b9-cb7dc630dc98/26UM1IM22083.crop.jpg/3701x1912mv.jpg",
"duration_ms": 312384,
"id": "6816241368",
"is_explicit": false,
"kind": "music_video",
"released_at": "2026-09-28T00:00:00Z",
"title": "Patient Zero",
"track_count": null,
"url": "https://music.apple.com/us/music-video/patient-zero/6816241368"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Video211/v4/19/2e/ca/192ecabc-b8d2-a613-06af-d608c1037642/26UM1IM22083.crop.jpg/3701x1912mv.jpg",
"duration_ms": 312384,
"id": "6818017941",
"is_explicit": false,
"kind": "music_video",
"released_at": "2026-09-24T00:00:00Z",
"title": "Patient Zero",
"track_count": null,
"url": "https://music.apple.com/us/music-video/patient-zero/6818017941"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Video211/v4/e1/ef/ce/e1efced7-7023-bcaf-d157-0492240aa10c/26UM1IM28169.crop.jpg/1912x1072mv.jpg",
"duration_ms": 492139,
"id": "6818017943",
"is_explicit": false,
"kind": "music_video",
"released_at": "2026-09-24T00:00:00Z",
"title": "Patient Zero (Expanded Video)",
"track_count": null,
"url": "https://music.apple.com/us/music-video/patient-zero-expanded-video/6818017943"
}
],
"playlists": [
{
"artist_name": "Apple Music Pop",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages221/v4/6d/67/88/6d67888b-9e7f-53af-7853-0f91d6fd2332/ami_U003aidentity_U003a994af5c375f4c3aa96cd6ced4a700799-2026-09-25T04-00-05.358Z_cropped.png/1080x1080SC.FPESS05.jpg?l=en-US",
"duration_ms": null,
"id": "pl.3950454ced8c45a3b0cc693c2a7db97b",
"is_explicit": null,
"kind": "playlist",
"released_at": null,
"title": "Taylor Swift Essentials",
"track_count": null,
"url": "https://music.apple.com/us/playlist/taylor-swift-essentials/pl.3950454ced8c45a3b0cc693c2a7db97b"
},
{
"artist_name": "Apple Music Pop",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages221/v4/6d/67/88/6d67888b-9e7f-53af-7853-0f91d6fd2332/ami_U003aidentity_U003a994af5c375f4c3aa96cd6ced4a700799-2026-09-25T04-00-05.358Z_cropped.png/1080x1080SC.MVESS05.jpg?l=en-US",
"duration_ms": null,
"id": "pl.6929cc16ba9e48878fcabb6af6412d0a",
"is_explicit": null,
"kind": "playlist",
"released_at": null,
"title": "Taylor Swift Video Essentials",
"track_count": null,
"url": "https://music.apple.com/us/playlist/taylor-swift-video-essentials/pl.6929cc16ba9e48878fcabb6af6412d0a"
},
{
"artist_name": "Apple Music Pop",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages221/v4/6d/67/88/6d67888b-9e7f-53af-7853-0f91d6fd2332/ami_U003aidentity_U003a994af5c375f4c3aa96cd6ced4a700799-2026-09-25T04-00-05.358Z_cropped.png/1080x1080SC.FPSL03.jpg?l=en-US",
"duration_ms": null,
"id": "pl.57891bdd1bc840948374f1c4cbe9c840",
"is_explicit": null,
"kind": "playlist",
"released_at": null,
"title": "Taylor Swift’s Eras Tour Set List",
"track_count": null,
"url": "https://music.apple.com/us/playlist/taylor-swifts-eras-tour-set-list/pl.57891bdd1bc840948374f1c4cbe9c840"
}
],
"similar_artists": [
{
"artist_name": null,
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages221/v4/76/ca/e2/76cae283-f3ba-aa7f-6256-1817e9b5179f/ami-identity-2d92b3a772aa3368c092544fed8cac42-2026-06-26T22-33-16.704Z_cropped.png/2155x2155bb.jpg",
"duration_ms": null,
"id": "602767352",
"is_explicit": null,
"kind": "artist",
"released_at": null,
"title": "Lorde",
"track_count": null,
"url": "https://music.apple.com/us/artist/lorde/602767352"
},
{
"artist_name": null,
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages211/v4/06/f0/41/06f0418f-97d3-34f8-f0a3-3acc37964d89/ami-identity-b7ce039aac2c803c4620ff4ff18920ca-2026-08-06T15-12-54.044Z_cropped.png/3750x3750bb.jpg",
"duration_ms": null,
"id": "412778295",
"is_explicit": null,
"kind": "artist",
"released_at": null,
"title": "Ariana Grande",
"track_count": null,
"url": "https://music.apple.com/us/artist/ariana-grande/412778295"
},
{
"artist_name": null,
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/AMCArtistImages211/v4/47/79/63/47796327-5841-8691-ac9a-9e56e8e9d782/ami-identity-9dc79b57efd6f0e1ede00c6af8f8954c-2025-02-14T03-00-28.587Z_cropped.png/820x820bb.jpg",
"duration_ms": null,
"id": "280215834",
"is_explicit": null,
"kind": "artist",
"released_at": null,
"title": "Selena Gomez",
"track_count": null,
"url": "https://music.apple.com/us/artist/selena-gomez/280215834"
}
],
"singles": [
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/89/98/98/8998984f-9a80-c3e1-d59d-e6a6db859e0c/26UM1IM31403.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "6821937445",
"is_explicit": false,
"kind": "album",
"released_at": "2026-10-16T00:00:00Z",
"title": "Patient Zero - Single",
"track_count": 3,
"url": "https://music.apple.com/us/album/patient-zero-single/6821937445"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/ae/c1/15/aec11538-c395-b88e-b0f9-7b5b07b8e676/ticket.zkazzkhn.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "6778230429",
"is_explicit": false,
"kind": "album",
"released_at": "2026-06-12T00:00:00Z",
"title": "I Knew It, I Knew You (From \"Toy Story 5\") - Single",
"track_count": 3,
"url": "https://music.apple.com/us/album/i-knew-it-i-knew-you-from-toy-story-5-single/6778230429"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/2b/14/dc/2b14dc4d-5173-7b38-b0ff-1c30daf5fa32/26UMGIM37308.rgb.jpg/3000x3000bb.jpg",
"duration_ms": null,
"id": "1888604488",
"is_explicit": false,
"kind": "album",
"released_at": "2026-03-31T00:00:00Z",
"title": "Elizabeth Taylor",
"track_count": 4,
"url": "https://music.apple.com/us/album/elizabeth-taylor/1888604488"
}
],
"storefront": "us",
"top_songs": [
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/a0/dd/fd/a0ddfd72-ee9e-f046-6466-a5dbefc696fa/26UM1IM21436.rgb.jpg/3000x3000bb.jpg",
"duration_ms": 225868,
"id": "6814997425",
"is_explicit": false,
"kind": "song",
"released_at": "2026-09-24T00:00:00Z",
"title": "Patient Zero",
"track_count": null,
"url": "https://music.apple.com/us/album/patient-zero/6814997249?i=6814997425"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/34/35/6c/34356cb4-bd0b-3bac-b118-1a6d7264dc64/26UMGIM69942.rgb.jpg/3000x3000bb.jpg",
"duration_ms": 178186,
"id": "6775527443",
"is_explicit": false,
"kind": "song",
"released_at": "2026-06-05T00:00:00Z",
"title": "I Knew It, I Knew You (From \"Toy Story 5\")",
"track_count": null,
"url": "https://music.apple.com/us/album/i-knew-it-i-knew-you-from-toy-story-5/6775527442?i=6775527443"
},
{
"artist_name": "Taylor Swift",
"cover_url": "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/2d/46/e0/2d46e0bc-8ab9-85dd-4b56-ee6951351034/25UM1IM19577.rgb.jpg/3000x3000bb.jpg",
"duration_ms": 226074,
"id": "1833328840",
"is_explicit": false,
"kind": "song",
"released_at": "2025-10-03T00:00:00Z",
"title": "The Fate of Ophelia",
"track_count": null,
"url": "https://music.apple.com/us/album/the-fate-of-ophelia/1833328839?i=1833328840"
}
]
}
},
"type": "person",
"unknown_fields": [],
"url": "https://music.apple.com/us/artist/taylor-swift/159260351",
"username": null
},
"meta": {
"request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
"platform": "applemusic",
"source": "api",
"is_cached": false,
"credits_charged": 1,
"latency_ms": 434,
"fetched_at": "2026-10-25T12:00:00Z",
"input": {
"kind": "profile",
"id": "159260351",
"url": "https://music.apple.com/us/artist/taylor-swift/159260351"
},
"credits_remaining": 9999,
"client_request_id": null,
"warnings": []
}
}import { SocialTap } from "socialtap";
const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY
const res = await client.applemusic.artist.get({ handle: "159260351" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String query = "handle=" + encode("159260351");
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://socialtap.dev/v1/applemusic/artist?" + query))
.header("x-api-key", System.getenv("SOCIALTAP_API_KEY"))
.GET()
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
// An error is {"error": {"code", "message", ...}}; success is {data, meta}, meta.credits_charged its price.
if (response.statusCode() >= 400) throw new RuntimeException(response.body());
System.out.println(response.body());
}
static String encode(String value) {
return URLEncoder.encode(value, StandardCharsets.UTF_8);
}
}using System.Text.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("SOCIALTAP_API_KEY"));
var query = string.Join("&",
"handle=" + Uri.EscapeDataString("159260351"));
var res = await http.GetAsync("https://socialtap.dev/v1/applemusic/artist?" + query);
using var body = JsonDocument.Parse(await res.Content.ReadAsStringAsync());
if (!res.IsSuccessStatusCode)
{
var error = body.RootElement.GetProperty("error");
throw new Exception($"{error.GetProperty("code")}: {error.GetProperty("message")}");
}
Console.WriteLine(body.RootElement.GetProperty("data"));
Console.WriteLine(body.RootElement.GetProperty("meta").GetProperty("credits_charged"));// Cargo.toml: reqwest = { version = "0.12", features = ["blocking", "json"] }, serde_json = "1"
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::Client::new()
.get("https://socialtap.dev/v1/applemusic/artist")
.query(&[("handle", "159260351")])
.header("x-api-key", env::var("SOCIALTAP_API_KEY")?)
.send()?;
let ok = res.status().is_success();
let body: serde_json::Value = res.json()?;
if !ok {
return Err(format!("{}: {}", body["error"]["code"], body["error"]["message"]).into());
}
println!("{} {}", body["data"], body["meta"]["credits_charged"]);
Ok(())
}200 OK · GET https://socialtap.dev/v1/applemusic/artistLong arrays and strings are shortened here. Real responses are complete.Docs One schema on 27 platforms.
The response reference lists every field, its type and when it is null. See the full schema.
Null means unknown
A field Apple Music doesn't show is null, never zero or an empty string, so a real zero always means zero.
What it accepts
The artist: its link (music.apple.com/us/artist/taylor-swift/159260351, with or without the slug and the store, any of its section pages such as /top-songs or /see-all, on music.apple.com, geo.music.apple.com or itunes.apple.com) or the number in that link (159260351).
Write one parser
Apple Music, TikTok, Instagram and 24 more platforms answer in these fields, so the code that reads one reads them all.
platformstring- Platform ID (tiktok, youtube, …).
idstring- Platform-native account ID (string; YouTube UC…, Reddit t2_…).
usernamestring- Handle without the @; null when the account has none.
display_namestring- Display name, channel title or page name; null when empty or not exposed.
urlstring- Canonical profile URL.
typestring- Coarse account kind, as the platform labels it; unknown when it does not (TikTok labels organizations only). New values may be added; treat unknown values as unknown.
biostring- Profile bio, channel description or page about text; null when empty or not exposed.
avatar_urlstring- Profile picture URL (largest available). Platform CDN URLs can expire within hours.
Live data from 33 platforms.
What teams build with the Apple Music Artist API.
Turn an artist link into bio and genres
Build an artist page with top songs
Find similar artists for a campaign
Compare an artist across country stores
Good to know before you build.
- Apple Music shows no follower, play or like counts for an artist, so metrics are null. It has no usernames, verified badges or links to other sites: username and is_verified are null and external_links is [].
- Each section holds what the artist's page shows first, up to ten items: top_songs is the top ten, not the catalog. A section the artist doesn't have is [].
- Stores differ: an artist can be missing from one or have its name and bio in another language. The answer comes from the store in country, else the link's store, else us, and platform_specific.applemusic.storefront says which.
- type is person or organization from Apple's group flag, and unknown when Apple doesn't state it. born_or_formed is Apple's text, in the answer's language.
- A curator's ID, such as a radio show's (platform_specific.applemusic.curator_id on the Apple Music Track API), isn't an artist and returns not_found. So does an account on another Apple store only: an App Store developer, a podcaster, an author with no Apple Music page.
- When Apple's catalog API fails, the answer comes from its public lookup API with the name, main genre, link and AllMusic ID only: type is unknown, the bio, pictures and origin are null, the sections are [] and listed in unknown_fields, and a request with lang fails rather than answer in another language.
1 credit per request. Failed requests are free.
Buy credits once and spend them on any endpoint, on any platform.
| Source | Price per successful request | Per 1,000 requests |
|---|---|---|
Platform API api | 1 credit | $0.75–$1.97 |
- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.
Questions about the Apple Music Artist API.
More in the API reference.
Does it return follower counts?
How much does the Apple Music Artist API cost?
Try it on a link you already have.
Paste it in the playground, or copy the request into your code.
- No credit card
- Failed requests are free
- Works on all 218 endpoints