{
"id": "social.smallbury.graph.invite",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"inviteId",
"status",
"createdAt"
],
"properties": {
"status": {
"type": "string",
"description": "Lifecycle state. pending until accepted or revoked/expired.",
"knownValues": [
"pending",
"accepted",
"revoked",
"expired"
]
},
"inviteId": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Stable id for this invite; echoed in the signed invite token."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"expiresAt": {
"type": "string",
"format": "datetime",
"description": "Optional expiry; client should treat as expired after this time."
},
"revokedAt": {
"type": "string",
"format": "datetime"
},
"targetHint": {
"type": "string",
"maxLength": 256,
"description": "Optional human hint (e.g. email) for the inviter's UI; not used for cryptography."
},
"acceptedByDid": {
"type": "string",
"format": "did",
"description": "Set when status becomes accepted."
},
"intendedRecipientEncryptionPublicKey": {
"type": "bytes",
"maxLength": 256,
"description": "When set, only a party that proves possession of the matching private key can complete acceptance. Set for existing users at invite time; set by the new user on signup before accept completes."
}
}
},
"description": "Trust invitation from this actor to a contact. The invite URL carries a signed token bound to inviteId; acceptance must match intendedRecipientEncryptionPublicKey when set. Revocable by the inviter."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}