Onchain music NFT protocol with a Sound Edition contract standard, tiered mint schedules, and a TypeScript SDK for releases and indexed metadata.
- 01music NFT releases
- 02tiered/golden-egg mint schedules
- 03artist drop pages
- 04music collector portfolios
- 05song-level royalties
- pnpm add @soundxyz/sdk viem
| Variable | Scope | Description |
|---|---|---|
| SOUND_API_KEY | Server | Sound.xyz API key (request via Discord) for indexed event/metadata reads. |
Use the Sound SDK for music NFT mints and indexed reads. Construct with `const sound = SoundClient({ apiKey: process.env.SOUND_API_KEY, transport: http() })`. Fetch a release via `sound.release.fromHandle({ artistHandle, releaseSlug })`, then call `sound.edition.eligibleQuantity({ editionAddress, mintSchedule, account })` to gate UI before mint. Execute the mint with `sound.edition.mint({ mintSchedule, quantity, account })` which builds a viem transaction. Listen for indexed mints via the GraphQL endpoint at `https://api.sound.xyz/graphql` (auth header `x-sound-api-key`).
- ⚑Sound.xyz consumer site went offline in early 2026 — the Sound Protocol contracts and SDK still work, but the indexed GraphQL/API may stop serving new releases; budget for self-indexing via reservoir or direct event logs.
- ⚑Sound Edition uses ERC-721A batch minting — `tokenId` is sequential per edition, not per mint schedule, so allowlist + public + golden-egg schedules all share the same ID space; UI must group by schedule for analytics.
- ⚑Royalties are enforced at the contract level (EIP-2981) but Sound historically used the operator filter; downstream marketplaces that ignore it (Blur, X2Y2 by mode) skip royalties — pin secondary listings to royalty-honoring venues.
- ⚑Mint schedules include `signed` configurations requiring a Sound-issued signature — calling `mint()` without it reverts with `InvalidSignature`; always go through the SDK rather than constructing the call yourself.
- ⚑Audio + cover art metadata is pinned to Sound's IPFS provider; archival collectors should re-pin via Filebase/Pinata since the project's hosted gateway may not persist beyond their indexed window.
- ⚑Each chain has separate Sound Protocol deployments — passing an Ethereum edition address to an Optimism client returns `EditionNotFound`.