# place.birds.sighting

> Published by [birds.place](https://lexicon.garden/identity/did:plc:w4p4bumx22vgnjmctoqjj7sy)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:w4p4bumx22vgnjmctoqjj7sy/place.birds.sighting)
- [Documentation](https://lexicon.garden/lexicon/did:plc:w4p4bumx22vgnjmctoqjj7sy/place.birds.sighting/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:w4p4bumx22vgnjmctoqjj7sy/place.birds.sighting/examples)

## Definitions

### `place.birds.sighting`

**Type**: `record`

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.

**Key**: `tid`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `count` | `integer` | No | How many individuals the observer counted. Absent means one, or means they did not count. |
| `media` | `array` | No | Evidence, in whatever form it was captured: a photo, a video, or a recording of the call. Ordered as the observer added it. |
| `notes` | `string` | No | Anything else the observer wants to say about the sighting: behaviour, plumage, who they were with. |
| `thumb` | `blob` | No | 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. |
| `species` | `string` | Yes | Common name as the observer said it. Free text on purpose — always present, even when no code was resolved. |
| `location` | `ref` → `#location` | No | Roughly where the bird was. Optional, and deliberately coarse — see #location. |
| `createdAt` | `string` (datetime) | Yes | Client-declared timestamp for when this record was written. |
| `observedAt` | `string` (datetime) | Yes | Client-declared timestamp for when the bird was seen. Distinct from createdAt so a sighting can be written up later. Not verified by anything. |
| `speciesCode` | `string` | No | 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. |

### `place.birds.sighting#media`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `alt` | `string` | No | Alt text describing the media for people who cannot see or hear it. |
| `blob` | `blob` | Yes | The captured file. Audio is first-class here: a bird's call is often better evidence than a photograph of a silhouette. |
| `thumb` | `blob` | No | 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. |

### `place.birds.sighting#location`

**Type**: `object`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | `string` | No | 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. |
| `latitude` | `string` | Yes | 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. |
| `longitude` | `string` | Yes | Decimal degrees, as a string. Same precision limit as latitude. |

## Raw Schema

```json
{
  "id": "place.birds.sighting",
  "defs": {
    "main": {
      "key": "tid",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "species",
          "observedAt",
          "createdAt"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "maximum": 100000,
            "minimum": 1,
            "description": "How many individuals the observer counted. Absent means one, or means they did not count."
          },
          "media": {
            "type": "array",
            "items": {
              "ref": "#media",
              "type": "ref"
            },
            "maxLength": 4,
            "description": "Evidence, in whatever form it was captured: a photo, a video, or a recording of the call. Ordered as the observer added it."
          },
          "notes": {
            "type": "string",
            "maxLength": 3000,
            "description": "Anything else the observer wants to say about the sighting: behaviour, plumage, who they were with.",
            "maxGraphemes": 600
          },
          "thumb": {
            "type": "blob",
            "accept": [
              "image/*"
            ],
            "maxSize": 100000000,
            "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."
          },
          "species": {
            "type": "string",
            "maxLength": 640,
            "description": "Common name as the observer said it. Free text on purpose — always present, even when no code was resolved.",
            "maxGraphemes": 160
          },
          "location": {
            "ref": "#location",
            "type": "ref",
            "description": "Roughly where the bird was. Optional, and deliberately coarse — see #location."
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "Client-declared timestamp for when this record was written."
          },
          "observedAt": {
            "type": "string",
            "format": "datetime",
            "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."
          },
          "speciesCode": {
            "type": "string",
            "maxLength": 32,
            "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."
          }
        }
      },
      "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."
    },
    "media": {
      "type": "object",
      "required": [
        "blob"
      ],
      "properties": {
        "alt": {
          "type": "string",
          "maxLength": 2000,
          "description": "Alt text describing the media for people who cannot see or hear it.",
          "maxGraphemes": 400
        },
        "blob": {
          "type": "blob",
          "accept": [
            "image/*",
            "audio/*",
            "video/*"
          ],
          "maxSize": 100000000,
          "description": "The captured file. Audio is first-class here: a bird's call is often better evidence than a photograph of a silhouette."
        },
        "thumb": {
          "type": "blob",
          "accept": [
            "image/jpeg",
            "image/png",
            "image/webp"
          ],
          "maxSize": 2000000,
          "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."
        }
      }
    },
    "location": {
      "type": "object",
      "required": [
        "latitude",
        "longitude"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 640,
          "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.",
          "maxGraphemes": 160
        },
        "latitude": {
          "type": "string",
          "maxLength": 32,
          "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."
        },
        "longitude": {
          "type": "string",
          "maxLength": 32,
          "description": "Decimal degrees, as a string. Same precision limit as latitude."
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
