rootvine-mcp
Neutral commerce resolution for AI agents — music live, ranked by trust, never by commission.
Should I use this
Quality & Safety
Findings (2)
- MEDIUMin resolve_game
- MEDIUMin find_product
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"rootvine-mcp": {
"command": "npx",
"args": [
"rootvine-mcp"
]
}
}
}Runnable packages
1.4.0stdioRemote endpoints
https://mcp.rootvine.ai/mcpstreamable-httpWhat it can do
Tool inventory
Tools (5)
🟢resolve_music(query, slug)
Live stream, buy and collect links for a song or album — streaming services, digital stores, vinyl and CD — ranked by trust, price and availability, never by commission. Call it rather than recall: links and prices change; a guessed link 404s. Pass the user's words as `query` ("galway girl by ed sheeran"); never build slugs. On a miss, `did_you_mean` lists close matches, each with a `query` to pass back; when `resolved_as.corrected` is true, tell the user which recording is shown. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "What to look up, in the user's own words: 'galway girl by ed sheeran', 'Abbey Road vinyl'. Also takes a BeatsVine page address or a `query` value from an earlier answer. Do not build slugs.",
"type": "string",
"maxLength": 500
},
"slug": {
"description": "Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.",
"type": "string",
"maxLength": 500
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"success",
"partial",
"no_results"
]
},
"artist": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"kind": {
"anyOf": [
{
"type": "string",
"enum": [
"track",
"album"
]
},
{
"type": "null"
}
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"merchant": {
"type": "string"
},
"merchant_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"purchase",
"stream",
"subscription"
]
},
"trust_tier": {
"type": "string",
"enum": [
"authoritative",
"verified",
"listed"
]
},
"availability": {
"type": "string",
"enum": [
"in_stock",
"preorder",
"available",
"unknown"
]
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": [
"amount",
"currency"
],
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "null when no price is listed — never zero, never free"
},
"click_url": {
"type": "string",
"description": "The link to give the user"
},
"url": {
"type": "string"
},
"ranking_reason": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"code",
"summary"
],
"additionalProperties": {}
},
"price_freshness": {
"type": "string"
},
"edition": {
"type": "string"
}
},
"required": [
"rank",
"merchant",
"merchant_id",
"type",
"trust_tier",
"availability",
"price",
"click_url",
"url",
"ranking_reason"
],
"additionalProperties": {}
}
},
"partial_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sources that did not answer: say so when not empty"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"resolved_as": {
"type": "object",
"properties": {
"query": {
"type": [
"string",
"null"
]
},
"via": {
"anyOf": [
{
"type": "string",
"enum": [
"direct",
"catalogue_search",
"live_lookup"
]
},
{
"type": "null"
}
]
},
"corrected": {
"type": "boolean",
"description": "The answer is for different words than asked: tell the user what is shown"
},
"note": {
"type": [
"string",
"null"
]
}
},
"required": [
"query",
"via",
"corrected",
"note"
],
"additionalProperties": {}
},
"did_you_mean": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"artist": {
"type": [
"string",
"null"
]
},
"kind": {
"type": "string",
"enum": [
"track",
"album",
"artist"
]
},
"query": {
"type": "string",
"description": "Pass back as `query` to open exactly this"
},
"page_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"artist",
"kind",
"query",
"page_url"
],
"additionalProperties": {}
}
},
"page_url": {
"description": "The BeatsVine page, only when it is confirmed to exist",
"type": [
"string",
"null"
]
},
"cover_art": {
"type": [
"string",
"null"
]
},
"response_id": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string",
"description": "Every link existed at this time"
},
"ttl_seconds": {
"type": [
"number",
"null"
]
}
},
"required": [
"status",
"artist",
"title",
"kind",
"results",
"partial_sources",
"warnings",
"resolved_as",
"did_you_mean",
"page_url",
"cover_art",
"response_id",
"resolved_at",
"ttl_seconds"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {}
}🟢resolve_game(query, slug)
Where to buy a video game. Not live yet: every call returns an explicit "coming soon" — no links, no prices — and contacts no store. Tell the user plainly that games aren't supported yet; never guess a store link or a price. For music, use resolve_music. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "The game's name in plain words: 'Elden Ring'.",
"type": "string",
"maxLength": 500
},
"slug": {
"description": "Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.",
"type": "string",
"maxLength": 500
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"coming_soon",
"success",
"partial",
"no_results"
]
},
"live": {
"type": "boolean",
"description": "false: games are not live yet — there are no links or prices to give"
},
"query": {
"type": "string"
},
"message": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"merchant": {
"type": "string"
},
"merchant_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"purchase",
"stream",
"subscription"
]
},
"trust_tier": {
"type": "string",
"enum": [
"authoritative",
"verified",
"listed"
]
},
"availability": {
"type": "string",
"enum": [
"in_stock",
"preorder",
"available",
"unknown"
]
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": [
"amount",
"currency"
],
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "null when no price is listed — never zero, never free"
},
"click_url": {
"type": "string",
"description": "The link to give the user"
},
"url": {
"type": "string"
},
"ranking_reason": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"code",
"summary"
],
"additionalProperties": {}
},
"price_freshness": {
"type": "string"
},
"edition": {
"type": "string"
}
},
"required": [
"rank",
"merchant",
"merchant_id",
"type",
"trust_tier",
"availability",
"price",
"click_url",
"url",
"ranking_reason"
],
"additionalProperties": {}
}
},
"response_id": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string"
}
},
"required": [
"status",
"live",
"query",
"message",
"results",
"response_id",
"resolved_at"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {}
}🟢find_product(query, category)
Start here when the category is unclear. Pass the user's words as `query`; RootVine reads music or games from them (keyword-based — set `category` when you know it) and answers in that tool's shape. Music is live; games answer "coming soon" for now. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 500,
"description": "The user's words: 'where can I stream Bad Guy by Billie Eilish', 'Mario Kart on Switch'."
},
"category": {
"description": "Set it when you know it; 'auto' (the default) reads it from the words.",
"type": "string",
"enum": [
"music",
"game",
"auto"
]
}
},
"required": [
"query"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"music",
"game"
]
},
"detected": {
"type": "boolean",
"description": "true: the category was read from the words — set `category` if it is wrong"
},
"music": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"success",
"partial",
"no_results"
]
},
"artist": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"kind": {
"anyOf": [
{
"type": "string",
"enum": [
"track",
"album"
]
},
{
"type": "null"
}
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"merchant": {
"type": "string"
},
"merchant_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"purchase",
"stream",
"subscription"
]
},
"trust_tier": {
"type": "string",
"enum": [
"authoritative",
"verified",
"listed"
]
},
"availability": {
"type": "string",
"enum": [
"in_stock",
"preorder",
"available",
"unknown"
]
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": [
"amount",
"currency"
],
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "null when no price is listed — never zero, never free"
},
"click_url": {
"type": "string",
"description": "The link to give the user"
},
"url": {
"type": "string"
},
"ranking_reason": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"code",
"summary"
],
"additionalProperties": {}
},
"price_freshness": {
"type": "string"
},
"edition": {
"type": "string"
}
},
"required": [
"rank",
"merchant",
"merchant_id",
"type",
"trust_tier",
"availability",
"price",
"click_url",
"url",
"ranking_reason"
],
"additionalProperties": {}
}
},
"partial_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sources that did not answer: say so when not empty"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"resolved_as": {
"type": "object",
"properties": {
"query": {
"type": [
"string",
"null"
]
},
"via": {
"anyOf": [
{
"type": "string",
"enum": [
"direct",
"catalogue_search",
"live_lookup"
]
},
{
"type": "null"
}
]
},
"corrected": {
"type": "boolean",
"description": "The answer is for different words than asked: tell the user what is shown"
},
"note": {
"type": [
"string",
"null"
]
}
},
"required": [
"query",
"via",
"corrected",
"note"
],
"additionalProperties": {}
},
"did_you_mean": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"artist": {
"type": [
"string",
"null"
]
},
"kind": {
"type": "string",
"enum": [
"track",
"album",
"artist"
]
},
"query": {
"type": "string",
"description": "Pass back as `query` to open exactly this"
},
"page_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"artist",
"kind",
"query",
"page_url"
],
"additionalProperties": {}
}
},
"page_url": {
"description": "The BeatsVine page, only when it is confirmed to exist",
"type": [
"string",
"null"
]
},
"cover_art": {
"type": [
"string",
"null"
]
},
"response_id": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string",
"description": "Every link existed at this time"
},
"ttl_seconds": {
"type": [
"number",
"null"
]
}
},
"required": [
"status",
"artist",
"title",
"kind",
"results",
"partial_sources",
"warnings",
"resolved_as",
"did_you_mean",
"page_url",
"cover_art",
"response_id",
"resolved_at",
"ttl_seconds"
],
"additionalProperties": {}
},
"game": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"coming_soon",
"success",
"partial",
"no_results"
]
},
"live": {
"type": "boolean",
"description": "false: games are not live yet — there are no links or prices to give"
},
"query": {
"type": "string"
},
"message": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"merchant": {
"type": "string"
},
"merchant_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"purchase",
"stream",
"subscription"
]
},
"trust_tier": {
"type": "string",
"enum": [
"authoritative",
"verified",
"listed"
]
},
"availability": {
"type": "string",
"enum": [
"in_stock",
"preorder",
"available",
"unknown"
]
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": [
"amount",
"currency"
],
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "null when no price is listed — never zero, never free"
},
"click_url": {
"type": "string",
"description": "The link to give the user"
},
"url": {
"type": "string"
},
"ranking_reason": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"code",
"summary"
],
"additionalProperties": {}
},
"price_freshness": {
"type": "string"
},
"edition": {
"type": "string"
}
},
"required": [
"rank",
"merchant",
"merchant_id",
"type",
"trust_tier",
"availability",
"price",
"click_url",
"url",
"ranking_reason"
],
"additionalProperties": {}
}
},
"response_id": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string"
}
},
"required": [
"status",
"live",
"query",
"message",
"results",
"response_id",
"resolved_at"
],
"additionalProperties": {}
}
},
"required": [
"category",
"detected"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {}
}🟢resolve_artist(query, slug)
An artist's live profile and discography from BeatsVine, for "what else has X made" or "X's albums". Each release has a `query` to pass to resolve_music for its links; vinyl, CD and collector editions are album-level, so this is the route to them. Pass the artist's name as `query`. `discography_complete: false` means not yet indexed — unknown, not empty. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "The artist's name in plain words: 'Stromae', 'Billie Eilish'. Also takes a BeatsVine artist address or an `artist/…` query from an earlier answer.",
"type": "string",
"maxLength": 500
},
"slug": {
"description": "Deprecated alias for `query`, kept for older clients. Send exactly one of `query` or `slug`.",
"type": "string",
"maxLength": 500
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"success",
"no_results"
]
},
"artist": {
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"query": {
"type": "string",
"description": "Pass back to resolve_artist to open this artist"
},
"page_url": {
"type": "string"
},
"genres": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"query",
"page_url",
"genres"
],
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"discography_complete": {
"description": "false: BeatsVine has not indexed this artist yet — an empty list means unknown, not none",
"type": [
"boolean",
"null"
]
},
"release_count": {
"type": [
"number",
"null"
]
},
"releases": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"type": {
"type": [
"string",
"null"
]
},
"year": {
"type": [
"number",
"null"
]
},
"query": {
"type": "string",
"description": "Pass to resolve_music for this release's links"
},
"page_url": {
"type": [
"string",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"type",
"year",
"query",
"page_url",
"cover_url"
],
"additionalProperties": {}
}
},
"resolved_as": {
"type": "object",
"properties": {
"query": {
"type": [
"string",
"null"
]
},
"via": {
"anyOf": [
{
"type": "string",
"enum": [
"direct",
"catalogue_search",
"live_lookup"
]
},
{
"type": "null"
}
]
},
"corrected": {
"type": "boolean",
"description": "The answer is for different words than asked: tell the user what is shown"
},
"note": {
"type": [
"string",
"null"
]
}
},
"required": [
"query",
"via",
"corrected",
"note"
],
"additionalProperties": {}
},
"did_you_mean": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"artist": {
"type": [
"string",
"null"
]
},
"kind": {
"type": "string",
"enum": [
"track",
"album",
"artist"
]
},
"query": {
"type": "string",
"description": "Pass back as `query` to open exactly this"
},
"page_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"artist",
"kind",
"query",
"page_url"
],
"additionalProperties": {}
}
},
"resolved_at": {
"type": "string"
}
},
"required": [
"status",
"artist",
"discography_complete",
"release_count",
"releases",
"resolved_as",
"did_you_mean",
"resolved_at"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {}
}🟢discover_music(chamber, wall, year, limit, resolve)
Browse live charts, genre and mood walls, editorial playlists, artist spotlights, and chart snapshots back to 1946 — "what's trending", "number one in 1994". Charts move weekly: call rather than recall. No arguments gives the chambers and featured walls; `year` gives that year's snapshots; `wall` gives its entries, each with a `query` for resolve_music. Add `resolve: true` with `wall` to get number one's links in the same call. RootVine never fabricates. Every link existed at resolved_at. Limits: UK-focused stores, prices in GBP; music only today — games are not live yet. On partial, say which sources didn't answer; on no_results, tell the user plainly — never fall back to guessing a link.
Input Schema
{
"type": "object",
"properties": {
"chamber": {
"description": "Chamber to browse; omit for an overview of all chambers and featured walls. 'by-genre' = genre corridors. 'for-this-moment' = moods and activities. 'charts' = live streaming charts. 'by-era' = decades. 'spotlights' = artist features.",
"type": "string",
"enum": [
"by-genre",
"for-this-moment",
"charts",
"by-era",
"spotlights"
]
},
"wall": {
"description": "A wall or chart-snapshot slug from an earlier answer (a BeatsVine wall address also works). Lists its entries; position 1 is number one. Takes priority over `chamber` and `year`.",
"type": "string",
"maxLength": 500
},
"year": {
"description": "Chart snapshots from this year (1946 to now), for questions about the past — 'number one in 1994'. Pass a snapshot's slug back as `wall` for its entries. Takes priority over `chamber`.",
"type": "integer",
"minimum": 1946,
"maximum": 2100
},
"limit": {
"description": "Max walls, entries or snapshots to return: 10 by default, 30 at most.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 30
},
"resolve": {
"description": "With `wall`: also fetch number one's stream and buy links, in the same call.",
"type": "boolean"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Output Schema
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"foyer",
"chamber",
"wall",
"archives"
]
},
"source_url": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string"
},
"total": {
"type": [
"number",
"null"
]
},
"chambers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"tagline": {
"type": [
"string",
"null"
]
},
"wall_count": {
"type": "number"
}
},
"required": [
"slug",
"name",
"tagline",
"wall_count"
],
"additionalProperties": {}
}
},
"chamber": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"tagline": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"tagline"
],
"additionalProperties": {}
},
"walls": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Pass as `wall` to list its entries"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"entry_count": {
"type": "number"
},
"attribution": {
"type": [
"string",
"null"
]
},
"page_url": {
"type": "string"
}
},
"required": [
"slug",
"name",
"description",
"entry_count",
"attribution",
"page_url"
],
"additionalProperties": {}
}
},
"wall": {
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"entity_type": {
"type": [
"string",
"null"
]
},
"attribution": {
"type": [
"string",
"null"
]
},
"page_url": {
"type": "string"
}
},
"required": [
"slug",
"name",
"description",
"entity_type",
"attribution",
"page_url"
],
"additionalProperties": {}
},
"entries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"position": {
"type": "number"
},
"title": {
"type": [
"string",
"null"
]
},
"artist": {
"type": [
"string",
"null"
]
},
"kind": {
"anyOf": [
{
"type": "string",
"enum": [
"track",
"album",
"artist"
]
},
{
"type": "null"
}
]
},
"query": {
"description": "Pass to resolve_music (resolve_artist for an artist) for links; null: no BeatsVine page yet",
"type": [
"string",
"null"
]
},
"page_url": {
"type": [
"string",
"null"
]
},
"cover_url": {
"type": [
"string",
"null"
]
},
"preview_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"position",
"title",
"artist",
"kind",
"query",
"page_url",
"cover_url",
"preview_url"
],
"additionalProperties": {}
}
},
"year": {
"type": [
"number",
"null"
]
},
"years": {
"type": "array",
"items": {
"type": "number"
}
},
"snapshots": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Pass as `wall`, with resolve: true for number one's links"
},
"name": {
"type": "string"
},
"week": {
"type": [
"string",
"null"
]
},
"entry_count": {
"type": "number"
},
"page_url": {
"type": "string"
}
},
"required": [
"slug",
"name",
"week",
"entry_count",
"page_url"
],
"additionalProperties": {}
}
},
"top": {
"description": "Number one's links, when resolve was asked for",
"anyOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"success",
"partial",
"no_results"
]
},
"artist": {
"type": [
"string",
"null"
]
},
"title": {
"type": [
"string",
"null"
]
},
"kind": {
"anyOf": [
{
"type": "string",
"enum": [
"track",
"album"
]
},
{
"type": "null"
}
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rank": {
"type": "number"
},
"merchant": {
"type": "string"
},
"merchant_id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"purchase",
"stream",
"subscription"
]
},
"trust_tier": {
"type": "string",
"enum": [
"authoritative",
"verified",
"listed"
]
},
"availability": {
"type": "string",
"enum": [
"in_stock",
"preorder",
"available",
"unknown"
]
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"amount": {
"type": "number"
},
"currency": {
"type": "string"
}
},
"required": [
"amount",
"currency"
],
"additionalProperties": {}
},
{
"type": "null"
}
],
"description": "null when no price is listed — never zero, never free"
},
"click_url": {
"type": "string",
"description": "The link to give the user"
},
"url": {
"type": "string"
},
"ranking_reason": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"summary": {
"type": "string"
}
},
"required": [
"code",
"summary"
],
"additionalProperties": {}
},
"price_freshness": {
"type": "string"
},
"edition": {
"type": "string"
}
},
"required": [
"rank",
"merchant",
"merchant_id",
"type",
"trust_tier",
"availability",
"price",
"click_url",
"url",
"ranking_reason"
],
"additionalProperties": {}
}
},
"partial_sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Sources that did not answer: say so when not empty"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"resolved_as": {
"type": "object",
"properties": {
"query": {
"type": [
"string",
"null"
]
},
"via": {
"anyOf": [
{
"type": "string",
"enum": [
"direct",
"catalogue_search",
"live_lookup"
]
},
{
"type": "null"
}
]
},
"corrected": {
"type": "boolean",
"description": "The answer is for different words than asked: tell the user what is shown"
},
"note": {
"type": [
"string",
"null"
]
}
},
"required": [
"query",
"via",
"corrected",
"note"
],
"additionalProperties": {}
},
"did_you_mean": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"artist": {
"type": [
"string",
"null"
]
},
"kind": {
"type": "string",
"enum": [
"track",
"album",
"artist"
]
},
"query": {
"type": "string",
"description": "Pass back as `query` to open exactly this"
},
"page_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"title",
"artist",
"kind",
"query",
"page_url"
],
"additionalProperties": {}
}
},
"page_url": {
"description": "The BeatsVine page, only when it is confirmed to exist",
"type": [
"string",
"null"
]
},
"cover_art": {
"type": [
"string",
"null"
]
},
"response_id": {
"type": [
"string",
"null"
]
},
"resolved_at": {
"type": "string",
"description": "Every link existed at this time"
},
"ttl_seconds": {
"type": [
"number",
"null"
]
}
},
"required": [
"status",
"artist",
"title",
"kind",
"results",
"partial_sources",
"warnings",
"resolved_as",
"did_you_mean",
"page_url",
"cover_art",
"response_id",
"resolved_at",
"ttl_seconds"
],
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"top_note": {
"type": [
"string",
"null"
]
}
},
"required": [
"mode",
"source_url",
"resolved_at",
"total"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": {}
}Community
Evidence