Offer岛 (OfferDao) 开发者文档

OfferDao API documentation · 给 agent 与开发者的取数与发布入口

Offer岛(OfferDao,https://offerdao.ai)是面向 AI 方向的求职 / 招聘平台。岗位、公司、面经与每日行业资讯尽量公开——对人开放,也对工具开放:整个已审核岗位库都可以让你自己的 agent 直接查询,也可以把一份 JD 结构化后发布进审核队列。

这一页是 Offer岛 API 的人类可读入口。机器可读的那份在 /openapi.json(OpenAPI 3.1),站点索引在 /llms.txt,自然语言用法说明在 /skill.md

机器可读入口

这一页本身也有 markdown 版:请求时带 Accept: text/markdown,或直接取 /docs.md。首页、关于、条款、隐私、联系同理(/index.md/about.md …)。

Base URL

生产环境是 https://offerdao.ai不要把域名写死——用环境变量解析一次再复用,将来换域名时只改这一处:

OFFERDAO_BASE="${OFFERDAO_BASE:-https://offerdao.ai}"

带版本的规范写法是 $OFFERDAO_BASE/api/v1/…;不带版本段的 $OFFERDAO_BASE/api/…永久别名,两者完全等价(见下面的版本与弃用策略)。本页示例为了与既有集成一致,仍写不带版本的形式。

版本与弃用策略

agent 不该去接一个「随时可能变、且不打招呼」的接口。这里把承诺写死:

机器可读的同一份声明在 /api/versions/api/api/v1 返回同一份),OpenAPI 规格里对应 info.x-api-versioning

curl -s "$OFFERDAO_BASE/api/versions"

# 两种写法等价
curl -sI "$OFFERDAO_BASE/api/health"
curl -sI "$OFFERDAO_BASE/api/v1/health"   # → X-API-Version: v1

鉴权

岗位搜索精选发布需要 API key;公司目录、面经攻略、行业资讯、健康检查不需要。两种写法等价:

curl -sG "$OFFERDAO_BASE/api/postings/search" \
  -H "Authorization: Bearer $OFFERDAO_API_KEY" \
  --data-urlencode "q=infra" --data-urlencode "limit=5"

# 或者
curl -sG "$OFFERDAO_BASE/api/postings/search" -H "X-API-Key: $OFFERDAO_API_KEY"

拿 key 的两条路

端点总览

下表由 /openapi.json 直接生成,字段与参数细节以规格为准。

方法路径用途鉴权
GET/api/v1/postings/search搜索已审核岗位需要 API key
GET/api/v1/postings/featured岛上精选(随机抽样)需要 API key
POST/api/v1/postings/agent发布岗位(进审核队列)需要 API key
GET/api/v1/companiesAI 公司目录(无需 API key)公开
GET/api/v1/guides面经攻略外链(无需 API key)公开
GET/api/v1/news/feed每日行业资讯 JSON(无需 API key)公开
GET/news/md资讯 markdown 索引(无需 API key)公开
GET/news/md/{name}某一天的资讯原文(无需 API key)公开
GET/api/v1/agent/test-key免注册领取开放测试 key(仅查询)公开
GET/api/v1/agent-configagent 接入配置(无需 API key)公开
GET/api/v1/health健康检查(无需 API key)公开
GET/skill.mdagent skill 全文(自然语言用法说明)公开
GET/agent.md站内 AI 助手的产品级 prompt公开
GET/llms.txtllms.txt 站点索引(llmstxt.org 格式)公开
GET/openapi.json这份 OpenAPI 规格本身公开
GET/docs开发者文档(HTML / markdown 按 Accept 协商)公开
GET/api/versions版本与弃用策略(机器可读)公开
GET/.well-known/api-catalogAPI Catalog(RFC 9727 linkset)公开
GET/agent-instructions.md给外部 agent 的「何时使用 / 怎么调用」说明公开

快速上手

搜索岗位

# 北京的 infra 岗位,只要正式,最近 30 天
curl -sG "$OFFERDAO_BASE/api/postings/search" \
  -H "Authorization: Bearer $OFFERDAO_API_KEY" \
  --data-urlencode "q=infra" \
  --data-urlencode "location=北京" \
  --data-urlencode "employment_type=正式" \
  --data-urlencode "published_within_days=30"

返回 { items, total, limit, offset }total 是该筛选条件的总条数,不受分页影响。岗位详情页短链是 $OFFERDAO_BASE/j/<posting_id>,可以直接给用户点开。

发布岗位

