4

Ops und QSOs

Ein Op ist die Sendezeit eines Hosts, pro Host in der Reihenfolge des Auf-Sendung-Gehens durchnummeriert. Der zwölfte Op von K0TFU ist also /api/v1/operators/K0TFU/ops/12, und seine Seite ist aprsota.org/K0TFU/ops/12. Ein QSO ist ein Logbucheintrag auf einem Op. Ein Chase ist enthalten, ob das QSL des Hosts nun jemals gesendet wurde oder nicht.

Ops eines Operators

GET /api/v1/operators/{callsign}/ops

The operator's hosted ops, newest first.

Every op this operator hosted that reached the air, including any op that is on the air right now.

ParameterInTypeMeaning
callsignpathstringThe operator's base call. An SSID form or mixed case answers 301 to the canonical URL. required
pagequeryintegerThe page, 1-based.
per_pagequeryintegerItems per page, at most 100.
statequerystring, one of on_air, endedOnly ops in this state.
Returns
a op_page object
Token
required
Cache
Cache-Control: private, max-age=60
Errors
400 bad_request, 401 unauthorized, 404 not_found, 429 rate_limited

Example

{
  "data": [
    {
      "callsign": "K0TFU",
      "station": "K0TFU-6",
      "number": 12,
      "state": "on_air",
      "description": "lunch at the lake",
      "reference": {
        "kind": "pota",
        "code": "US-0072"
      },
      "grid": "DN40bs",
      "position": {
        "lat": 40.054167,
        "lon": -111.525
      },
      "country": {
        "code": "US",
        "name": "United States of America"
      },
      "water": {
        "kind": "lake",
        "name": "Utah Lake"
      },
      "on_air_at": "2026-09-18T19:02:41Z",
      "expires_at": "2026-09-18T20:17:00Z",
      "ended_at": null,
      "end_reason": null,
      "signoff": null,
      "qsos": 12,
      "incomplete": 2,
      "points": 11,
      "url": "https://aprsota.org/K0TFU/ops/12",
      "card_image_url": "https://aprsota.org/K0TFU/ops/12/card-3f9a1c2b7d4e.png"
    }
  ],
  "page": {
    "number": 1,
    "size": 20,
    "total": 61,
    "next_url": "https://aprsota.org/api/v1/ops?page=2"
  }
}

Ein Op eines Operators

GET /api/v1/operators/{callsign}/ops/{number}

The summary and logbook of a single op.

A chaser must have sent both the message and the position report in order for it to show in the entries, which are in chronological order.

ParameterInTypeMeaning
callsignpathstringThe operator's base call. An SSID form or mixed case answers 301 to the canonical URL. required
numberpathintegerThe op's per-host number. required
Returns
a op_detail object
Token
required
Cache
Cache-Control: private, max-age=60
Errors
401 unauthorized, 404 not_found, 429 rate_limited

Example

{
  "callsign": "K0TFU",
  "station": "K0TFU-6",
  "number": 12,
  "state": "on_air",
  "description": "lunch at the lake",
  "reference": {
    "kind": "pota",
    "code": "US-0072"
  },
  "grid": "DN40bs",
  "position": {
    "lat": 40.054167,
    "lon": -111.525
  },
  "country": {
    "code": "US",
    "name": "United States of America"
  },
  "water": {
    "kind": "lake",
    "name": "Utah Lake"
  },
  "on_air_at": "2026-09-18T19:02:41Z",
  "expires_at": "2026-09-18T20:17:00Z",
  "ended_at": null,
  "end_reason": null,
  "signoff": null,
  "qsos": 12,
  "incomplete": 2,
  "points": 11,
  "url": "https://aprsota.org/K0TFU/ops/12",
  "card_image_url": "https://aprsota.org/K0TFU/ops/12/card-3f9a1c2b7d4e.png",
  "host": {
    "callsign": "K0TFU",
    "first_heard_at": "2026-07-22T01:14:09Z",
    "last_heard_at": "2026-09-18T19:17:02Z",
    "url": "https://aprsota.org/K0TFU"
  },
  "entries": [
    {
      "host": "K0TFU",
      "host_station": "K0TFU-6",
      "op_number": 12,
      "chaser": "W1XYZ",
      "chaser_station": "W1XYZ-5",
      "number": 1,
      "state": "confirmed",
      "chased_at": "2026-09-18T19:14:19Z",
      "beacon_at": "2026-09-18T19:15:02Z",
      "confirmed_at": "2026-09-18T19:17:02Z",
      "chase_text": "hi from the lake",
      "qsl_text": "73",
      "grid": "CN87xo",
      "position": {
        "lat": 40.054167,
        "lon": -111.525
      },
      "country": {
        "code": "US",
        "name": "United States of America"
      },
      "water": {
        "kind": "lake",
        "name": "Utah Lake"
      },
      "points": 3,
      "stamps": [
        {
          "kind": "ptt",
          "title": "PTT",
          "role": "host",
          "points": 1,
          "label": null
        }
      ],
      "combos": [],
      "repeat": false,
      "url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ",
      "qsl_image_url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ/qsl-9b2e4d1f6a3c.png"
    }
  ],
  "countries": 1
}

QSOs eines Operators

GET /api/v1/operators/{callsign}/qsos

The operator's logbook, including QSOs from hosted ops and chased ops, newest first.

Every confirmed QSO the operator was part of, as host or chaser, the same set the logbook page shows.

