价医械价通医疗设备中标价格查询

数据开放

医械价通的数据通过同一套 REST 接口提供:网页端、后续的微信公众号以及你的内部系统都可以直接调用。

基础地址:网站同域 /apiJSON · UTF-8Bearer Token 鉴权AI 对话 SSE 流式返回

概览

基础地址
与网站同域的 /api 路径,例如 https://<网站域名>/api/bids。开发环境中前端 http://127.0.0.1:3100/api 会原样转发到后端 http://127.0.0.1:8100/api。
数据格式
请求与响应均为 JSON(UTF-8);POST 请求需带 Content-Type: application/json。
字段约定
金额单位统一为「元」;日期格式为 YYYY-MM-DD;多选参数用英文逗号分隔,如 province=广东,浙江。
分页
page 从 1 开始,page_size 默认 20、最大 100。列表接口统一返回 { items, total, page, page_size, max_page },其中 max_page 是当前身份可翻阅的最大页数(null 表示不限)。
数据来源
每条记录带 source 字段(演示数据 / AI采集 / 文件导入 等)。「演示数据」由系统生成,仅用于体验功能,不代表真实成交价格。
跨域
服务端调用不受限制;在浏览器中跨域调用,需要先把你的域名加入后端的 CORS 白名单(CORS_ORIGINS 配置)。
交互式接口文档

开发环境可访问 http://127.0.0.1:8100/docs 查看交互式接口文档(Swagger UI,可在线试调),完整的 OpenAPI 描述位于 http://127.0.0.1:8100/openapi.json。

微信公众号复用同一套接口

后续上线的微信公众号会直接复用这套接口与账号体系:登录方式、会员权益和分页限制与网页端一致,数据实时同步,无需另行对接。

鉴权

  1. 1
    调用 POST /api/auth/login,请求体为 {"phone": "手机号", "password": "密码"},返回 token 和用户信息。还没有账号可先调用 POST /api/auth/register 注册,新账号赠送 3 天会员试用。
  2. 2
    之后的每个请求在请求头加上 Authorization: Bearer <token>。token 有效期 30 天,过期后重新登录获取即可。
  3. 3
    不带 token(或 token 已失效)时按游客处理:公开接口照常返回,但受游客分页限制;需要登录的接口返回 LOGIN_REQUIRED。
请求:POST /api/auth/login
curl -s -X POST "https://<网站域名>/api/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"phone": "<手机号>", "password": "<密码>"}'

# 之后的请求带上请求头:
# Authorization: Bearer <token>
响应(字段结构,值为示意)
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.…",
  "user": {
    "id": 12,
    "phone": "138****0000",
    "nickname": "用户0000",
    "company": null,
    "role": "user",
    "vip_until": "2026-10-02T10:00:00",
    "is_vip": true
  }
}

会员与分页限制

接口与网页端共用同一套权限规则,按调用者身份(游客 / 注册用户 / 会员)区分:

能力游客注册用户会员
列表翻页(带「分页限制」标记的接口)前 3 页前 10 页不限
每页条数 page_size≤ 100≤ 100≤ 100
导出 CSV(/api/bids/export)——单次 ≤ 5000 条
AI 次数(chat / param-analysis / market-insight)5 次 / 天(按 IP)30 次 / 天300 次 / 天
医院、供应商联系方式脱敏脱敏完整

超出可翻阅页数时返回 HTTP 403。建议先读取列表响应中的 max_page,不要请求超过该页码的数据。管理员账号不受以上限制。

错误响应

出错时 HTTP 状态码非 2xx,响应体为 {"detail": {"code": "错误码", "message": "中文说明"}},可直接把 message 展示给用户。

HTTPdetail.code含义
403LOGIN_REQUIRED游客超出可翻阅页数,或调用需要登录的功能(如导出)
401LOGIN_REQUIRED需要登录的接口未携带有效 token(如 /api/auth/me)
403VIP_REQUIRED普通用户超出可翻阅页数,或调用会员功能
400BAD_CREDENTIALS手机号或密码错误
404NOT_FOUND记录不存在
422—参数校验失败(FastAPI 默认格式,detail 为数组)
429AI_QUOTA今日 AI 次数已用完
503LLM_UNAVAILABLE大模型服务暂不可用

接口清单

以下为主要接口,路径参数用 {id} 表示;带 分页限制 标记的列表接口受上文翻页规则约束,会员 仅会员可用,AI 计次 计入每日 AI 次数。完整参数以交互式文档为准。

