org.passingreads.book.event

passingreads.org

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "checkin": {
      "description": "The book has moved, but has not changed hands.",
      "properties": {
        "location": {
          "description": "Where the book is now (an h3 cell or an OSM place)",
          "refs": [
            "community.lexicon.location.hthree#main",
            "#osmLocation"
          ],
          "type": "union"
        }
      },
      "required": [
        "location"
      ],
      "type": "object"
    },
    "drop": {
      "description": "The book was left at a location for someone else to take.",
      "properties": {
        "location": {
          "description": "Where the book was left (an h3 cell or an OSM place)",
          "refs": [
            "community.lexicon.location.hthree#main",
            "#osmLocation"
          ],
          "type": "union"
        }
      },
      "required": [
        "location"
      ],
      "type": "object"
    },
    "find": {
      "description": "The book was picked up, and is now held by the actor.",
      "properties": {
        "location": {
          "description": "Where the book was picked up (an h3 cell or an OSM place)",
          "refs": [
            "community.lexicon.location.hthree#main",
            "#osmLocation"
          ],
          "type": "union"
        }
      },
      "required": [
        "location"
      ],
      "type": "object"
    },
    "gift": {
      "description": "The book was handed to a named person. It is theirs once they publish a #giftAcceptance.",
      "properties": {
        "location": {
          "description": "Where the handover happened, if the giver chose to record it.",
          "refs": [
            "community.lexicon.location.hthree#main",
            "#osmLocation"
          ],
          "type": "union"
        },
        "recipient": {
          "description": "The person the book was handed to, and the only one who may accept it.",
          "format": "did",
          "type": "string"
        }
      },
      "required": [
        "recipient"
      ],
      "type": "object"
    },
    "giftAcceptance": {
      "description": "The named recipient of a #gift has taken the book. Carries no signatures: the recipient need not hold the book's keypair, and the signed gift naming their repository is the authority instead.",
      "properties": {
        "gift": {
          "description": "The org.passingreads.book.event whose #gift is being accepted.",
          "ref": "com.atproto.repo.strongRef#main",
          "type": "ref"
        }
      },
      "required": [
        "gift"
      ],
      "type": "object"
    },
    "main": {
      "description": "The status of a book has changed.",
      "key": "tid",
      "record": {
        "properties": {
          "book": {
            "description": "The book that was dropped (a org.passingreads.book.registration)",
            "ref": "com.atproto.repo.strongRef#main",
            "type": "ref"
          },
          "details": {
            "description": "What happened to the book. Each member carries the fields that event type requires — notably whether a `location` is mandatory. Absent only on records written before this union existed, which carry `event` and a top-level `location` instead.",
            "refs": [
              "#drop",
              "#find",
              "#checkin",
              "#gift",
              "#giftAcceptance"
            ],
            "type": "union"
          },
          "event": {
            "description": "DEPRECATED: superseded by `details`, and ignored whenever `details` is present. Retained so this lexicon still describes records written before the union existed.",
            "knownValues": [
              "org.passingreads.book.checkin",
              "org.passingreads.book.drop",
              "org.passingreads.book.find"
            ],
            "type": "string"
          },
          "location": {
            "description": "DEPRECATED: superseded by the `location` inside `details`, and ignored whenever `details` is present. Retained so this lexicon still describes records written before the union existed.",
            "refs": [
              "community.lexicon.location.hthree#main",
              "#osmLocation"
            ],
            "type": "union"
          },
          "occurredAt": {
            "description": "Client-declared timestamp of when the book was dropped",
            "format": "datetime",
            "type": "string"
          },
          "signatures": {
            "description": "Inline attestations binding this event to the book's keypair. Empty only on a #giftAcceptance, whose authority is the referenced gift naming the accepting repository.",
            "items": {
              "ref": "org.passingreads.signature.book#main",
              "type": "ref"
            },
            "minLength": 0,
            "type": "array"
          }
        },
        "required": [
          "book",
          "signatures",
          "occurredAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "osmLocation": {
      "description": "A physical location from OpenStreetMap.",
      "properties": {
        "category": {
          "description": "The type of place (e.g., cafe, library, park).",
          "type": "string"
        },
        "name": {
          "description": "The name of the place from OpenStreetMap.",
          "type": "string"
        },
        "osmId": {
          "description": "The OpenStreetMap element ID in interoperable format: N (node), W (way), or R (relation) prefix followed by numeric ID. Example: N123456789",
          "type": "string"
        },
        "value": {
          "description": "The H3 cell index for proximity queries.",
          "type": "string"
        }
      },
      "required": [
        "osmId",
        "name",
        "value"
      ],
      "type": "object"
    }
  },
  "id": "org.passingreads.book.event",
  "lexicon": 1
}

Validate Record

Validate a record against org.passingreads.book.event

Validation Options
Automatically resolve and include external schemas for full validation
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:oeipalbxet5jghoqe6b6ctu6
CID
bafyreidycff5x4lqnibjthvxvxshaaohq2atwrrmocj4xpvcg36ue3cigi
Indexed At
2026-09-10 14:16 UTC
AT-URI
at://did:plc:oeipalbxet5jghoqe6b6ctu6/com.atproto.lexicon.schema/org.passingreads.book.event

Version History (6 versions)

Referenced Schemas (2)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

Lexicon Garden

@