ClawSkills logoClawSkills

Fabric.co API skill

通过 HTTP API 创建/搜索 Fabric 资源(记事本、文件夹、书签、文件)。

介绍

# Fabric API (HTTP via curl)

使用此技能通过 Fabric HTTP API (`https://api.fabric.so`) 在用户的 Fabric 工作区中读取/写入内容。

## 关键注意事项(请先阅读)

- “Notes”(笔记)是通过 **POST `/v2/notepads`**(而非 `/v2/notes`)创建的。 - 大多数创建端点都需要 **`parentId`**: - 一个 UUID **或** 以下之一:`@alias::inbox`、`@alias::bin`。 - Notepad(笔记本)创建需要: - `parentId` - 且需要 `text`(markdown 字符串)**或** `ydoc`(高级/结构化)。 - `tags` 必须是一个对象数组,每个对象必须 *要么*: - `{ "name": "tag name" }` 要么 `{ "id": "<uuid>" }` - 绝不能是嵌套数组;绝不能是字符串。

当用户未指定目标文件夹时:默认使用 `parentId: "@alias::inbox"`。

## 设置(Clawdbot)

此技能期望 API 密钥位于:

- `FABRIC_API_KEY`

推荐配置(使用 `apiKey`;Clawdbot 将注入 `FABRIC_API_KEY`,因为设置了 `primaryEnv`):

```json5 { skills: { entries: { "fabric-api": { enabled: true, apiKey: "YOUR_FABRIC_API_KEY" } } } } ````

## HTTP 基础

* 基础地址:`https://api.fabric.so` * 认证:`X-Api-Key: $FABRIC_API_KEY` * JSON:`Content-Type: application/json`

用于调试时:优先使用 `--fail-with-body`,以便显示 4xx 响应正文。

## 标准 curl 模板(使用 heredocs 避免引用错误)

### GET

```bash curl -sS --fail-with-body "https://api.fabric.so/v2/user/me" \ -H "X-Api-Key: $FABRIC_API_KEY" ```

### POST (JSON)

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/ENDPOINT" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "replace": "me" } JSON ```

## 核心工作流

### 1) 创建 notepad(笔记)

端点:`POST /v2/notepads`

* 将用户提供的“title”(标题)映射到 API 载荷中的 `name`。 * 始终包含 `parentId`。 * 使用 `text` 表示 markdown 内容。

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/notepads" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "name": "Calendar Test Note", "text": "Created via Clawdbot", "parentId": "@alias::inbox", "tags": [{"name":"calendar"},{"name":"draft"}] } JSON ```

如果标签导致验证问题,请将其省略,稍后通过 `/v2/tags` 创建/分配。

### 2) 创建文件夹

端点:`POST /v2/folders`

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/folders" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "name": "My new folder", "parentId": "@alias::inbox", "description": null } JSON ```

### 3) 创建书签

端点:`POST /v2/bookmarks`

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/bookmarks" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "url": "https://example.com", "parentId": "@alias::inbox", "name": "Example", "tags": [{"name":"reading"}] } JSON ```

### 4) 浏览资源(列出文件夹的子项)

端点:`POST /v2/resources/filter`

使用此端点列出文件夹内的内容(使用文件夹 UUID 作为 `parentId`)。

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/resources/filter" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "parentId": "PARENT_UUID_HERE", "limit": 50, "order": { "property": "modifiedAt", "direction": "DESC" } } JSON ```

### 5) 搜索

端点:`POST /v2/search`

当用户提供模糊描述(例如“关于……的笔记”)时,使用搜索。

```bash curl -sS --fail-with-body -X POST "https://api.fabric.so/v2/search" \ -H "X-Api-Key: $FABRIC_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @- <<'JSON' { "queries": [ { "mode": "text", "text": "meeting notes", "filters": { "kinds": ["notepad"] } } ], "pagination": { "page": 1, "pageSize": 20 }, "sort": { "field": "modifiedAt", "order": "desc" } } JSON ```

## 标签(安全模式)

### 列出标签

`GET /v2/tags?limit=100`

### 创建标签

`POST /v2/tags` 并附带 `{ "name": "tag name", "description": null, "resourceId": null }`

### 在创建时分配标签

仅使用 `tags: [{"name":"x"}]` 或 `tags: [{"id":"<uuid>"}]`。

## 速率限制 + 重试

如果收到 `429 Too Many Requests`:

* 退避(sleep + 抖动)并重试。 * 避免紧密循环;缓慢进行分页。

如果没有幂等性,不要盲目重试创建请求(可能会创建重复项)。

## 故障排除快速对照表

* `404 Not Found`:几乎总是错误的端点、错误的 resourceId/parentId 或权限问题。 * `400 Bad Request`:模式验证;检查必填字段和标签格式。 * `403 Forbidden`:订阅/权限限制。 * `429 Too Many Requests`:退避 + 重试。

## API 参考

OpenAPI 模式位于此处:

* `{baseDir}/fabric-api.yaml`

如有疑问,请先查阅它,而不是猜测端点名称或载荷格式。

更多产品