Agent skill
raindrop
Manage Raindrop.io bookmarks via REST API using curl or bun -e
Install this agent skill to your Project
npx add-skill https://github.com/rakibdev/dotfiles/tree/main/home/.config/ai/skills/raindrop
SKILL.md
Base URL: https://api.raindrop.io/rest/v1/
Auth: Authorization: Bearer $RAINDROP_API_KEY header
Note: $RAINDROP_API_KEY is assumed to exist in environment. Don't check for it.
Endpoints
Collections
GET /collections- List root collectionsGET /collections/childrens- List nested collectionsGET /collection/{id}- Get single collectionPOST /collection- Create collectionPUT /collection/{id}- Update collectionDELETE /collection/{id}- Delete collection (moves bookmarks to trash)DELETE /collection/-99- Empty trash permanently
Bookmarks
GET /raindrops/{collectionId}- List bookmarks in collectionGET /raindrop/{id}- Get single bookmarkPOST /raindrop- Create bookmarkPUT /raindrop/{id}- Update bookmarkDELETE /raindrop/{id}- Delete bookmark (moves to trash)PUT /raindrops/{collectionId}- Bulk update bookmarksDELETE /raindrops/{collectionId}- Bulk delete bookmarks
Tags
GET /tags/{collectionId}- List tags (omit ID for all collections)PUT /tags/{collectionId}- Rename/merge tags (omit ID for all collections)DELETE /tags/{collectionId}- Remove tags (omit ID for all collections)
Collection IDs
0- All bookmarks-1- Unsorted-99- Trash
Query Parameters for GET /raindrops/{id}
| Param | Description |
|---|---|
sort |
-created (newest, default), created (oldest), score, -sort, title, -title, domain, -domain |
perpage |
Max 50 (default 25) |
page |
Page number (0-indexed) |
search |
Search query (see operators below) |
nested |
Include child collections: true/false |
Search Operators
| Operator | Example | Description |
|---|---|---|
#tag |
#javascript |
Tag filter |
collection:ID |
collection:12345 |
Specific collection |
type:TYPE |
type:video |
Content type: link, article, image, video, document, audio |
important:true |
Favorites only | |
domain:example.com |
Domain filter |
| word | react tutorial | Full-text search |
Response Format
Success returns data in item (single) or items (array).
Bookmark
{
"result": true,
"item": {
"_id": 123456789,
"link": "https://example.com",
"title": "Page Title",
"type": "link" | "article" | "image" | "video" | "document" | "audio",
"cover": "https://cdn.raindrop.io/cover.jpg",
"media": [{"link": "https://cdn.raindrop.io/media.jpg"}],
"tags": ["tag1", "tag2"],
"collection": {"$id": 12345},
"created": "2024-01-15T10:30:00.000Z",
"file": {"name": "file.pdf", "size": 1024, "type": "application/pdf"},
}
}
Collection
{
"result": true,
"items": [
{
"_id": 8492393,
"title": "Development",
"count": 16,
"parent": { "$id": 1111 }
}
]
}
Tags
{
"result": true,
"items": [{ "_id": "tagname", "count": 42 }]
}
Error Response
{
"result": false,
"error": "error_code",
"errorMessage": "Human readable message"
}
List Response (raindrops/collections)
{
"result": true,
"items": [...],
"count": 50,
"page": 0
}
Workflow Examples
1. List Bookmarks Paginated, Oldest First, Detect 404s
What to do:
- Use
GET /collectionsto find the target collection ID - Use
GET /raindrops/{collectionId}with:sort=created(oldest first)perpage=50(max items per page)- Increment
pageparam untilitems.length < perpage
- Response fields:
_id,link,title
2. Move Bookmarks by URL Pattern to Collection
What to do:
- Use
GET /collectionsto find or create target collection viaPOST /collection - Use
GET /raindrops/0?search={domain}to find matching bookmarks- Example:
search=rule34.com
- Example:
- For each match, use
PUT /raindrop/{id}with body:json{"collection": {"$id": TARGET_COLLECTION_ID}}
3. Bulk Tag Bookmarks (NOT one-by-one)
What to do:
- Use
PUT /raindrops/{collectionId}endpoint for bulk operations - Two approaches:
- By search: Include
searchparam in body +tagsarray (appends tags) - By IDs: Include
idsarray (chunk max 100) +tagsarray
- By search: Include
- Body format:
json
{ "search": "optional filter", "ids": [111, 222, 333], "tags": ["new-tag-1", "new-tag-2"] } - Tags are appended, not replaced. Empty array
[]clears all tags.
4. Delete Bookmarks
What to do:
-
Single:
DELETE /raindrop/{id}- moves to trash -
Bulk by IDs:
DELETE /raindrops/{collectionId}with body{"ids": [1, 2, 3]} -
Empty trash:
DELETE /collection/-99- permanent delete
5. Common Utilities
List collections:
GET /collections- root collectionsGET /collections/childrens- nested collections- Response:
items[]with_id,title,parent.$id
List tags:
GET /tags- all tags with counts (omit ID for all collections)- Response:
items[]with_id(tag name),count
Search:
GET /raindrops/0?search={query}- search all collections- Supports operators:
#tag,domain:, etc.
Tools
Use curl for simple requests or bun -e for multi-step logic. Both use $RAINDROP_API_KEY from environment.
Rate Limits
120 requests per minute per user. Batch operations (PUT /raindrops/*, DELETE /raindrops/*) count as one request.
When doing one-by-one updates (e.g. PUT /raindrop/{id}), add 300ms delay between requests to stay under the limit.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
valibot
Valibot schema validation for backend and frontend forms.
vue
Vue coding style and best practices.
tailwind
Tailwind CSS styling conventions.
websearch
Search Google
github
Fetch GitHub URLs, repos, issues, pull requests, code search
figma
Tool for fetching Figma design data and downloading images.
Didn't find tool you were looking for?