place.birds.sighting

birds.place

Schema Diff

+8 -0

From

CID
bafyreien2thdw2d...
Indexed At
2026-07-28 01:00 UTC
View this version

To

CID
bafyreihwtl3wmzv...
Indexed At
2026-07-29 21:42 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 2 non-breaking changes.

Non-Breaking Changes (2)
  • AddedVertex AddedVertex { vertex_id: "place.birds.sighting:body.thumb" }
  • AddedEdge AddedEdge { src: "place.birds.sighting:body", tgt: "place.birds.sighting:body.thumb", kind: "prop", name: Some("thumb") }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "place.birds.sighting:body.thumb" }

Additional Notes

  • Non-breaking: AddedEdge { src: "place.birds.sighting:body", tgt: "place.birds.sighting:body.thumb", kind: "prop", name: Some("thumb") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "location": {
5 5
      "properties": {
6 6
        "latitude": {
7 7
          "description": "Decimal degrees, as a string to avoid float drift. Deliberately coarse: clients should write no more than 3 decimal places (~110m). These records are public and permanent, and a bird sighting does not need a precise fix.",
8 8
          "maxLength": 32,
9 9
          "type": "string"
10 10
        },
11 11
        "longitude": {
12 12
          "description": "Decimal degrees, as a string. Same precision limit as latitude.",
13 13
          "maxLength": 32,
14 14
          "type": "string"
15 15
        },
16 16
        "name": {
17 17
          "description": "Free-text place name, as the observer chose it (e.g. \"Montrose Point Bird Sanctuary, Chicago\"). Independent of the coordinates and not verified against them.",
18 18
          "maxGraphemes": 160,
19 19
          "maxLength": 640,
20 20
          "type": "string"
21 21
        }
22 22
      },
23 23
      "required": [
24 24
        "latitude",
25 25
        "longitude"
26 26
      ],
27 27
      "type": "object"
28 28
    },
29 29
    "main": {
30 30
      "description": "A bird sighting logged by the observer, stored in their own repository. Honor system: `species` is what the observer believes they saw, not a verified determination.",
31 31
      "key": "tid",
32 32
      "record": {
33 33
        "properties": {
34 34
          "count": {
35 35
            "description": "How many individuals the observer counted. Absent means one, or means they did not count.",
36 36
            "maximum": 100000,
37 37
            "minimum": 1,
38 38
            "type": "integer"
39 39
          },
40 40
          "createdAt": {
41 41
            "description": "Client-declared timestamp for when this record was written.",
42 42
            "format": "datetime",
43 43
            "type": "string"
44 44
          },
45 45
          "location": {
46 46
            "description": "Roughly where the bird was. Optional, and deliberately coarse — see #location.",
47 47
            "ref": "#location",
48 48
            "type": "ref"
49 49
          },
50 50
          "media": {
51 51
            "description": "Evidence, in whatever form it was captured: a photo, a video, or a recording of the call. Ordered as the observer added it.",
52 52
            "items": {
53 53
              "ref": "#media",
54 54
              "type": "ref"
55 55
            },
56 56
            "maxLength": 4,
57 57
            "type": "array"
58 58
          },
59 59
          "notes": {
60 60
            "description": "Anything else the observer wants to say about the sighting: behaviour, plumage, who they were with.",
61 61
            "maxGraphemes": 600,
62 62
            "maxLength": 3000,
63 63
            "type": "string"
64 64
          },
65 65
          "observedAt": {
66 66
            "description": "Client-declared timestamp for when the bird was seen. Distinct from createdAt so a sighting can be written up later. Not verified by anything.",
67 67
            "format": "datetime",
68 68
            "type": "string"
69 69
          },
70 70
          "species": {
71 71
            "description": "Common name as the observer said it. Free text on purpose — always present, even when no code was resolved.",
72 72
            "maxGraphemes": 160,
73 73
            "maxLength": 640,
74 74
            "type": "string"
75 75
          },
76 76
          "speciesCode": {
77 77
            "description": "The observer's asserted identification as a stable eBird/Clements taxon code (e.g. `norcar`). Present when they picked from the list; absent when they just typed something. May be a `spuh` or `slash` code when the identification is honestly partial.",
78 78
            "maxLength": 32,
79 79
            "type": "string"
80 +
          },
81 +
          "thumb": {
82 +
            "accept": [
83 +
              "image/*"
84 +
            ],
85 +
            "description": "The image the observer chose to represent this sighting in compact views. Must be either an image in `media` or a `thumb` belonging to an item in `media`; clients should ignore unrelated blobs.",
86 +
            "maxSize": 100000000,
87 +
            "type": "blob"
80 88
          }
81 89
        },
82 90
        "required": [
83 91
          "species",
84 92
          "observedAt",
85 93
          "createdAt"
86 94
        ],
87 95
        "type": "object"
88 96
      },
89 97
      "type": "record"
90 98
    },
91 99
    "media": {
92 100
      "properties": {
93 101
        "alt": {
94 102
          "description": "Alt text describing the media for people who cannot see or hear it.",
95 103
          "maxGraphemes": 400,
96 104
          "maxLength": 2000,
97 105
          "type": "string"
98 106
        },
99 107
        "blob": {
100 108
          "accept": [
101 109
            "image/*",
102 110
            "audio/*",
103 111
            "video/*"
104 112
          ],
105 113
          "description": "The captured file. Audio is first-class here: a bird's call is often better evidence than a photograph of a silhouette.",
106 114
          "maxSize": 100000000,
107 115
          "type": "blob"
108 116
        },
109 117
        "thumb": {
110 118
          "accept": [
111 119
            "image/jpeg",
112 120
            "image/png",
113 121
            "image/webp"
114 122
          ],
115 123
          "description": "A still representing this media — for a video, a frame the observer chose. Derived from `blob`, never captured separately, so a client may regenerate it. Absent for media that is already an image.",
116 124
          "maxSize": 2000000,
117 125
          "type": "blob"
118 126
        }
119 127
      },
120 128
      "required": [
121 129
        "blob"
122 130
      ],
123 131
      "type": "object"
124 132
    }
125 133
  },
126 134
  "id": "place.birds.sighting",
127 135
  "lexicon": 1
128 136
}

Compare Other Versions

Lexicon Garden

@