place.birds.sighting

birds.place

Schema Diff

+10 -0

From

CID
bafyreifdudzznkx...
Indexed At
2026-07-27 20:03 UTC
View this version

To

CID
bafyreien2thdw2d...
Indexed At
2026-07-28 01:00 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#media.thumb" }
  • AddedEdge AddedEdge { src: "place.birds.sighting#media", tgt: "place.birds.sighting#media.thumb", kind: "prop", name: Some("thumb") }

Migration Guidance

Added Elements

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

Additional Notes

  • Non-breaking: AddedEdge { src: "place.birds.sighting#media", tgt: "place.birds.sighting#media.thumb", kind: "prop", name: Some("thumb") }
1 1
{
2 2
  "id": "place.birds.sighting",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 10
          "species",
11 11
          "observedAt",
12 12
          "createdAt"
13 13
        ],
14 14
        "properties": {
15 15
          "count": {
16 16
            "type": "integer",
17 17
            "maximum": 100000,
18 18
            "minimum": 1,
19 19
            "description": "How many individuals the observer counted. Absent means one, or means they did not count."
20 20
          },
21 21
          "media": {
22 22
            "type": "array",
23 23
            "items": {
24 24
              "ref": "#media",
25 25
              "type": "ref"
26 26
            },
27 27
            "maxLength": 4,
28 28
            "description": "Evidence, in whatever form it was captured: a photo, a video, or a recording of the call. Ordered as the observer added it."
29 29
          },
30 30
          "notes": {
31 31
            "type": "string",
32 32
            "maxLength": 3000,
33 33
            "description": "Anything else the observer wants to say about the sighting: behaviour, plumage, who they were with.",
34 34
            "maxGraphemes": 600
35 35
          },
36 36
          "species": {
37 37
            "type": "string",
38 38
            "maxLength": 640,
39 39
            "description": "Common name as the observer said it. Free text on purpose — always present, even when no code was resolved.",
40 40
            "maxGraphemes": 160
41 41
          },
42 42
          "location": {
43 43
            "ref": "#location",
44 44
            "type": "ref",
45 45
            "description": "Roughly where the bird was. Optional, and deliberately coarse — see #location."
46 46
          },
47 47
          "createdAt": {
48 48
            "type": "string",
49 49
            "format": "datetime",
50 50
            "description": "Client-declared timestamp for when this record was written."
51 51
          },
52 52
          "observedAt": {
53 53
            "type": "string",
54 54
            "format": "datetime",
55 55
            "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."
56 56
          },
57 57
          "speciesCode": {
58 58
            "type": "string",
59 59
            "maxLength": 32,
60 60
            "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."
61 61
          }
62 62
        }
63 63
      },
64 64
      "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."
65 65
    },
66 66
    "media": {
67 67
      "type": "object",
68 68
      "required": [
69 69
        "blob"
70 70
      ],
71 71
      "properties": {
72 72
        "alt": {
73 73
          "type": "string",
74 74
          "maxLength": 2000,
75 75
          "description": "Alt text describing the media for people who cannot see or hear it.",
76 76
          "maxGraphemes": 400
77 77
        },
78 78
        "blob": {
79 79
          "type": "blob",
80 80
          "accept": [
81 81
            "image/*",
82 82
            "audio/*",
83 83
            "video/*"
84 84
          ],
85 85
          "maxSize": 100000000,
86 86
          "description": "The captured file. Audio is first-class here: a bird's call is often better evidence than a photograph of a silhouette."
87 +
        },
88 +
        "thumb": {
89 +
          "type": "blob",
90 +
          "accept": [
91 +
            "image/jpeg",
92 +
            "image/png",
93 +
            "image/webp"
94 +
          ],
95 +
          "maxSize": 2000000,
96 +
          "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."
87 97
        }
88 98
      }
89 99
    },
90 100
    "location": {
91 101
      "type": "object",
92 102
      "required": [
93 103
        "latitude",
94 104
        "longitude"
95 105
      ],
96 106
      "properties": {
97 107
        "name": {
98 108
          "type": "string",
99 109
          "maxLength": 640,
100 110
          "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.",
101 111
          "maxGraphemes": 160
102 112
        },
103 113
        "latitude": {
104 114
          "type": "string",
105 115
          "maxLength": 32,
106 116
          "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."
107 117
        },
108 118
        "longitude": {
109 119
          "type": "string",
110 120
          "maxLength": 32,
111 121
          "description": "Decimal degrees, as a string. Same precision limit as latitude."
112 122
        }
113 123
      }
114 124
    }
115 125
  },
116 126
  "$type": "com.atproto.lexicon.schema",
117 127
  "lexicon": 1
118 128
}

Compare Other Versions

Lexicon Garden

@