{
"id": "org.swappulse.voiceSpace",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"title",
"status",
"createdAt"
],
"properties": {
"title": {
"type": "string",
"maxLength": 120
},
"status": {
"type": "string",
"knownValues": [
"scheduled",
"live",
"ended",
"cancelled"
]
},
"endedAt": {
"type": "string",
"format": "datetime"
},
"hostDid": {
"type": "string",
"format": "did"
},
"hostName": {
"type": "string"
},
"platform": {
"type": "string",
"knownValues": [
"twitch",
"youtube",
"kick",
"facebook_gaming",
"rumble",
"custom",
"other"
]
},
"autoEndAt": {
"type": "string",
"format": "datetime"
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"startedAt": {
"type": "string",
"format": "datetime"
},
"streamUrl": {
"type": "string",
"format": "uri"
},
"topicTags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 30
},
"maxLength": 5
},
"coHostDids": {
"type": "array",
"items": {
"type": "string",
"format": "did"
},
"maxLength": 3
},
"hostAvatar": {
"type": "string",
"format": "uri"
},
"hostHandle": {
"type": "string"
},
"description": {
"type": "string",
"maxLength": 1000
},
"cardUrisDiscussed": {
"type": "array",
"items": {
"type": "string"
},
"maxLength": 20
},
"podcastEpisodeUri": {
"type": "string",
"format": "at-uri"
},
"recordingAvailable": {
"type": "boolean"
},
"viewerCountEstimate": {
"type": "integer"
},
"plannedDurationMinutes": {
"type": "integer",
"maximum": 480,
"minimum": 15
}
}
},
"description": "A live stream declaration."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"revision": 1,
"description": "Manual live stream declaration, mirrored to AT Protocol as a real org.swappulse.voiceSpace record so live streams are discoverable across instances. A collector goes live by pasting an external stream URL."
}