API

API

目录

image

提示

还有一个更新的、面向资源的 REST API v2 可用 (Bearer 令牌、细粒度作用域、标准 HTTP 动词)。本页介绍 最初的 v1 API,它仍完全受支持。

提示

可使用 旧版 API 测试器 交互式试用 API v1 端点 (静态工具,完全在浏览器中运行,除向你的实例发起请求外, API 密钥绝不会离开浏览器)。

Wavelog API 允许你通过第三方工具与 Wavelog 交互,这些工具可能是电台、外部日志应用或程序;你可以根据需求生成两种密钥:只读密钥或读写密钥。

你可以随时回到本页面删除密钥以撤销访问权限。

注意

请确保不要在 JSON 请求体中包含注释。本页中的注释只是为帮助你理解载荷语法而提供的

通用流程

  1. 使用用户菜单中的专用选项为你的账户添加新的 API 密钥 - 根据具体的 API 请求,可能需要只读密钥或读写密钥
  2. 向 API 端点发起 POST 请求 - 请求应同时指定 Content-Type 与 Accept,前者应设为 application/json,后者也应设为 application/json - API 密钥应作为 JSON 载荷的一部分提供

API 端点

API URL 由应用的基础 URL(例如:https://log.example.com/)加上 API 端点(例如:api/qso)组成。最终 URL 大致如下:https://log.example.com/api/qso。

API 速率限制

请注意,你的实例所有者可能已为某些端点设置了速率限制。请以礼貌的方式使用 API,也就是说:没有必要就不要调用它们。 例如:

  • /api/radio —— 在频率/模式变化时再向其 POST。不要每秒盲目发送
  • /api/get_contacts_adif —— 它是为增量拉取设计的。无需每分钟爬取整个日志。

可用的 API

api/qso/

QSO 功能允许你通过 JSON 发送 ADIF QSO 字符串并导入 Wavelog,重复台检查会即时处理,且一次可以发送多个 QSO。

{
    "key":"YOUR_API_KEY",
    "station_profile_id":"Station Profile ID Number",
    "type":"adif",
    "string":"<call:5>N9EAT<band:4>70cm<mode:3>SSB<freq:10>432.166976<qso_date:8>20190616<time_on:6>170600<time_off:6>170600<rst_rcvd:2>59<rst_sent:2>55<qsl_rcvd:1>N<qsl_sent:1>N<country:24>United States Of America<gridsquare:4>EN42<sat_mode:3>U/V<sat_name:4>AO-7<prop_mode:3>SAT<name:5>Marty<eor>"
}

Linux shell 命令示例:

curl -X POST https://<WAVELOG_URL>/index.php/api/qso -H "Content-Type: application/json" -H "Accept: application/json" -d "{\"key\":\"<API_KEY>\",\"station_profile_id\":\"<STATION_PROFILE_ID>\",\"type\":\"adif\",\"string\":\"<call:5>N9EAT<band:4>70cm<mode:3>SSB<freq:10>432.166976<qso_date:8>20190616<time_on:6>170600<time_off:6>170600<rst_rcvd:2>59<rst_sent:2>55<qsl_rcvd:1>N<qsl_sent:1>N<country:24>United States Of America<gridsquare:4>EN42<sat_mode:3>U/V<sat_name:4>AO-7<prop_mode:3>SAT<name:5>Marty<eor>\"}"

注意: station_profile_id 字段可在编辑台站配置文件时找到,相关 ID 是一个数字,可通过查看 URL 字符串获取。

重要说明

每当你向 API 提交 QSO 时(通过 WavelogGate、通过 WSJT-X Improved、通过 $tool):

  • 不会实时将 QSO 发布到 QRZ(即使已启用),原因是性能/错误处理等。
  • 不会在 $callbook 查询通联对象,原因是性能/错误处理等。

api/get_contacts_adif

该功能允许你以 JSON 内嵌的形式流式导出 Wavelog 的 ADIF 数据,以便与第三方软件集成。

发送到 API 端点的最小载荷:

{
    "key": "YOUR_API_KEY",   // API-Key, read-only at least
    "station_id": "Station Profile ID Number",  // Station ID for the station that we want to pull QSOs from. WL > V2.5.1 supports also an Array here
    "fetchfromid": 0  // Internal database primary inside Wavelog of the last pulled QSO. Start at 0 to get all QSOs.
}

API 响应示例:

{
    "exported_qsos":5,   // The number of exported QSOs
    "lastfetchedid":4886,  // The internal primary key of the last exported QSO for you to use in your next input
    "message":"Export successful",  // A message containing success or reason for failure
    "adif": "ADIF STRING"  // ADIF file with all qsos since your last pull
}

完整参数集(适用于 WL 版本 >2.4)

  {
    "key": "your-api-key", // API-Key, read-only at least
    "station_id": 1, // Station ID for the station that we want to pull QSOs from. WL > V2.5.1 supports also an Array here
    "fetchfromid": 0, // Internal database primary inside Wavelog of the last pulled QSO. Start at 0 to get all QSOs.
    "qsl_filter": ["lotw"], // Optional QSL-Filter (Received). Possible values are: "lotw","eqsl","qsl","clublog"
    "output_format": "json", // Optional Format-Filter. Default ADIF within JSON. if set to JSON the fields (see next) are coming as JSON
    "fields": ["CALL", "DXCC", "QSO_DATE", "LOTW_QSLRDATE"], // Optional Fields which should be returned by JSON. Any ADIF-field is taken
    "band": "SAT", // Optional Band-Filter
  }

注意:从 Wavelog 版本 >2.5.1 起,你也可以给 station_id 传入数组(例如 ...,"station_id":[1,2]...),以便从多个 station_id 拉取数据,而不必逐个爬取。

其中:

  • output_format 默认为 ADIF(省略或显式设置时)
  • 若设为 JSON,则把通过 fields 数组传入的 ADIF 字段以 JSON 形式输出。
  • 若设为 ADIF,则传入的 fields 将被忽略
  • qsl_filter:默认为空(行为与之前一致,不处理 QSL)。除省略之外的允许值为: 'lotw', 'qsl', 'eqsl', 'clublog'。请将它们作为数组传入(是的,即使只传一个)——它们的行为是 OR 过滤。多种方式可以组合。它会检查是否已发生确认。
  • band:可选的波段过滤。只接受 1 个波段(不接受数组)。默认/省略时:任意波段

补充说明: JSON 的结果在所选字段上始终是唯一的

api/radio

标准电台 API 调用

提示

向 Wavelog 发送电台数据的 Python 代码示例可在 电台接口 wiki 页面 中找到

{
   "key":"YOUR_API_KEY", 
   "radio":"FT-950",
   "frequency":14075000, // Frequency in Hz
   "mode":"SSB",
   "power": '', // Optional field defined in watts
   "timestamp":"2012/04/07 16:47"
}

扩展电台 API 调用

{
    "key": "YOUR_API_KEY",          // API-Key
    "radio": "QO-100 Station",      // Name of the radio (used for assigning received data)
    "frequency": "2400170000",      // Frequency in Hz
    "mode": "SSB",                  // Mode
    "frequency_rx": "10489670000",  // Optional Rx frequency in Hz
    "mode_rx": "SSB",               // Optional Rx mode (not logged)
    "prop_mode": "SAT",             // Optional propagation mode
    "sat_name": "QO-100",           // Optional satellite name
    "power": "5",                   // Optional transmit power in Watts
}

卫星数据

{
   "key":"YOUR_API_KEY",
   "radio":"SATPC32",
   "uplink_freq": "2400210000",
   "downlink_freq": "10489710000", 
   "uplink_mode": "SSB", 
   "downlink_mode": "SSB", 
   "sat_mode": "S/X", // Not required
   "sat_name": "QO-100", 
   "power": '', // Optional field defined in watts
   "timestamp":"2012/04/07 16:47" 
}

使用自定义回调 URL 的电台数据

注意

此功能在 Wavelog v2.1.1 中引入

警告

更改电台的回调 URL 可能会影响其他应用(如 WavelogGate)的正常工作。有关回调 URL 的更多信息,请参阅 电台接口 wiki 页面。

{
  "key": "your_api_key_here",                 // Read+write API key
  "radio": "FT-950",                          // Arbitrary name to identify this device
  "frequency": 14075000,                      // Frequency in Hz
  "mode": "SSB",                              // Radio mode
  "power": 100,                               // Power in Watt
  "timestamp": "2025-09-14 16:47:00",         // Timestamp of the CAT data
  "cat_url": "https://log.example.com:54321"  // Custom callback URL for this radio
}

api/logbook_check_callsign

该端点用于检查某个呼号是否在日志中

{
    "key":"", // Wavelog API Key
    "logbook_public_slug":"", // This is the Station Logbook Public Slug
    "band":"2m", // This is optional if you want to search satellite qsos only set the band as SAT
    "callsign":""
}

api/logbook_check_grid

该端点用于检查某个网格是否在日志中

{
    "key":"", // Wavelog API Key
    "logbook_public_slug":"", // This is the Station Logbook Public Slug
    "band":"2m", // This is optional if you want to search satellite qsos only set the band as SAT
    "grid":""
}

api/statistics

返回会显示在仪表盘上的当前配置统计

  • 今日 QSO 数
  • 本月 QSO 数
  • 本年 QSO 数
  • QSO 总数

注意

若要通过 Wavelog V2 以公开访问方式(即未登录)使用此功能,你需要在 URL 中提供一个有效的(例如只读)API 密钥。只需在 URL 中这样设置:https://your.wavelog.url/index.php/api/statistics/clPutYourApiKeyHere

api/station_info

返回与相应 API 密钥所属用户相关的台站(日志位置)信息:

注意

如果密钥所有者在账户设置(台站位置选项)中启用了「仅显示关联到活动日志的台站位置」,则只返回与其活动日志关联的位置。

[
  {
    "station_id": "1",
    "station_profile_name": "JO30oo / DJ7NT",
    "station_gridsquare": "JO30OO",
    "station_callsign": "DJ7NT",
    "station_active": "1"
    "station_uuid": "cc997421-653a-7799-8c9c-23faffe7723",
    "station_city": "Bonn",
    "station_iota": "",
    "station_sota": "",
    "station_wwff": "",
    "station_pota": "",
    "station_sig": "",
    "station_sig_info": "",
    "station_dxcc": "230",
    "station_cnty": "",
    "station_cq": "14",
    "station_itu": "28",
    "station_state": "",
    "station_country": "FEDERAL REPUBLIC OF GERMANY"
  },
  {
    "station_id": "2",
    "station_profile_name": "JO30oo / DO7INT",
    "station_gridsquare": "JO30OO",
    "station_callsign": "DO7INT",
    "station_active": null,
    "station_uuid": "aa9974bb-cc3a-77f0-8c6c-62fcea5a7799",
    "station_city": "Bonn",
    "station_iota": "",
    "station_sota": "",
    "station_wwff": "",
    "station_pota": "",
    "station_sig": "",
    "station_sig_info": "",
    "station_dxcc": "230",
    "station_cnty": "",
    "station_cq": "14",
    "station_itu": "28",
    "station_state": "",
    "station_country": "FEDERAL REPUBLIC OF GERMANY"
  },
]

注意

若要通过 Wavelog V2 以公开访问方式(即未登录)使用此功能,你需要在 URL 中提供一个有效的(例如只读)API 密钥。只需在 URL 中这样设置:https://your.wavelog.url/index.php/api/station_info/clPutYourApiKeyHere

api/private_lookup

注意

此功能需要 Wavelog 1.8.6 或更高版本

此 API 检查(API)密钥所有者的日志中的确认情况。

发送到 API 端点的请求:

{
  "key":"[key]",
  "callsign":"VK4XY",
  "band":"20m",
  "mode":"SSB"
}

如果你还想获取呼号簿信息,可以添加 callbook 键并将其设为 true。此功能自 Wavelog 2.2.3 起提供。例如:

{
  "key":"[key]",
  "callsign":"VK4XY",
  "band":"20m",
  "mode":"SSB",
  "callbook": true
}

CLI 示例:

curl https://[URL]/api/private_lookup -X POST -d '{"key":"[key]","callsign":"VK4XY","band":"20m","mode":"SSB"}'

返回:

{
    "callsign": "VK4XY",
    "dxcc": "AUSTRALIA",
    "dxcc_id": "150",
    "dxcc_lat": "-22",
    "dxcc_long": "135",
    "dxcc_cqz": "30",
    "dxcc_flag": "\ud83c\udde6\ud83c\uddfa",
    "cont": "OC",
    "name": "",
    "gridsquare": "",
    "location": "",
    "iota_ref": "",
    "state": "",
    "us_county": "",
    "qsl_manager": "",
    "bearing": "",
    "call_worked": true,
    "call_worked_band": true,
    "call_worked_band_mode": true,
    "lotw_member": false,
    "dxcc_confirmed_on_band": true,
    "dxcc_confirmed_on_band_mode": true,
    "dxcc_confirmed": true,
    "call_confirmed": true,
    "call_confirmed_band": true,
    "call_confirmed_band_mode": true,
    "suffix_slash": ""
}

载荷中的必填字段:

  • key(你从账户设置 --> API 获取的 API 密钥)
  • callsign(你要查询的呼号)

可选字段:

band:

  • 若提供:API 会检查该呼号的 DXCC 是否在此波段上已确认
  • 若未提供:dxcc_confirmed_on_band 和 dxcc_confirmed_on_band_mode 将为 false,call_confirmed_band 和 call_confirmed_band_mode 同样如此

mode:

  • 若提供:API 会检查该呼号的 DXCC 是否在此波段/模式组合上已确认
  • 若未提供:dxcc_confirmed_on_band_mode 将为 false,call_confirmed_band_mode 同样如此

station_ids(数组!):

  • 若提供:API 会在这些 station_profiles 内检查 QSO。若省略:将检查密钥所有者的每一个 station_id。
  • 若提供但所给 ID 均未获授权:将检查密钥所有者的每一个 station_id。
  • 若提供且仅有少数 ID 获得授权:将检查已获授权的 ID
  • 若以字符串而非数组形式提供:将检查密钥所有者的每一个 station_id。

api/version

注意

此功能需要 Wavelog 2.0 或更高版本

该端点报告当前运行的 Wavelog 版本。需要有效的 API 密钥。

输入格式:

{
    "key":"YOUR_API_KEY",
}

响应示例:

{
  "status": "ok",
  "version": "2.0"
}

shell 命令示例:

curl -X "POST" "https://<WAVELOG_URL>/api/version" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d "{\"key\":\"<YOUR_API_KEY>\"}"

api/get_wp_stats

注意

此功能需要 Wavelog 2.0.1

该端点报告 QSO 总数的统计,以及当年和按模式划分的统计。

输入格式:

{
    "key":"YOUR_API_KEY",
    "station_id":"YOUR_STATION_ID",
}

响应示例:

{
  "status": "successful",
  "message": "Export successful",
  "statistics": {
    "totalalltime": [
      {
        "count": "28"
      }
    ],
    "totalthisyear": [
      {
        "count": "7"
      }
    ],
    "totalgroupedmodes": [
      {
        "count": "7",
        "col_mode": "CW",
        "col_submode": null
      },
      {
        "count": "6",
        "col_mode": "FM",
        "col_submode": null
      },
      {
        "count": "5",
        "col_mode": "FSK441",
        "col_submode": null
      },
      {
        "count": "4",
        "col_mode": "FT8",
        "col_submode": null
      },
      {
        "count": "3",
        "col_mode": "JT65",
        "col_submode": null
      },
      {
        "count": "2",
        "col_mode": "JT65",
        "col_submode": "JT65A"
      },
      {
        "count": "1",
        "col_mode": "SSB",
        "col_submode": null
      }
    ]
  }
}

shell 命令示例:

curl -X "POST" "https://<WAVELOG_URL>/api/get_wp_stats" \
     -H 'Content-Type: application/json; charset=utf-8' \
     -d "{\"key\":\"<YOUR_API_KEY>\", \"station_id\":\"<YOUR_STATION_ID>\"}"

api/create_station

注意

此功能需要 Wavelog >2.1.2 版本

该端点在 Wavelog 中创建新的 station_location,并尽力处理重复项。

自 2.3.1 版本起可以包含可选字段 "link_active_logbook",用于将新建的台站位置关联到(API)密钥所有者的活动日志(若存在)。任何非假值都会触发自动关联。如果未包含该字段,或其值为假值("0"、""),则新建的台站位置不会自动关联到日志。

示例载荷:

[
 {
  "station_profile_name": "DJ7NT at Home",
  "hrdlog_username": "DJ7NT",
  "station_gridsquare": "JO30",
  "station_city": "Unkel",
  "station_iota": "",
  "station_sota": "",
  "station_callsign": "DJ7NT",
  "station_power": "100",
  "station_dxcc": "230",
  "dxccname": "FEDERAL REPUBLIC OF GERMANY",
  "dxccprefix": "DL",
  "station_cnty": "",
  "station_cq": "14",
  "station_itu": "28",
  "station_active": "1",
  "eqslqthnickname": "at Home",
  "state": "RP",
  "county": null,
  "station_sig": "",
  "station_sig_info": "",
  "qrzrealtime": "-1",
  "station_wwff": "",
  "station_pota": "",
  "oqrs": "1",
  "oqrs_text": "",
  "oqrs_email": "0",
  "webadifrealtime": "0",
  "clublogrealtime": "0",
  "clublogignore": "0",
  "hrdlogrealtime": "0",
  "station_uuid": "12345678-1234-1234-1234-123456789012",
  "eqsl_default_qslmsg": "Testing --&gt; Good signal & nice QSO",
  "link_active_logbook": "1",
  "qrzapikey": "valid-payed-qrz-key" // From Wavelog >V2.5.1 on
 }
]

创建位置的 curl 调用示例: curl "https://[your wavelog_instance]/api/create_station/[your_api_key]" -X POST -d @[File with payload]

可能的结果:

  • 成功且无重复:201 / {"status":"success","message":"1 locations imported."}
  • 成功但存在重复:200 / {"status":"dupe","message":"0 locations imported."}
  • 出错(密钥错误):401 / {"status":"error","message":"Auth Error, invalid key"}
  • 出错(JSON 格式错误):400 / {"status":"error","message":"Invalid JSON file"}
  • 出错(其他错误):500 / {"status":"error","message":"Hopefully helpful errormessage"}

其背后的逻辑:

  • 检查该用户是否已存在引用信息、呼号等完全相同的 station_location。
  • 检查该用户是否已存在具有相同 UUID 的 station_location(若载荷中已提供) 若两者之一成立,此 API 将不会创建该位置。

api/list_clubmembers

注意

此功能需要 Wavelog >2.3.1 版本

返回与该 API 密钥关联的集体台成员信息。

警告

必须使用与「Club Officer」用户关联的 API 密钥

输入格式

{
  "key":"YOUR_API_KEY"
}

集体台有成员时的响应示例:

{
  "status": "successful",
  "members": [
    {
      "callsign": "KD9WWC",
      "user_name": "anthony",
      "p_level": "9"
    },
    {
      "callsign": "KC9UHI",
      "user_name": "matt",
      "p_level": "6"
    }
  ]
}

集体台没有成员时的响应:

{
  "status": "failed",
  "reason": "No club members found",
  "members": ""
}
Wavelog 手册(中文版) / API 0 字 0 行 bg8lng
2026-10-21T12:42:36.282125161Z 2026-10-21T12:43:56.919079927Z