4

Operators

We identify an operator by their base call sign. Every SSID they transmit from is collapsed into a single identity.

Operator

GET /api/v1/operators/{callsign}

Information about an operator: identity, totals, a live op if there is one, and recent activity.

The totals are computed for all time; the full standings are in a separate scoreboard endpoint.

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

Example

{
  "callsign": "K0TFU",
  "first_heard_at": "2026-07-22T01:14:09Z",
  "last_heard_at": "2026-09-18T19:17:02Z",
  "totals": {
    "points": 123,
    "qsos": 45,
    "ops_hosted": 12
  },
  "on_air": {
    "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"
  },
  "recent_ops": [
    {
      "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"
    }
  ],
  "recent_qsos": [
    {
      "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"
    }
  ],
  "url": "https://aprsota.org/K0TFU",
  "image_url": "https://aprsota.org/K0TFU/og-1a2b3c4d5e6f.png"
}

Scoreboard

The standings are their own API endpoint rather than part of the operator object, because they are computationally expensive to produce. Ask for them separately if you need them.

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

The operator's standings on every board, for this month, this year, and all time.

The operator's positions on various leaderboards, one row per board the operator holds a value on, with the value in the board's own currency and the rank when on the board. Its own endpoint because its expensive to produce.

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

Example

{
  "callsign": "K0TFU",
  "windows": [
    {
      "kind": "month",
      "from": "2026-09-01",
      "to": "2026-09-30"
    }
  ],
  "rows": [
    {
      "board": {
        "slug": "all-star",
        "name": "All-Star",
        "measure": "Points",
        "unit": "points",
        "url": "https://aprsota.org/leaderboards/all-star"
      },
      "cells": [
        {
          "value": 22,
          "rank": 3
        }
      ]
    }
  ]
}