CAPQHT API docs
粤ICP备2026108146号-1
CAPQHTAPI Server

用技术减灾。
地震、海啸、气象实时预警

CAPQHT API Server 是一个免费的 API 服务,为开发者与普通用户提供地震、海啸、气象实时预警接口。

WS wss://api.capquake.top/v1/all
HTTP https://api.capquake.top/v1/snapshot
端点清单 运行状态
数据源数量 24个
数据源状态 — / —
平均延迟 —ms
三节点,同频。

3台服务器,实时推送

东京、广州、东莞。
就近接入,跨域直连。

NODE 01 / 03
东京Tokyo
日本关东 · 东京
实时延迟—
可用率—
状态探测中

三步接入

CAPQHT API 数据均来自公开渠道,会尽力保持可用性,但无法提供任何形式的 SLA 保证。本 API 不对因数据延迟、错误或不完整等情况造成的直接或间接损失负责,使用时请留意。CAPQHT API 不与任何机构存在从属关系。

01

查询单次事件

CAPQHT API 支持 HTTP 单独查询一次事件,详细请求方法请参考各源详细 docs。

$ curl -s https://api.capquake.top/v1/cea
在新页面中打开
02

事件补齐

CAPQHT API 支持拉取一次全部事件快照,此功能旨在于方便软件启动时初始化。

$ curl -s https://api.capquake.top/v1/snapshot
在新页面中打开
03

订阅完整推送

单连接接收全部源,按 scope 分发;心跳 20 秒一次,断线后重新握手并补快照。

› wss://api.capquake.top/v1/all?raw=1
协议说明
Realtime

WebSocket 推送

单连接接收全部数据源增量。握手后由服务端按 scope 分发 event 帧,无需任何鉴权;单 IP 默认 3 个并发连接。

wss://api.capquake.top/v1/all wss zlib 压缩 ?raw=1 明文
帧编码说明
auth_challengeJSON 文本连接后立即下发,仅作旧客户端兼容;无需回应,数据照常推送
heartbeatzlib 二进制每 20 秒一次;连续 3 次未回则断开(4401)
eventzlib 二进制增量事件,data.scope 区分来源,data.payload 与对应 HTTP 端点同构
update_noticezlib 二进制大块数据(如图片瓦片)变动通知,收到后自行拉 HTTP

帧结构

application/json(解压后)
{
  "type": "event",
  "data": {
    "scope": "cea_pr",
    "payload": {
      "event_id": "cenc_202611140017",
      "magnitude": "5.2",
      "max_intensity": 6.7,
      "serial": 3
    }
  }
}

心跳要求原样回显:收到 {"type":"heartbeat","data":"…"} 后,发回 {"type":"heartbeat","data":"…"}(同值)。

客户端示例

javascript
// raw=1:所有帧都是明文 JSON,省掉 zlib
const ws = new WebSocket("wss://api.capquake.top/v1/all?raw=1");

ws.onmessage = (e) => {
  const msg = JSON.parse(e.data);
  switch (msg.type) {
    case "heartbeat":
      ws.send(JSON.stringify({ type: "heartbeat", data: msg.data }));
      break;
    case "event":
      console.log(msg.data.scope, msg.data.payload);
      break;
    case "update_notice":
      console.log("需拉取", msg.data.scope, msg.data.version);
  }
};
python
import asyncio, json, zlib
import websockets

async def main():
    async with websockets.connect("wss://api.capquake.top/v1/all") as ws:
        async for raw in ws:
            # 首帧 auth_challenge 是文本;推送帧是 zlib 二进制
            data = json.loads(raw if isinstance(raw, str) else zlib.decompress(raw))
            if data["type"] == "heartbeat":
                await ws.send(json.dumps(data))
            elif data["type"] == "event":
                print(data["data"]["scope"], data["data"]["payload"]["event_id"])

asyncio.run(main())

scope 一览

scope来源
cea中国地震预警网(国家级)
cea_pr中国地震预警网省级网(30 省融合)
cwa_eew台湾中央气象署强震即时警报
cwa_report台湾中央气象署地震报告
cenc中国地震台网地震情报(fjdzj)
jma_eew日本气象厅紧急地震速报
radar全国雷达组合反射率
noaa_tsunamiNOAA PTWC / NTWC 海啸公报
bmkg印尼 BMKG 地震
agg_*聚合源(USGS、GeoNet、INGV、P2P、JMA 火山、CSN、CENAIS …)

