{
  "schemas": [
    {
      "$id": "https://tune.toys/schemas/platform/api-error.schema.json",
      "title": "ApiError",
      "description": "Error envelope returned by every failing API response. `requestId` echoes the X-Request-Id response header."
    },
    {
      "$id": "https://tune.toys/schemas/platform/api-key-scopes.schema.json",
      "title": "ApiKeyScopes",
      "description": "Scopes granted to one developer API key."
    },
    {
      "$id": "https://tune.toys/schemas/platform/api-key.schema.json",
      "title": "ApiKey",
      "description": "Metadata of one developer API key. The secret is returned once at creation or rotation and never stored in plain text."
    },
    {
      "$id": "https://tune.toys/schemas/platform/api-usage.schema.json",
      "title": "ApiUsage",
      "description": "Metered usage of one developer app in UTC hourly or daily windows. Counters are informational and may lag by up to 30 seconds."
    },
    {
      "$id": "https://tune.toys/schemas/platform/artifact.schema.json",
      "title": "ArtifactDescriptor",
      "description": "One registered build output of a product version. digest, size, inventory, targetProfile, format and arch never change; a correction is a new artifact."
    },
    {
      "$id": "https://tune.toys/schemas/platform/common.schema.json",
      "title": "PlatformCommon",
      "description": "Shared scalar formats referenced by the other platform contracts."
    },
    {
      "$id": "https://tune.toys/schemas/platform/developer-app.schema.json",
      "title": "DeveloperApp",
      "description": "A developer app groups API keys, usage, webhooks and a tier. `tier` is the last observed effective tier, computed from the owner's feature:api.pro grant."
    },
    {
      "$id": "https://tune.toys/schemas/platform/enums.schema.json",
      "title": "PlatformEnums",
      "description": "Closed platform enums. Generated TypeScript exports each as a type and an as-const array; this file is their single source."
    },
    {
      "$id": "https://tune.toys/schemas/platform/license-certificate.schema.json",
      "title": "LicenseCertificate",
      "description": "Offline license certificate payload (tunetoys.license-certificate/1), signed in a SignedEnvelope with the license key. Contains no device ID, email or handle. allowedMajor or until is absent for the all update policy."
    },
    {
      "$id": "https://tune.toys/schemas/platform/listing-revision.schema.json",
      "title": "ListingRevisionContent",
      "description": "Content of one product listing revision. The effective value of a field is overrides[field] ?? generated[field]."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-analysis.schema.json",
      "title": "SoundAnalysis",
      "description": "One engine run over a media version: its state, the facet summary the index reads and the full report. A newer engine version appends a row; the resolved view takes the newest ready one."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-item.schema.json",
      "title": "SoundItem",
      "description": "The mutable catalog entry of one upload: what people see and edit (title, artwork, tags, declared musical fields, visibility). Bytes and rights live on its versions. Server-owned counters and the resolved view are separate shapes here."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-relation.schema.json",
      "title": "SoundRelation",
      "description": "A directional relation between two media items, created by either owner. Symmetric in the UI; a relation to an item the viewer cannot read is omitted."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-rendition.schema.json",
      "title": "SoundRendition",
      "description": "One derived artifact of a media version (peaks, preview, thumbnail, score page, piano roll, beats). Immutable; unique per version, kind, recipe, toolchain and profile."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-version.schema.json",
      "title": "SoundVersion",
      "description": "One immutable upload of a media item: bytes, digest, rights, what the probe found and the tags the file carried. Never edited after creation; releases pin versions."
    },
    {
      "$id": "https://tune.toys/schemas/platform/media-vocabulary.schema.json",
      "title": "MediaVocabulary",
      "description": "The closed vocabularies of the Sounds catalog as one document (served to editors and used as the zero-shot tag prompts). The long lists (`Instrument`, `Genre`, `Mood`) are defined here; the short ones reference enums.schema.json. Generated TypeScript exports each titled list as a type and an as-const array."
    },
    {
      "$id": "https://tune.toys/schemas/platform/notification-event.schema.json",
      "title": "NotificationEvent",
      "description": "Input of the single notify helper. params holds ICU arguments (ids, counts, handles), never rendered strings or private content."
    },
    {
      "$id": "https://tune.toys/schemas/platform/platform-matrix.schema.json",
      "title": "PlatformMatrix",
      "description": "Per-version platform matrix: one entry per target profile. included means an artifact exists, supported is a creator claim, tested requires evidence."
    },
    {
      "$id": "https://tune.toys/schemas/platform/post.schema.json",
      "title": "PostContent",
      "description": "Author-supplied content of a review, comment or reply. Server-owned fields (author, verified owner, root, depth, pins, state) are not part of it. Replies inherit subject and team scope from their root."
    },
    {
      "$id": "https://tune.toys/schemas/platform/signed-envelope.schema.json",
      "title": "SignedEnvelope",
      "description": "Ed25519 envelope for update manifests and license certificates. The signature covers a purpose-specific domain prefix followed by the exact payload bytes; verifiers check it before parsing and never re-canonicalize."
    },
    {
      "$id": "https://tune.toys/schemas/platform/sound-search.schema.json",
      "title": "SoundSearchParams",
      "description": "Query of GET /v1/sounds and /v1/sounds/facets: every filter optional, bounded, and owned by the page URL. Facet counts answer for the same filter set."
    },
    {
      "$id": "https://tune.toys/schemas/platform/storefront-revision.schema.json",
      "title": "StorefrontRevisionContent",
      "description": "Content of one publisher storefront revision: validated theme tokens and ordered typed sections. Storefronts are data, never code."
    },
    {
      "$id": "https://tune.toys/schemas/platform/update-manifest.schema.json",
      "title": "UpdateManifest",
      "description": "Signed update feed payload for one product and channel (tunetoys.update-manifest/1). Lists artifact digests, never URLs or tickets. Signed in a SignedEnvelope with the update_feed key."
    },
    {
      "$id": "https://tune.toys/schemas/platform/webhook.schema.json",
      "title": "Webhook",
      "description": "A pro-tier webhook endpoint. Deliveries are signed with TuneToys-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256(secret, t + \".\" + body)>."
    },
    {
      "$id": "https://tune.toys/schemas/toy-0.1.0.schema.json",
      "title": "ToyDocument",
      "description": "Draft local authoring contract. Validation is not runtime admission or a release certificate."
    }
  ]
}