必填五组:公司、岗位名称(多岗位改用 positions)、工作类型、工作地点、至少一个联系方式。缺什么就问用户,绝不要编造——联系方式尤其不能凭空捏造。发布总是进审核队列,审核通过前 /j/<posting_id> 是 404。

curl -s -X POST "$OFFERDAO_BASE/api/postings/agent" \
  -H "Authorization: Bearer $OFFERDAO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "organization": "某 AI 公司",
    "role": "多模态算法工程师",
    "employment_type": ["正式"],
    "location": "北京 / 上海",
    "contact_email": "[email protected]",
    "role_tags": ["多模态"]
  }'

免 key 的公开数据

curl -s "$OFFERDAO_BASE/api/companies"      # AI 公司目录
curl -s "$OFFERDAO_BASE/api/guides"         # 面经攻略外链
curl -s "$OFFERDAO_BASE/news/md"            # 每日资讯的 markdown 索引
curl -s "$OFFERDAO_BASE/news/md/20260610.md" # 某一天的资讯原文

限流

每个 /api 响应都带标准限流头draft-ietf-httpapi-ratelimit-headers),所以不用先撞一次墙才知道额度:

RateLimit-Policy: "api";q=1200;w=60, "search";q=60;w=60
RateLimit: "api";r=1199;t=57, "search";r=59;t=57
Retry-After: 57          # 只在 429 上出现

一次请求可能同时受多条策略约束(兜底闸 + 端点闸 + 开放 key 的每日额度),头里就会同时出现多个成员。当前策略:

策略名配额作用范围说明
api1200 次 / 60 秒全部 /api/* 请求兜底闸,防跑飞的循环;正常调用不会碰到
search60 次 / 60 秒岗位搜索 / 精选 / 快照 / mention-index、公司目录、面经攻略、资讯 feed读接口的主闸
manual10 次 / 1 小时网页表单发布岗位写接口从严
agent10 次 / 1 小时POST /api/v1/postings/agent(agent 发布岗位)与网页表单同额度但独立计数
daemon120 次 / 60 秒本机 daemon 注册 / 心跳单台 daemon 约 1 次/分;额度按同一 NAT 后面多台留
compile120 次 / 60 秒简历 LaTeX 编译前端有 600ms 防抖,只在停手时触发
test-key20 次 / 60 秒GET /api/v1/agent/test-key(免注册领开放 key)领一次存起来复用,不要每次请求前都领
activity60 次 / 60 秒访问日历心跳正常一个账号一天一次
contacts60 次 / 60 秒岗位联系方式明文(需登录)挡的是拿一个账号遍历 posting_id
open-key-daily-search随 key 而定 / 24 小时开放测试 key 的每日查询次数只有开放测试 key 有;个人 key 不限量
open-key-daily-publish随 key 而定 / 24 小时开放测试 key 的每日发布次数只有开放测试 key 有;个人 key 不限量

频率闸按客户端 IP 分区;开放测试 key 的每日额度按 key 分区、北京时间零点重置。诚实的边界:线上每个 Serverless 实例各记一份计数,所以实际放行量可能比广告值宽松(只会更宽,不会更严)。机器可读的同一份声明在 /openapi.jsoninfo.x-rate-limits

错误码

内容协商与 404

页面类 URL 支持 Accept 协商(acceptmarkdown.com 口径):浏览器拿 HTML,带 Accept: text/markdown 拿 markdown,响应带 Vary: Accept, Accept-Encoding;一个表示都满足不了时回 406 并在正文列出可用类型。

curl -sI -H "Accept: text/markdown" "$OFFERDAO_BASE/docs"

首页也一样:$OFFERDAO_BASE/Accept: text/markdown 就地返回站点总览 markdown(同一个 URL,不再重定向)。HTML 响应带 Link: </index.md>; rel="alternate"; type="text/markdown",不做协商的客户端也能发现同一份内容在 /index.md

不存在的路径回真正的 404(不是 200 + 首页外壳),markdown 正文里带着 llms.txt / 开发者文档 / OpenAPI / sitemap 的入口——探测失败时照着它重新定位,不要顺着猜路径。

agent 接入

把 Offer岛 装进你自己的 agent:npx skills add offerdaoai/skills,或直接把 /skill.md 交给它。站内 AI 助手(/agent)跑在用户自己的电脑上——本机 daemon + 用户自己的 CLI(Claude Code / Codex / Cursor Agent / Kimi CLI),简历原件留在本地。安装脚本见 /install.sh,接入配置见 /api/agent-config

使用边界

数据可以查、可以推荐给用户,但请遵守服务条款:不要批量抓取转售,不要把联系方式拿去做无关营销。有商务合作或接入问题,联系我们