> ## Documentation Index
> Fetch the complete documentation index at: https://docs.schedkit.net/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Signals

> The primitive unit of SchedKit — a typed event from any source.

## What is a Signal?

A **signal** is the atomic unit of SchedKit. Everything is a signal — a GPS ping, a photo from the field, a text note, a human pressing ALERT.

Signals are typed, org-scoped, and optionally geo-tagged. They flow in real time via SSE and fan out to push notifications, webhooks, and physical devices.

## Signal types

| Type      | Description                                           | Persisted           |
| --------- | ----------------------------------------------------- | ------------------- |
| `beacon`  | Periodic GPS ping from an active operator             | No — broadcast only |
| `capture` | Photo or image with location                          | Yes                 |
| `note`    | Text note, optional coordinates                       | Yes                 |
| `checkin` | Manual confirmation of presence at location           | Yes                 |
| `alert`   | High-priority — pushes to all org members immediately | Yes                 |

<Note>
  `beacon` signals skip the database for performance. They are broadcast-only and do not appear in `GET /v1/signals`. All other types are persisted and queryable.
</Note>

## Org scoping

Every signal is scoped to an organization. When you POST a signal, SchedKit resolves your primary org automatically. Pass `org_id` explicitly to target a different org.

## Live stream

Subscribe to your org's signal feed via SSE:

```bash theme={null}
curl -N https://schedkit.net/v1/signals/stream \
  -H "x-api-key: $SCHEDKIT_KEY"
```

Events are newline-delimited `data:` payloads:

```
data: {"type":"connected","org_ids":[3]}

data: {"type":"signal.beacon","payload":{"user_id":42,"lat":35.4676,"lng":-97.5164,...}}

data: {"type":"signal.alert","payload":{"Id":7,"note":"Unit 3 unresponsive",...}}
```

## Beacon fast-path

`beacon` type signals bypass NocoDB writes entirely — they are constructed in memory and broadcast directly to all connected SSE clients. This supports high-frequency pinging (every 30s per device) at scale without DB bottlenecks.

<Card title="API Reference → Signals" icon="signal" href="/api-reference/signals">
  Full endpoint docs for POST, GET, DELETE, and SSE stream.
</Card>
