Skip to content

Radio

The Radio resource exposes your CAT radios — the live rig state (frequency, mode, power, …) that CAT clients such as WSJT-X, rigctl or GridTracker push to Wavelog. It is the v2 equivalent of the legacy api/radio endpoint.

  • Base path: /api/v2/radio
  • Scopes: radio:read, radio:write, radio:delete

All operations are scoped to the token owner. A radio belonging to another user is treated as not found.

Note

Read the API v2 overview first for authentication, the response envelope and error codes.

The upsert model

Unlike other resources, a radio is identified by its name, not created by id. CAT clients continuously push a fresh snapshot of the current rig state, so there is no PATCH or PUT — every new snapshot is simply a POST:

  • if no radio with that name exists yet for you, it is created (201 Created);
  • otherwise the existing radio is updated in place (200 OK).

Endpoints

Verb Path Scope Purpose
GET /api/v2/radio radio:read List all your radios
GET /api/v2/radio/{id} radio:read Fetch a single radio
POST /api/v2/radio radio:write Create or update a radio (upsert by name)
DELETE /api/v2/radio/{id} radio:delete Remove a radio

List endpoints are not paginated.

The radio object

Frequencies are in Hz.

{
  "id": 3,
  "radio": "FT-950",
  "frequency": 14075000,
  "frequency_rx": null,
  "mode": "SSB",
  "mode_rx": null,
  "power": 100,
  "prop_mode": null,
  "sat_name": null,
  "updated_at": "2026-06-16 17:06:00"
}

An empty or non mode is normalised to null.

Push a radio state

POST /api/v2/radio

Required field: radio (the device name).

Field Notes
radio Arbitrary name identifying the device (required)
frequency TX frequency in Hz
frequency_rx RX frequency in Hz (split / satellite)
mode TX mode
mode_rx RX mode
power TX power in watts
prop_mode Propagation mode, e.g. SAT
sat_name Satellite name, e.g. QO-100
curl -X POST https://<WAVELOG_URL>/index.php/api/v2/radio \
     -H "Authorization: Bearer wl2_your_token_here" \
     -H "Content-Type: application/json" \
     -d '{
           "radio": "FT-950",
           "frequency": 14075000,
           "mode": "SSB",
           "power": 100
         }'

The response contains the stored radio object in data. A newly created radio returns 201 Created with a Location header; an update returns 200 OK.

Satellite / split example:

curl -X POST https://<WAVELOG_URL>/index.php/api/v2/radio \
     -H "Authorization: Bearer wl2_your_token_here" \
     -H "Content-Type: application/json" \
     -d '{
           "radio": "QO-100 Station",
           "frequency": 2400170000,
           "frequency_rx": 10489670000,
           "mode": "SSB",
           "mode_rx": "SSB",
           "prop_mode": "SAT",
           "sat_name": "QO-100",
           "power": 5
         }'

Note

The callback URL (cat_url) is not writable through the API. If you need a custom CAT callback URL, use the legacy api/radio endpoint.

Tip

Push a radio state when the frequency or mode actually changes — not blindly every second.

Clubstation operators

When the token belongs to a club member (the token owner differs from its creator), the radio state is recorded under the club account with the acting member as operator, mirroring the legacy radio endpoint.

Each member therefore has their own set of rigs inside the shared club account. Below officer level, listing, reading and deleting are scoped to those: another member's radio returns 404 not_found. See Clubstations.

Delete a radio

DELETE /api/v2/radio/{id}

curl -X DELETE https://<WAVELOG_URL>/index.php/api/v2/radio/3 \
     -H "Authorization: Bearer wl2_your_token_here"

On success the API returns 204 No Content.