See the contract become an artist site.
Switch between the two public reads and their meaningful UI states. The request inspector, response body, and rendered discography use the exact v1 field shapes without media, private data, or playback.
Try the exact Artist and Catalog shapes, then switch through empty, invalid, missing, rate-limited, and unavailable states. No account or credential is required.
Public artist website fixture
Connor James
@connor · verified
Multi-instrumentalist, singer/songwriter, and producer.
- 01Baby Blue3:07
- 02Pretty LiesDuration unavailable
- 03Lilacs3:24
GET /api/v1/artists/connor/catalog
- Cache-Control
- public, max-age=0, must-revalidate
- X-Request-Id
- docs-catalog-ready-001
{
"schema": "casset.public-catalog.v1",
"artist": {
"handle": "connor",
"displayName": "Connor James"
},
"tracks": [
{
"title": "Baby Blue",
"kind": "ORIGINAL",
"durationSec": 187
},
{
"title": "Pretty Lies",
"kind": "ORIGINAL",
"durationSec": null
},
{
"title": "Lilacs",
"kind": "ORIGINAL",
"durationSec": 204
}
],
"page": {
"count": 3
}
}curl --include \
--header "Accept: application/json" \
--header "X-Request-Id: docs-catalog-ready-001" \
http://127.0.0.1:3000/api/v1/artists/connor/catalogasync function loadConnor() {
const response = await fetch("http://127.0.0.1:3000/api/v1/artists/connor/catalog", {
headers: {
accept: "application/json",
"x-request-id": "docs-catalog-ready-001",
},
})
const requestId = response.headers.get("x-request-id")
const body: unknown = await response.json()
if (!response.ok) {
console.error("Casset request failed", {
requestId,
kind: "HTTP_" + response.status,
})
}
return { status: response.status, requestId, body }
}What the example proves
- One public Artist response can render identity, biography, verification, and canonical links.
- One public Catalog response can render 0–500 Track metadata rows or an honest empty state.
- Invalid handles fail with
InvalidRequest; 404 usesResourceUnavailablewithstatus === 404. - Rate limits and temporary failures keep the request ID visible without logging a response body.
- No response includes audio, artwork, internal IDs, private handles, credentials, or playback control.
Connect it locally
Run Casset locally, then use the copied request againsthttp://127.0.0.1:3000. The public routes need no credential. If you rehearse the credentialed sandbox counterparts, keep the one-time value in a server or development proxy and never expose it to browser code.
Continue with the endpoint reference, the React adapter, or the generatedHeadless React starter.