开发者 / 接入文档 · 文档版本 1.2.0
接入文档
开放接口与智能体工具共用一把密钥、一套能力和同样的规则。以下内容读自线上文档,随版本更新。
概览
一把密钥能用两种方式接:自己的系统调 HTTP 开放接口,或者让 AI 助手通过 MCP 直接调工具。返回的都是脱敏的公开卡,联系方式要对方同意后才交换。
| 项 | 值 |
|---|---|
| 接口地址 | https://geekwork.cc/api/open/v1 |
| MCP 地址 | https://geekwork.cc/api/open/v1/mcp |
| 鉴权 | 请求头 Authorization: Bearer <你的密钥> |
| 密钥 | 测试密钥 gk_test_ 开头、正式密钥 gk_live_ 开头 |
| 格式 | 请求与返回都是 JSON,UTF-8;每个返回带 request_id |
快速开始
四步,十分钟以内能跑通第一次调用。
拿测试密钥
机构填一张申请(单位、联系人、要接的能力、用途),1 个工作日内联系你,审核通过后发测试密钥;个人开发者登录并实名后,在「设置 · 开放能力」里自助生成,当场可用。
申请测试密钥终端export GEEKHUB_KEY="gk_test_..." # 把密钥放环境变量,不要写进代码配置客户端
用 AI 助手的,把 MCP 地址填进客户端;只用 HTTP 的跳过这一步。
客户端配置claude mcp add --transport http geekhub https://geekwork.cc/api/open/v1/mcp --header "Authorization: Bearer <你的密钥>"第一次调用
用一句话找机会。测试密钥回的是 30 张测试卡里对得上的几张,结构和正式环境一样。
请求curl -X POST 'https://geekwork.cc/api/open/v1/match' \ -H 'Authorization: Bearer $GEEKHUB_KEY' \ -H 'Content-Type: application/json' \ -d '{"need":"想找苏州的视觉质检场景","limit":10}'返回(测试密钥){ "matches": [ { "type": "tech_scene", "board_label": "商业机会", "card_code": "ctestcardaab", "title": "示例:工厂视觉质检试点场景", "city": "苏州", "verified": true, "reason": "这是沙箱示例卡,不对应真实内容", "connect_url": "https://geekwork.cc/c/sandbox-1", "amount_text": "50–200 万", "deadline": "2026-12-20", "cover_url": "https://geekwork.cc/api/v1/scene/sample_neutral-2.webp" } ]}换正式密钥
测试跑通后开通正式环境:平台审核 → 合同与报价单 → 对公转账 → 到账开通,发正式密钥(
gk_live_开头)。把环境变量换掉即可,地址和代码都不用改。正式环境每天有免费检索,对接成功才计费。
测试与正式
测试密钥和正式密钥调的是同一个地址、同一套字段,区别只在数据和计费。
- 测试密钥(
gk_test_):只回测试卡,标题以「示例:」开头;不计费、不写库、不占免费检索次数。 - 正式密钥(
gk_live_):回真实公开卡;每天有免费检索次数,对接成功才计费。
限流与额度
超了会回 429,返回里带 retry_at(最早可以重试的时间)。
| 项 | 值 |
|---|---|
| 正式密钥每分钟 | 30 次 |
| 每天合计 | 5000 次 |
| 测试密钥每分钟 | 60 次 |
| 被降速后每分钟 | 5 次 |
| 每天代提需求 | 20 条 |
POST /match
用一句话说明你要找什么,返回最多 10 张候选卡;每张卡的 reason 是一句理由(对得上哪几项由规则判定,带 reason_ai: true 的由 AI 写成句子),connect_url 是网页链接(URL Link,不提供小程序码)。
请求
curl -X POST 'https://geekwork.cc/api/open/v1/match' \ -H 'Authorization: Bearer $GEEKHUB_KEY' \ -H 'Content-Type: application/json' \ -d '{"need":"想找苏州的视觉质检场景","limit":10}'{ "matches": [ { "type": "tech_scene", "board_label": "商业机会", "card_code": "ctestcardaab", "title": "示例:工厂视觉质检试点场景", "city": "苏州", "verified": true, "reason": "这是沙箱示例卡,不对应真实内容", "connect_url": "https://geekwork.cc/c/sandbox-1", "amount_text": "50–200 万", "deadline": "2026-12-20", "cover_url": "https://geekwork.cc/api/v1/scene/sample_neutral-2.webp" } ]}常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | need(要找什么)少于 2 字或多于 500 字 | 改到 2–500 字 |
validation_failed | need 和 structured(筛选条件)都没给 | 至少给一项:一句话需求,或城市、行业等条件 |
validation_failed | structured.boards(板块)写了可选值以外的板块 | 改成参数表里列出的板块 |
validation_failed | limit(条数)小于 1 或不是整数 | 改成 1 到 10 之间的整数;超过 10 不报错,按 10 条返回 |
quota_exhausted | 今天的免费检索用完了 | 把返回里的恢复时间(retry_at)告诉用户,到点再查;不要反复重试 |
rate_limited | 一分钟内调得太多 | 等到 retry_at 之后再调 |
POST /demands
提交一条需求,审核通过后进入对应板块;每个合作方每天最多 20 条(可被调低),所属组织需已有负责人账号。
请求
curl -X POST 'https://geekwork.cc/api/open/v1/demands' \ -H 'Authorization: Bearer $GEEKHUB_KEY' \ -H 'Content-Type: application/json' \ -d '{"title":"采购一批视觉质检相机","detail":"产线检测用,需要 20 台工业相机,希望本月内有供应商联系我们。","kind":"purchase","region":"苏州","idempotency_key":"demo-0001"}'{ "request_id": "req_sandbox_0001", "demand_id": "dmd_test_0a1b2c3d4e", "status": "sandbox", "created": true}常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
scope_denied | 用的是个人密钥 | 告诉用户:代提需求要机构密钥 |
validation_failed | 没带 user_confirmed(用户已确认) | 先把标题、说明、类型念给用户,用户说确认后带 user_confirmed: true 再调 |
validation_failed | title(标题)少于 4 字或多于 40 字 | 按用户原意改写到 4–40 字,再念给用户确认 |
validation_failed | detail(说明)少于 10 字或多于 120 字 | 补上数量、时间等要点,或删到 120 字以内 |
validation_failed | kind(类型)不是 purchase(采购)、pilot(试点)、channel(渠道)之一 | 按用户的意思选一个 |
needs_owner | 机构还没有负责人账号 | 请机构先在工作台补一位负责人,再提交 |
content_rejected | 内容没通过安全检查,比如写了电话、微信 | 按返回的 category 改写,去掉联系方式后再提交 |
quota_exhausted | 今天的需求条数用完了(每个合作方每天 20 条) | 明天再提 |
GET /connections/:code
查一次对接的当前状态。开了「找人找资源」或「代提需求」任一项都能调。
请求
curl -X GET 'https://geekwork.cc/api/open/v1/connections/c_sandbox_0001' \ -H 'Authorization: Bearer $GEEKHUB_KEY'{ "request_id": "req_sandbox_0002", "connection_id": "c_sandbox_0001", "status": "initiated", "created_at": "2026-10-25T09:30:00.000Z", "decided_at": null, "achieved_at": null, "billing": { "state": "frozen" }}常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 对接编号写错了,或不是这把密钥发起的 | 核对编号;只能查自己发起的对接 |
POST /supply
新增一条供给。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | external_id(你们的编号)为空、超过 80 位,或有字母数字和 _ . : - 以外的字符 | 改成你们系统里的编号,只用这些字符 |
validation_failed | board(板块)写了不接收外部供给的板块 | 只能是商业机会、技术成果、政策、融资对接(tech_scene / tech_result / policy / capital) |
validation_failed | fields(板块字段)少了必填项 | 按返回里的 missing 补上;商业机会要 title、summary、city、coopModes、budgetBand |
validation_failed | fields 里的取值不在发布表单的选项里 | 按返回里的 invalid 改成可选值 |
content_rejected | 字段里写了手机号、邮箱、微信号或 QQ 号 | 删掉联系方式;对接由平台托管 |
PUT /supply/:external_id
按你自己的编号更新一条供给。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 这个编号没新增过 | 先用 POST /supply 新增 |
validation_failed | 路径里的编号和请求体里的 external_id 不一样 | 两处写同一个编号 |
DELETE /supply/:external_id
按你自己的编号下架一条供给。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 这个编号没新增过,或已经下架 | 核对编号 |
POST /mcp
智能体工具入口(MCP,Streamable HTTP 无状态,JSON-RPC 2.0,一次一条消息):先 initialize,再 tools/list 看你这把密钥能用的工具;共 7 个:find_people_resources(找机会和资源)、get_card(看卡片详情)、match_policies(查政策)、today_updates(今日更新)、find_incubators(找孵化器)、submit_demand(代提需求)、get_connection_status(查对接状态)。find_people_resources、match_policies、find_incubators 各计入一次免费检索;submit_demand 必须带 user_confirmed:true,个人密钥不能用。测试密钥的回包见文档「沙箱」一节。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
这个接口没有专门要说明的错误,通用错误见「错误」一节。
GET /cards/:code
看卡片详情(与智能体工具 get_card 同一处理器):code 是候选卡的 card_code;在孵项目、找合伙人只回板块、阶段档、标签和链接。不占免费检索。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 卡片编号对不上,或者这张卡已经下架 | 换个说法重新找 |
GET /today
今日更新(与 today_updates 同一处理器):查询参数 board、limit;各板块今日与本周新增数按访客口径分档。不占免费检索。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | board(板块)不在可选值里 | 不传 board,看全部 |
validation_failed | limit(条数)不在 1–10 | 改成 1 到 10 |
GET /incubators
找孵化器(与 find_incubators 同一处理器):查询参数 city、industry、limit;回公开站点与入孵入口,不出负责人和联系人。占 1 次免费检索。
常见错误
出错时返回 4xx / 5xx 状态码,返回内容里写着错误码、原因说明,以及哪几项缺了或填错了。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | limit(条数)不在 1–10 | 改成 1 到 10 |
quota_exhausted | 今天的免费检索用完了 | 把返回里的恢复时间(retry_at)告诉用户,到点再查;不要反复重试 |
MCP 总览
智能体工具走 MCP。七个工具和开放接口共用同一套处理器,返回同一套字段。
七个工具
| 参数 | 说明 |
|---|---|
find_people_resources | 找机会和资源 |
get_card | 看卡片详情 |
match_policies | 查政策 |
today_updates | 今日更新 |
find_incubators | 找孵化器 |
submit_demand | 代提需求 |
get_connection_status | 查对接状态 |
接入方要守的规则
- 任何返回都不带联系方式;用户想联系时,把对接页链接交给用户本人点开确认。
- 在孵项目、找合伙人只给脱敏标签和阶段档。
- reason_ai 为 true 的理由由 AI 写成,展示给最终用户时要标出(AI)。
- 卡片来源只写「发布方自填」或「平台整理」。
错误分三层
| 层 | 什么时候 | 怎么返回 |
|---|---|---|
| HTTP | 密钥不对或作废、平台或智能体入口未开放、每分钟超限 | 开放接口错误体(401 / 503 / 429,带 request_id;429 带 retry_at) |
| JSON-RPC | 批量消息、方法不存在、工具名不存在、版本头无法识别 | error.code 用标准段(-32600 / -32601 / -32602) |
| 工具 | 缺参数、取值不对、找不到、免费次数用完、个人密钥调代提需求、用户未确认 | result.isError: true,content 里是中文说明,structuredContent.error 带 code、fields、retry_at;HTTP 200 |
find_people_resources
找机会和资源
用一句话或一段项目介绍,在平台公开卡里挑候选(客户、试点、技术成果、服务商、投资方、孵化器、在孵项目、合伙人;政策用 match_policies),每张带推荐理由和对接页链接。占 1 次免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
need必填 | string | 要找什么,10 到 500 字;可以直接贴项目介绍 |
boards | array | 只在这些板块里找:tech_scene 商业机会、tech_result 技术成果、marketing 企业服务、capital 融资对接、accelerator 孵化器、incubate 在孵项目、partner 找合伙人。用户没点名板块就不要填,不要替他加。 可选值: tech_scenetech_resultmarketingcapitalacceleratorincubatepartner |
city | string | 城市,写中文名即可,比如「苏州」。用户没说就不要填,不要替他加 |
industry | string | 行业或方向,比如「人工智能」。用户没说就不要填,不要替他加 |
stage | string | 阶段,比如「天使轮」「已有收入」。用户没说就不要填,不要替他加 |
limit | integer | 返回几张,1 到 10,默认 5 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | need(要找什么)少于 10 字 | 请用户多说一句要找什么,再调 |
validation_failed | boards(板块)写了可选值以外的板块 | 改成参数表里列出的板块,或者不传 |
validation_failed | limit(条数)小于 1 或不是整数 | 改成 1 到 10 之间的整数;超过 10 不报错,按 10 条返回 |
quota_exhausted | 今天的免费检索用完了 | 把返回里的恢复时间(retry_at)告诉用户,到点再查;不要反复重试 |
rate_limited | 一分钟内调得太多 | 等到 retry_at 之后再调 |
get_card
看卡片详情
用户追问某一张卡时调:传 card_code,回这张卡的公开字段与重新签发的对接页链接(7 天有效)。在孵项目、找合伙人只回板块、阶段档、标签和链接。不占免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
card_code必填 | string | 卡片编号,来自 find_people_resources 或 today_updates 的结果 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 卡片编号对不上,或者这张卡已经下架 | 告诉用户这张卡不在了,换个说法重新找 |
validation_failed | card_code(卡片编号)格式不对,应是 c 开头的 12 位字母 | 用上一次结果里的 card_code 原样传 |
match_policies
查政策
按地区、行业、阶段配已公开的政策,回前 5 条与自测链接;三项都对不上时回只差一项的。占 1 次免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
region必填 | string | 城市或省份中文名(如「苏州」「江苏」),6 位行政区划码,或「全国」 |
industry必填 | string | 行业或方向,不超过 20 字 |
stage必填 | string | idea 想法期、registered 已注册、revenue 有收入、scale 规模化 可选值: idearegisteredrevenuescale |
size | string | 选填,规模;目前不参与匹配 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | region(地区)或 industry(行业)没填 | 先问用户公司在哪、做什么,再调 |
validation_failed | stage(阶段)不是 idea、registered、revenue、scale 之一 | 先问用户公司走到哪一步:想法、已注册、有收入、成规模 |
quota_exhausted | 今天的免费检索用完了 | 把返回里的恢复时间(retry_at)告诉用户,到点再查;不要反复重试 |
today_updates
今日更新
今天有什么新机会、新政策:各板块今日和本周新增数(访客口径分档)与最新几条。不占免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
board | string | 只看一个板块:policy 政策、tech_scene 商业机会、tech_result 技术成果、accelerator 孵化器、marketing 企业服务、capital 融资对接 可选值: policytech_scenetech_resultacceleratormarketingcapital |
limit | integer | 最多几条,1 到 10,默认 8 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | board(板块)不在可选值里 | 不传 board,看全部板块 |
find_incubators
找孵化器
按城市、方向找孵化器:回公开站点和入孵入口,有当期批次时带批次名与截止日。不出负责人和联系人。占 1 次免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
city | string | 城市中文名 |
industry | string | 方向,比如「硬件」「生物医药」 |
limit | integer | 最多几家,1 到 10,默认 5 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
validation_failed | city(城市)或 industry(方向)超过 40 字 | 只写城市名、方向名,比如「上海」「区块链」 |
validation_failed | limit(条数)小于 1 或不是整数 | 改成 1 到 10 之间的整数;超过 10 不报错,按 10 条返回 |
quota_exhausted | 今天的免费检索用完了 | 把返回里的恢复时间(retry_at)告诉用户,到点再查;不要反复重试 |
submit_demand
代提需求
代用户提交一条需求(进审核队列,不会立刻发布)。必须先把内容念给用户确认,确认后才带 user_confirmed: true 调;缺项或取值不对时会说明要改哪个字段。需要机构密钥。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
title必填 | string | 需求标题,4 到 40 字 |
detail必填 | string | 需求说明,10 到 120 字,不要写联系方式 |
kind必填 | string | purchase 采购、pilot 试点、channel 渠道 可选值: purchasepilotchannel |
region | string | 选填,不超过 40 字 |
budget_band | string | 选填,不超过 40 字 |
period | string | 选填,不超过 40 字 |
target_tenant | integer | 选填,指定孵化器编号 |
idempotency_key | string | 选填,重试时带同一个值不会重复提交 |
user_confirmed必填 | boolean | 用户已确认提交内容时才填 true |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
scope_denied | 用的是个人密钥 | 告诉用户:代提需求要机构密钥 |
validation_failed | 没带 user_confirmed(用户已确认) | 先把标题、说明、类型念给用户,用户说确认后带 user_confirmed: true 再调 |
validation_failed | title(标题)少于 4 字或多于 40 字 | 按用户原意改写到 4–40 字,再念给用户确认 |
validation_failed | detail(说明)少于 10 字或多于 120 字 | 补上数量、时间等要点,或删到 120 字以内 |
validation_failed | kind(类型)不是 purchase(采购)、pilot(试点)、channel(渠道)之一 | 按用户的意思选一个 |
needs_owner | 机构还没有负责人账号 | 请机构先在工作台补一位负责人,再提交 |
content_rejected | 内容没通过安全检查,比如写了电话、微信 | 按返回的 category 改写,去掉联系方式后再提交 |
quota_exhausted | 今天的需求条数用完了(每个合作方每天 20 条) | 明天再提 |
get_connection_status
查对接状态
查一次对接的当前状态(只能查你这把密钥发起的)。不占免费检索。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
connection_id必填 | string | 对接编号 |
常见错误
出错时接口照样返回成功状态,具体原因写在返回内容的 error 里:错误码、哪几项填错了、多久后能重试。
| 错误码 | 什么时候 | 怎么处理 |
|---|---|---|
not_found | 对接编号写错了 | 核对编号,用发起对接时返回的那个 |
not_found | 这条对接不是这把密钥发起的 | 只能查自己发起的对接 |
Skill 接入包
Skill 包告诉 AI 什么时候该用这些工具、怎么把候选讲给用户、哪些话不能说,包里还带接口描述和工具对照表。
各客户端的界面文字以当前版本为准;支持 OpenAPI 的平台可导入接口描述。
回调与事件
在工作台填一个回调地址、勾上要订阅的事件,发生变化时平台会 POST 一条消息给你。消息里只有编号、状态和时间,不带联系方式和对方的原话。
- 没收到 2xx 会自动重试:间隔 0、1、5、15、30、60、180、360 分钟,共 8 次。
- 30 天内的事件可以在工作台重放。
- 同一事件可能送达不止一次,用事件编号去重。
合作方可订阅
需求审核有结果demand.reviewed你代用户提交的需求审核完(通过或没通过)
能拿来做什么:在你的系统里更新这条需求的状态,通知提需求的用户
字段
| 字段 | 含义 |
|---|---|
demand_id | 需求编号(提交需求时返回的那个) |
status | 变化后的状态 |
category | 没通过时的原因类别 |
reviewed_at | 审核时间 |
对方回复了connection.replied你发起的对接,对方第一次在会话里回消息(一次对接只发一次,不带回复原文)
能拿来做什么:提醒用户去看回复;对方还没同意时不算对接成功,不计费
字段
| 字段 | 含义 |
|---|---|
connection_id | 对接编号 |
demand_id | 需求编号(提交需求时返回的那个) |
status | 变化后的状态 |
replied_at | 回复时间 |
对方同意对接connection.agreed对方点了同意,双方可以交换联系方式
能拿来做什么:通知用户可以开始沟通;对接成功才计费,从这一步起算
字段
| 字段 | 含义 |
|---|---|
connection_id | 对接编号 |
demand_id | 需求编号(提交需求时返回的那个) |
status | 变化后的状态 |
agreed_at | 同意时间 |
对接结束connection.closed对方婉拒、超时没回或你这边撤回
能拿来做什么:把这条对接标为结束;这次对接冻结的对接次数退回你的对接包(免费检索次数与对接无关,不受影响)
字段
| 字段 | 含义 |
|---|---|
connection_id | 对接编号 |
demand_id | 需求编号(提交需求时返回的那个) |
status | 变化后的状态 |
closed_at | 结束时间 |
对接达成合作connection.achieved双方确认达成合作
能拿来做什么:记一笔成交,用于对账
字段
| 字段 | 含义 |
|---|---|
connection_id | 对接编号 |
demand_id | 需求编号(提交需求时返回的那个) |
status | 变化后的状态 |
achieved_at | 达成时间 |
供给审核有结果supply.reviewed你接入的供给审核完(上架或没通过)
能拿来做什么:同步上架状态;没通过时按原因改了再提交
字段
| 字段 | 含义 |
|---|---|
supply_id | 供给编号(就是你的 external_id) |
board | 板块 |
status | 变化后的状态 |
reviewed_at | 审核时间 |
对接阶段变了connection.stage_changed对接从一个阶段进到下一个阶段
能拿来做什么:在你的看板里移动这条对接
字段
| 字段 | 含义 |
|---|---|
connection_id | 对接编号 |
demand_id | 需求编号(提交需求时返回的那个) |
stage | 变化后的阶段 |
changed_at | 变化时间 |
孵化器可订阅
入孵申请状态变了application.status_changed有人申请入孵、补材料、通过、婉拒或撤回
能拿来做什么:在自己的台账里同步申请进度,提醒负责人处理
字段
| 字段 | 含义 |
|---|---|
application_id | 入孵申请编号 |
status | 变化后的状态 |
changed_at | 变化时间 |
在孵企业商业化进展换了阶段commercial.stage_changed在孵企业把一条商业化进展推进到新阶段(只发给企业共享了商业化进展的孵化器;不带对方名称和金额)。stage 的值:lead 线索、connected 已对接、poc 方案或 PoC、piloting 试点中、signed 已签约、expanding 复购或扩展
能拿来做什么:在自己的台账里更新这条进展的阶段,跟进卡住的企业
字段
| 字段 | 含义 |
|---|---|
opportunity_id | 商业机会编号 |
stage | 变化后的阶段 |
changed_at | 变化时间 |
场地预约booking.*场地或设备的预约有变化
能拿来做什么:同步到自己的排期表,提醒管理员确认或释放场地
包含这些事件
| 事件 | 什么时候 | status 的值 |
|---|---|---|
booking.created | 建单(占位) | held |
booking.confirmed | 确认 | confirmed |
booking.rejected | 驳回 | rejected |
booking.cancelled | 取消 | cancelled |
booking.completed | 用完 | completed |
booking.expired | 占位超时过期 | expired |
字段
| 字段 | 含义 |
|---|---|
booking_id | 预约编号 |
resource_id | 场地或设备编号 |
status | 变化后的状态 |
starts_at | 预约开始时间 |
ends_at | 预约结束时间 |
changed_at | 变化时间 |
资源申请resource_request.*在孵企业提交的资源申请有变化
能拿来做什么:安排对接人、按排期跟进交付
包含这些事件
| 事件 | 什么时候 | status 的值 |
|---|---|---|
resource_request.created | 提交 | pending |
resource_request.scheduled | 排期 | scheduled |
resource_request.delivered | 交付 | delivered |
resource_request.declined | 婉拒 | declined |
resource_request.cancelled | 取消 | cancelled |
字段
| 字段 | 含义 |
|---|---|
request_id | 资源申请编号 |
resource_id | 场地或设备编号 |
status | 变化后的状态 |
changed_at | 变化时间 |
服务券核销voucher.*服务券核销有变化
能拿来做什么:对账、结算给服务商
包含这些事件
| 事件 | 什么时候 | status 的值 |
|---|---|---|
voucher.created | 发起核销 | pending |
voucher.confirmed | 确认 | confirmed |
voucher.settled | 结算 | settled |
字段
| 字段 | 含义 |
|---|---|
voucher_id | 服务券核销编号 |
status | 变化后的状态 |
changed_at | 变化时间 |
活动报名event_signup.*活动报名有变化
能拿来做什么:更新报名名单、发入场提醒
包含这些事件
| 事件 | 什么时候 | status 的值 |
|---|---|---|
event_signup.created | 报名(名额满时进候补) | signed 或 waitlist |
event_signup.cancelled | 取消报名 | cancelled |
event_signup.promoted | 候补转正 | signed |
字段
| 字段 | 含义 |
|---|---|
event_id | 活动编号 |
signup_id | 报名编号 |
status | 变化后的状态 |
changed_at | 变化时间 |
回调长什么样
请求体是 JSON;请求头带事件编号、事件名和签名。签名 = 用你的签名密钥对「时间戳.原始正文」做 HMAC-SHA256;换密钥后 24 小时内新旧两个签名都会带上,对得上任意一个就行。
POST <your-callback-url>Content-Type: application/json; charset=utf-8User-Agent: GeekHub-Webhooks/1X-Geekhub-Event-Id: <event-id>X-Geekhub-Event-Type: booking.confirmedX-Geekhub-Signature: t=<unix-seconds>,v1=<signature>对接状态
对接从发起到结束会经过这些状态;回调与查询接口里的 status 就是这里的值。
| 状态 | 含义 |
|---|---|
initiated | 已发出,等对方回应;占用 1 次对接次数(冻结) |
agreed | 对方同意对接;扣减 1 次对接次数 |
declined | 对方婉拒;冻结的次数退回 |
expired | 超过对方回应时限没有处理,含对方注销;冻结的次数退回 |
withdrawn | 发起人撤回;同意之前撤回的次数退回,同意之后撤回不退 |
achieved | 双方在平台确认达成合作 |
unbilled | 发起时对接次数余额为 0,没有占用也不计费 |
错误
出了错先看错误码:大多数是参数没填对或者调得太快,按「怎么处理」改了再调就行。
| 错误码 | 状态码 | 含义 |
|---|---|---|
invalid_key | 401 | 密钥不存在或格式不对 |
key_revoked | 401 | 密钥已停用 |
not_active | 403 | 合作方还没开通正式环境 |
partner_paused | 403 | 合作方被暂停 |
scope_denied | 403 | 这把密钥没有该能力的范围 |
validation_failed | 400 | 请求内容不合要求 |
content_rejected | 422 | 内容没通过安全检查 |
needs_owner | 422 | 你们的组织还没有负责人账号,提交的需求没有地方归属,请先联系我们补上 |
rate_limited | 429 | 请求太快,请按 retry_at 重试 |
quota_exhausted | 429 | 今日免费检索或今日需求条数已用完,按 retry_at 次日再试 |
no_balance | 402 | 对接次数余额不足 |
not_found | 404 | 没有这个对象 |
not_open | 501 | 这个接口即将开放,现在还不能调用(文档「即将开放」一节列着) |
platform_paused | 503 | 开放接口临时维护中 |
internal | 500 | 服务端出错,请带上 request_id 联系我们 |
给开发者看的返回格式
错误体固定有 code、message、request_id;按情况多出下面这些字段:
| 字段 | 含义 |
|---|---|
retry_at | 限流或额度用完时,最早可以重试的时间 |
missing | 没有填的必填字段(或这把密钥缺少的能力范围) |
invalid | 填了但取值不对的字段,message 里写明可选值 |
category | 内容没通过安全检查时的类别 |
{ "code": "validation_failed", "message": "need: 2-500", "request_id": "req_01M68K2Q4S6U8W0Y2A4C6E8G0J", "missing": [ "need" ]}