方法路径主要参数说明
账号与鉴权
POST/api/auth/loginphone, password(JSON 请求体)手机号 + 密码登录,返回 token 与用户信息
POST/api/auth/registerphone, password(≥6 位), nickname?, company?注册账号,新账号赠送 3 天会员试用
GET/api/auth/me—当前账号信息与会员有效期登录
中标数据
GET/api/bidskeyword, record_type(设备 / 维保 / 软件), category_id, brand, model, province, city, hospital_level, purchase_method, date_from, date_to, min_price, max_price, sort, page, page_size, with_summary中标记录检索。keyword 支持同义词与品牌别名;价格单位为元;with_summary=true 时附带均价、中位数、去极值均价等统计。sort:date_desc / date_asc / price_desc / price_asc / amount_desc分页限制
GET/api/bids/{id}—单条中标详情:招标参数、产品、采购单位、供应商(非会员联系方式脱敏)、同型号价格统计与相关记录
GET/api/bids/export与 /api/bids 相同的筛选参数与 sort按筛选条件导出 CSV(UTF-8 带 BOM,可直接用 Excel 打开),单次最多 5000 条会员
产品与市场
GET/api/productskeyword, category_id, brand_id, origin(国产 / 进口), sort(hot / latest / price_asc / price_desc), page, page_size品牌型号列表,含平均 / 最低 / 最高中标价、中标次数和参数摘要分页限制
GET/api/products/{id}years(统计近 N 年,0 为全部)产品详情:参数与配置、价格统计与区间分布、各省 / 历年 / 医院等级分布、注册证
GET/api/market/analysiskeyword, category_id, province, year_from, year_to, record_type市场分析:历年规模、品牌份额及逐年变化、国产与进口、省份、TOP 供应商、医院等级、采购方式、热门型号
GET/api/categories—器械分类树(category_id 的取值来源),含同义词
机构与商机
GET/api/hospitalskeyword, province, city, level, type, sort(bids / amount / beds), page, page_size采购单位(医院、卫生院等)列表及采购次数、金额分页限制
GET/api/supplierskeyword, province, brand, category_id, sort(amount / bids / capital), page, page_size供应商列表及中标次数、金额、主营品牌分页限制
GET/api/tenderskeyword, province, category_id, notice_type, status(进行中 / 已截止 / 意向), date_from, min_budget, page, page_size招标公告与采购意向(商机)分页限制
目录数据
GET/api/consumableskeyword, name, register_no, manufacturer, spec, province, sort(latest / price_asc / price_desc), page, page_size耗材挂网价;有筛选条件时附带 summary(条数、均价、最低价、最高价)分页限制
GET/api/service-priceskeyword, province, code, page, page_size医疗服务价格项目(三级 / 二级 / 一级医院价格、医保类别)分页限制
GET/api/service-prices/comparecode(项目编码)同一项目的各省价格对比
GET/api/registrationskeyword, registrant, mgmt_class(Ⅰ / Ⅱ / Ⅲ), origin(国产 / 进口), page, page_size医疗器械注册证分页限制
GET/api/standardskeyword, level1(子目录), page, page_size(≤200)医疗器械分类目录条目,返回 directories 子目录列表
AI 能力
POST/api/ai/chatmessages: [{role, content}](最多 40 条)AI 数据助手,以 SSE(text/event-stream)流式返回,事件格式见下文AI 计次
POST/api/ai/param-matchtext(招标参数原文), category_id?, top?(1–20,默认 8)根据招标参数反推候选型号:逐条比对满足情况,并统计每条参数有几个品牌满足(不调用大模型)
POST/api/ai/param-analysistext, category_id?在参数反推基础上,由大模型分析指向性 / 排他性参数并给出修改建议(Markdown)AI 计次
POST/api/ai/market-insightkeyword, category_id, province, year_from, year_to根据统计数据生成市场洞察报告(Markdown)AI 计次

示例响应

以下是 2026 年 9 月调用本站接口得到的真实响应(内容为演示数据),为便于阅读已截短,以 // 开头的行为说明文字。

