Skip to content

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.

Markdown · Authoritative OpenAPI

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 profile

The 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.