Taste
Get Brendan’s portable public music taste profile
GET /.well-known/taste-profile.json
A bounded version 1 projection of the same canonical D1-owned music records used by the website, REST, Cap’n Web, and MCP.
Request policy
- Operation
getTasteProfile- Access
- anonymous
- Automatic retries
- None
- Redirects
- Returned to the caller without following
- Request body limit
- No request body
- Pagination
- No collection iterator
Parameters
No path or query parameters.
Responses
200
Portable taste profile document
Response headers
{
"Content-Usage": {
"description": "IETF AIPREF usage preferences for this public content",
"schema": {
"type": "string",
"examples": [
"train-ai=y, search=y"
]
}
},
"Content-Signal": {
"description": "Compatibility AI usage preferences for deployed crawlers",
"schema": {
"type": "string",
"examples": [
"ai-train=yes, search=yes, ai-input=yes"
]
}
},
"API-Version": {
"description": "Selected public REST contract version",
"schema": {
"type": "string",
"enum": [
"1.0.0"
]
}
},
"RateLimit-Policy": {
"description": "Public REST quota policy: 1000 Worker requests per 60 seconds for each source and Cloudflare location",
"schema": {
"type": "string"
}
},
"RateLimit-Limit": {
"description": "Compatibility form of the current public REST request limit",
"schema": {
"type": "integer",
"enum": [
1000
]
}
},
"ETag": {
"description": "Entity tag for conditional requests",
"schema": {
"type": "string"
}
},
"Last-Modified": {
"description": "Last modification date (HTTP IMF-fixdate)",
"schema": {
"type": "string",
"pattern": "^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), [0-9]{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$",
"examples": [
"Sun, 06 Sep 2026 17:40:13 GMT"
]
}
},
"Cache-Control": {
"description": "Caching directives",
"schema": {
"type": "string"
}
}
}application/taste-profile+json; version=1
TasteProfileDocumentV1
Schema details
profile object required
Schema details
schemaVersion unknown required
subject object
Schema details
canonicalUrl string (uri)
displayName string
music object required
Schema details
artists object[] required
Schema details
object
Schema details
name string required
stance string required
Allowed: "love" | "like" | "curious" | "avoid"
weight number
externalIds object
Schema details
spotify-artist string
recordings object[] required
Schema details
object
Schema details
title string required
artist string required
stance string required
Allowed: "love" | "like" | "curious" | "avoid"
weight number
externalIds object
Schema details
isrc string
spotify-track string
albums object[] required
Schema details
object
Schema details
title string required
artist string required
stance string required
Allowed: "love" | "like" | "curious" | "avoid"
weight number
externalIds object
Schema details
discogs-master string
discogs-release string
genres object[] required
Schema details
object
Schema details
name string required
stance string required
Allowed: "love" | "like" | "curious" | "avoid"
weight number
notes string[] required
Schema details
string
canonicalUrl string required (uri)
generatedAt string required (date-time)
source object required
Schema details
type unknown required
musicCollection string (uri)
mcpServerCard string (uri)
304
Not Modified
Examples
Examples use synthetic fixture values. Replace fixture identifiers with public IDs returned by the service. Request bodies and precise locations are transient; keep them out of logs.
curl
curl --fail-with-body --max-time 30 --max-filesize 16777216 --request GET 'https://irvinebroque.com/.well-known/taste-profile.json' --header 'Accept: application/taste-profile+json; version=1'TypeScript
import { PublicApi } from '@irvinebroque/public-api';
const api = new PublicApi();
const result = await api.taste.profile({});
console.log(result.status, result.headers.get('content-type')); // Keep transient capabilities in memory.CLI
irvinebroque taste profileThe SDK preserves status, headers, and the server envelope. A 304 has no fresh body. Errors retain structured problem details; ordinary error messages omit response details. Responses are limited to 16 MiB and requests time out after 30 seconds by default.