Skip to content

Sky Scan API

The Sky Scan API drives the rotor through a systematic grid pattern while collecting RSSI (Received Signal Strength Indicator) readings from the SDR at each position. This produces a map of signal levels across the sky, useful for locating interference sources, characterizing antenna patterns, and building sky noise baselines.

Returns all scan sessions, ordered by most recent first.

GET /api/skyscan/sessions
[
{
"id": 3,
"rotor_id": 1,
"status": "completed",
"az_start": 0.0,
"az_end": 360.0,
"el_start": 18.0,
"el_end": 65.0,
"step_deg": 2.0,
"rssi_iterations": 10,
"total_points": 4320,
"completed_points": 4320,
"progress_pct": 100.0,
"started_at": "2026-02-14T02:00:00",
"finished_at": "2026-02-14T05:42:00",
"notes": null
}
]
StatusDescription
pendingSession created, scan not yet started
runningRotor is moving and collecting data
pausedScan suspended, rotor holds position
completedAll grid points measured
cancelledScan stopped by user before completion

Begin a new sky scan session. Defines the azimuth and elevation bounds, step size, and number of RSSI samples to average at each grid point. The rotor must be configured and reachable via rotctld.

POST /api/skyscan/start
{
"rotor_id": 1,
"az_start": 0.0,
"az_end": 360.0,
"el_start": 18.0,
"el_end": 65.0,
"step_deg": 2.0,
"rssi_iterations": 10
}
FieldTypeDefaultDescription
rotor_idintID of the rotor configuration to use (required)
az_startfloat0.0Starting azimuth in degrees
az_endfloat360.0Ending azimuth in degrees
el_startfloat18.0Starting elevation in degrees
el_endfloat65.0Ending elevation in degrees
step_degfloat2.0Angular step between grid points in degrees
rssi_iterationsint10Number of RSSI samples to average at each point

Returns the created session object (same shape as the list endpoint).

{
"id": 4,
"rotor_id": 1,
"status": "pending",
"az_start": 0.0,
"az_end": 360.0,
"el_start": 18.0,
"el_end": 65.0,
"step_deg": 2.0,
"rssi_iterations": 10,
"total_points": 4320,
"completed_points": 0,
"progress_pct": 0.0,
"started_at": null,
"finished_at": null,
"notes": null
}

Errors

StatusDetail
404Rotor not found
503Cannot connect to rotctld
400Rotor does not support RSSI

Retrieve details and current progress for a specific scan session.

GET /api/skyscan/{session_id}
NameTypeRequiredDescription
session_idintYesScan session ID (path parameter)

Returns a single session object (same shape as the list endpoint).

Errors

StatusDetail
404Scan session not found

Retrieve all collected scan data points for a session, ordered by measurement sequence.

GET /api/skyscan/{session_id}/data
NameTypeRequiredDescription
session_idintYesScan session ID (path parameter)
[
{
"azimuth": 0.0,
"elevation": 18.0,
"rssi_reads": 10,
"rssi_average": -92,
"rssi_current": -91,
"measured_at": "2026-02-14T02:00:15"
},
{
"azimuth": 2.0,
"elevation": 18.0,
"rssi_reads": 10,
"rssi_average": -94,
"rssi_current": -95,
"measured_at": "2026-02-14T02:00:22"
}
]
FieldTypeDescription
azimuthfloatRotor azimuth in degrees at measurement time
elevationfloatRotor elevation in degrees at measurement time
rssi_readsintNumber of RSSI samples taken at this position
rssi_averageintMean RSSI across all samples (dBm)
rssi_currentintLast RSSI sample value (dBm)
measured_atstring or nullISO 8601 timestamp of the measurement

Errors

StatusDetail
404Scan session not found

Pause a running scan session. The rotor holds its current position and no further data points are collected until the session is resumed.

POST /api/skyscan/{session_id}/pause
NameTypeRequiredDescription
session_idintYesScan session ID (path parameter)
{
"status": "pausing",
"session_id": 4
}

Errors

StatusDetail
404Scan session not found
400Cannot pause scan in ‘<current_status>’ state (must be running)

Resume a paused scan session. The rotor picks up from where it left off and continues collecting data points.

POST /api/skyscan/{session_id}/resume
NameTypeRequiredDescription
session_idintYesScan session ID (path parameter)
{
"status": "resuming",
"session_id": 4
}

Errors

StatusDetail
404Scan session not found
400Cannot resume scan in ‘<current_status>’ state (must be paused)

Cancel a running, paused, or pending scan session. The rotor stops and the session is marked as cancelled. Already-collected data points are preserved.

POST /api/skyscan/{session_id}/cancel
NameTypeRequiredDescription
session_idintYesScan session ID (path parameter)
{
"status": "cancelling",
"session_id": 4
}

Errors

StatusDetail
404Scan session not found
400Cannot cancel scan in ‘<current_status>’ state (must be running, paused, or pending)

A WebSocket endpoint provides live progress updates during an active scan session.

ws:///ws/skyscan/{session_id}

Each message is a JSON object pushed to the client as a new data point is measured or the session status changes.

{
"session_id": 4,
"status": "running",
"point": {
"azimuth": 14.0,
"elevation": 20.0,
"rssi_reads": 10,
"rssi_average": -88,
"rssi_current": -87,
"measured_at": "2026-02-14T02:05:30"
},
"progress_pct": 12.3,
"completed": 531,
"total": 4320
}
FieldTypeDescription
session_idintThe scan session being reported on
statusstringCurrent session status
pointobject or nullThe most recently measured data point (null on status-only updates)
progress_pctfloatCompletion percentage (0.0 → 100.0)
completedintNumber of data points collected so far
totalintTotal number of grid points in the scan