完整 scope 列表(含 agg_* 逐项)可读 /v1/status 的 sources[].scope。

地震报告推送格式

usgs / emsc / gfz / usp 等地震报告类 scope,只推最新一条,与对应 HTTP 端点返回完全一致, 统一使用下面这个信封(data.payload 的内容)。有特殊数据的源(烈度、有感报告、海啸)另用各自的载荷。

application/json(解压后)
{
  "type": "usgs",
  "Data": {
    "id": "ci41530808",
    "originTime": 1787191666940,
    "latitude": 33.417,
    "longitude": -116.639,
    "depth": 6.45,
    "magnitude": 0.31,
    "placeName": "15 km N of Warner Springs, CA",
    "infoTypeName": "Automatic",
    "recvTime": 1787191668000
  },
  "md5": "fce5e0cbeaa072e5ca038668d8497da9"
}
字段类型说明
typestring来源标识:usgs / emsc / gfz / usp,与 WS scope 同名
Data.idstring事件号(上游唯一 ID)
Data.originTimenumber发震时间,Unix 毫秒
Data.latitudenumber震中纬度(WGS-84)
Data.longitudenumber震中经度(WGS-84)
Data.depthnumber震源深度(km)
Data.magnitudenumber震级
Data.placeNamestring震中位置描述(上游原文)
Data.infoTypeNamestring报告状态:Automatic(自动)/ Reviewed(复核)/ Deleted(撤销)
Data.recvTimenumber服务端接收时间,绝对毫秒时间戳
md5stringData 规范化 JSON 的 MD5,用于客户端去重:同 md5 即同一份数据
Schema

数据结构

CEA / CEA-PR 系列共用同一套字段;JMA 保留上游原始报文字段(含历史拼写),两者不要混用解析器。

字段类型说明
event_idstring事件唯一标识;同一事件的所有报次共享,跨源稳定
locationstring震中地名(已清洗测试标记)
latitude / longitudenumber震中经纬度(WGS-84)
magnitudestring震级,字符串;上游缺失时为 null
depthnumber | null震源深度(km);该报未携带时为 null
created_atnumber发震时间,Unix 秒
max_intensitynumber震中最大烈度(CEA 口径)
serialnumber报次,同一 event_id 递增;以最大报次覆盖
is_cancelboolean该报是否取消事件
provincestring所属省份;国家级源为「全国」
sub_sourcestringcea / cea-pr,用于区分来源
recv_timenumber服务端收到该数据的时刻,Unix 毫秒
字段类型说明
Titlestring报种标题(緊急地震速報 …)
EventIDstringJMA 事件号,同一事件不变
Serialstring报次
AnnouncedTimestring発表時刻(JST)
OriginTimestring発震時刻(JST)
Hypocenterstring震源地名(日文原文)
Magunitudestring震級(上游历史拼写,勿改)
MaxIntensitystring最大震度(JMA 震度階)
isWarn / isFinal / isCancel / isTrainingstring警報 / 最終報 / 取消 / 訓練
recv_timenumber服务端接收时刻,Unix 毫秒
◆
覆盖规则:同一 event_id 的后续报次直接以较大 serial 覆盖;is_cancel 为 true 时标记为已取消,不要删除历史记录。
Errors & Limits

错误与限制

数据端点公开只读,因此错误多为「上游暂无数据」而非权限问题。

状态码body含义 / 处理
200数据对象正常
503{"error":"no data yet"}该源当前无数据(如近期无 CWA 预警)。视为「暂无」,稍后重试,勿当故障
404{"result":{"message":"no data"}}仅 /jq/* 兼容层:该条记录不存在或无震源信息
502 / 504nginx 错误页网关或上游超时,按指数退避重试
限制值
单 IP 并发 WebSocket3 路(白名单 IP / CIDR 不限)
全局 WS 连接池200 路,满了返回 4503
心跳20 秒一次,连续 3 次未回 → 断开 4401
注册端点(兼容)每 IP 每日 3 次,超出 429
跨域Access-Control-Allow-Origin: *,可用浏览器直连
▲
WS 关闭码:4401 心跳超时 · 4403 已被封禁 · 4429 该 IP 连接数超限 · 4503 服务端连接池已满。收到 4429 请降低并发或复用单连接。
Uptime

数据源状态

实时读取 /v1/status:24 个源的就绪状态与 90 次采样窗口可用率,每 30 秒刷新一次。

正在读取…
正常 异常