{
"id": "at.atjam.submission",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"round",
"createdAt"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Fallback deliverable for work not on ATProto: a plain link (itch.io build, hosted doc, etc.). Unverifiable and mutable, so prefer payload when the deliverable is a record. Ignored when payload is present."
},
"note": {
"type": "string",
"maxLength": 3000,
"description": "Optional caption/description from the submitter.",
"maxGraphemes": 300
},
"round": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Strong-ref to the at.atjam.round record being submitted to."
},
"payload": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "Preferred deliverable: a strong-ref to the record on its native ATProto app. The referenced record's $type SHOULD appear in the round's acceptedSubmissionTypes."
},
"createdAt": {
"type": "string",
"format": "datetime"
}
}
},
"description": "Declares a submission by the record creator to the referenced round."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1,
"description": "A participant's submission to a round. atjam does not host the deliverable; it points at it. The strong way is `payload` — a strong-ref to a record on whichever ATProto app owns the data (plyr.fm track, standard.site post, etc.), which is content-addressed, verifiable, and portable. The fallback is `url` — a plain link, for deliverables that don't live on ATProto yet (an itch.io build, a hosted doc). Prefer payload; `url` is the humble alternative. The lexicon can't express \"one-of\" across fields, so both are optional here and the \"at least one\" rule is enforced in code (Submission.getDeliverable). The submitter's DID is implicit (the record creator)."
}