// GET /api/bids?keyword=彩超&page_size=1&with_summary=true
{
  "items": [
    {
      "id": 9410,
      "record_type": "设备",
      "title": "襄阳市中心医院便携式彩超院内采购结果公示",
      "item_name": "便携式彩超",
      "product_id": 62,
      "category": "彩超",
      "brand_name": "西门子医疗",
      "model": "ACUSON Redwood",
      "buyer_name": "襄阳市中心医院",
      "hospital_level": "三甲",
      "supplier_name": "武汉德瑞生物科技有限公司",
      "province": "湖北",
      "city": "襄阳",
      "quantity": 1.0,
      "unit": "台",
      "unit_price": 1274000.0,
      "total_price": 1274000.0,
      "bid_date": "2026-09-25",
      "purchase_method": "院内采购",
      "source": "演示数据"
      // … 其余字段(category_id、brand_id、hospital_id、supplier_id、project_no 等)略
    }
  ],
  "total": 2348,
  "page": 1,
  "page_size": 1,
  "max_page": 3,
  "summary": {
    "count": 2348,
    "avg_price": 968131.2734241908,
    "min_price": 21300.0,
    "max_price": 3347000.0,
    "total_amount": 3571089730.0,
    "total_quantity": 3781.0,
    "median_price": 816600.0,
    "trimmed_avg_price": 935860.4068117313
  }
}

调用示例

把 <网站域名>、<手机号>、<密码> 换成实际值即可运行;本地开发时基础地址可用 http://127.0.0.1:3100/api。

BASE="https://<网站域名>/api"

# 1) 登录,取出 token(此处用 jq 解析,也可以手动复制返回的 token)
TOKEN=$(curl -s -X POST "$BASE/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"phone": "<手机号>", "password": "<密码>"}' | jq -r .token)

# 2) 查询中标记录:彩超,广东 + 浙江,附带价格统计
curl -s -G "$BASE/bids" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "keyword=彩超" \
  --data-urlencode "province=广东,浙江" \
  -d page=1 -d page_size=20 -d with_summary=true

# 3) 耗材挂网价:广东的药物洗脱支架,按单价从低到高
curl -s -G "$BASE/consumables" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "keyword=药物洗脱支架" \
  --data-urlencode "province=广东" \
  -d sort=price_asc

# 4) 参数反推型号(无需登录)
curl -s -X POST "$BASE/ai/param-match" \
  -H "Content-Type: application/json" \
  -d '{"text": "1. 探头数量≥3个\n2. 最大扫描深度≥30cm\n3. 主机显示器≥21英寸", "top": 5}'

AI 流式对话(SSE)

POST /api/ai/chat 的请求体为 {"messages": [{"role": "user", "content": "问题"}]}(多轮对话时按顺序带上历史消息,role 为 user / assistant)。响应类型为 text/event-stream,每个事件是一行 data: {JSON},事件之间以空行分隔,type 字段区分事件类型:

type含义主要字段
meta本次对话使用的模型、是否可联网provider, model, web_search
status进度提示,如「正在联网搜索…」text
tool_startAI 开始调用数据工具(检索中标记录、统计价格等)id, name, label, args
tool_end工具调用结束id, name, summary, is_error, preview
sources联网检索到的来源链接items
text回答文本增量,按顺序拼接即为完整回答(Markdown)delta
error出错信息message
done本轮结束elapsed(秒)
ping心跳(每 15 秒无事件时发送),可忽略—
# BASE、TOKEN 同上文「调用示例」;-N 关闭缓冲,逐条输出事件;不带 token 时按游客计次
curl -N -X POST "$BASE/ai/chat" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"messages": [{"role": "user", "content": "近一年广东彩超的平均中标价是多少?"}]}'
事件流示意(… 为省略内容)
data: {"type": "meta", "provider": "通义千问", "model": "qwen-plus", "web_search": true}

data: {"type": "tool_start", "id": "price_statistics-…", "name": "price_statistics", "label": "统计价格", "args": {"category": "彩超", "province": "广东", …}}

data: {"type": "tool_end", "id": "price_statistics-…", "name": "price_statistics", "summary": "…", "is_error": false, "preview": …}

data: {"type": "text", "delta": "近一年广东省彩超共 …"}

data: {"type": "text", "delta": "…"}

data: {"type": "done", "elapsed": …}

AI 次数用完时返回 HTTP 429(AI_QUOTA);大模型未配置或不可用时,会以 error 事件说明原因后结束。

使用须知

  • 接口数据整理自政府采购网、公共资源交易平台、医院官网、医保局挂网公告等公开信息,仅供参考,请以原始公告为准。
  • source 为「演示数据」的记录由系统生成,用于体验功能,不代表真实成交价格,请勿用于正式报价或决策。
  • 请合理控制调用频率;需要批量获取数据时,请使用导出接口,或联系平台按区域 / 品类定制数据。
  • 接口仍在迭代中,新增字段不会提前通知;字段和参数以交互式接口文档为准,解析时请忽略未知字段。