social.skyphone.spot.review
A public review of a real-world place (restaurant, cafe, shop, etc.). Designed so any AT Protocol app can read, render, and aggregate place reviews regardless of which app created them.
Details · record, key tid
| Kind | record |
|---|---|
| Record key | tid |
| Authority | spot.skyphone.social |
| Indexed |
Checks
Validlarge-stringdefs.main.record.properties.textmaxLength is over 20 KB. Use a blob for content that large.unlimited-stringdefs.placeRef.properties.latitudeNo maxLength, maxGraphemes or format limits this string.unlimited-stringdefs.placeRef.properties.longitudeNo maxLength, maxGraphemes or format limits this string.
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"main": {
"description": "A public review of a real-world place (restaurant, cafe, shop, etc.). Designed so any AT Protocol app can read, render, and aggregate place reviews regardless of which app created them.",
"key": "tid",
"record": {
"properties": {
"category": {
"description": "Reviewer-chosen category of the place.",
"knownValues": [
"restaurant",
"cafe",
"bar",
"salon",
"clinic",
"hotel",
"gym",
"shop",
"other"
],
"maxLength": 64,
"type": "string"
},
"createdAt": {
"description": "When this review record was created.",
"format": "datetime",
"type": "string"
},
"lang": {
"description": "Primary language of the review text (BCP 47).",
"format": "language",
"type": "string"
},
"photos": {
"description": "Photos taken at or of the place.",
"items": {
"accept": [
"image/*"
],
"maxSize": 2000000,
"type": "blob"
},
"maxLength": 8,
"type": "array"
},
"place": {
"description": "The place being reviewed.",
"ref": "#placeRef",
"type": "ref"
},
"rating": {
"description": "Overall rating, 1 (worst) to 5 (best).",
"maximum": 5,
"minimum": 1,
"type": "integer"
},
"subject": {
"description": "Optional reference to a feed post (app.bsky.feed.post) announcing this review, if the author chose to cross-post.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"text": {
"description": "Free-form review body.",
"maxGraphemes": 3000,
"maxLength": 30000,
"type": "string"
},
"visitedAt": {
"description": "When the reviewer visited the place. Clients SHOULD truncate to date precision to avoid leaking the reviewer's real-time location.",
"format": "datetime",
"type": "string"
}
},
"required": [
"place",
"rating",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"placeRef": {
"properties": {
"id": {
"description": "Place identifier within the source namespace.",
"maxLength": 256,
"type": "string"
},
"latitude": {
"description": "Optional decimal latitude as a string (e.g. \"35.6812\"), for self-describing records.",
"type": "string"
},
"longitude": {
"description": "Optional decimal longitude as a string (e.g. \"139.7671\").",
"type": "string"
},
"name": {
"description": "Display name of the place at the time of review, so records remain human-readable even if the source registry is unavailable.",
"maxGraphemes": 300,
"type": "string"
},
"source": {
"description": "Namespace of the place identifier. Reviews referring to the same (source, id) pair describe the same place.",
"knownValues": [
"skyphone",
"osm",
"google"
],
"maxLength": 64,
"type": "string"
}
},
"required": [
"source",
"id"
],
"type": "object"
}
},
"id": "social.skyphone.spot.review",
"lexicon": 1
}