at.atjam.round

atjam.at

Documentation

Declares a round under a parent jam.

main record

Declares a round under a parent jam.

Record Key tid Timestamp-based ID

Properties

acceptedSubmissionTypes array of string nsid Required

NSIDs of record types that can be submitted to this round (e.g. ['fm.plyr.track']).

maxLength: 32 itemsminLength: 1 items
assignment string Required

The prompt or brief participants are working against.

maxLength: 30000 bytesmaxGraphemes: 3000 graphemes
closingEvent unknown Optional

Optional structured closing event (e.g. a listening party, demo day). Records embedded here must include a $type discriminator.

createdAt string datetime Required

An RFC 3339 formatted timestamp.

joinMode string Optional

How the round handles signups. Three named patterns: 'open' (default): anyone can sign up; no invitation required. 'hosted': only invitees can sign up, and only the jam organizer can invite — like a guest list. 'network': only invitees can sign up; the organizer can invite, and so can current participants (with the threshold set by networkGate) — like a friend-of-a-friend network. For 'hosted' and 'network', a signup is only valid for readers when its 'invitation' field strong-refs an at.atjam.invitation written by a valid inviter. Unknown values resolve to 'open' for forward compatibility.

maxLength: 640 bytesmaxGraphemes: 64 graphemes
Known values: open, hosted, network
milestones array of ref #milestone Required

Dated milestones for this round. At minimum should include a submission deadline. State is derived by comparing now() to these dates.

maxLength: 16 itemsminLength: 1 items
name string Optional

Human label for this round (e.g. 'Round 26', 'December 2025'). Optional.

maxLength: 640 bytesmaxGraphemes: 64 graphemes
networkGate string Optional

Only meaningful when joinMode is 'network'. Defines the threshold a participant must cross before they're allowed to extend invitations. 'signup' (default): any DID with a valid signup can invite. 'contributed': only DIDs whose valid signup is accompanied by at least one at.atjam.submission to this round can invite. Ignored when joinMode is 'open' or 'hosted'. Unknown values resolve to 'signup' for forward compatibility.

maxLength: 640 bytesmaxGraphemes: 64 graphemes
Known values: signup, contributed
subject unknown Optional

Optional structured subject for the round. Records embedded here must include a $type discriminator. Example: a site.eptss.song record for an EPTSS round.

View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "jam",
      "assignment",
      "acceptedSubmissionTypes",
      "milestones",
      "createdAt"
    ],
    "properties": {
      "jam": {
        "ref": "com.atproto.repo.strongRef",
        "type": "ref",
        "description": "Strong-ref to the parent at.atjam.jam record."
      },
      "name": {
        "type": "string",
        "maxLength": 640,
        "description": "Human label for this round (e.g. 'Round 26', 'December 2025'). Optional.",
        "maxGraphemes": 64
      },
      "subject": {
        "type": "unknown",
        "description": "Optional structured subject for the round. Records embedded here must include a $type discriminator. Example: a site.eptss.song record for an EPTSS round."
      },
      "joinMode": {
        "type": "string",
        "maxLength": 640,
        "description": "How the round handles signups. Three named patterns: 'open' (default): anyone can sign up; no invitation required. 'hosted': only invitees can sign up, and only the jam organizer can invite — like a guest list. 'network': only invitees can sign up; the organizer can invite, and so can current participants (with the threshold set by networkGate) — like a friend-of-a-friend network. For 'hosted' and 'network', a signup is only valid for readers when its 'invitation' field strong-refs an at.atjam.invitation written by a valid inviter. Unknown values resolve to 'open' for forward compatibility.",
        "knownValues": [
          "open",
          "hosted",
          "network"
        ],
        "maxGraphemes": 64
      },
      "createdAt": {
        "type": "string",
        "format": "datetime"
      },
      "assignment": {
        "type": "string",
        "maxLength": 30000,
        "description": "The prompt or brief participants are working against.",
        "maxGraphemes": 3000
      },
      "milestones": {
        "type": "array",
        "items": {
          "ref": "#milestone",
          "type": "ref"
        },
        "maxLength": 16,
        "minLength": 1,
        "description": "Dated milestones for this round. At minimum should include a submission deadline. State is derived by comparing now() to these dates."
      },
      "networkGate": {
        "type": "string",
        "maxLength": 640,
        "description": "Only meaningful when joinMode is 'network'. Defines the threshold a participant must cross before they're allowed to extend invitations. 'signup' (default): any DID with a valid signup can invite. 'contributed': only DIDs whose valid signup is accompanied by at least one at.atjam.submission to this round can invite. Ignored when joinMode is 'open' or 'hosted'. Unknown values resolve to 'signup' for forward compatibility.",
        "knownValues": [
          "signup",
          "contributed"
        ],
        "maxGraphemes": 64
      },
      "closingEvent": {
        "type": "unknown",
        "description": "Optional structured closing event (e.g. a listening party, demo day). Records embedded here must include a $type discriminator."
      },
      "acceptedSubmissionTypes": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "nsid"
        },
        "maxLength": 32,
        "minLength": 1,
        "description": "NSIDs of record types that can be submitted to this round (e.g. ['fm.plyr.track'])."
      }
    }
  },
  "description": "Declares a round under a parent jam."
}
milestone object

No description available.

Properties

date string datetime Required

An RFC 3339 formatted timestamp.

label string Required

Short label. Known values get special UI treatment but unknown labels are accepted.

maxLength: 640 bytesmaxGraphemes: 64 graphemes
Known values: signup-deadline, submission-deadline, closing-event, results
View raw schema
{
  "type": "object",
  "required": [
    "label",
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "datetime"
    },
    "label": {
      "type": "string",
      "maxLength": 640,
      "description": "Short label. Known values get special UI treatment but unknown labels are accepted.",
      "knownValues": [
        "signup-deadline",
        "submission-deadline",
        "closing-event",
        "results"
      ],
      "maxGraphemes": 64
    }
  }
}

Lexicon Garden

@