raindrop-api

This skill provides comprehensive instructions for interacting with the Raindrop.io bookmarks service via its REST API using curl and jq. It covers authentication, CRUD operations for collections, raindrops (bookmarks), tags, highlights, filters, import/export, and backups. Use this skill whenever t

By intellectronica · 495 installs

npx skills add intellectronica/agent-skills --skill raindrop-api

Source repository · Upstream listing

Raindrop.io API Skill This skill enables interaction with the Raindrop.io bookmarks service through its REST API. Use curl and jq for direct REST calls. Official API documentation : https://developer.raindrop.io/ Authentication Token Resolution Resolve the API token in this order: 1. Check environment variable RAINDROP TOKEN 2. Check if the user has provided a token in the conversation context 3. If neither is available, use AskUserQuestion to request the token from the user To verify a token exists in the environment: Quick setup : For personal use or development, generate a test token at https://app.raindrop.io/settings/integrations — open your app and copy the "Test token". Test tokens do not expire. For full OAuth2 flow details, see the [Authentication]( authentication oauth2 flow) section below. Making Authenticated Requests All requests require the Authorization header with Bearer token: For POST/PUT requests with JSON body: Verifying Authentication Test the token by retrieving the current user: Base URL and Conventions Base URL : https://api.raindrop.io/rest/v1/ Data Format : JSON for all request/response bodies Timestamps : ISO 8601 format Rate Limit : 120 requests per minute per authenticated user CORS : Supported for browser based apps Confirmation Requirement Before executing any destructive action (DELETE, bulk update, move to trash), always ask the user for confirmation using AskUserQuestion. A single confirmation suffices for a logical group of related actions. Destructive actions include: Deleting raindrops, collections, or tags Bulk updating or moving raindrops Merging or removing tags Removing collaborators from shared collections Clearing trash Read only operations (GET requests) do not require confirmation. Endpoints Reference Raindrops (Bookmarks) Docs: https://developer.raindrop.io/v1/raindrops Single Raindrop Operations Operation Method Endpoint Get raindrop GET /raindrop/{id} Create raindrop POST /raindrop Update raindrop PUT /raindrop/{id} Remove raindrop DELETE /raindrop/{id} Upload file PUT /raindrop/file Upload cover PUT /raindrop/{id}/cover Get permanent copy GET /raindrop/{id}/cache Suggest (new URL) POST /raindrop/suggest Suggest (existing) GET /raindrop/{id}/suggest Docs: https://developer.raindrop.io/v1/raindrops/single Raindrop creation/update fields: link (string, required for creation) Bookmark URL title (string) Bookmark title excerpt (string) Short description note (string) User notes (supports Markdown) tags (array of strings) Tag names collection (object) {"$id": collectionId} type (string) link , article , image , video , document , audio important (boolean) Mark as favourite order (number) Sort order (ascending) media (array) Media/thumbnail info highlights (array) Text highlights cover (string) Cover image URL, or <screenshot for auto capture pleaseParse (object) {} to trigger background metadata parsing created (string) ISO 8601 creation date lastUpdate (string) ISO 8601 last update date reminder (object) Reminder settings Deletion behaviour : Removing a raindrop moves it to Trash (collection ID 99 ). Removing from Trash deletes permanently. Multiple Raindrop Operations Operation Method Endpoint Get raindrops GET /raindrops/{collectionId} Create multiple POST /raindrops Update multiple PUT /raindrops/{collectionId} Remove multiple DELETE /raindrops/{collectionId} Export GET /raindrops/{collectionId}/export.{format} Docs: https://developer.raindrop.io/v1/raindrops/multiple collectionId values: 0 All raindrops 1 Unsorted 99 Trash Any positive integer Specific collection Query parameters for GET /raindrops/{collectionId}: sort Sort order: created (default), created , score , sort , title , title , domain , domain perpage Results per page (max 50) page Page number (0 indexed) search Search query (see references/search operators.md ) nested Boolean, include child collection bookmarks Bulk update fields (PUT with ids array or search query): important (boolean) tags (array) Appends tags; empty array clears all media (array) Appends; empty array clears cover (string) URL or <screenshot collection (object) {"$id": collectionId} to move Export formats : csv , html , zip Collections Docs: https://developer.raindrop.io/v1/collections Operation Method Endpoint List root collections GET /collections List child collections GET /collections/childrens Get collection GET /collection/{id} Create collection POST /collection Update collection PUT /collection/{id} Upload cover PUT /collection/{id}/cover Delete collection DELETE /collection/{id} Delete multiple DELETE /collections Reorder/expand all PUT /collections Merge collections PUT /collections/merge Remove empty PUT /collections/clean Empty trash DELETE /collection/ 99 System collection counts GET /user/stats Search covers/icons GET /collections/covers/{text} Featured covers GET /collections/covers Docs: https://developer.raindrop.io/v1/collections/methods Collection fields: title (string) Collection name view (string) Display style: list , simple , grid , masonry public (boolean) Public accessibility parent (object) {"$id": parentCollectionId} for nesting sort (number) Sort position cover (array) Cover image URLs expanded (boolean) Whether subcollections are expanded color (string) Collection colour System collections (non removable): ID 1 "Unsorted" ID 99 "Trash" Access levels ( access.level ): 1 Read only 2 Collaborator (write) 3 Collaborator (write + manage) 4 Owner For sharing/collaborators, see references/collections sharing.md . Tags Docs: https://developer.raindrop.io/v1/tags Operation Method Endpoint Get tags GET /tags/{collectionId} Rename tag PUT /tags/{collectionId} Merge tags PUT /tags/{collectionId} Remove tag(s) DELETE /tags/{collectionId} collectionId : Omit or use 0 for tags from all collections. Get tags response: Rename tag: Merge tags (same endpoint, multiple tags in array): Remove tags: Highlights Docs: https://developer.raindrop.io/v1/highlights Operation Method Endpoint Get all highlights GET /highlights Get collection highlights GET /highlights/{collectionId} Get raindrop highlights GET /raindrop/{id} Add highlight PUT /raindrop/{id} Update highlight PUT /raindrop/{id} Delete highlight PUT /raindrop/{id} For details, see references/highlights.md . Filters Docs: https://developer.raindrop.io/v1/filters Use 0 for all collections. Returns aggregated counts for broken links, duplicates, favourites, untagged items, tags, and content types. Query parameters: tagsSort count (default) or id (alphabetical) search Additional search filter User Docs: https://developer.raindrop.io/v1/user Operation Method Endpoint Get current user GET /user Update user PUT /user Import Docs: https://developer.raindrop.io/v1/import Operation Method Endpoint Parse URL GET /import/url/parse?url={url} Check URL existence POST /import/url/exists Parse HTML bookmark file POST /import/file Backups Docs: https://developer.raindrop.io/v1/backups Operation Method Endpoint List backups GET /backups Download backup GET /backup/{id}.{format} Generate new backup GET /backup Formats : html or csv Authentication: OAuth2 Flow Docs: https://developer.raindrop.io/v1/authentication/token For apps accessing other users' data (not personal use), use the full OAuth2 flow: Step 1: Authorise Direct users to: Step 2: Exchange Code for Token Response: Step 3: Refresh Token Access tokens expire after two weeks. Refresh with: Error Handling Check HTTP status codes: 200 Success 204 Success, no content 400 Bad request 401 Authentication failed (check token) 403 Forbidden (insufficient permissions) 404 Resource not found 429 Rate limited (120 req/min exceeded) 5xx Server error Example with Error Handling Common Patterns List All Bookmarks in a Collection Create a Bookmark Search Bookmarks See references/search operators.md for the complete search query syntax. Move Bookmark to a Collection Get All Tags Create a Collection List All Collections (Root + Children) Paginate Through All Bookmarks Export Bookmarks Check if URL Already Saved Pagination Raindrop uses page based pagination (not cursor based): page Page number (0 indexed) perpage Items per page (max 50, default 25 for highlights) When the number of items returned is less than perpage , you have reached the last page. Nested Collection Structure Collections are organised hierarchically. Reconstructing the full sidebar requires: 1. GET /user Returns groups array with collection ordering 2. GET /collections Root collections 3. GET /collections/childrens Nested collections Root collection sort order is persisted in the user's groups[].collections array. Child collection sort order is stored in the collection's sort field. Additional Reference For detailed documentation on specific topics, consult: references/search operators.md Search query syntax and operators references/collections sharing.md Collection sharing and collaborators references/highlights.md Highlight management Workflow Summary 1. Resolve token Environment, context, or ask user 2. Verify authentication Test with GET /user 3. Read operations Execute directly without confirmation 4. Write operations Ask for confirmation before executing 5. Handle pagination Loop with page number until items < perpage 6. Parse responses Use jq to extract and format data