Partner Metadata API
Single lookup
Cover art and metadata for one asset, looked up by identifier.
GET/api/v1/metadata/album-cover
Album cover art + album/recording metadata for one asset, looked up by identifier.
Query parameters#
| Param | Description |
|---|---|
isrc | Recording identifier. Hyphens/spaces tolerated (US-RC1-23-45678 and USRC12345678 both work). |
iswc | Work identifier (T-123.456.789-0; undotted T1234567890 also accepted). |
external_id | A reporting-company internal ID. v1 matches MLC song codes only; tell us which other ID types you hold and we will wire them. |
title, artist, album | Optional. The song title, performing artist, and album title from your statement. Used only to verify the identifier result (see the verification block below) and, if you opt in, to seed the fallback. They are not identifiers and never change which asset an identifier resolves to. |
writer | Optional, repeatable (or pipe-separated). Statement writer/composer name(s). When no identifier resolves, we resolve the composition by title corroborated by a writer and cover it from that work's recordings. This is how identifier-less rows (e.g. an ASCAP statement: composer + title, no ISRC/ISWC/artist) get a cover. |
allow_title_fallback | Optional, true/false (default false). Opt in to the covers-only artist+title fallback described below. |
Provide at least one identifier, or title and writer, or title and artist with allow_title_fallback=true.
Send everything you have. When you send both isrc and iswc, they cross-check each other. See matched.confirmed and identifier_conflict. A title and artist let us tell you when a bad statement ISRC resolved to the wrong asset.
Verification (recommended for catching bad ISRCs). Pass the title and artist from your statement alongside the identifier. We resolve by identifier as usual, then compare our resolved metadata to what you sent and return a verification block. When both your title and artist disagree with the resolved asset, we add a metadata_mismatch warning, the strong signal that the statement ISRC is wrong. We only warn when both disagree, so a writer-vs-performer name difference or a formatting quirk will not false-alarm.
Title and writer, for rows with no identifier. You pass a title and one or more writer names, and no identifier resolves. We then resolve the composition by title corroborated by a writer, never by title alone. We return the cover from that work's recordings.
We flag such a result via: "title_writer" and confidence: "low". It suits a source like ASCAP that carries a composer and a title, but no ISRC, ISWC or performing artist.
Title-search fallback. Opt-in, low confidence, covers only. By default this endpoint uses identifiers only. A closest match by title is exactly the failure that produces a wrong cover.
Pass allow_title_fallback=true with a title and artist, and we search by artist and title when no identifier resolves. We return a cover only when the match is unambiguous, meaning exactly one recording matches. Anything ambiguous returns a 404 rather than a guess.
We flag such a result via: "title_search" and confidence: "low", with a title_search_fallback warning. Treat it as best effort, not as authority.
Response (200)#
{
"schema_version": "1.0",
"cover": {
"url": "https://...mzstatic.com/.../1400x1400bb.jpg",
"url_template": "https://...mzstatic.com/.../{w}x{h}bb.jpg",
"source": "apple"
},
"song": {
"title": "Black Sheep",
"duration_ms": 183000,
"track_number": 3,
"preview_url": "https://...",
"apple_music_url": "https://music.apple.com/..."
},
"album": {
"name": "Original Album",
"release_date": "2021-03-19",
"artist_name": "Kng Ego",
"genres": ["Hip-Hop/Rap"],
"label": "Label Records",
"upc": "0001112223334",
"album_type": "Album"
},
"matched": {
"via": "isrc",
"isrc": "USRC12345678",
"iswc": "T-123.456.789-0",
"apple_album_id": "1440857781",
"confirmed": true,
"confidence": "high"
},
"verification": {
"supplied_title": "Black Sheep",
"supplied_artist": "Kng Ego",
"supplied_album": null,
"resolved_title": "Black Sheep",
"resolved_artist": "Kng Ego",
"resolved_album": "Original Album",
"title_match": true,
"artist_match": true,
"verdict": "match"
},
"warnings": []
}
Field notes:
cover.urlis a public Apple CDN link (1400x1400).cover.url_templatecontains literal{w}x{h}placeholders; substitute any size you need. Fetch and store on your side; we serve links, not image bytes.- Cover choice is deterministic: the song's own album, preferring the earliest artwork-bearing release (the original release). This replaces the "latest released" heuristic that picks re-releases and compilations.
songcarries recording-level extras Apple gives us on the same lookup (duration, track number, a short audio preview URL, the Apple Music page).matchedtells you how the asset was identified.viais the identifier that anchored the result (title_writerfor a title + writer resolution, ortitle_searchfor the opt-in fallback).confirmed: truemeans two independent identifiers (ISRC and ISWC) agreed.confidenceishighfor an identifier resolution andlowfor atitle_writerortitle_searchresult.verificationappears only when you passtitle/artist/album.verdictreflects the fields you supplied:match(all agree),mismatch(all disagree),partial(mixed, only when you supply both title and artist). The actionable signal is themetadata_mismatchwarning, raised only when you supplied both a title and an artist and both disagree, so a title-only or artist-only request can readverdict: mismatchwithout the warning.warningssurface degraded-but-servable outcomes instead of hiding them:identifier_conflict: your ISRC and ISWC point at different works, or an unconfirmed ISRC result conflicts with the title evidence you supplied. We anchor on the ISWC (work-level identity is the trustworthy one when statements carry bad ISRCs) and tell you, so you can flag the statement row.metadata_mismatch: your supplied title AND artist both disagree with the resolved asset, a likely wrong statement ISRC. The cover is still returned; treat it as suspect.title_search_fallback: the result came from the opt-in low-confidence artist+title search, not an identifier. Best-effort, not authoritative.artwork_unavailable: the asset resolved but we hold no cover; metadata fields are still populated where known.isrc_invalid_ignored/iswc_invalid_ignored: one identifier was malformed; we proceeded on the valid one.iswc_unmatched: the ISWC is unknown to us; the result is ISRC-anchored.
- Missing values are explicit
nulls, never invented. "Unknown Artist" will never appear. - Identifier-only 200 responses are publicly cacheable for a day:
Cache-Control: public, max-age=86400. Responses that include supplied verification or fallback fields are private-cacheable for a day:Cache-Control: private, max-age=86400.
Error responses#
| Status | Code | Meaning |
|---|---|---|
| 400 | VALIDATION_ERROR | No identifier supplied. |
| 400 | INVALID_IDENTIFIER | The only supplied identifier is malformed; param names it, error explains the expected format. |
| 401 | AUTH_MISSING | Missing Authorization: Bearer <token> header. |
| 401 | AUTH_INVALID | Invalid, expired, or revoked API key. |
| 403 | API_KEY_KIND_INVALID | A shared internal key was used where a partner trk_ key is required. |
| 403 | SCOPE_MISSING | The API key does not include the required covers:read scope. |
| 404 | ASSET_NOT_FOUND | Valid identifier, but no asset matched. For external_id misses, hint explains coverage. |
| 429 | RATE_LIMITED | Rate limited; honour Retry-After. |
| 503 | SOURCE_UNAVAILABLE | Our cover source is temporarily down. Retry after the Retry-After interval. This is never conflated with 404. |
Quickstart#
# By ISRC
curl -s -H "Authorization: Bearer $TRK_KEY" \
"https://ingest.takerecord.com/api/v1/metadata/album-cover?isrc=USRC12345678"
# By ISWC only (no ISRC needed: this is the lookup ACRCloud could not do)
curl -s -H "Authorization: Bearer $TRK_KEY" \
"https://ingest.takerecord.com/api/v1/metadata/album-cover?iswc=T-123.456.789-0"
# Both: the identifiers cross-check each other; watch matched.confirmed / warnings
curl -s -H "Authorization: Bearer $TRK_KEY" \
"https://ingest.takerecord.com/api/v1/metadata/album-cover?isrc=USRC12345678&iswc=T-123.456.789-0"