skills/preloaded/openmaic-classroom/references/api-reference.md
OpenMAIC 服务 API 接口规范。所有 API 基础路径为 {base_url}/api,默认 http://localhost:3000/api。
ACCESS_CODE 环境变量:所有接口开放ACCESS_CODE:需先通过 /api/access-code/verify 获取 cookie/api/health 始终无需认证POST {base_url}/api/access-code/verify
Content-Type: application/json
{ "code": "<ACCESS_CODE>" }
成功返回 { "success": true, "valid": true } 并设置 openmaic_access cookie(7 天有效)。
成功:
{ "success": true, ...additionalFields }
错误:
{ "success": false, "errorCode": "<Code>", "error": "<message>", "details?": "<detail>" }
GET {base_url}/api/health
响应:
{
"success": true,
"status": "ok",
"version": "0.1.0",
"capabilities": {
"webSearch": true,
"imageGeneration": false,
"videoGeneration": false,
"tts": true
}
}
capabilities用于功能检测,只在返回此字段时才启用对应的可选功能。
POST {base_url}/api/generate-classroom
Content-Type: application/json
请求体:
{
"requirement": "教学主题描述",
"pdfContent": { "text": "PDF文本内容", "images": [] },
"enableWebSearch": false,
"enableImageGeneration": false,
"enableVideoGeneration": false,
"enableTTS": false,
"agentMode": "default"
}
成功响应 (202):
{
"success": true,
"jobId": "abc123xyz",
"status": "queued",
"step": "queued",
"message": "Classroom generation job queued",
"pollUrl": "{base_url}/api/generate-classroom/abc123xyz",
"pollIntervalMs": 5000
}
错误:
400: requirement 字段缺失500: 内部错误GET {pollUrl}
响应:
{
"success": true,
"jobId": "abc123xyz",
"status": "running",
"step": "generating_outlines",
"progress": 35,
"message": "Generating scene outlines...",
"pollUrl": "...",
"pollIntervalMs": 5000,
"scenesGenerated": 2,
"totalScenes": 6,
"result": null,
"error": null,
"done": false
}
最终成功响应:
{
"success": true,
"status": "succeeded",
"result": {
"classroomId": "Uyh82Y32ZK",
"url": "{base_url}/classroom/Uyh82Y32ZK",
"scenesCount": 6
},
"done": true
}
最终失败响应:
{
"success": true,
"status": "failed",
"error": "具体错误信息",
"done": true
}
POST {base_url}/api/parse-pdf
Content-Type: multipart/form-data
表单字段:
pdf(文件,必填): PDF 文件providerId(可选): PDF 提供商,默认 "unpdf"apiKey(可选): 提供商 API KeybaseUrl(可选): 提供商基础 URL响应:
{
"success": true,
"data": {
"text": "提取的文本内容",
"images": [],
"metadata": {
"pageCount": 10,
"fileName": "document.pdf",
"fileSize": 1024000
}
}
}
GET {base_url}/api/classroom?id=<classroomId>
POST {base_url}/api/classroom
Content-Type: application/json
{ "stage": {...}, "scenes": [...] }
POST {base_url}/api/web-search
Content-Type: application/json
{ "query": "搜索关键词", "pdfText": "PDF上下文", "apiKey": "Tavily Key" }
POST {base_url}/api/verify-model
Content-Type: application/json
{ "model": "openai:gpt-4o", "apiKey": "...", "baseUrl": "..." }
如果需要更细粒度的控制,可以使用以下逐步生成端点代替 /api/generate-classroom:
POST {base_url}/api/generate/scene-outlines-stream
请求体:
{
"requirements": { "requirement": "主题", "userNickname": "用户昵称" },
"pdfText": "PDF文本",
"pdfImages": [],
"researchContext": "网络搜索结果",
"agents": []
}
Headers:
x-image-generation-enabled: "true" 或 "false"x-video-generation-enabled: "true" 或 "false"SSE 事件类型:languageDirective、outline、done、error、retry
POST {base_url}/api/generate/scene-content
Content-Type: application/json
{
"outline": {...},
"allOutlines": [...],
"stageId": "stage-1",
"pdfImages": [],
"agents": [],
"languageDirective": "使用简体中文"
}
POST {base_url}/api/generate/scene-actions
Content-Type: application/json
{
"outline": {...},
"allOutlines": [...],
"content": {...},
"stageId": "stage-1",
"agents": [],
"languageDirective": "使用简体中文"
}
POST {base_url}/api/generate/agent-profiles
Content-Type: application/json
{
"stageInfo": { "name": "入门阶段", "description": "..." },
"sceneOutlines": [{ "title": "...", "description": "..." }],
"languageDirective": "使用简体中文",
"availableAvatars": [],
"avatarDescriptions": []
}