API reference
Base URL https://api.partita.io/v1. No key, no auth,
open CORS. Just call it. JSON in, JSON out, including the errors.
Machine-readable spec at
/v1/openapi.json,
agent summary at /llms.txt.
GET /v1/resolve
Resolves an artist URL to the canonical artist: the permanent ID,
profile data, and every link we have. Accepts URLs from:
spotify apple_music youtube instagram tiktok twitter soundcloud amazon_music wikipedia
curl "https://api.partita.io/v1/resolve?url=https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02"
{
"match": {
"platform": "spotify",
"externalId": "06HL4z0CvFAxyc27GXpf02",
"url": "https://open.spotify.com/artist/06HL4z0CvFAxyc27GXpf02",
"verified": true
},
"artist": {
"id": "art_…",
"name": "Taylor Swift",
"genres": ["pop"],
"imageUrl": "https://…",
"images": [{ "url": "https://…", "width": 640, "height": 640 }, …],
"links": [
{ "platform": "instagram", "url": "https://instagram.com/taylorswift", "verified": false },
{ "platform": "tiktok", "url": "https://tiktok.com/@taylorswift", "verified": false },
…
],
"spotify": {
"followers": 129000000,
"popularity": 100,
"monthlyListeners": 83000000,
"worldRank": 3,
"updatedAt": "2026-08-15T02:00:00.000Z"
},
"updatedAt": "2026-08-18T11:20:00.000Z"
}
}
Instagram, TikTok and other handle-based URLs resolve when the artist's
link graph contains that handle. On a miss (404 not_found)
or an unresolvable platform (400 unsupported_platform),
the response carries up to five name-based suggestions.
GET /v1/artists/:id
Look up an artist by its permanent art_ ID.
A pure cached read, built to be hit hard. Stale link graphs refresh in
the background, never on your request.
curl "https://api.partita.io/v1/artists/art_2Fw8XoYb3kQpVZC"
Returns the same artist object as /resolve, without the match wrapper.
The artist object
id string Permanent art_ ID. Never changes, never recycled. name string Canonical artist name. links array The cross-platform link graph: { platform, url, verified }. 40+ detected platform types. Works as a schema.org sameAs set. genres string[] Structured genre tags. imageUrl string | null Largest available image. images has every size: { url, width, height }. spotify object | null Spotify stats: { followers, popularity, monthlyListeners, worldRank, updatedAt }. Null when none are on record. updatedAt string | null ISO 8601 timestamp of the last update to the artist record. Within v1, response fields are only ever added, never removed or renamed.
Errors
Every failure is JSON with a machine-readable error code, never HTML.
invalid_request 400 A query or path parameter failed validation. An issues array lists what and why. invalid_url 400 The url parameter could not be parsed as a link at all. unsupported_platform 400 Parsed, but not a platform we can resolve directly (e.g. a Linktree). Comes with name-based suggestions when the handle is usable. not_found 404 No artist matches. /resolve includes suggestions when the URL handle is a usable search seed. rate_limited 429 Over 60 requests/minute from one IP. Honor the Retry-After header. internal_error 500 Something broke on our side. Safe to retry. Rate limits
60 requests per minute per IP, no key needed. Over the line you get
429 { "error": "rate_limited" } with a
Retry-After header. Need more? Free keys with
higher ceilings are coming, so join the list.
Stability
art_ IDs are permanent: never changed,
never recycled. Response fields within /v1
are only added, never removed. Endpoints won't disappear without a
dated deprecation notice. Unversioned paths
(api.partita.io/resolve, …) are temporary
aliases from before versioning. Use /v1.