Skip to content

Station

The Station resource manages your station locations (logbook profiles) — the callsign, grid, DXCC and other location details a QSO is logged against. It reuses the same data layer as the web UI, applying the same normalisation and validation.

  • Base path: /api/v2/station
  • Scopes: station:read, station:write, station:delete
  • Since version: 3.1.0

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

Note

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

Endpoints

Verb Path Scope Purpose Since version
GET /api/v2/station station:read List all your station locations 3.1.0
GET /api/v2/station/{id} station:read Fetch a single station location 3.1.0
POST /api/v2/station station:write Create a station location 3.1.0
PATCH /api/v2/station/{id} station:write Partial update 3.1.0
DELETE /api/v2/station/{id} station:delete Delete a station location and all its QSOs 3.1.0

There is no PUT

Updates are always partial, for the same reason as on QSO: Wavelog is the source of truth, and a full replace would let a client blank fields it never knew existed. To overwrite a station location completely, send every field explicitly in a PATCH.

List endpoints are not paginated — users typically have only a handful of station locations.

The listing follows your account option

If Only show station locations linked to active logbook is enabled in your account settings (Station Location Options), GET /api/v2/station returns only the locations linked to your active logbook — the same subset the web UI and API v1 show. It is a listing preference, not a permission: GET /api/v2/station/{id}, PATCH and DELETE keep working on every location you own, listed or not.

The station object

{
  "id": 1,
  "uuid": "c8904ea7-8bfa-11f1-865b-0241724b0b31",
  "name": "JO30oo / DJ7NT",
  "callsign": "DJ7NT",
  "gridsquare": "JO30OO",
  "city": "Bonn",
  "dxcc": 230,
  "country": "FEDERAL REPUBLIC OF GERMANY",
  "cq": 14,
  "itu": 28,
  "state": "",
  "cnty": "",
  "iota": "",
  "sota": "",
  "wwff": "",
  "pota": "",
  "sig": "",
  "sig_info": "",
  "power": 100,
  "active": true
}

country and active are read-only. The remaining fields correspond to the writable fields below, so a GET result can be sent straight back through PATCH.

Create a station location

POST /api/v2/station

Required fields: name, callsign, dxcc, cq, itu.

curl -X POST https://<WAVELOG_URL>/index.php/api/v2/station \
     -H "Authorization: Bearer wl2_your_token_here" \
     -H "Content-Type: application/json" \
     -d '{
           "name": "DJ7NT at Home",
           "callsign": "DJ7NT",
           "gridsquare": "JO30oo",
           "city": "Unkel",
           "dxcc": 230,
           "cq": 14,
           "itu": 28,
           "power": 100
         }'
  • Your first station location automatically becomes the active one.
  • On success the API returns 201 Created, a Location header, and the created object in data.
  • An identical existing location returns 409 conflict.
  • An invalid grid locator returns 400 validation_error.
  • A missing required field returns 400 validation_error, listing what is missing in details.missing.

Writable fields

Field Notes
name Profile name (required on create)
callsign Station callsign (required on create)
gridsquare Maidenhead locator, validated
city QTH / city
dxcc DXCC entity number (required on create)
cq CQ zone (required on create)
itu ITU zone (required on create)
state Primary administrative subdivision
cnty Secondary subdivision (county) — see note below
iota IOTA reference
sota SOTA reference
wwff WWFF reference
pota POTA reference
sig Special interest group
sig_info Special interest group info
power Default TX power in watts

Note

External-service credentials (QRZ, HRDLog, ClubLog, OQRS, webADIF, eQSL) are not exposed through the API and keep their defaults on create.

Clubstation tokens need officer level to write

Station locations are shared club infrastructure, and deleting one removes all of its QSOs with it. Creating, updating and deleting them therefore requires permission level 9; reading stays open to every member. A lower level is refused with 403 insufficient_club_permission. See Clubstations.

Note

cnty (county) is only stored for DXCC entities that have ADIF secondary subdivisions. For any other DXCC entity the county is cleared automatically, mirroring the web UI.

Update a station location

PATCH /api/v2/station/{id} — partial update, only the fields you send change. Anything you omit keeps its stored value.

curl -X PATCH https://<WAVELOG_URL>/index.php/api/v2/station/1 \
     -H "Authorization: Bearer wl2_your_token_here" \
     -H "Content-Type: application/json" \
     -d '{ "power": 50, "city": "Bonn" }'

The updated station object is returned in data.

Switching the active station location

dev, not released yet set_active: true additionally makes this location the owner's active one — the one new QSOs and the web UI default to:

curl -X PATCH https://<WAVELOG_URL>/index.php/api/v2/station/2 \
     -H "Authorization: Bearer wl2_your_token_here" \
     -H "Content-Type: application/json" \
     -d '{ "set_active": true }'

It is deliberately a different key from the read-only active in the response, so a GET result can be sent straight back through PATCH without silently reassigning your active location. A body containing nothing but set_active is valid.

Required fields cannot be blanked out

The fields required on create stay required for the lifetime of the location. Sending one of them as null or "" is refused with 400 validation_error and the offending names in details.fields. Leave a field out of the body to keep its stored value.

Delete a station location

DELETE /api/v2/station/{id}

Warning

This is destructive. Deleting a station location also deletes all of its QSOs and their associated QSL/eQSL data, exactly like the web UI.

  • The active station location cannot be deleted and returns 409 conflict. Activate another location first.
  • On success the API returns 204 No Content.
curl -X DELETE https://<WAVELOG_URL>/index.php/api/v2/station/2 \
     -H "Authorization: Bearer wl2_your_token_here"