Driver 开发者平台 API
供官方 Driver「开发者中心」调用的 OAuth 管理通道。它把当前 OAuth 用户映射到既有 Team、Project 和 OAuth Product/Client 服务,不创建第二套账号、团队或插件模型。
认证与上线条件
所有接口使用 Authorization: Bearer <OAuth access token>,并同时满足:
- token 具有
developer:platform;该 Scope 只能通过 authorization code + PKCE + consent 获得; - token 所属 App 为
is_official=true、app_type=standard; - Client ID 位于当前节点的
OAUTH_DEVELOPER_PLATFORM_HOST_CLIENT_IDS白名单; - 当前用户已通过平台准入检查。
developer:platform 与 oauth:delegate 相互独立。旧 token 不会自动获得新 Scope;后台完成 migration、 受控授予和环境变量配置后,Driver 必须重新登录并 consent。未就绪区域保持拒绝,不应降级为网站 JWT 或 API Key。
所有成功或失败响应均带 Cache-Control: no-store 和 Pragma: no-cache。错误体只返回稳定 { "error": "code" },不回显 token、允许 Scope、Client 白名单或请求路径。
接口
GET /oauth/developer-platform/context
返回当前用户可访问的 Team。
{
"success": true,
"teams": [{ "id": "team-uuid", "name": "示例团队", "slug": "example" }]
}GET /oauth/developer-platform/teams/:teamId/projects
返回当前用户在目标 Team 中至少可读的 Project。
{
"success": true,
"projects": [{
"id": "project-uuid",
"teamId": "team-uuid",
"name": "示例项目",
"description": null,
"systemPurpose": null
}]
}GET /oauth/developer-platform/teams/:teamId/projects/:projectId/scopes
返回当前用户、Team、Project 与开发模式实时资格的 Scope 交集。创建表单只能提交该集合中的 code。
{
"success": true,
"scopes": [{
"code": "chat:completions",
"name": "AI 对话",
"description": "调用 AI 对话能力",
"selfServiceEligibility": { "kind": "project_permission", "minimum": "execute" },
"definitionVersion": 2
}]
}GET /oauth/developer-platform/teams/:teamId/products
列出目标 Team 中当前用户可见的插件 Product,并内嵌 Client、审核单和 release 摘要。
{
"success": true,
"products": [{
"id": "product-uuid",
"primaryManagementClientId": "management-client-uuid",
"ownerUserId": "user-uuid",
"teamId": "team-uuid",
"projectId": "project-uuid",
"listingKind": "plugin",
"packageAppId": null,
"firstApprovedAt": null,
"clients": [],
"submissions": [],
"releases": []
}]
}POST /oauth/developer-platform/teams/:teamId/products
创建 plugin Product 和单一 primary OAuth Client。请求头必须包含长度不超过 128 的非空 Idempotency-Key。
{
"projectId": "project-uuid",
"name": "示例插件",
"purpose": "本地开发测试",
"scopeCodes": ["chat:completions"]
}请求只接受上述四个字段,额外字段会被拒绝。服务端固定 listing_kind=plugin、platform=Primary、 空回调地址和空授权配置。相同 key 与相同内容重放返回 200;相同 key 改变内容返回 409。
首次创建返回 201:
{
"success": true,
"product": {
"productId": "product-uuid",
"managementClientId": "management-client-uuid",
"oauthClientId": "public-oauth-client-id",
"draftRevisionId": "revision-uuid",
"idempotent": false
}
}GET /oauth/developer-platform/teams/:teamId/clients/:managementClientId
读取属于目标 Team 且当前用户可管理的 Client。
{
"success": true,
"detail": {
"client": {
"id": "management-client-uuid",
"productId": "product-uuid",
"clientId": "public-oauth-client-id",
"clientLabel": "Primary",
"name": "示例插件",
"projectId": "project-uuid",
"appType": "plugin",
"currentPublicRevisionId": null,
"disabledAt": null,
"createdAt": "2026-09-01T00:00:00Z",
"updatedAt": "2026-09-01T00:00:00Z"
},
"revisions": []
}
}常见错误
| HTTP | error | 含义 |
|---|---|---|
| 400 | invalid_team_id | Team ID 格式无效 |
| 400 | invalid_developer_platform_context | Scope 查询缺少 context=development 或包含额外查询参数 |
| 400 | oauth_product_project_binding_invalid | Team/Project ID 格式或绑定无效 |
| 400 | invalid_team_oauth_product_create | 创建请求 body、字段或幂等键格式无效 |
| 400 | oauth_self_service_scope_not_allowed | 请求的 Scope 不在当前用户、Team、Project 的开发模式资格交集中 |
| 400 | invalid_developer_platform_request | Client 详情请求参数格式无效 |
| 401 | invalid_token | token 无效、过期、撤销,或所属 App 已禁用/删除 |
| 403 | insufficient_scope | token 缺少 developer:platform 或路由不在 Scope 定义中 |
| 403 | unauthorized_client | Host 非官方、非 standard 或不在当前节点白名单 |
| 403 | invite_activation_required | 当前账号未通过平台准入 |
| 404 | oauth_app_not_found | 目标 Product/Client 不存在或不可见 |
| 409 | oauth_team_product_create_idempotency_conflict | 相同幂等键对应不同创建内容 |
体验者管理、审核、批准、发布和下架继续使用 Team OAuth 应用 API。