{
"id": "net.anisota.beta.game.achievement",
"defs": {
"main": {
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"achievementId",
"category",
"name",
"unlockedAt",
"signature"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"description": "Display name of the achievement"
},
"tier": {
"type": "integer",
"minimum": 0,
"description": "Tier or milestone value (e.g., 1000 for followers-1000, 10 for level-10)"
},
"rarity": {
"enum": [
"common",
"uncommon",
"rare",
"epic",
"legendary"
],
"type": "string",
"description": "Rarity tier of the achievement"
},
"category": {
"enum": [
"followers",
"level",
"social",
"collection"
],
"type": "string",
"description": "Category of the achievement"
},
"metadata": {
"type": "unknown",
"description": "Additional achievement-specific data"
},
"xpReward": {
"type": "integer",
"minimum": 0,
"description": "Experience points awarded for this achievement"
},
"signature": {
"ref": "#signature",
"type": "ref"
},
"unlockedAt": {
"type": "string",
"format": "datetime",
"description": "When the achievement was unlocked"
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Description of what was accomplished"
},
"achievementId": {
"type": "string",
"maxLength": 100,
"description": "Unique identifier for the achievement (e.g., 'followers-1000', 'level-10')"
},
"verificationUri": {
"type": "string",
"format": "at-uri",
"description": "AT URI linking to the verification record on the Anisota brand PDS"
}
}
},
"description": "Record representing an achievement unlocked by a player"
},
"signature": {
"type": "object",
"required": [
"issuer",
"signedAt",
"sig"
],
"properties": {
"sig": {
"type": "string",
"description": "Base64-encoded cryptographic signature"
},
"issuer": {
"type": "string",
"description": "DID of the signing authority (Anisota backend)"
},
"signedAt": {
"type": "string",
"format": "datetime",
"description": "When the achievement was signed"
}
},
"description": "Cryptographic signature proving authenticity"
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}