Sleevy

Save and organize links

Small workflows for turning Sleevy into a useful part of your tools.

The API is deliberately small. Compose a few focused calls instead of building a second reading-list system around it.

Save from any tool

Capture from a shell, Raycast, a Shortcut, or an internal tool by sending the URL and an optional source label.

await fetch("https://api.sleevy.app/v1/captures", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SLEEVY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    url,
    sourceName: "morning-digest",
    captureChannel: "api",
  }),
})

Build a reading view

Use the queue endpoint as the data source for a digest, dashboard, or focused list. Ask for unread items when you only want the next thing to read:

const response = await fetch(
  "https://api.sleevy.app/v1/saved-items?sort=unread",
  { headers: { Authorization: `Bearer ${apiKey}` } },
)

const { savedItems } = await response.json()

Update reading state

Mark an item read or unread when your own interface records that change.

curl https://api.sleevy.app/v1/saved-items/$ITEM_ID/read \
  -X POST \
  -H "Authorization: Bearer $SLEEVY_API_KEY"

Use the corresponding /open, /unread, or /read-state operation when your workflow needs a different state transition.

Organize with folders

Create a folder once, then assign saved items to it as you capture them.

curl https://api.sleevy.app/v1/saved-items/$ITEM_ID/folder \
  -X PUT \
  -H "Authorization: Bearer $SLEEVY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"folderId":"$FOLDER_ID"}'

No webhooks yet

Sleevy currently supports request-driven automations. There is no webhook delivery endpoint in the current API contract, so schedule a small poll when you need to sync changes.