org.shelfcheck.shelf.entry
A user's shelf entry for a book. Exactly one record per book per user (deduplicate by ids.olWorkId, then by isbn13, then by fuzzy title+author). Status, dates, rating and notes are all carried inline; aggregators and other apps may render the same record as a 'wantToRead' card or a 'finished' review depending on the status field.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | shelf.shelfcheck.org |
| Indexed |
Checks
Validmissing-primary-descriptiondefs.mainThe record has no description.large-stringdefs.main.record.properties.notemaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.main.record.properties.statusNo maxLength, maxGraphemes or format limits this string.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"key": "tid",
"record": {
"properties": {
"authors": {
"items": {
"ref": "org.shelfcheck.defs#authorRef",
"type": "ref"
},
"maxLength": 32,
"minLength": 1,
"type": "array"
},
"coverUrl": {
"description": "Remote cover image URL. Cover blobs are intentionally not uploaded to the PDS; clients may render via Open Library, the source URL, or their own cache.",
"format": "uri",
"type": "string"
},
"createdAt": {
"format": "datetime",
"type": "string"
},
"finishedAt": {
"format": "datetime",
"type": "string"
},
"firstPublishYear": {
"type": "integer"
},
"ids": {
"ref": "org.shelfcheck.defs#bookIds",
"type": "ref"
},
"note": {
"description": "Free-form private notes or a public review.",
"maxGraphemes": 15000,
"maxLength": 60000,
"type": "string"
},
"pageCount": {
"minimum": 0,
"type": "integer"
},
"rating": {
"description": "User rating, 0-100 (half-star resolution: 10 == 0.5★, 20 == 1★, ..., 100 == 5★).",
"maximum": 100,
"minimum": 0,
"type": "integer"
},
"source": {
"description": "Where this entry originated, for provenance: e.g. 'goodreads', 'hardcover', 'storygraph', 'bookhive', 'lyndi', 'manual'.",
"maxLength": 64,
"type": "string"
},
"sourceUrl": {
"description": "Canonical link back to the source record (e.g. the Goodreads or BookHive page).",
"format": "uri",
"type": "string"
},
"startedAt": {
"format": "datetime",
"type": "string"
},
"status": {
"knownValues": [
"org.shelfcheck.defs#wantToRead",
"org.shelfcheck.defs#reading",
"org.shelfcheck.defs#finished",
"org.shelfcheck.defs#abandoned"
],
"type": "string"
},
"subjects": {
"items": {
"maxLength": 256,
"type": "string"
},
"maxLength": 64,
"type": "array"
},
"title": {
"description": "Display title, denormalized so the record is self-contained.",
"maxLength": 1024,
"type": "string"
},
"updatedAt": {
"format": "datetime",
"type": "string"
}
},
"required": [
"status",
"title",
"authors",
"ids",
"createdAt"
],
"type": "object"
},
"type": "record"
}
},
"description": "A user's shelf entry for a book. Exactly one record per book per user (deduplicate by ids.olWorkId, then by isbn13, then by fuzzy title+author). Status, dates, rating and notes are all carried inline; aggregators and other apps may render the same record as a 'wantToRead' card or a 'finished' review depending on the status field.",
"id": "org.shelfcheck.shelf.entry",
"lexicon": 1
}