{
"id": "support.supper.membership.tier",
"defs": {
"main": {
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"membership",
"membershipTier",
"createdAt"
],
"properties": {
"badge": {
"ref": "#badge",
"type": "ref",
"description": "Optional public badge presentation for members of this tier. Badge ownership is verified from active recurring payment state, not by this display object alone."
},
"image": {
"ref": "#image",
"type": "ref",
"description": "Optional public tier image."
},
"archived": {
"type": "boolean",
"description": "Whether this tier is no longer available for new supporters."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When this public tier record was created."
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When this public tier record was last updated."
},
"membership": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "The parent support.supper.membership.program record."
},
"membershipTier": {
"ref": "com.atproto.repo.strongRef",
"type": "ref",
"description": "The app-neutral money.atmosphere.membership.tier record this Supper sidecar presents. Resolve benefits and access hierarchy there, then follow tier.product for canonical title, description, images, and recurring prices."
},
"contentCollections": {
"type": "array",
"items": {
"type": "string",
"format": "nsid"
},
"maxLength": 16,
"description": "Permissioned record collections this tier space currently supports, for cross-app discovery."
}
}
},
"description": "A public Supper membership tier sidecar. It links Supper-specific image, badge, and permissioned-content presentation to the app-neutral ATM membership tier, which owns benefits, display order, and access rank and points to the canonical Product for title, description, images, and price resolution. Private welcome messages and member lists stay off public records; member-only content may be written as permissioned PDS records when supported."
},
"badge": {
"type": "object",
"properties": {
"image": {
"ref": "#image",
"type": "ref",
"description": "Optional public badge image."
},
"label": {
"type": "string",
"maxLength": 800,
"description": "Public label displayed for this tier-specific badge.",
"maxGraphemes": 80
},
"accentColor": {
"type": "string",
"maxLength": 7,
"description": "Optional #RRGGBB color used to present the badge in Supper."
}
}
},
"image": {
"type": "object",
"properties": {
"alt": {
"type": "string",
"maxLength": 3000,
"description": "Alternative text for the tier or badge image.",
"maxGraphemes": 300
},
"uri": {
"type": "string",
"format": "uri",
"description": "Optional Supper CDN rendering fallback for clients that cannot resolve the PDS blob."
},
"blob": {
"type": "blob",
"accept": [
"image/jpeg",
"image/png",
"image/webp",
"image/gif"
],
"maxSize": 4194304,
"description": "Portable tier or badge image stored on the creator's PDS."
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}