API 和 MCP
通过 HTTP,从模型到图纸
完整的 REST API 工作流程——会话、文件、配置、预览、导出、下载——以及用 cURL、JavaScript、TypeScript 和 Python 编写的同一程序。
开始之前
- 一个 Occlusia 账户和一个 API 密钥,在您账户中的 API 密钥 下创建。请将密钥保存在环境变量中:示例读取
OCCLUSIA_API_KEY。 - 一个模型:由 SketchUp 2021 或更高版本保存的
.skp文件,或.ifc、.fbx或.occs文件,最大 512 MB。 - 您的图形标准,作为配置,通过 Occlusia Studio 的 Export › Configuration (.occc) 导出——也可以没有,此时模型按默认设置绘制。
- 点数,或抢先体验账户:打开模型和每次导出都消耗点数(API 和 MCP,费用说明)。
六个步骤
- 01
打开会话
POST /sessions启动一个属于您自己、登录到您账户的引擎,并返回其id。每个账户同时可有 3 个会话;会话在闲置 15 分钟后或满 8 小时后结束。 - 02
上传文件
PUT /sessions/{id}/files/{name},以文件作为原始请求体:模型及其配置。名称是文件在会话中的名称,绝不是服务器上的路径。 - 03
打开并配置
命令
model.open配合{"path": "house.skp"}打开模型,并在sections中返回其视图。config.set配合{"path": "standard.occc"}应用配置;破坏格式的配置会被整体拒绝,并列出所有错误。 - 04
需要时预览
preview.render以 PNG、JPEG 或 SVG 本身返回一个视图,长边最多 2048 像素。导出并不需要它。 - 05
导出
export带上format——svg、dxf、pdf、png或jpg——、要绘制的sections——一个视图的名称,或其列表——以及out:单张图纸用文件,多张用文件夹。merged会将它们合成一份 PDF。 - 06
下载,然后结束会话
GET /sessions/{id}/files/{name}下载导出所写入的内容;DELETE /sessions/{id}结束会话,其文件随之删除。
同一程序的四种语言版本
输入一个模型,输出其第一个视图的 DXF,即使某一步失败,会话也会被结束。每种语言在遇到拒绝时都会停止,并给出其状态码和错误的响应体。
KEY=occ_sk_… # Account › API keys
API=https://api.occlusia.app/v1/engine
AUTH="Authorization: Bearer $KEY"
JSON="Content-Type: application/json"
# 1. A session: an engine of your own, with its own files
S=$(curl -s -X POST $API/sessions -H "$AUTH" | jq -r .id)
# 2. The model and your graphic standard
curl -T house.skp $API/sessions/$S/files/house.skp -H "$AUTH"
curl -T standard.occc $API/sessions/$S/files/standard.occc -H "$AUTH"
# 3. Open the model (1 credit), apply the configuration (free)
curl $API/sessions/$S/commands/model.open -H "$AUTH" -H "$JSON" -d '{"path":"house.skp"}'
curl $API/sessions/$S/commands/config.set -H "$AUTH" -H "$JSON" -d '{"path":"standard.occc"}'
# 4. Export one view as DXF (1 credit per drawing)
curl $API/sessions/$S/commands/export -H "$AUTH" -H "$JSON" \
-d '{"format":"dxf","sections":"Section A-A","out":"section-a.dxf"}'
# 5. Download it, then end the session: its files are deleted with it
curl -o section-a.dxf $API/sessions/$S/files/section-a.dxf -H "$AUTH"
curl -X DELETE $API/sessions/$S -H "$AUTH"这些示例导出模型的第一个视图。sections.list 列出所有视图并说明哪一个处于活动状态;objects.list、annotations.list 和 levels.list 列出模型的其余内容。
选择视图和格式
"sections": "Section A-A"导出一个视图;["Section A-A", "Ground floor plan"]导出多个视图,每个视图在out文件夹中各成一个文件——或用"merged": true合成一份 PDF。page设置每个视图的 PDF 页面——format、orientation、scale_mode(fit或custom,后者带其scale_denominator(1:N))、margins_mm——,pages则一次设置一个视图;image设置 PNG 或 JPEG 的尺寸或比例、分辨率、背景和质量。export.config读取每个视图的页面设置,export.setup则在不导出的情况下修改它,就像导出对话框那样。- 导出会返回它所写入的文件及其费用;
GET /sessions/{id}/files列出会话的文件。
不使用配置文件进行样式设置
配置所含的每项设置,也可以逐条命令设置:object.set 用于对象,object.apply_preset 用于填充图案预设,layers.create 和 layers.update 用于 DXF 图层,section.set 用于视图,annotation.set 和 level.set 用于注释和标高。engine.schema 列出每项设置及其取值;config.get 返回整份配置,可保存为 .occc 文件。
耗时较长的导出:作业和事件
一套 PDF 可能需要几分钟。发送其命令时带上 Prefer: respond-async:它会立即返回 202 和一个作业,GET /sessions/{id}/jobs/{job} 会说明作业是在运行、已完成并附结果,还是失败并附错误。GET /sessions/{id}/events 以 server-sent events 推送引擎的动作:progress、message、export、job、ended。
错误和重试
- 每次拒绝都是
{"error": {"code", "message"}},带有稳定的代码和对应的 HTTP 状态码。 - 带有
cloud_limit或rate_limited的429,以及带有busy的503,都带有Retry-After:等待相应的时间,然后重新发送同一个请求。 - 随命令发送
Idempotency-Key:响应丢失后的重试会直接返回第一次运行的结果——绝不会重复运行,也绝不会重复收费。 - 每个响应都带有
X-Request-Id:就任何请求提问时请附上它。
参考
- GET /v1/engine
- 引擎的版本和构建号,无需密钥。
- GET /v1/engine/openapi.json
- 完整的 API,以 OpenAPI 描述。
- GET /v1/engine/commands
- 每条命令,其参数以 JSON Schema 描述。
每条路由、限制和错误代码都列在 API 和 MCP 中,位于 REST API 一节。