Raindrop.io API Documentation

repository·master·Indexed 41 days ago

https://github.com/raindropio/developer-site

A RESTful API for building tools and applications to manage user bookmarks. Includes documentation for OAuth 2.1 authentication, data schemas for raindrops, collections, and users, and a beta Model Context Protocol (MCP) server for connecting AI models and agents via Streamable HTTP.

Tokens
20.5K
Snippets
79
Records
90
Agent score
50%

What's inside Raindrop.io

  1. Connect AI models to Raindrop.io via MCP Server

    master

    The Raindrop.io Model Context Protocol (MCP) server allows AI models and agents to read and manage your bookmark data using a standardized interface.

    Note: MCP is currently in beta and requires a Pro subscription.

    Endpoint: https://api.raindrop.io/rest/v2/ai/mcp

    Transport: This server uses Streamable HTTP as its only supported transport method.

    https://api.raindrop.io/rest/v2/ai/mcp
  2. Understand the relationship between Groups and Collections

    master

    In Raindrop, the sidebar hierarchy is managed through a Groups array located in the user object.

    • Groups: Act as containers for collections (e.g., "Home", "Work"). The groups array is the single source of truth for the root collection list and their display order. This is necessary because collections can be shared, but the way they are grouped and ordered is user-specific.
    • Collections: Individual items within a group.

    Ordering Logic:

    • Root Collections: Their order is determined by the sequence of IDs in the groups[].collections array.
    • Child Collections: Their order is determined by the sort field within the collection object itself.
  3. API Request Formats and HTTP Verbs

    master

    The Raindrop.io API uses standard HTTP verbs and supports two primary data formats depending on the request type:

    • Non-POST requests: Arguments are passed as URL-encoded values.
    • POST requests: Arguments must be JSON-encoded in the request body with the Content-Type: application/json header.

    Supported HTTP Verbs

    VerbDescription
    GETRetrieve resources
    POSTCreate resources
    PUTUpdate resources or perform custom actions
    DELETEDelete resources

    All 200 OK responses include the Content-type: application/json header and contain a JSON-encoded representation of the requested objects.

  4. API Rate Limiting and Server Usage

    master

    To ensure service stability, users must not overburden Raindrop.io servers.

    • Rate Limiting: Specific rate limits are published (refer to the Rate Limiting documentation), but Raindrop.io reserves the right to determine what constitutes abuse or excessive usage.
    • Throttling/Blocking: Raindrop.io may throttle or block any service deemed to be abusing the API.
    • Circumvention Prohibited: Any attempt to circumvent rate limits—such as using multiple applications or generating bogus user accounts—is strictly prohibited.
  5. API Terms of Service: Liability and Termination

    master

    Termination

    Raindrop.io reserves the right to refuse API access at any time, for any reason, and may decline any request for API usage or block access to the API.

    Liability

    • Risk: Use of the Raindrop.io API is at your own discretion and risk.
    • Responsibility: You are solely responsible for any damage resulting from its use, including damage to computer systems or loss of data incurred by you, your users, or your customers.
    • Damages: Raindrop.io is not liable for any direct, indirect, incidental, special, consequential, or exemplary damages (including loss of profits, goodwill, use, or data) arising from your use of the API or third-party products accessing data via the API.

    Changes to Terms

    Raindrop.io reserves the right to update and change these terms at any time without notice.

  6. Use CORS for AJAX Requests

    master

    The Raindrop.io API supports Cross-Origin Resource Sharing (CORS), allowing you to make AJAX requests directly from a browser. The API exposes specific headers that allow your client to access rate limit information.

    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: http://example.com
    Access-Control-Expose-Headers: ETag, Content-Type, Accept, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
    Access-Control-Allow-Credentials: true
  7. Authenticate with the MCP Server

    master

    You can authenticate with the Raindrop.io MCP server using one of two methods:

    OAuth 2.1 (Interactive)

    When using a compatible MCP client (such as Claude, ChatGPT, or Cursor), the client will automatically open your browser to authorize access to your Raindrop.io account via OAuth 2.1.

    Bearer Token

    You can use a standard Raindrop.io access token. Pass the token in the Authorization header using the Bearer scheme.

    Authorization: Bearer <your-token>
  8. Obtain an OAuth2 access token

    master

    To obtain a user-authorized API token via OAuth2, follow these steps:

    1. Register your application: Create an app in the App Management Console to receive a Client ID and Client Secret. Configure a valid OAuth redirect URL.
    2. Authorization Request: Direct the user to the Raindrop.io authorization URL to request access. If the user is not logged in, they will be prompted to do so. Once logged in, they must grant your application permission to access their data.
    3. Handle Redirection: After the user grants access, they are redirected to your configured redirect_uri with a code query parameter. This code is used to exchange for an access token.

    Note for testing: If you only need to access your own account data, you can skip the OAuth flow by copying the Test token from your application settings in the App Management Console.

    curl "https://api.raindrop.io/v1/oauth/authorize?client_id=5e1c382cf6f48c0211359083&redirect_uri=https:%2F%2Foauthdebugger.com%2Fdebug"
  9. Reconstruct the Raindrop UI sidebar structure

    master

    To recreate the Raindrop UI sidebar (which consists of Groups containing Collections), you must perform three separate API calls because the grouping and ordering logic is stored in the user object rather than within the collection items themselves. This allows different users to have different views of shared collections.

    Implementation Steps

    1. Fetch the User Object: Retrieve the user's groups array. This array defines the titles, visibility, and the specific order of collection IDs within each group.
    2. Fetch Root Collections: Use the collection IDs found in the groups[].collections array to fetch the top-level collection details (name, count, icon, etc.).
    3. Fetch Child Collections: For any nested structure, fetch child collections separately. Note that while root collection order is determined by the groups array, the sort order for child collections is persisted within the collection item itself using the sort field.
    // Example of the groups structure retrieved from the User Object
    {
      "groups": [
        {
          "title": "Home",
          "hidden": false,
          "sort": 0,
          "collections": [
            8364483,
            8364403,
            66
          ]
        },
        {
          "title": "Work",
          "hidden": false,
          "sort": 1,
          "collections": [
            8492393
          ]
        }
      ]
    }