{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://docs.wherever.audio/schemas/webhooks/envelope/v1.json",
  "title": "Wherever webhook event (CloudEvents 1.0)",
  "description": "One event as delivered: a CloudEvents 1.0 structured event. `data` is described by the schema at the event's `dataschema` URL.",
  "type": "object",
  "properties": {
    "specversion": {
      "const": "1.0"
    },
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Unique per event per registration; the idempotency key."
    },
    "type": {
      "type": "string",
      "pattern": "^audio\\.wherever\\.",
      "examples": [
        "audio.wherever.app.started",
        "audio.wherever.app.foregrounded",
        "audio.wherever.app.backgrounded",
        "audio.wherever.playback.started",
        "audio.wherever.playback.paused",
        "audio.wherever.playback.progress",
        "audio.wherever.playback.seeked",
        "audio.wherever.playback.ended",
        "audio.wherever.show.viewed",
        "audio.wherever.show.refreshed",
        "audio.wherever.show.episodesFound",
        "audio.wherever.show.followed",
        "audio.wherever.show.unfollowed",
        "audio.wherever.episode.viewed",
        "audio.wherever.episode.downloaded",
        "audio.wherever.episode.downloadFailed",
        "audio.wherever.episode.downloadDeleted",
        "audio.wherever.episode.shown",
        "audio.wherever.episode.dismissed",
        "audio.wherever.episode.markedDone",
        "audio.wherever.queue.added",
        "audio.wherever.queue.removed",
        "audio.wherever.search.performed",
        "audio.wherever.library.snapshot",
        "audio.wherever.library.refreshed"
      ]
    },
    "source": {
      "type": "string",
      "minLength": 1,
      "description": "Identifies the sending install; opaque to receivers."
    },
    "time": {
      "type": "string",
      "format": "date-time"
    },
    "datacontenttype": {
      "const": "application/json"
    },
    "dataschema": {
      "type": "string",
      "format": "uri"
    },
    "data": {
      "type": "object"
    }
  },
  "required": [
    "specversion",
    "id",
    "type",
    "source",
    "time",
    "datacontenttype",
    "dataschema",
    "data"
  ]
}
