Partita

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.