ParameterInTypeMeaning
callsignpathstringThe operator's base call. An SSID form or mixed case answers 301 to the canonical URL. required
pagequeryintegerThe page, 1-based.
per_pagequeryintegerItems per page, at most 100.
rolequerystring, one of host, chaserOnly QSOs where the operator played this role.
Returns
a qso_page object
Token
required
Cache
Cache-Control: private, max-age=60
Errors
400 bad_request, 401 unauthorized, 404 not_found, 429 rate_limited

Example

{
  "data": [
    {
      "host": "K0TFU",
      "host_station": "K0TFU-6",
      "op_number": 12,
      "chaser": "W1XYZ",
      "chaser_station": "W1XYZ-5",
      "number": 1,
      "state": "confirmed",
      "chased_at": "2026-09-18T19:14:19Z",
      "beacon_at": "2026-09-18T19:15:02Z",
      "confirmed_at": "2026-09-18T19:17:02Z",
      "chase_text": "hi from the lake",
      "qsl_text": "73",
      "grid": "CN87xo",
      "position": {
        "lat": 40.054167,
        "lon": -111.525
      },
      "country": {
        "code": "US",
        "name": "United States of America"
      },
      "water": {
        "kind": "lake",
        "name": "Utah Lake"
      },
      "points": 3,
      "stamps": [
        {
          "kind": "ptt",
          "title": "PTT",
          "role": "host",
          "points": 1,
          "label": null
        }
      ],
      "combos": [],
      "repeat": false,
      "url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ",
      "qsl_image_url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ/qsl-9b2e4d1f6a3c.png"
    }
  ],
  "page": {
    "number": 1,
    "size": 20,
    "total": 61,
    "next_url": "https://aprsota.org/api/v1/ops?page=2"
  }
}

Ein QSO eines Operators

Ein Kontakt ist über den Op des Hosts, das Basisrufzeichen des Chasers und die Ordnungszahl des Kontakts auf diesem Op adressiert. Beim ersten Kontakt, dem Normalfall, entfällt die Ordnungszahl. Ein Chaser, der denselben Host in einem Op zweimal arbeitet, hat zwei echte QSOs, jedes mit eigener Seite und eigener Karte, und nur das erste zählt Punkte.

GET /api/v1/operators/{callsign}/ops/{number}/qsos/{chaser}

The chaser's first confirmed QSO on this op.

The information on the digital QSL card. Confirmed QSOs only.

ParameterInTypeMeaning
callsignpathstringThe operator's base call. An SSID form or mixed case answers 301 to the canonical URL. required
numberpathintegerThe op's per-host number. required
chaserpathstringThe chaser's base call; SSID forms and other cases 301. required
Returns
a qso object
Token
required
Cache
Cache-Control: private, max-age=60
Errors
401 unauthorized, 404 not_found, 429 rate_limited

Example

{
  "host": "K0TFU",
  "host_station": "K0TFU-6",
  "op_number": 12,
  "chaser": "W1XYZ",
  "chaser_station": "W1XYZ-5",
  "number": 1,
  "state": "confirmed",
  "chased_at": "2026-09-18T19:14:19Z",
  "beacon_at": "2026-09-18T19:15:02Z",
  "confirmed_at": "2026-09-18T19:17:02Z",
  "chase_text": "hi from the lake",
  "qsl_text": "73",
  "grid": "CN87xo",
  "position": {
    "lat": 40.054167,
    "lon": -111.525
  },
  "country": {
    "code": "US",
    "name": "United States of America"
  },
  "water": {
    "kind": "lake",
    "name": "Utah Lake"
  },
  "points": 3,
  "stamps": [
    {
      "kind": "ptt",
      "title": "PTT",
      "role": "host",
      "points": 1,
      "label": null
    }
  ],
  "combos": [],
  "repeat": false,
  "url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ",
  "qsl_image_url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ/qsl-9b2e4d1f6a3c.png"
}

GET /api/v1/operators/{callsign}/ops/{number}/qsos/{chaser}/{contact}

One contact by ordinal: a chaser's second or later QSO on this op.

A repeat is still a QSO with its own page and card but it doesn't score any points. An explicit /1 answers 301 to the bare form.

ParameterInTypeMeaning
callsignpathstringThe operator's base call. An SSID form or mixed case answers 301 to the canonical URL. required
numberpathintegerThe op's per-host number. required
chaserpathstringThe chaser's base call. required
contactpathintegerThe contact's ordinal on the op, 2 or more. required
Returns
a qso object
Token
required
Cache
Cache-Control: private, max-age=60
Errors
401 unauthorized, 404 not_found, 429 rate_limited

Example

{
  "host": "K0TFU",
  "host_station": "K0TFU-6",
  "op_number": 12,
  "chaser": "W1XYZ",
  "chaser_station": "W1XYZ-5",
  "number": 1,
  "state": "confirmed",
  "chased_at": "2026-09-18T19:14:19Z",
  "beacon_at": "2026-09-18T19:15:02Z",
  "confirmed_at": "2026-09-18T19:17:02Z",
  "chase_text": "hi from the lake",
  "qsl_text": "73",
  "grid": "CN87xo",
  "position": {
    "lat": 40.054167,
    "lon": -111.525
  },
  "country": {
    "code": "US",
    "name": "United States of America"
  },
  "water": {
    "kind": "lake",
    "name": "Utah Lake"
  },
  "points": 3,
  "stamps": [
    {
      "kind": "ptt",
      "title": "PTT",
      "role": "host",
      "points": 1,
      "label": null
    }
  ],
  "combos": [],
  "repeat": false,
  "url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ",
  "qsl_image_url": "https://aprsota.org/K0TFU/ops/12/qsos/W1XYZ/qsl-9b2e4d1f6a3c.png"
}