casset
AppsAPISign in
Headless API · Alpha

Build beyond Casset · public artist data

Build with Casset artist data.

Fetch an artist and their public Catalog with two simple GET endpoints. Build an artist site, discography, portfolio embed, public-data tool, or read-only agent integration in the framework you already use.

Deployed alpha, not production-supported. The unauthenticated routes may intentionally fail closed with 503 ResourceUnavailable, and no uptime, availability, or production-use commitment is offered. Start with the exact mocks or local route.

Run the quickstart See the /connor example
2unauthenticated GETs
503fail-closed today
0playback or media access
GET /api/v1/artists/aurora-fields/catalogLocal mock excerpt
{
  "schema": "casset.public-catalog.v1",
  "artist": {
    "handle": "aurora-fields",
    "displayName": "Aurora Fields"
  },
  "tracks": [
    { "title": "Afterlight", "kind": "ORIGINAL" },
    { "title": "Soft Static", "kind": "GENERATION" }
  ],
  "page": { "count": 2 }
}
SDK fixture excerpt · not a live-route checkNo audio · no artwork URL · no user id

Start with the outcome you need

Choose your path.

I want public artist data

Build beyond Casset.

Use public Artist and Catalog data for an artist website, metadata-only discography, portfolio embed, public-data tool, or read-only agent context. The caller does not become an installed App and receives no playback, private data, or media access.

Run the quickstart

I want to build inside Casset

Build a Casset App.

Use a host-seeded Profile or observation-only Track context for a profile experience, visualizer, game, collector experience around an existing Casset purchase, or artist-native extension. Casset keeps navigation, safe areas, permissions, checkout, playback, and the sole MediaFooter.

Open Apps guide

I need every technical detail

Read the API reference.

Inspect both endpoint schemas, response headers, empty states, privacy-preserving 404 behavior, cache rules, rate limits, typed errors, and request IDs.

Open API Reference

What you can build today

What works today.

Deployed · unsupported alpha

Public artist identity + Public catalog

The versioned, unauthenticated public identity route is deployed but is not available for supported production use; it may fail closed with 503 RESOURCE_UNAVAILABLE, with no uptime or availability commitment. The versioned, unauthenticated public Catalog route is deployed but is not available for supported production use; it may fail closed with 503 RESOURCE_UNAVAILABLE, with no uptime or availability commitment.

Development / local sandbox

Framework-neutral TypeScript SDK + React adapter

Repository-local contracts, parsers, typed errors, and HTTP client; not published to npm. Repository-local React bindings over the framework-neutral client.

Development / local sandbox

Sandbox credentials + Sandbox webhooks

Development-only credential issuance and immediate local revocation. Development-only signed delivery, retry, idempotency, and replay rehearsal.

Unavailable

Third-party App submission

Per-developer production issuance, persistence, grants, and revocation are unavailable. External submission, arbitrary bundle execution, and public package distribution are unavailable.

Public contract

Small enough to trust.

Both reads use explicit schema versions, strict response parsing, privacy-preserving 404s, and one typed error contract. Sparse or unavailable data stays explicit; clients never fill gaps with invented artist history. Versioned release data and production integration data are unavailable in this alpha.

GET /api/v1/artists/{handle}Exact local mock

Public Profile identity

  • canonical handle + display name
  • authored bio + verified state
  • canonical profile and Catalog links
  • no database identifier
GET /api/v1/artists/{handle}/catalogExact local mock

Public Catalog index

  • active Track title
  • ORIGINAL or GENERATION provenance
  • bounded duration
  • 2 fictional fixture rows in this local mock

TypeScript boundary

Core first. React optional.

Use @casset/apps for the framework-neutral Headless API client and native host contract. Add @casset/react when your outside-Casset frontend is React. The same public data boundary stays consistent in either case.

Repository-local alpha · not published to npm

Download React starter
server.tsframework-neutral
import { createCassetClient } from "@casset/apps"

const casset = createCassetClient({
  baseUrl: "http://127.0.0.1:3000"
})

const artist = await casset.getArtist("connor")
const catalog = await casset.getCatalog(artist.artist.handle)
Local only · resets with the process

Rehearse the dangerous parts safely.

The authenticated Developer Portal includes a separate Headless API sandbox. It lets you rehearse credentials, revocation, and signed webhooks for a server-side integration against the exact public contract—without claiming production persistence or turning an API key into native App authority.

One-time credential

Plaintext is revealed once. A hash, prefix, status, timestamps, and nonsecret binding metadata persist in process memory; revocation is checked on every request.

Sanitized inspection

Method, path, status, timing, and request ID—never authorization headers or response bodies.

Signed delivery

Timestamped HMAC, bounded retry, stable event identity, receiver idempotency, and explicit replay.

The next honest boundary

Durability comes with the database—not the demo.

The alpha is honest about its edge: the public read routes are deployed, while exact mocks and credentialed rehearsal remain local. The deployed reads are not supported for production use, may intentionally fail closed with 503 ResourceUnavailable, and carry no uptime or availability commitment. Durable production developer identity, credentials, grants, and webhook delivery remain unavailable and require an authorized normalized PostgreSQL migration plus operational controls. Deployment of the two unauthenticated GET routes does not create a supported developer platform or imply production access.

Read the contract Build a Casset App