app.placita.place

placita.app

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A place saved by a user. The primary entity of Placita: one record per place, stored in the user's own repository.",
      "key": "tid",
      "record": {
        "properties": {
          "category": {
            "description": "Place type from Placita's fixed list, for example restaurant, cafe or museum. Missing or unknown means generic.",
            "knownValues": [
              "generic",
              "restaurant",
              "fastfood",
              "cafe",
              "bar",
              "beer",
              "wine",
              "nightclub",
              "bakery",
              "grocery",
              "clothing",
              "shopping",
              "lodging",
              "campsite",
              "museum",
              "attraction",
              "viewpoint",
              "worship",
              "park",
              "playground",
              "sports",
              "swimming",
              "zoo",
              "cinema",
              "theatre",
              "library",
              "school",
              "college",
              "hospital",
              "pharmacy",
              "doctor",
              "dentist",
              "bank",
              "atm",
              "post",
              "police",
              "fuel",
              "parking",
              "bus",
              "rail",
              "airport",
              "ferry"
            ],
            "maxLength": 32,
            "type": "string"
          },
          "createdAt": {
            "description": "When the place was saved.",
            "format": "datetime",
            "type": "string"
          },
          "location": {
            "description": "Where the place is. Normally community.lexicon.location.geo: coordinates as strings, with the street address in its name field when known.",
            "refs": [
              "community.lexicon.location.geo",
              "community.lexicon.location.address"
            ],
            "type": "union"
          },
          "name": {
            "description": "Name of the place as the user saved it.",
            "maxGraphemes": 100,
            "maxLength": 300,
            "type": "string"
          },
          "note": {
            "description": "The user's own note about the place.",
            "maxGraphemes": 1000,
            "maxLength": 3000,
            "type": "string"
          },
          "noteTitle": {
            "description": "Optional short title for the note.",
            "maxGraphemes": 100,
            "maxLength": 100,
            "type": "string"
          },
          "openingHours": {
            "description": "Opening hours in OpenStreetMap opening_hours syntax, for example Mo-Su 09:00-18:00.",
            "maxLength": 512,
            "type": "string"
          },
          "osm": {
            "description": "Details in OpenStreetMap's own words (structured address, tags). Copied from OpenStreetMap when the place is linked (see checkedAt), and editable by the person (see editedAt). May also hold details typed for a place with no link. A copy made at a point in time: it is not kept up to date.",
            "ref": "#osmDetails",
            "type": "ref"
          },
          "osmId": {
            "description": "ID of the linked OpenStreetMap feature as a decimal string. Used together with osmType.",
            "maxLength": 32,
            "type": "string"
          },
          "osmType": {
            "description": "Type of the linked OpenStreetMap feature. Set only when the user confirmed the match. Used together with osmId.",
            "knownValues": [
              "node",
              "way",
              "relation"
            ],
            "type": "string"
          },
          "phone": {
            "description": "The place's phone number, as entered or taken from OpenStreetMap.",
            "maxLength": 64,
            "type": "string"
          },
          "photo": {
            "accept": [
              "image/png",
              "image/jpeg",
              "image/webp"
            ],
            "description": "Legacy single photo. Only older records have it. New records use photos.",
            "maxSize": 2000000,
            "type": "blob"
          },
          "photoCredit": {
            "description": "Who took the photos in photos, when they are not the person who owns this record, for example because they were copied from a public place of another person. Free text such as Photos by @alice.example. Only set together with photos.",
            "maxGraphemes": 100,
            "maxLength": 300,
            "type": "string"
          },
          "photos": {
            "description": "Photos the user uploaded for this place. Up to 4.",
            "items": {
              "accept": [
                "image/png",
                "image/jpeg",
                "image/webp"
              ],
              "maxSize": 2000000,
              "type": "blob"
            },
            "maxItems": 4,
            "type": "array"
          },
          "placeCode": {
            "description": "An opaque random code that names the place itself, for a place with no confirmed OpenStreetMap link. The person who first saves such a place makes it; every copy another person saves keeps it unchanged, so copies of one place can be found together. Not set when the place has an OpenStreetMap link, which names the place instead. Lowercase letters and the digits 2 to 7.",
            "maxLength": 64,
            "type": "string"
          },
          "rating": {
            "description": "The user's own rating of the place, from 1 (poor) to 5 (excellent). Only set when status is been. Absent means not rated.",
            "maximum": 5,
            "minimum": 1,
            "type": "integer"
          },
          "source": {
            "description": "Where the place came from: a map or review link the user pasted, an OpenStreetMap search result, or manual entry.",
            "knownValues": [
              "google",
              "foursquare",
              "osm",
              "apple",
              "tripadvisor",
              "manual"
            ],
            "type": "string"
          },
          "sourcePhotoAuthor": {
            "description": "Creator or credit text returned by Wikimedia Commons for sourcePhotoUrl.",
            "maxLength": 500,
            "type": "string"
          },
          "sourcePhotoLicense": {
            "description": "License of sourcePhotoUrl, e.g. CC BY-SA 4.0. Attribution duty applies when shown.",
            "maxLength": 64,
            "type": "string"
          },
          "sourcePhotoLicenseUrl": {
            "description": "License details URL returned by Wikimedia Commons.",
            "maxLength": 2048,
            "type": "string"
          },
          "sourcePhotoPageUrl": {
            "description": "Source file page URL for attribution and reuse details.",
            "maxLength": 2048,
            "type": "string"
          },
          "sourcePhotoSourceName": {
            "description": "Origin label for the source photo suggestion.",
            "maxLength": 128,
            "type": "string"
          },
          "sourcePhotoUrl": {
            "description": "URL of a free-licensed photo found for this place (Wikimedia Commons, OSM image tag, Wikidata P18). Not a blob - it is a reference to an external image, with attribution.",
            "maxLength": 2048,
            "type": "string"
          },
          "sourceUrl": {
            "description": "The link the place was created from, when there was one.",
            "maxLength": 2048,
            "type": "string"
          },
          "status": {
            "default": "want",
            "description": "want means the user wants to go there. been means the user has been there.",
            "knownValues": [
              "want",
              "been"
            ],
            "type": "string"
          },
          "tags": {
            "description": "The user's tags for this place, as strong references to app.placita.tag records.",
            "items": {
              "ref": "com.atproto.repo.strongRef",
              "type": "ref"
            },
            "maxLength": 50,
            "type": "array"
          },
          "visibility": {
            "default": "hidden",
            "description": "Whether Placita shows this place in public discovery. This is a display hint only: every record in an AT Protocol repository can be read by anyone, including hidden ones.",
            "knownValues": [
              "hidden",
              "public"
            ],
            "type": "string"
          },
          "website": {
            "description": "The place's website.",
            "maxLength": 2048,
            "type": "string"
          }
        },
        "required": [
          "name",
          "status",
          "visibility",
          "location",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "osmAddress": {
      "description": "A structured address, as OpenStreetMap returns it. Every part is optional.",
      "properties": {
        "city": {
          "description": "City, town or village.",
          "maxLength": 200,
          "type": "string"
        },
        "country": {
          "description": "Country name.",
          "maxLength": 200,
          "type": "string"
        },
        "countryCode": {
          "description": "Two-letter ISO 3166-1 country code, upper case.",
          "maxLength": 2,
          "minLength": 2,
          "type": "string"
        },
        "houseNumber": {
          "description": "House or building number.",
          "maxLength": 32,
          "type": "string"
        },
        "postcode": {
          "description": "Postal code.",
          "maxLength": 32,
          "type": "string"
        },
        "state": {
          "description": "Region or state.",
          "maxLength": 200,
          "type": "string"
        },
        "street": {
          "description": "Street or road name.",
          "maxLength": 200,
          "type": "string"
        },
        "suburb": {
          "description": "Neighbourhood, quarter or suburb.",
          "maxLength": 200,
          "type": "string"
        }
      },
      "type": "object"
    },
    "osmDetails": {
      "description": "Address and tags in OpenStreetMap's vocabulary: a copy of what OpenStreetMap knew about the linked feature at checkedAt, and/or what the person typed (editedAt). Data copied from OpenStreetMap is (c) OpenStreetMap contributors, available under the Open Database Licence (ODbL). Treat the values as suggestions: they can be wrong or out of date, and the user's own fields always win.",
      "properties": {
        "address": {
          "description": "The structured address OpenStreetMap has for the feature.",
          "ref": "#osmAddress",
          "type": "ref"
        },
        "checkedAt": {
          "description": "When the details were copied from OpenStreetMap. Absent for details that were only typed.",
          "format": "datetime",
          "type": "string"
        },
        "editedAt": {
          "description": "When the person last changed these details by hand, or typed them. Details with no checkedAt were never copied from OpenStreetMap.",
          "format": "datetime",
          "type": "string"
        },
        "tags": {
          "description": "Raw OpenStreetMap tags (key and value) of the feature, such as cuisine, wheelchair or wikidata. Tags already stored in other fields (name, website, phone, opening hours) and OpenStreetMap-internal tags (source, note, fixme) are left out. At most 60.",
          "items": {
            "ref": "#osmTag",
            "type": "ref"
          },
          "maxLength": 60,
          "type": "array"
        }
      },
      "type": "object"
    },
    "osmTag": {
      "description": "One OpenStreetMap tag.",
      "properties": {
        "key": {
          "description": "The tag key, for example cuisine.",
          "maxLength": 64,
          "type": "string"
        },
        "value": {
          "description": "The tag value, for example italian;pizza. Values over 255 characters are not stored.",
          "maxGraphemes": 255,
          "maxLength": 1024,
          "type": "string"
        }
      },
      "required": [
        "key",
        "value"
      ],
      "type": "object"
    }
  },
  "id": "app.placita.place",
  "lexicon": 1
}

Validate Record

Validate a record against app.placita.place

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

Metadata

DID
did:plc:sg5d3buklhrsufaej4n4hjzx
CID
bafyreievruefhj3uoxxsgapnrc7gpk6x4fyf5tsszr5mb7t2tolkn3hziq
Indexed At
2026-10-14 01:10 UTC
AT-URI
at://did:plc:sg5d3buklhrsufaej4n4hjzx/com.atproto.lexicon.schema/app.placita.place

Version History (4 versions)

Referenced Schemas (2)

Similar Lexicons

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

  • 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.

  • A user-created venue definition

  • A place embedded inline in a passport entry. Self-contained: carries name, coordinates, and enough identifiers for any AT Proto consumer to look up richer data from ATGeo (https://atgeo.org). atgeoCollection + atgeoRkey…

  • A place with a review

  • A record for keeping track of a place in Spots

Lexicon Garden

@