健康数据上报 API

合作方通过 S2S 接口将健康站、可穿戴、手动录入等渠道的测量数据写入晓葆平台。 支持单条与批量上报,使用 client_request_id 实现幂等。

概述

接口路径前缀:/open/v1/health-data

方法路径说明
POST/open/v1/health-data/submit单条健康数据上报
POST/open/v1/health-data/submit-batch批量上报(最多 50 条/次)

鉴权说明

继承开放平台 S2S 中间件:AppKey + 签名。完整算法见鉴权说明

Header类型必填说明
X-App-Idstring控制台「凭证管理」中的 App ID
X-TimestampintegerUnix 秒级时间戳,有效窗口 ±5 分钟
X-Signaturestring请求签名,见鉴权说明
AuthorizationstringBearer <JWT>。本路由挂载 jwt.optional: 携带合法 Token 时自动解析用户身份,manual 场景可省略请求体中的xiaobao_user_id
X-Request-IDstring链路追踪 ID,透传至下游集成日志

用户识别规则

data_source 分支校验(跨字段规则):

data_source额外必填 / 约束
station必须提供 device_sn;且至少一种用户识别:xiaobao_user_id / session_id / phone /station_user.user_id(或已登录 JWT)
third_party必须提供 third_user_id;跳过设备 SN 与上述用户标识校验
plugin必须提供 open_user_idthird_user_id
manual / wearable / home至少一种用户识别:xiaobao_user_id / session_id / phone /station_user.user_id(或已登录 JWT)

单条健康数据上报

支持渠道:manual / wearable / home /station / third_party / plugin。 幂等键为 client_request_id(同应用下重复提交返回 409, 响应携带原 measurement_no)。

POST/open/v1/health-data/submit

请求体application/json):

字段类型必填说明
data_sourcestringmanual / wearable / home /station / third_party / plugin
measured_atstring测量时间(可解析的日期时间,建议 ISO 8601)
original_measured_atstring设备原始测量时间
device_snstring设备序列号,最长 128;station 渠道必填
device_modelstring设备型号,最长 128
points_codestring健康站编码,最长 32
push_modestringrealtime / batch
client_request_idstring客户端幂等请求 ID,最长 64
third_user_idstring第三方用户 ID,最长 128;third_party 必填
open_user_idinteger插件场景 application_users.id,≥1
xiaobao_user_idinteger晓葆用户 ID,≥1;有 JWT 时可省略
session_idstring健康站会话 ID,最长 32
phonestring大陆 11 位手机号
user_family_member_idinteger家庭成员 ID,≥1
station_userobject健康站用户信息,见下表
indicatorsarray健康指标列表(平铺格式),见下表
raw_dataobject设备原始数据(透传)
reportobject报告文件信息(透传)
metadatastring第三方自定义元数据,最长 2048(不参与签名)

station_user 对象

字段类型必填说明
user_idstring健康站侧用户标识(可作为用户识别兜底)
phonestring手机号
namestring姓名,最长 64

indicators 单项

字段类型必填说明
codestring指标代码,最长 64
valueany指标值
unitstring单位,最长 32

请求示例

POST /open/v1/health-data/submit
X-App-Id: 100023
X-Timestamp: 1743494400
X-Signature: ...
Content-Type: application/json

{
  "data_source": "wearable",
  "measured_at": "2026-07-20T10:30:00+08:00",
  "device_sn": "BP20240001",
  "device_model": "HOME_MULTI_BIO_MONITOR",
  "xiaobao_user_id": 10086,
  "client_request_id": "partner-req-20260720-001",
  "indicators": [
    { "code": "systolic_pressure", "value": 128, "unit": "mmHg" },
    { "code": "diastolic_pressure", "value": 82, "unit": "mmHg" }
  ]
}

成功响应201 Created):

{
  "success": true,
  "code": 0,
  "message": "健康数据上报成功",
  "data": {
    "measurement_no": "WD-20260720103000-A1B2C3",
    "validation_status": "valid",
    "claim_status": "claimed"
  },
  "timestamp": "2026-07-20T10:30:01+08:00"
}

data 字段说明

字段类型说明
measurement_nostring测量唯一编号
validation_statusstring设备验证状态:valid / invalid_device /invalid_station / points_code_mismatchthird_party 场景不返回此字段
claim_statusstring用户认领状态:claimed / auto_created /pendingthird_party 场景不返回此字段
manual / wearable / home /third_party / plugin 跳过设备注册校验,validation_status 固定为 valid(third_party 不返回该字段)。 仅 station 渠道做设备与健康站校验。

批量健康数据上报

最多 50 条/次。每条独立处理,单条失败不影响其他条目。 条目字段与单条上报相同(嵌套在 measurements[] 内)。

POST/open/v1/health-data/submit-batch

请求体application/json):

字段类型必填说明
measurementsarray测量条目列表,长度 1–50;单项字段同单条上报请求体

请求示例

POST /open/v1/health-data/submit-batch
X-App-Id: 100023
X-Timestamp: 1743494400
X-Signature: ...
Content-Type: application/json

{
  "measurements": [
    {
      "data_source": "wearable",
      "measured_at": "2026-07-20T10:30:00+08:00",
      "xiaobao_user_id": 10086,
      "client_request_id": "batch-001",
      "indicators": [
        { "code": "heart_rate", "value": 72, "unit": "bpm" }
      ]
    },
    {
      "data_source": "wearable",
      "measured_at": "2026-07-20T10:35:00+08:00",
      "xiaobao_user_id": 10086,
      "client_request_id": "batch-002",
      "indicators": [
        { "code": "spo2", "value": 98, "unit": "%" }
      ]
    }
  ]
}

成功响应201 Created):

{
  "success": true,
  "code": 0,
  "message": "批量上报完成",
  "data": {
    "total": 2,
    "success_count": 2,
    "failure_count": 0,
    "results": [
      {
        "index": 0,
        "success": true,
        "measurement_no": "WD-20260720103000-A1B2C3",
        "validation_status": "valid",
        "measured_at": "2026-07-20T10:30:00+08:00"
      },
      {
        "index": 1,
        "success": true,
        "measurement_no": "WD-20260720103500-D4E5F6",
        "validation_status": "valid",
        "measured_at": "2026-07-20T10:35:00+08:00"
      }
    ]
  },
  "timestamp": "2026-07-20T10:35:01+08:00"
}

results 失败项示例

{
  "index": 1,
  "success": false,
  "error": "错误描述",
  "measured_at": "2026-07-20T10:35:00+08:00"
}

错误码

codeHTTP 状态说明处理建议
DUPLICATE_REQUEST409相同 client_request_id 已处理过视为成功,使用响应中的原 measurement_no
VALIDATION_ERROR422字段校验失败(含跨字段规则)查看 errors 中的字段与描述
HTTP_401401签名校验失败或应用不存在检查签名算法与时间戳
HTTP_429429请求频率超限降速并指数退避重试