Skip to main content

Endpoints

MethodPathDescription
POST/v1/signalsCreate a signal
GET/v1/signalsList persisted signals
DELETE/v1/signals/beaconStop active beacon
GET/v1/signals/streamSSE live stream

POST /v1/signals

Create a signal. beacon type is broadcast-only (not persisted). All others are saved and queryable. Body
{
  "type": "beacon | capture | note | checkin | alert",
  "lat": 35.4676,
  "lng": -97.5164,
  "accuracy": 12.5,
  "note": "Optional text",
  "image_url": "https://...",
  "ticket_id": 42,
  "org_id": 3,
  "meta": {}
}
FieldTypeRequiredDescription
typestringyesSignal type
latnumbernoLatitude
lngnumbernoLongitude
accuracynumbernoGPS accuracy in meters
notestringnoText content (required for alert)
image_urlstringnoImage URL (for capture)
ticket_idnumbernoLink to an incident
org_idnumbernoTarget org — defaults to primary org
metaobjectnoArbitrary metadata (e.g. device_id)
Response 201
{
  "Id": 99,
  "user_id": 42,
  "org_id": 3,
  "type": "note",
  "lat": 35.4676,
  "lng": -97.5164,
  "note": "On site.",
  "created_at": "2026-03-15T07:00:00Z",
  "user_name": "Jason Johnson"
}
alert signals trigger push notifications to all members of the target org. beacon signals return the same shape but Id will be null — they are not persisted.

GET /v1/signals

List persisted signals for your orgs. Does not include beacon signals. Query params
ParamDefaultDescription
limit50Max results
page1Page number
typeFilter by type
org_idFilter by org

DELETE /v1/signals/beacon

Stop the active beacon for the current device. Broadcasts a beacon_off event to the org SSE stream so the War Room removes the device dot. Pass device_id in the body to identify the specific device:
{ "device_id": "dev-4f2a1b-c3d4e5f6" }
Response 200
{ "ok": true }

GET /v1/signals/stream

SSE live stream of all signals for your orgs. Keep-alive with 25s heartbeat comments.
curl -N https://schedkit.net/v1/signals/stream \
  -H "x-api-key: $SCHEDKIT_KEY"
Event types
EventTrigger
signal.beaconOperator GPS ping
signal.capturePhoto captured in field
signal.noteNote posted
signal.checkinManual check-in
signal.alertHigh-priority alert fired
beacon_offOperator beacon stopped
Example stream
data: {"type":"connected","org_ids":[3]}

: heartbeat

data: {"type":"signal.beacon","payload":{"user_id":42,"lat":35.4676,"lng":-97.5164,"accuracy":8,"meta":{"device_id":"dev-4f2a-c3d4"},"created_at":"2026-03-15T07:30:00Z","user_name":"Jason Johnson","org_id":3}}

data: {"type":"signal.alert","payload":{"Id":7,"note":"Unit 3 unresponsive","user_id":42,"org_id":3,"created_at":"2026-03-15T07:31:00Z"}}

data: {"type":"beacon_off","payload":{"device_id":"dev-4f2a-c3d4","user_id":42,"org_id":3}}