Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Create/search Fabric resources via HTTP API (notepads, folders, bookmarks, files).
.claude/skills/sundial-org-fabric-api/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 37% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -17% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -1% | 0% |
Use this skill to read/write content in a user's Fabric workspace using the Fabric HTTP API (https://api.fabric.so).
/v2/notepads (not /v2/notes).parentId:@alias::inbox, @alias::bin.parentIdtext (markdown string) or ydoc (advanced/structured).tags must be an array of objects, each either:{ "name": "tag name" } or { "id": "<uuid>" }When the user doesn't specify a destination folder: default to parentId: "@alias::inbox".
This skill expects the API key in:
FABRIC_API_KEYRecommended config (use apiKey; Clawdbot will inject FABRIC_API_KEY because primaryEnv is set):
json5{ skills: { entries: { "fabric-api": { enabled: true, apiKey: "YOUR_FABRIC_API_KEY" } } } }
https://api.fabric.soX-Api-Key: $FABRIC_API_KEYContent-Type: application/jsonFor debugging: prefer --fail-with-body so 4xx bodies are shown.
bashcurl -sS --fail-with-body "https://api.fabric.so/v2/user/me" \ -H "X-Api-Key: $FABRIC_API_KEY"
bashcurl -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
Endpoint: POST /v2/notepads
name in the API payload.parentId.text for markdown content.bashcurl -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
If tags cause validation trouble, omit them and create/assign later via /v2/tags.
Endpoint: POST /v2/folders
bashcurl -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
Endpoint: POST /v2/bookmarks
bashcurl -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
Endpoint: POST /v2/resources/filter
Use this to list what's inside a folder (use a folder UUID as parentId).
bashcurl -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
Endpoint: POST /v2/search
Use search when the user gives a fuzzy description (“the note about…”).
bashcurl -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 with { "name": "tag name", "description": null, "resourceId": null }
Use tags: [{"name":"x"}] or tags: [{"id":"<uuid>"}] only.
If you get 429 Too Many Requests:
Do not blindly retry create requests without idempotency (you may create duplicates).
404 Not Found: almost always wrong endpoint, wrong resourceId/parentId, or permissions.400 Bad Request: schema validation; check required fields and tag shape.403 Forbidden: subscription/permission limits.429 Too Many Requests: back off + retry.The OpenAPI schema lives here:
{baseDir}/fabric-api.yamlWhen in doubt, consult it before guessing endpoint names or payload shapes.
Other measured skills in the registry, with their headline benchmark lift.