├── .gitbook └── assets │ ├── authorize.png │ ├── filters (1).png │ ├── filters.png │ ├── icon-finder.png │ └── sidebar.png ├── README.md ├── SUMMARY.md ├── more ├── changelog.md └── showcase.md ├── terms.md └── v1 ├── authentication ├── README.md ├── calls.md └── token.md ├── backups.md ├── collections ├── README.md ├── covers-icons.md ├── methods.md ├── nested-structure.md └── sharing.md ├── export.md ├── filters.md ├── highlights.md ├── import.md ├── raindrops ├── README.md ├── multiple.md └── single.md ├── tags.md └── user ├── README.md └── authenticated.md /.gitbook/assets/authorize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/developer-site/7579d2c738d62e7c23151ca52a3e0228cd4a23fb/.gitbook/assets/authorize.png -------------------------------------------------------------------------------- /.gitbook/assets/filters (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/developer-site/7579d2c738d62e7c23151ca52a3e0228cd4a23fb/.gitbook/assets/filters (1).png -------------------------------------------------------------------------------- /.gitbook/assets/filters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/developer-site/7579d2c738d62e7c23151ca52a3e0228cd4a23fb/.gitbook/assets/filters.png -------------------------------------------------------------------------------- /.gitbook/assets/icon-finder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/developer-site/7579d2c738d62e7c23151ca52a3e0228cd4a23fb/.gitbook/assets/icon-finder.png -------------------------------------------------------------------------------- /.gitbook/assets/sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raindropio/developer-site/7579d2c738d62e7c23151ca52a3e0228cd4a23fb/.gitbook/assets/sidebar.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | Build and integrate tools and applications to help members manage their 4 | bookmarks on Raindrop.io 5 | --- 6 | 7 | # Overview 8 | 9 | This is the official documentation for Raindrop.io API. A reference to the functionality our public API provides with detailed description of each API endpoint, parameters, and examples. 10 | 11 | Please note that you must [register your application](https://app.raindrop.io/settings/integrations) and authenticate with OAuth when making requests. Before doing so, be sure to read our [Terms & Guidelines](terms.md) to learn how the API may be used. 12 | 13 | ### Format 14 | 15 | API endpoints accept arguments either as url-encoded values for non-POST requests or as json-encoded objects encoded in POST request body with `Content-Type: application/json` header. 16 | 17 | Where possible, the API strives to use appropriate HTTP verbs for each action. 18 | 19 | | Verb | Description | 20 | | ------ | ---------------------------------------------------------- | 21 | | GET | Used for retrieving resources. | 22 | | POST | Used for creating resources. | 23 | | PUT | Used for updating resources, or performing custom actions. | 24 | | DELETE | Used for deleting resources. | 25 | 26 | This API relies on standard HTTP response codes to indicate operation result. The table below is a simple reference about the most used status codes: 27 | 28 | | Status code | Description | 29 | | ----------: | -------------------------------------------------------------------------------------------------------------------------------- | 30 | | 200 | The request was processed successfully. | 31 | | 204 | The request was processed successfully without any data to return. | 32 | | 4xx | The request was processed with an error and should not be retried unmodified as they won’t be processed any different by an API. | 33 | | 5xx | The request failed due to a server error, it’s safe to retry later. | 34 | 35 | All `200 OK` responses have the `Content-type: application/json` and contain a JSON-encoded representation of one or more objects. 36 | 37 | Payload of POST requests has to be JSON-encoded and accompanied with `Content-Type: application/json` header. 38 | 39 | ### Timestamps 40 | 41 | All timestamps are returned in ISO 8601 format: 42 | 43 | ```bash 44 | YYYY-MM-DDTHH:MM:SSZ 45 | ``` 46 | 47 | ### Rate Limiting 48 | 49 | For requests using OAuth, you can make up to 120 requests per minute per authenticated user. 50 | 51 | The headers tell you everything you need to know about your current rate limit status: 52 | 53 | | Header name | Description | 54 | | ------------------- | --------------------------------------------------------------------------------- | 55 | | X-RateLimit-Limit | The maximum number of requests that the consumer is permitted to make per minute. | 56 | | RateLimit-Remaining | The number of requests remaining in the current rate limit window. | 57 | | X-RateLimit-Reset | The time at which the current rate limit window resets in UTC epoch seconds. | 58 | 59 | Once you go over the rate limit you will receive an error response: 60 | 61 | ```http 62 | HTTP/1.1 429 Too Many Requests 63 | Status: 429 Too Many Requests 64 | X-RateLimit-Limit: 120 65 | X-RateLimit-Remaining: 0 66 | X-RateLimit-Reset: 1392321600 67 | ``` 68 | 69 | ### CORS 70 | 71 | The API supports Cross Origin Resource Sharing (CORS) for AJAX requests. You can read the [CORS W3C recommendation](https://www.w3.org/TR/cors/), or [this intro](http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity) from the HTML 5 Security Guide. 72 | 73 | Here’s a sample request sent from a browser hitting `http://example.com`: 74 | 75 | ```http 76 | HTTP/1.1 200 OK 77 | Access-Control-Allow-Origin: http://example.com 78 | Access-Control-Expose-Headers: ETag, Content-Type, Accept, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset 79 | Access-Control-Allow-Credentials: true 80 | ``` 81 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [Overview](README.md) 4 | * [Terms & Guidelines](terms.md) 5 | 6 | ## Rest API v1 7 | 8 | * [Authentication](v1/authentication/README.md) 9 | * [Obtain access token](v1/authentication/token.md) 10 | * [Make authorized calls](v1/authentication/calls.md) 11 | * [Collections](v1/collections/README.md) 12 | * [Collection methods](v1/collections/methods.md) 13 | * [Nested structure](v1/collections/nested-structure.md) 14 | * [Sharing](v1/collections/sharing.md) 15 | * [Covers/icons](v1/collections/covers-icons.md) 16 | * [Raindrops](v1/raindrops/README.md) 17 | * [Single raindrop](v1/raindrops/single.md) 18 | * [Multiple raindrops](v1/raindrops/multiple.md) 19 | * [Highlights](v1/highlights.md) 20 | * [User](v1/user/README.md) 21 | * [Authenticated user](v1/user/authenticated.md) 22 | * [Tags](v1/tags.md) 23 | * [Filters](v1/filters.md) 24 | * [Import](v1/import.md) 25 | * [Export](v1/export.md) 26 | * [Backups](v1/backups.md) 27 | 28 | ## More 29 | 30 | * [Changelog](more/changelog.md) 31 | * [Showcase](more/showcase.md) 32 | -------------------------------------------------------------------------------- /more/changelog.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ### 1.0.4 4 | 5 | * Please use `/filters/:collectionId` route instead of `/raindrops/:collectionId/filters` 6 | * Route `GET /user/:id` removed 7 | * Route `GET /tags/suggest` removed 8 | 9 | ### 1.0.3 10 | 11 | * Merge and remove multiple collections endpoint 12 | 13 | ### 1.0.2 14 | 15 | * Filters endpoint now support sorting results 16 | 17 | ### 1.0.1 18 | 19 | * Raindrop now have `created` field 20 | * Raindrop now update `lastUpdate` field on each update 21 | -------------------------------------------------------------------------------- /more/showcase.md: -------------------------------------------------------------------------------- 1 | # Showcase 2 | 3 | ### iOS, Android 4 | 5 | [Official Raindrop.io mobile app](https://github.com/raindropio/mobile) \(Open source, JS, React Native, Redux\) 6 | 7 | {% hint style="info" %} 8 | Currently, Raindrop.io mobile apps use a private API, but the methods and their parameters are almost equal to the ones described in this documentation 9 | {% endhint %} 10 | 11 | ### Plugins 12 | 13 | [Alfred Workflow](https://www.packal.org/workflow/search-raindropio) by Andreas Westerlind 14 | 15 | -------------------------------------------------------------------------------- /terms.md: -------------------------------------------------------------------------------- 1 | # Terms & Guidelines 2 | 3 | ### How may I use the API? 4 | 5 | #### DO 6 | 7 | I encourage you to build applications that **extend** Raindrop.io to platforms beyond the web and offer services that Raindrop.io does not. 8 | 9 | #### DON’T 10 | 11 | Don’t build what I'm building. I invested a lot of time, money and hard work in Raindrop.io. I rely on Raindrop.io for income. As such, do not build an application, website, product, or business that attempts to harm, or replace Raindrop.io, website, or services. 12 | 13 | In particular, do not use the API, or any Raindrop.io data, to build the following: 14 | 15 | * A website that replicates or replaces raindrop.io 16 | 17 | I'll do the best to communicate fair use of the Raindrop.io API in this space and others, but the onus is on you to contact me and inquire whether your use of the API is permitted. 18 | 19 | ### Commercial Use 20 | 21 | You are free to use the Raindrop.io API for commercial use, provided that you abide by these terms and do not build an application or business that attempts to harm, compete with or replace Raindrop.io, our website, or our services. 22 | 23 | ### Be Gentle 24 | 25 | Don’t overburden our servers. We’ve published some specifics with regard to rate limiting, but we reserve the right to determine abuse or excessive usage of the API and throttle or block any service accordingly. Attempts to circumvent rate limiting, such as leveraging multiple applications or generating bogus user accounts, are strictly prohibited. 26 | 27 | ### Termination 28 | 29 | Raindrop.io can refuse API access at any time for any reason. This is not a card we hope to play often, but it’s impossible to anticipate every situation. We reserve the right to decline any request for API usage and block access to the API. 30 | 31 | ### Liability 32 | 33 | Raindrop.io is not liable for any direct, indirect, incidental, special, consequential or exemplary damages arising from your use of the API. These include, but are not limited to, damages for loss of profits, goodwill, use, data or other intangible losses, resulting from your API usage or third-party products that access data via the API. 34 | 35 | Your use of the Raindrop.io API is at your own discretion and risk, and you will be solely responsible for any damage that results its use, including, but not limited to, any damage to computer systems or loss of data incurred by you, your users, or your customers. 36 | 37 | ### Terms Can Change 38 | 39 | Raindrop.io reserves the right to update and change these terms at any time without notice.\ 40 | -------------------------------------------------------------------------------- /v1/authentication/README.md: -------------------------------------------------------------------------------- 1 | # Authentication 2 | 3 | In order to make authorized calls to Raindrop.io API, you must do the following: 4 | 5 | * [x] [Register your application](https://app.raindrop.io/#/settings/apps/dev) 6 | * [x] [Obtain access token](token.md) 7 | 8 | -------------------------------------------------------------------------------- /v1/authentication/calls.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Build something great 3 | --- 4 | 5 | # Make authorized calls 6 | 7 | Once you have received an **access\_token**, include it in all API calls in [authorization header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization) with value `Bearer access_token` 8 | 9 | ```http 10 | Authorization: Bearer ae261404-11r4-47c0-bce3-e18a423da828 11 | ``` 12 | 13 | -------------------------------------------------------------------------------- /v1/authentication/token.md: -------------------------------------------------------------------------------- 1 | # Obtain access token 2 | 3 | External applications could obtain a user authorized API token via the OAuth2 protocol. Before getting started, developers need to create their applications in [App Management Console](https://app.raindrop.io/settings/integrations) and configure a valid OAuth redirect URL. A registered Raindrop.io application is assigned a unique `Client ID` and `Client Secret` which are needed for the OAuth2 flow. 4 | 5 | This procedure is comprised of several steps, which will be described below. 6 | 7 | {% hint style="info" %} 8 | If you just want to test your application, or do not plan to access any data except yours account you don't need to make all of those steps. 9 | 10 | Just go to [App Management Console](https://app.raindrop.io/settings/integrations) and open your application settings. Copy **Test token** and use it as described in [**Make authorized calls**](calls.md)**.** 11 | {% endhint %} 12 | 13 | {% swagger baseUrl="https://raindrop.io" path="/oauth/authorize" method="get" summary="Step 1: The authorization request" %} 14 | {% swagger-description %} 15 | Direct the user to our authorization URL with specified request parameters. 16 | 17 | \ 18 | 19 | 20 | — If the user is not logged in, they will be asked to log in 21 | 22 | \ 23 | 24 | 25 | — The user will be asked if he would like to grant your application access to his Raindrop.io data 26 | {% endswagger-description %} 27 | 28 | {% swagger-parameter in="query" name="redirect_uri" type="string" %} 29 | Redirect URL configured in your application setting 30 | {% endswagger-parameter %} 31 | 32 | {% swagger-parameter in="query" name="client_id" type="string" %} 33 | The unique Client ID of the Raindrop.io app that you registered 34 | {% endswagger-parameter %} 35 | 36 | {% swagger-response status="307" description="Check details in Step 2" %} 37 | ``` 38 | ``` 39 | {% endswagger-response %} 40 | {% endswagger %} 41 | 42 | ![User will be asked if he would like to grant your application access to his Raindrop.io data](../../.gitbook/assets/authorize.png) 43 | 44 | Here example CURL request: 45 | 46 | ```bash 47 | curl "https://api.raindrop.io/v1/oauth/authorize?client_id=5e1c382cf6f48c0211359083&redirect_uri=https:%2F%2Foauthdebugger.com%2Fdebug" 48 | ``` 49 | 50 | ## Step 2: The redirection to your application site 51 | 52 | When the user grants your authorization request, the user will be redirected to the redirect URL configured in your application setting. The redirect request will come with query parameter attached: `code` . 53 | 54 | The `code` parameter contains the authorization code that you will use to exchange for an access token. 55 | 56 | In case of error redirect request will come with `error` query parameter: 57 | 58 | | Error | Description | 59 | | ---------------------------- | -------------------------------------------------------------------------------------------------------------- | 60 | | access\_denied | When the user denies your authorization request | 61 | | invalid\_application\_status | When your application exceeds the maximum token limit or when your application is being suspended due to abuse | 62 | 63 | {% swagger baseUrl="https://raindrop.io" path="/oauth/access_token" method="post" summary="Step 3: The token exchange" %} 64 | {% swagger-description %} 65 | Once you have the authorization 66 | 67 | `code` 68 | 69 | , you can exchange it for the 70 | 71 | `access_token` 72 | 73 | by doing a 74 | 75 | `POST` 76 | 77 | request with all required body parameters as JSON: 78 | {% endswagger-description %} 79 | 80 | {% swagger-parameter in="header" name="Content-Type" type="string" %} 81 | application/json 82 | {% endswagger-parameter %} 83 | 84 | {% swagger-parameter in="body" name="grant_type" type="string" %} 85 | **authorization_code** 86 | {% endswagger-parameter %} 87 | 88 | {% swagger-parameter in="body" name="code" type="string" %} 89 | Code that you received in step 2 90 | {% endswagger-parameter %} 91 | 92 | {% swagger-parameter in="body" name="client_id" type="string" %} 93 | The unique Client ID of the Raindrop.io app that you registered 94 | {% endswagger-parameter %} 95 | 96 | {% swagger-parameter in="body" name="client_secret" type="string" %} 97 | Client secret 98 | {% endswagger-parameter %} 99 | 100 | {% swagger-parameter in="body" name="redirect_uri" type="string" %} 101 | Same 102 | 103 | `redirect_uri` 104 | 105 | from step 1 106 | {% endswagger-parameter %} 107 | 108 | {% swagger-response status="200" description="" %} 109 | ```javascript 110 | { 111 | "access_token": "ae261404-11r4-47c0-bce3-e18a423da828", 112 | "refresh_token": "c8080368-fad2-4a3f-b2c9-71d3z85011vb", 113 | "expires": 1209599768, //in miliseconds, deprecated 114 | "expires_in": 1209599, //in seconds, use this instead!!! 115 | "token_type": "Bearer" 116 | } 117 | ``` 118 | {% endswagger-response %} 119 | 120 | {% swagger-response status="400" description="Occurs when code parameter is invalid" %} 121 | ```javascript 122 | {"error": "bad_authorization_code"} 123 | ``` 124 | {% endswagger-response %} 125 | {% endswagger %} 126 | 127 | Here an example CURL request: 128 | 129 | ```bash 130 | curl -X "POST" "https://raindrop.io/oauth/access_token" \ 131 | -H 'Content-Type: application/json' \ 132 | -d $'{ 133 | "code": "c8983220-1cca-4626-a19d-801a6aae003c", 134 | "client_id": "5e1c589cf6f48c0211311383", 135 | "redirect_uri": "https://oauthdebugger.com/debug", 136 | "client_secret": "c3363988-9d27-4bc6-a0ae-d126ce78dc09", 137 | "grant_type": "authorization_code" 138 | }' 139 | ``` 140 | 141 | {% swagger baseUrl="https://raindrop.io" path="/oauth/access_token" method="post" summary="♻️ The access token refresh" %} 142 | {% swagger-description %} 143 | For security reasons access tokens (except "test tokens") will 144 | 145 | **expire after two weeks** 146 | 147 | . In this case you should request the new one, by calling 148 | 149 | `POST` 150 | 151 | request with body parameters (JSON): 152 | {% endswagger-description %} 153 | 154 | {% swagger-parameter in="header" name="Content-Type" type="string" %} 155 | application/json 156 | {% endswagger-parameter %} 157 | 158 | {% swagger-parameter in="body" name="client_id" type="string" %} 159 | The unique Client ID of your app that you registered 160 | {% endswagger-parameter %} 161 | 162 | {% swagger-parameter in="body" name="client_secret" type="string" %} 163 | Client secret of your app 164 | {% endswagger-parameter %} 165 | 166 | {% swagger-parameter in="body" name="grant_type" type="string" %} 167 | **refresh_token** 168 | {% endswagger-parameter %} 169 | 170 | {% swagger-parameter in="body" name="refresh_token" type="string" %} 171 | Refresh token that you get in step 3 172 | {% endswagger-parameter %} 173 | 174 | {% swagger-response status="200" description="" %} 175 | ```javascript 176 | { 177 | "access_token": "ae261404-18r4-47c0-bce3-e18a423da898", 178 | "refresh_token": "c8080368-fad2-4a9f-b2c9-73d3z850111b", 179 | "expires": 1209599768, //in miliseconds, deprecated 180 | "expires_in": 1209599, //in seconds, use this instead!!! 181 | "token_type": "Bearer" 182 | } 183 | ``` 184 | {% endswagger-response %} 185 | {% endswagger %} 186 | -------------------------------------------------------------------------------- /v1/backups.md: -------------------------------------------------------------------------------- 1 | # Backups 2 | 3 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/backups" method="get" summary="Get all" %} 4 | {% swagger-description %} 5 | Useful to get backup ID's that can be used in `/backup/{ID}.{format}` endpoint. 6 | 7 | Sorted by date (new first) 8 | {% endswagger-description %} 9 | 10 | {% swagger-response status="200" description="" %} 11 | ```json 12 | { 13 | "result": true, 14 | "items": [ 15 | { 16 | "_id": "659d42a35ffbb2eb5ae1cb86", 17 | "created": "2024-01-09T12:57:07.630Z" 18 | } 19 | ] 20 | } 21 | ``` 22 | {% endswagger-response %} 23 | {% endswagger %} 24 | 25 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/backup/{ID}.{format}" method="get" summary="Download file" %} 26 | {% swagger-description %} 27 | For example: 28 | 29 | `https://api.raindrop.io/rest/v1/backup/659d42a35ffbb2eb5ae1cb86.csv` 30 | {% endswagger-description %} 31 | 32 | {% swagger-parameter in="path" required="true" name="ID" %} 33 | Backup ID 34 | {% endswagger-parameter %} 35 | 36 | {% swagger-parameter in="path" name="format" required="true" %} 37 | File format: `html` or `csv` 38 | {% endswagger-parameter %} 39 | {% endswagger %} 40 | 41 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/backup" method="get" summary="Generate new" %} 42 | {% swagger-description %} 43 | Useful to create a brand new backup. This requires some time. 44 | 45 | New backup will appear in the list of `/backups` endpoint 46 | {% endswagger-description %} 47 | 48 | {% swagger-response status="200" description="" %} 49 | ``` 50 | We will send you email with html export file when it be ready! Time depends on bookmarks count and queue. 51 | ``` 52 | {% endswagger-response %} 53 | {% endswagger %} 54 | -------------------------------------------------------------------------------- /v1/collections/README.md: -------------------------------------------------------------------------------- 1 | # Collections 2 | 3 | ### Fields 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 30 | 39 | 40 | 41 | 42 | 44 | 45 | 46 | 47 | 48 | 50 | 54 | 55 | 56 | 57 | 59 | 61 | 62 | 63 | 64 | 66 | 67 | 68 | 69 | 70 | 72 | 74 | 75 | 76 | 77 | 79 | 80 | 81 | 82 | 83 | 85 | 86 | 87 | 88 | 89 | 91 | 92 | 93 | 94 | 95 | 97 | 98 | 99 | 100 | 101 | 103 | 104 | 105 | 106 | 107 | 109 | 111 | 112 | 113 | 114 | 116 | 119 | 120 | 121 | 122 | 124 | 125 | 126 | 127 | 128 | 130 | 131 | 132 | 133 | 134 | 136 | 137 | 138 | 139 | 140 | 142 | 153 | 154 | 155 |
FieldTypeDescription
_idInteger 17 | The id of the collection.
accessObject 23 |
access.levelInteger 29 | 31 |

32 |
    33 |
  1. read only access (equal to public=true)
  2. 34 |
  3. collaborator with read only access
  4. 35 |
  5. collaborator with write only access
  6. 36 |
  7. owner
  8. 37 |
38 |
access.draggableBoolean 43 | Does it possible to change parent of this collection?
collaboratorsObject 49 | When this object is present, means that collections is shared. Content 51 | of this object is private and not very useful. 52 |
All sharing API methods described here 53 |
colorString 58 | Primary color of collection cover as HEX 60 |
countInteger 65 | Count of raindrops in collection
coverArray<String> 71 | Collection cover URL. 73 |
This array always have one item due to legacy reasons
createdString 78 | When collection is created
expandedBoolean 84 | Whether the collection’s sub-collections are expanded
lastUpdateString 90 | When collection is updated
parentObject 96 |
parent.$idInteger 102 | The id of the parent collection. Not specified for root collections
publicBoolean 108 | Collection and raindrops that it contains will be accessible without authentication 110 | by public link
sortInteger 115 | The order of collection (descending). Defines the position of the collection 117 | among all the collections with the same parent.$id 118 |
titleString 123 | Name of the collection
userObject 129 |
user.$idInteger 135 | Owner ID
viewString 141 | 143 |

View style of collection, can be:

144 |
    145 |
  • list (default)
  • 146 |
  • simple 147 |
  • 148 |
  • grid 149 |
  • 150 |
  • masonry Pinterest like grid
  • 151 |
152 |
156 | 157 | {% hint style="warning" %} 158 | Our API response could contain **other fields**, not described above. It's **unsafe to use** them in your integration! They could be removed or renamed at any time. 159 | {% endhint %} 160 | 161 | ### System collections 162 | 163 | Every user have several system non-removable collections. They are not contained in any API responses. 164 | 165 | | \_id | Description | 166 | | :--- | :--- | 167 | | **-1** | "**Unsorted**" collection | 168 | | **-99** | "**Trash**" collection | 169 | 170 | -------------------------------------------------------------------------------- /v1/collections/covers-icons.md: -------------------------------------------------------------------------------- 1 | # Covers/icons 2 | 3 | In your app you could easily make icon/cover selector from more than 10 000 icons 4 | 5 | ![](../../.gitbook/assets/icon-finder.png) 6 | 7 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collections/covers/{text}" method="get" summary="Search for cover" %} 8 | {% swagger-description %} 9 | Search for specific cover (icon) 10 | {% endswagger-description %} 11 | 12 | {% swagger-parameter in="path" name="text" type="string" %} 13 | For example "pokemon" 14 | {% endswagger-parameter %} 15 | 16 | {% swagger-response status="200" description="" %} 17 | ```javascript 18 | { 19 | "items": [ 20 | { 21 | "title": "Icons8", 22 | "icons": [ 23 | { 24 | "png": "https://rd-icons-icons8.gumlet.com/color/5x/mystic-pokemon.png?fill-color=transparent" 25 | } 26 | ] 27 | }, 28 | { 29 | "title": "Iconfinder", 30 | "icons": [ 31 | { 32 | "png": "https://cdn4.iconfinder.com/data/icons/pokemon-go/512/Pokemon_Go-01-128.png", 33 | "svg": "https://api.iconfinder.com/v2/icons/1320040/formats/svg/1760420/download" 34 | } 35 | ] 36 | } 37 | ], 38 | "result": true 39 | } 40 | ``` 41 | {% endswagger-response %} 42 | {% endswagger %} 43 | 44 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collections/covers" method="get" summary="Featured covers" %} 45 | {% swagger-description %} 46 | 47 | {% endswagger-description %} 48 | 49 | {% swagger-parameter in="path" name="" type="string" %} 50 | 51 | {% endswagger-parameter %} 52 | 53 | {% swagger-response status="200" description="" %} 54 | ```javascript 55 | { 56 | "items": [ 57 | { 58 | "title": "Colors circle", 59 | "icons": [ 60 | { 61 | "png": "https://up.raindrop.io/collection/templates/colors/ios1.png" 62 | } 63 | ] 64 | }, 65 | { 66 | "title": "Hockey", 67 | "icons": [ 68 | { 69 | "png": "https://up.raindrop.io/collection/templates/hockey-18/12i.png" 70 | } 71 | ] 72 | } 73 | ] 74 | } 75 | ``` 76 | {% endswagger-response %} 77 | {% endswagger %} 78 | -------------------------------------------------------------------------------- /v1/collections/methods.md: -------------------------------------------------------------------------------- 1 | # Collection methods 2 | 3 | ## Get root collections 4 | 5 | `GET` `https://api.raindrop.io/rest/v1/collections` 6 | 7 | Returns JSON-encoded array containing all root collections 8 | 9 | {% tabs %} 10 | {% tab title="200 " %} 11 | ```javascript 12 | { 13 | "result": true, 14 | "items": [ 15 | { 16 | "_id": 8492393, 17 | "access": { 18 | "level": 4, 19 | "draggable": true 20 | }, 21 | "collaborators": { 22 | "$id": "5dc1759a0e123be5f2654b6f" 23 | }, 24 | "color": "#0c797d", 25 | "count": 16, 26 | "cover": [ 27 | "https://up.raindrop.io/collection/thumbs/849/239/3/333ce18769311113836cf93a223a14a3.png" 28 | ], 29 | "created": "2019-10-09T11:49:53.518Z", 30 | "expanded": false, 31 | "lastUpdate": "2019-11-27T17:51:19.085Z", 32 | "public": false, 33 | "sort": 8492393, 34 | "title": "Development", 35 | "user": { 36 | "$id": 32 37 | }, 38 | "view": "list" 39 | } 40 | ] 41 | } 42 | ``` 43 | {% endtab %} 44 | {% endtabs %} 45 | 46 | ## Get child collections 47 | 48 | `GET` `https://api.raindrop.io/rest/v1/collections/childrens` 49 | 50 | Returns JSON-encoded array containing all nested collections (that have positive `parent.$id`) 51 | 52 | {% tabs %} 53 | {% tab title="200 " %} 54 | ```javascript 55 | { 56 | "result": true, 57 | "items": [ 58 | { 59 | "_id": 8492393, 60 | "access": { 61 | "level": 4, 62 | "draggable": true 63 | }, 64 | "collaborators": { 65 | "$id": "5dc1759a0e123be5f2654b6f" 66 | }, 67 | "color": "#0c797d", 68 | "count": 16, 69 | "cover": [ 70 | "https://up.raindrop.io/collection/thumbs/849/239/3/333ce18769311113836cf93a223a14a3.png" 71 | ], 72 | "created": "2019-10-09T11:49:53.518Z", 73 | "expanded": false, 74 | "lastUpdate": "2019-11-27T17:51:19.085Z", 75 | "parent": { "$id": 1111 }, 76 | "public": false, 77 | "sort": 8492393, 78 | "title": "Development", 79 | "user": { 80 | "$id": 32 81 | }, 82 | "view": "list" 83 | } 84 | ] 85 | } 86 | ``` 87 | {% endtab %} 88 | {% endtabs %} 89 | 90 | ## Get collection 91 | 92 | `GET` `https://api.raindrop.io/rest/v1/collection/{id}` 93 | 94 | #### Path Parameters 95 | 96 | | Name | Type | Description | 97 | | ---- | ------ | ------------- | 98 | | id | number | Collection ID | 99 | 100 | {% tabs %} 101 | {% tab title="200 " %} 102 | ```javascript 103 | { 104 | "result": true, 105 | "item": { 106 | "_id": 8492393, 107 | "access": { 108 | "for": 32, 109 | "level": 4, 110 | "root": true, 111 | "draggable": true 112 | }, 113 | "author": true, 114 | "collaborators": { 115 | "$id": "5dc1759a0e123be5f2654b6f" 116 | }, 117 | "color": "#0c797d", 118 | "count": 16, 119 | "cover": [ 120 | "https://up.raindrop.io/collection/thumbs/849/239/3/333ce18769311113836cf93a223a14a3.png" 121 | ], 122 | "created": "2019-10-09T11:49:53.518Z", 123 | "expanded": false, 124 | "lastUpdate": "2019-11-27T17:51:19.085Z", 125 | "public": false, 126 | "sort": 8492393, 127 | "title": "Development", 128 | "user": { 129 | "$id": 32 130 | }, 131 | "view": "list" 132 | } 133 | } 134 | ``` 135 | {% endtab %} 136 | {% endtabs %} 137 | 138 | ## Create collection 139 | 140 | `POST` `https://api.raindrop.io/rest/v1/collection` 141 | 142 | Create a new collection 143 | 144 | #### Request Body 145 | 146 | | Name | Type | Description | 147 | | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- | 148 | | view | string | More details in "Fields" | 149 | | title | string | Name of the collection | 150 | | sort | number | The order of collection (descending). Defines the position of the collection among all the collections with the same `parent.$id` | 151 | | public | boolean | Collection and raindrops that it contains will be accessible without authentication? | 152 | | parent.$id | integer | The ID of parent collection. Empty for root collections | 153 | | cover | array | Collection cover url | 154 | 155 | {% tabs %} 156 | {% tab title="200 " %} 157 | ```javascript 158 | { 159 | "result": true, 160 | "item": { 161 | ... 162 | } 163 | } 164 | ``` 165 | {% endtab %} 166 | 167 | {% tab title="400 Incorrect 'view' field value" %} 168 | ```javascript 169 | { 170 | "result": false, 171 | "error": "view", 172 | "errorMessage": "Collection validation failed: view: `bla` is not a valid enum value for path `view`." 173 | } 174 | ``` 175 | {% endtab %} 176 | {% endtabs %} 177 | 178 | ## Update collection 179 | 180 | `PUT` `https://api.raindrop.io/rest/v1/collection/{id}` 181 | 182 | Update an existing collection 183 | 184 | #### Path Parameters 185 | 186 | | Name | Type | Description | 187 | | ---- | ------ | ---------------------- | 188 | | id | number | Existing collection id | 189 | 190 | #### Request Body 191 | 192 | | Name | Type | Description | 193 | | ---------- | ------- | --------------------------------------------------------------------------------------------------------------------------------- | 194 | | expanded | boolean | Whether the collection\`s sub-collections are expanded | 195 | | view | string | More details in "Fields" | 196 | | title | string | Name of the collection | 197 | | sort | number | The order of collection (descending). Defines the position of the collection among all the collections with the same `parent.$id` | 198 | | public | boolean | Collection and raindrops that it contains will be accessible without authentication? | 199 | | parent.$id | integer | The ID of parent collection. Empty for root collections | 200 | | cover | array | Collection cover url | 201 | 202 | {% tabs %} 203 | {% tab title="200 " %} 204 | ```javascript 205 | { 206 | "result": true, 207 | "item": { 208 | ... 209 | } 210 | } 211 | ``` 212 | {% endtab %} 213 | {% endtabs %} 214 | 215 | ## Upload cover 216 | 217 | `PUT` `https://api.raindrop.io/rest/v1/collection/{id}/cover` 218 | 219 | It's possible to upload cover from desktop. PNG, GIF and JPEG supported 220 | 221 | #### Path Parameters 222 | 223 | | Name | Type | Description | 224 | | ---- | ------ | ---------------------- | 225 | | id | string | Existing collection ID | 226 | 227 | #### Headers 228 | 229 | | Name | Type | Description | 230 | | ------------ | ------ | ------------------- | 231 | | Content-Type | string | multipart/form-data | 232 | 233 | #### Request Body 234 | 235 | | Name | Type | Description | 236 | | ----- | ------ | ----------- | 237 | | cover | object | File | 238 | 239 | {% tabs %} 240 | {% tab title="200 " %} 241 | ```javascript 242 | { 243 | "result": true, 244 | "item": { 245 | ... 246 | } 247 | } 248 | ``` 249 | {% endtab %} 250 | {% endtabs %} 251 | 252 | ## Remove collection 253 | 254 | `DELETE` `https://api.raindrop.io/rest/v1/collection/{id}` 255 | 256 | Remove an existing collection and all its descendants.\ 257 | Raindrops will be moved to "Trash" collection 258 | 259 | #### Path Parameters 260 | 261 | | Name | Type | Description | 262 | | ---- | ------ | ---------------------- | 263 | | id | number | Existing collection ID | 264 | 265 | {% tabs %} 266 | {% tab title="200 " %} 267 | ```javascript 268 | { 269 | "result": true 270 | } 271 | ``` 272 | {% endtab %} 273 | {% endtabs %} 274 | 275 | ## Remove multiple collections 276 | 277 | `DELETE` `https://api.raindrop.io/rest/v1/collections` 278 | 279 | Remove multiple collections at once.\ 280 | Nested collections are ignored (include ID's in `ids` array to remove them) 281 | 282 | #### Request Body 283 | 284 | | Name | Type | Description | 285 | | ---- | ----- | ---------------------- | 286 | | ids | array | Array of collection ID | 287 | 288 | {% tabs %} 289 | {% tab title="200 " %} 290 | ``` 291 | ``` 292 | {% endtab %} 293 | {% endtabs %} 294 | 295 | ## Reorder all collections 296 | 297 | `PUT` `https://api.raindrop.io/rest/v1/collections` 298 | 299 | Updates order of all collections 300 | 301 | #### Request Body 302 | 303 | | Name | Type | Description | 304 | | ---- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 305 | | sort | string |

Change order of all collections.
Possible values:
"title" - sort alphabetically ascending
"-title" - sort alphabetically descending
"-count" - sort by raindrops count descending

| 306 | 307 | {% tabs %} 308 | {% tab title="200 " %} 309 | ```javascript 310 | { 311 | "result": true 312 | } 313 | ``` 314 | {% endtab %} 315 | {% endtabs %} 316 | 317 | ## Expand/collapse all collections 318 | 319 | `PUT` `https://api.raindrop.io/rest/v1/collections` 320 | 321 | #### Path Parameters 322 | 323 | | Name | Type | Description | 324 | | -------- | ------- | ------------------------------------------------ | 325 | | expanded | boolean |

TRUE = expand all
FALSE = collapse all

| 326 | 327 | {% tabs %} 328 | {% tab title="200 " %} 329 | ```javascript 330 | { 331 | "result": true 332 | } 333 | ``` 334 | {% endtab %} 335 | {% endtabs %} 336 | 337 | ## Merge collections 338 | 339 | `PUT` `https://api.raindrop.io/rest/v1/collections/merge` 340 | 341 | Merge multiple collections 342 | 343 | #### Request Body 344 | 345 | | Name | Type | Description | 346 | | ---- | ------ | ---------------------------------------------------------- | 347 | | to | number | Collection ID where listed collection `ids` will be merged | 348 | | ids | array | Collection ID's | 349 | 350 | {% tabs %} 351 | {% tab title="200 " %} 352 | ``` 353 | ``` 354 | {% endtab %} 355 | {% endtabs %} 356 | 357 | ## Remove all empty collections 358 | 359 | `PUT` `https://api.raindrop.io/rest/v1/collections/clean` 360 | 361 | {% tabs %} 362 | {% tab title="200 " %} 363 | ```javascript 364 | { 365 | "result": true, 366 | "count": 3 367 | } 368 | ``` 369 | {% endtab %} 370 | {% endtabs %} 371 | 372 | ## Empty Trash 373 | 374 | `DELETE` `https://api.raindrop.io/rest/v1/collection/-99` 375 | 376 | {% tabs %} 377 | {% tab title="200 " %} 378 | ```javascript 379 | { 380 | "result": true 381 | } 382 | ``` 383 | {% endtab %} 384 | {% endtabs %} 385 | 386 | ## Get system collections count 387 | 388 | `GET` `https://api.raindrop.io/rest/v1/user/stats` 389 | 390 | {% tabs %} 391 | {% tab title="200 " %} 392 | ```javascript 393 | { 394 | "items": [ 395 | { 396 | "_id": 0, 397 | "count": 1570 398 | }, 399 | { 400 | "_id": -1, 401 | "count": 34 402 | }, 403 | { 404 | "_id": -99, 405 | "count": 543 406 | } 407 | ], 408 | "meta": { 409 | "pro": true, 410 | "_id": 32, 411 | "changedBookmarksDate": "2020-02-11T11:23:43.143Z", 412 | "duplicates": { 413 | "count": 3 414 | }, 415 | "broken": { 416 | "count": 31 417 | } 418 | }, 419 | "result": true 420 | } 421 | ``` 422 | {% endtab %} 423 | {% endtabs %} 424 | 425 | -------------------------------------------------------------------------------- /v1/collections/nested-structure.md: -------------------------------------------------------------------------------- 1 | # Nested structure 2 | 3 | ### Overview 4 | 5 | If you look into Raindrop UI you will notice a sidebar in left corner, where collections are located. Collections itself divided by groups. Groups useful to create separate sets of collections, for example "Home", "Work", etc. 6 | 7 | ![](../../.gitbook/assets/sidebar.png) 8 | 9 | `Groups` array is a single place where user **root** collection list and order is persisted. Why just not to save order position inside collection item itself? Because collections can be shared and they group and order can vary from user to user. 10 | 11 | So to fully recreate sidebar like in our app you need to make 3 separate API calls \(sorry, will be improved in future API updates\): 12 | 13 | #### 1. [Get user object](../user/authenticated.md#get-user) 14 | 15 | It contains `groups` array with exact collection ID's. Typically this array looks like this: 16 | 17 | ```javascript 18 | { 19 | "groups": [ 20 | { 21 | "title": "Home", 22 | "hidden": false, 23 | "sort": 0, 24 | "collections": [ 25 | 8364483, 26 | 8364403, 27 | 66 28 | ] 29 | }, 30 | { 31 | "title": "Work", 32 | "hidden": false, 33 | "sort": 1, 34 | "collections": [ 35 | 8492393 36 | ] 37 | } 38 | ] 39 | } 40 | ``` 41 | 42 | {% hint style="warning" %} 43 | Collection ID's listed below is just first level of collections structure! To create full tree of nested collections you need to get child items separately. 44 | {% endhint %} 45 | 46 | To get name, count, icon and other info about collections, make those two separate calls: 47 | 48 | #### 2. [Get root collections](methods.md#get-root-collections) 49 | 50 | Sort order of root collections persisted in `groups[].collections` array 51 | 52 | #### 3. [Get child collections](methods.md#get-child-collections) 53 | 54 | Sort order of child collections persisted in collection itself in `sort` field 55 | 56 | -------------------------------------------------------------------------------- /v1/collections/sharing.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | Collection can be shared with other users, which are then called 4 | collaborators, and this section describes the different commands that are 5 | related to sharing. 6 | --- 7 | 8 | # Sharing 9 | 10 | ### Collaborators 11 | 12 | Every user who shares at least one collection with another user, has a collaborators record in the API response. The record contains a restricted subset of user-specific fields. 13 | 14 | | Field | Description | 15 | | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 16 | | \_id | User ID of the collaborator | 17 | | email |

Email of the collaborator

Empty when authorized user have read-only access

| 18 | | email\_MD5 | MD5 hash of collaborator email. Useful for using with Gravatar for example | 19 | | fullName | Full name of the collaborator | 20 | | role |

Access level:

member have write access and can invite more users

viewer read-only access

| 21 | 22 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/sharing" method="post" summary="Share collection" %} 23 | {% swagger-description %} 24 | Share collection with another user(s). As result invitation(s) will be send to specified email(s) with link to join collection. 25 | {% endswagger-description %} 26 | 27 | {% swagger-parameter in="path" name="id" type="number" %} 28 | Existing collection ID 29 | {% endswagger-parameter %} 30 | 31 | {% swagger-parameter in="body" name="role" type="string" %} 32 | Access level. Possible values: 33 | 34 | \ 35 | 36 | 37 | 38 | 39 | **`member`** 40 | 41 | \ 42 | 43 | 44 | 45 | 46 | **`viewer`** 47 | {% endswagger-parameter %} 48 | 49 | {% swagger-parameter in="body" name="emails" type="array" %} 50 | The user email(s) with whom to share the project. 51 | 52 | \ 53 | 54 | 55 | Maximum 10 56 | {% endswagger-parameter %} 57 | 58 | {% swagger-response status="200" description="" %} 59 | ```javascript 60 | { 61 | "result": true, 62 | "emails": [ 63 | "some@user.com", 64 | "other@user.com" 65 | ] 66 | } 67 | ``` 68 | {% endswagger-response %} 69 | 70 | {% swagger-response status="400" description="" %} 71 | ```javascript 72 | //'emails' array is empty 73 | { 74 | "result": false, 75 | "errorMessage": "no emails" 76 | } 77 | 78 | //'emails' array larger than 10 79 | { 80 | "result": false, 81 | "errorMessage": "you cant send more than 10 invites at once" 82 | } 83 | ``` 84 | {% endswagger-response %} 85 | 86 | {% swagger-response status="403" description="" %} 87 | ```javascript 88 | //When user have more than 100 pending invitations: 89 | { 90 | "result": false, 91 | "errorMessage": "you have too many pending invitations, you will be banned if you continue send more" 92 | } 93 | 94 | //User doesn't have enought permissions to invite more people 95 | { 96 | "result": false, 97 | "errorMessage": "you dont have permissions to invite more people" 98 | } 99 | ``` 100 | {% endswagger-response %} 101 | {% endswagger %} 102 | 103 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/sharing" method="get" summary="Get collaborators list of collection" %} 104 | {% swagger-description %} 105 | 106 | {% endswagger-description %} 107 | 108 | {% swagger-parameter in="path" name="id" type="number" %} 109 | Existing collection ID 110 | {% endswagger-parameter %} 111 | 112 | {% swagger-response status="200" description="" %} 113 | ```javascript 114 | { 115 | "items": [ 116 | { 117 | "_id": 373381, 118 | "email": "some@mail.com", 119 | "email_MD5": "e12bda18ca265d3f3e30d247adea2549", 120 | "fullName": "Jakie Future", 121 | "registered": "2019-08-18T17:01:43.664Z", 122 | "role": "viewer" 123 | } 124 | ], 125 | "result": true 126 | } 127 | ``` 128 | {% endswagger-response %} 129 | {% endswagger %} 130 | 131 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/sharing" method="delete" summary="Unshare or leave collection" %} 132 | {% swagger-description %} 133 | There two possible results of calling this method, depends on who authenticated user is: 134 | 135 | \ 136 | 137 | 138 | \- 139 | 140 | **Owner** 141 | 142 | : collection will be unshared and all collaborators will be removed 143 | 144 | \ 145 | 146 | 147 | \- 148 | 149 | **Member or viewer** 150 | 151 | : authenticated user will be removed from collaborators list 152 | {% endswagger-description %} 153 | 154 | {% swagger-parameter in="path" name="id" type="number" %} 155 | Existing collection ID 156 | {% endswagger-parameter %} 157 | 158 | {% swagger-response status="200" description="" %} 159 | ```javascript 160 | { 161 | "result": true 162 | } 163 | ``` 164 | {% endswagger-response %} 165 | {% endswagger %} 166 | 167 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/sharing/{userId}" method="put" summary="Change access level of collaborator" %} 168 | {% swagger-description %} 169 | 170 | {% endswagger-description %} 171 | 172 | {% swagger-parameter in="path" name="userId" type="number" %} 173 | User ID of collaborator 174 | {% endswagger-parameter %} 175 | 176 | {% swagger-parameter in="path" name="id" type="number" %} 177 | Existing collection ID 178 | {% endswagger-parameter %} 179 | 180 | {% swagger-parameter in="body" name="role" type="string" %} 181 | **`member`** 182 | 183 | or 184 | 185 | **`viewer`** 186 | {% endswagger-parameter %} 187 | 188 | {% swagger-response status="200" description="" %} 189 | ```javascript 190 | { 191 | "result": true 192 | } 193 | ``` 194 | {% endswagger-response %} 195 | {% endswagger %} 196 | 197 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/sharing/{userId}" method="delete" summary="Delete a collaborator" %} 198 | {% swagger-description %} 199 | Remove an user from shared collection 200 | {% endswagger-description %} 201 | 202 | {% swagger-parameter in="path" name="userId" type="number" %} 203 | User ID of collaborator 204 | {% endswagger-parameter %} 205 | 206 | {% swagger-parameter in="path" name="id" type="number" %} 207 | Existing collection ID 208 | {% endswagger-parameter %} 209 | 210 | {% swagger-response status="200" description="" %} 211 | ```javascript 212 | { 213 | "result": true 214 | } 215 | ``` 216 | {% endswagger-response %} 217 | {% endswagger %} 218 | 219 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/collection/{id}/join" method="post" summary="Accept an invitation" %} 220 | {% swagger-description %} 221 | Accept an invitation to join a shared collection 222 | {% endswagger-description %} 223 | 224 | {% swagger-parameter in="path" name="id" type="number" %} 225 | Existing collection ID 226 | {% endswagger-parameter %} 227 | 228 | {% swagger-parameter in="body" name="token" type="string" %} 229 | Secret token from email 230 | {% endswagger-parameter %} 231 | 232 | {% swagger-response status="200" description="" %} 233 | ```javascript 234 | { 235 | "result": true, 236 | "role": "member" 237 | } 238 | ``` 239 | {% endswagger-response %} 240 | 241 | {% swagger-response status="403" description="" %} 242 | ```javascript 243 | //Incorrect token 244 | { 245 | "result": false, 246 | "error": "CollaboratorsIncorrectToken", 247 | "errorMessage": "Incorrect or expired token" 248 | } 249 | 250 | //Collection no more exists 251 | { 252 | "result": false, 253 | "error": "CollaboratorsNoCollection", 254 | "errorMessage": "Shared collection not found or removed" 255 | } 256 | 257 | { 258 | "result": false, 259 | "error": "CollaboratorsAlready", 260 | "errorMessage": "You already owner of this collection" 261 | } 262 | ``` 263 | {% endswagger-response %} 264 | {% endswagger %} 265 | -------------------------------------------------------------------------------- /v1/export.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Export all raindrops in specific format 3 | --- 4 | 5 | # Export 6 | 7 | ## Export in format 8 | 9 | `GET` `https://api.raindrop.io/rest/v1/raindrops/{collectionId}/export.{format}` 10 | 11 | **Path Parameters** 12 | 13 |
NameTypeDescription
collectionId*numberCollection ID. Specify 0 to get all raindrops
format*stringcsv, html or zip
14 | 15 | **Query Parameters** 16 | 17 |
NameTypeDescription
sortstringCheck https://developer.raindrop.io/v1/raindrops/multiple
searchstringCheck https://developer.raindrop.io/v1/raindrops/multiple
18 | -------------------------------------------------------------------------------- /v1/filters.md: -------------------------------------------------------------------------------- 1 | # Filters 2 | 3 | To help users easily find their content you can suggest context aware filters like we have in Raindrop.io app 4 | 5 | ![Filters right above search field](<../.gitbook/assets/filters (1).png>) 6 | 7 | ## Fields 8 | 9 | | Field | Type | Description | 10 | | ---------------- | --------------- | -------------------------------------------------------- | 11 | | broken | `Object` | | 12 | | broken.count | `Integer` | Broken links count | 13 | | duplicates | `Object` | | 14 | | duplicates.count | `Integer` | Duplicate links count | 15 | | important | `Object` | | 16 | | important.count | `Integer` | Count of raindrops that marked as "favorite" | 17 | | notag | `Object` | | 18 | | notag.count | `Integer` | Count of raindrops without any tag | 19 | | tags | `Array` | List of tags in format `{"_id": "tag name", "count": 1}` | 20 | | types | `Array` | List of types in format `{"_id": "type", "count": 1}` | 21 | 22 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/filters/{collectionId}" method="get" summary="Get filters" %} 23 | {% swagger-description %} 24 | 25 | {% endswagger-description %} 26 | 27 | {% swagger-parameter in="path" name="collectionId" type="string" %} 28 | Collection ID. `0` for all 29 | {% endswagger-parameter %} 30 | 31 | {% swagger-parameter in="query" name="tagsSort" type="string" %} 32 | Sort tags by:\ 33 | **`-count`** by count, default\ 34 | **`_id`** by name 35 | {% endswagger-parameter %} 36 | 37 | {% swagger-parameter in="query" name="search" type="string" %} 38 | Check "raindrops" documentation for more details 39 | {% endswagger-parameter %} 40 | 41 | {% swagger-response status="200" description="" %} 42 | ```javascript 43 | { 44 | "result": true, 45 | "broken": { 46 | "count": 31 47 | }, 48 | "duplicates": { 49 | "count": 7 50 | }, 51 | "important": { 52 | "count": 59 53 | }, 54 | "notag": { 55 | "count": 1366 56 | }, 57 | "tags": [ 58 | { 59 | "_id": "performanc", 60 | "count": 19 61 | }, 62 | { 63 | "_id": "guides", 64 | "count": 9 65 | } 66 | ], 67 | "types": [ 68 | { 69 | "_id": "article", 70 | "count": 313 71 | }, 72 | { 73 | "_id": "image", 74 | "count": 143 75 | }, 76 | { 77 | "_id": "video", 78 | "count": 26 79 | }, 80 | { 81 | "_id": "document", 82 | "count": 7 83 | } 84 | ] 85 | } 86 | ``` 87 | {% endswagger-response %} 88 | {% endswagger %} 89 | -------------------------------------------------------------------------------- /v1/highlights.md: -------------------------------------------------------------------------------- 1 | # Highlights 2 | 3 | Single `highlight` object: 4 | 5 | | Field | Type | Description | 6 | | ------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 7 | | \_id | `String` | Unique id of highlight | 8 | | text | `String` | Text of highlight (required) | 9 | | title | `String` | Title of bookmark | 10 | | color | `String` |

Color of highlight.
Default yellow

Can be blue, brown, cyan, gray, green, indigo, orange, pink, purple, red, teal, yellow

| 11 | | note | `String` | Optional note for highlight | 12 | | created | `String` | Creation date of highlight | 13 | | tags | `Array` | Tags list | 14 | | link | `String` | Highlighted page URL | 15 | 16 | {% swagger method="get" path="/rest/v1/highlights" baseUrl="https://api.raindrop.io" summary="Get all highlights" %} 17 | {% swagger-description %} 18 | 19 | {% endswagger-description %} 20 | 21 | {% swagger-parameter in="query" name="page" type="Number" %} 22 | 23 | {% endswagger-parameter %} 24 | 25 | {% swagger-parameter in="query" name="perpage" type="Number" %} 26 | How many highlights per page. 50 max. Default 25 27 | {% endswagger-parameter %} 28 | 29 | {% swagger-response status="200: OK" description="" %} 30 | ```javascript 31 | { 32 | "result": true, 33 | "items": [ 34 | { 35 | "note": "Trully native macOS app", 36 | "color": "red", 37 | "text": "Orion is the new WebKit-based browser for Mac", 38 | "created": "2022-03-21T14:41:34.059Z", 39 | "tags": ["tag1", "tag2"], 40 | "_id": "62388e9e48b63606f41e44a6", 41 | "raindropRef": 123, 42 | "link": "https://apple.com", 43 | "title": "Orion Browser" 44 | }, 45 | { 46 | "note": "", 47 | "color": "green", 48 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 49 | "created": "2022-03-21T15:13:21.128Z", 50 | "tags": ["tag1", "tag2"], 51 | "_id": "62389611058af151c840f667", 52 | "raindropRef": 123, 53 | "link": "https://apple.com", 54 | "title": "Apple" 55 | } 56 | ] 57 | } 58 | ``` 59 | {% endswagger-response %} 60 | {% endswagger %} 61 | 62 | {% swagger method="get" path="/rest/v1/highlights/{collectionId}" baseUrl="https://api.raindrop.io" summary="Get all highlights in a collection" %} 63 | {% swagger-description %} 64 | 65 | {% endswagger-description %} 66 | 67 | {% swagger-parameter in="path" name="collectionId" type="Number" required="true" %} 68 | Collection ID 69 | {% endswagger-parameter %} 70 | 71 | {% swagger-parameter in="path" name="page" type="Number" %} 72 | 73 | {% endswagger-parameter %} 74 | 75 | {% swagger-parameter in="path" name="perpage" type="Number" %} 76 | How many highlights per page. 50 max. Default 25 77 | {% endswagger-parameter %} 78 | 79 | {% swagger-response status="200: OK" description="" %} 80 | ```javascript 81 | { 82 | "result": true, 83 | "items": [ 84 | { 85 | "note": "Trully native macOS app", 86 | "color": "red", 87 | "text": "Orion is the new WebKit-based browser for Mac", 88 | "created": "2022-03-21T14:41:34.059Z", 89 | "tags": ["tag1", "tag2"], 90 | "_id": "62388e9e48b63606f41e44a6", 91 | "raindropRef": 123, 92 | "link": "https://apple.com", 93 | "title": "Apple" 94 | }, 95 | { 96 | "note": "", 97 | "color": "green", 98 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 99 | "created": "2022-03-21T15:13:21.128Z", 100 | "tags": ["tag1", "tag2"], 101 | "_id": "62389611058af151c840f667", 102 | "raindropRef": 123, 103 | "link": "https://apple.com", 104 | "title": "Apple" 105 | } 106 | ] 107 | } 108 | ``` 109 | {% endswagger-response %} 110 | {% endswagger %} 111 | 112 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/raindrop/{id}" method="get" summary="Get highlights of raindrop" %} 113 | {% swagger-description %} 114 | 115 | {% endswagger-description %} 116 | 117 | {% swagger-parameter in="path" name="id" type="number" required="true" %} 118 | Existing raindrop ID 119 | {% endswagger-parameter %} 120 | 121 | {% swagger-response status="200" description="" %} 122 | ```javascript 123 | { 124 | "result": true, 125 | "item": { 126 | "_id": 373777232, 127 | "highlights": [ 128 | { 129 | "note": "Trully native macOS app", 130 | "color": "red", 131 | "text": "Orion is the new WebKit-based browser for Mac", 132 | "created": "2022-03-21T14:41:34.059Z", 133 | "lastUpdate": "2022-03-22T14:30:52.004Z", 134 | "_id": "62388e9e48b63606f41e44a6" 135 | }, 136 | { 137 | "note": "", 138 | "color": "green", 139 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 140 | "created": "2022-03-21T15:13:21.128Z", 141 | "lastUpdate": "2022-03-22T09:15:18.751Z", 142 | "_id": "62389611058af151c840f667" 143 | } 144 | ] 145 | } 146 | } 147 | ``` 148 | {% endswagger-response %} 149 | {% endswagger %} 150 | 151 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/raindrop/{id}" method="put" summary="Add highlight" %} 152 | {% swagger-description %} 153 | Just specify a `highlights` array in body with `object` for each highlight 154 | 155 | **Fore example:** 156 | 157 | `{"highlights": [ { "text": "Some quote", "color": "red", "note": "Some note" } ] }` 158 | {% endswagger-description %} 159 | 160 | {% swagger-parameter in="path" name="id" type="number" required="true" %} 161 | Existing raindrop ID 162 | {% endswagger-parameter %} 163 | 164 | {% swagger-parameter in="body" name="highlights" type="array" required="true" %} 165 | 166 | {% endswagger-parameter %} 167 | 168 | {% swagger-parameter in="body" name="highlights[].text" required="true" %} 169 | 170 | {% endswagger-parameter %} 171 | 172 | {% swagger-parameter in="body" name="highlights[].note" %} 173 | 174 | {% endswagger-parameter %} 175 | 176 | {% swagger-parameter in="body" name="highlights[].color" %} 177 | 178 | {% endswagger-parameter %} 179 | 180 | {% swagger-response status="200" description="" %} 181 | ```javascript 182 | { 183 | "result": true, 184 | "item": { 185 | "_id": 373777232, 186 | "highlights": [ 187 | { 188 | "note": "Trully native macOS app", 189 | "color": "red", 190 | "text": "Orion is the new WebKit-based browser for Mac", 191 | "created": "2022-03-21T14:41:34.059Z", 192 | "lastUpdate": "2022-03-22T14:30:52.004Z", 193 | "_id": "62388e9e48b63606f41e44a6" 194 | }, 195 | { 196 | "note": "", 197 | "color": "green", 198 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 199 | "created": "2022-03-21T15:13:21.128Z", 200 | "lastUpdate": "2022-03-22T09:15:18.751Z", 201 | "_id": "62389611058af151c840f667" 202 | } 203 | ] 204 | } 205 | } 206 | ``` 207 | {% endswagger-response %} 208 | {% endswagger %} 209 | 210 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/raindrop/{id}" method="put" summary="Update highlight" %} 211 | {% swagger-description %} 212 | Just specify a `highlights` array in body with `object` containing particular `_id` of highlight you want to update and all other fields you want to change. 213 | 214 | **Fore example:** 215 | 216 | `{"highlights": [ { "_id": "62388e9e48b63606f41e44a6", "note": "New note" } ] }` 217 | {% endswagger-description %} 218 | 219 | {% swagger-parameter in="path" name="id" type="number" required="true" %} 220 | Existing raindrop ID 221 | {% endswagger-parameter %} 222 | 223 | {% swagger-parameter in="body" name="highlights" type="array" required="true" %} 224 | 225 | {% endswagger-parameter %} 226 | 227 | {% swagger-parameter in="body" name="highlights[]._id" required="true" %} 228 | Particular highlight _id you want to remove 229 | {% endswagger-parameter %} 230 | 231 | {% swagger-parameter in="body" name="highlights[].text" required="false" %} 232 | Should be empty string 233 | {% endswagger-parameter %} 234 | 235 | {% swagger-parameter in="body" name="highlights[].note" %} 236 | 237 | {% endswagger-parameter %} 238 | 239 | {% swagger-parameter in="body" name="highlights[].color" %} 240 | 241 | {% endswagger-parameter %} 242 | 243 | {% swagger-response status="200" description="" %} 244 | ```javascript 245 | { 246 | "result": true, 247 | "item": { 248 | "_id": 373777232, 249 | "highlights": [ 250 | { 251 | "note": "Trully native macOS app", 252 | "color": "red", 253 | "text": "Orion is the new WebKit-based browser for Mac", 254 | "created": "2022-03-21T14:41:34.059Z", 255 | "lastUpdate": "2022-03-22T14:30:52.004Z", 256 | "_id": "62388e9e48b63606f41e44a6" 257 | }, 258 | { 259 | "note": "", 260 | "color": "green", 261 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 262 | "created": "2022-03-21T15:13:21.128Z", 263 | "lastUpdate": "2022-03-22T09:15:18.751Z", 264 | "_id": "62389611058af151c840f667" 265 | } 266 | ] }} 267 | ``` 268 | {% endswagger-response %} 269 | {% endswagger %} 270 | 271 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/raindrop/{id}" method="put" summary="Remove highlight" %} 272 | {% swagger-description %} 273 | Just specify a `highlights` array in body with `object` containing particular `_id` of highlight you want to remove and empty string for `text` field. 274 | 275 | **Fore example:** 276 | 277 | `{"highlights": [ { "_id": "62388e9e48b63606f41e44a6", "text": "" } ] }` 278 | {% endswagger-description %} 279 | 280 | {% swagger-parameter in="path" name="id" type="number" required="true" %} 281 | Existing raindrop ID 282 | {% endswagger-parameter %} 283 | 284 | {% swagger-parameter in="body" name="highlights" type="array" required="true" %} 285 | 286 | {% endswagger-parameter %} 287 | 288 | {% swagger-parameter in="body" name="highlights[]._id" required="true" %} 289 | Particular highlight _id you want to remove 290 | {% endswagger-parameter %} 291 | 292 | {% swagger-parameter in="body" name="highlights[].text" required="true" %} 293 | Should be empty string 294 | {% endswagger-parameter %} 295 | 296 | {% swagger-response status="200" description="" %} 297 | ```javascript 298 | { 299 | "result": true, 300 | "item": { 301 | "_id": 373777232, 302 | "highlights": [ 303 | { 304 | "note": "Trully native macOS app", 305 | "color": "red", 306 | "text": "Orion is the new WebKit-based browser for Mac", 307 | "created": "2022-03-21T14:41:34.059Z", 308 | "lastUpdate": "2022-03-22T14:30:52.004Z", 309 | "_id": "62388e9e48b63606f41e44a6" 310 | }, 311 | { 312 | "note": "", 313 | "color": "green", 314 | "text": "Built on WebKit, Orion gives you a fast, smooth and lightweight browsing experience", 315 | "created": "2022-03-21T15:13:21.128Z", 316 | "lastUpdate": "2022-03-22T09:15:18.751Z", 317 | "_id": "62389611058af151c840f667" 318 | } 319 | ] 320 | }} 321 | ``` 322 | {% endswagger-response %} 323 | {% endswagger %} 324 | -------------------------------------------------------------------------------- /v1/import.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: Handy methods to implement import functionality 3 | --- 4 | 5 | # Import 6 | 7 | ## Parse URL 8 | 9 | `GET` `https://api.raindrop.io/rest/v1/import/url/parse` 10 | 11 | Parse and extract useful info from any URL 12 | 13 | #### Query Parameters 14 | 15 | | Name | Type | Description | 16 | | ---- | ------ | ----------- | 17 | | url | string | URL | 18 | 19 | {% tabs %} 20 | {% tab title="200 " %} 21 | ```javascript 22 | //Success 23 | { 24 | "item": { 25 | "title": "Яндекс", 26 | "excerpt": "Найдётся всё", 27 | "media": [ 28 | { 29 | "type": "image", 30 | "link": "http://yastatic.net/s3/home/logos/share/share-logo_ru.png" 31 | } 32 | ], 33 | "type": "link", 34 | "meta": { 35 | "possibleArticle": false, 36 | "canonical": "https://ya.ru", 37 | "site": "Яндекс", 38 | "tags": [] 39 | } 40 | }, 41 | "result": true 42 | } 43 | 44 | //Invalid URL 45 | { 46 | "error": "not_found", 47 | "errorMessage": "invalid_url", 48 | "item": { 49 | "title": "Fdfdfdf", 50 | "excerpt": "", 51 | "media": [ 52 | { 53 | "link": "" 54 | } 55 | ], 56 | "type": "link", 57 | "parser": "local", 58 | "meta": { 59 | "possibleArticle": false, 60 | "tags": [] 61 | } 62 | }, 63 | "result": true 64 | } 65 | 66 | //Not found 67 | { 68 | "error": "not_found", 69 | "errorMessage": "url_status_404", 70 | "item": { 71 | "title": "Some", 72 | "excerpt": "", 73 | "media": [ 74 | { 75 | "link": "" 76 | } 77 | ], 78 | "type": "link", 79 | "parser": "local", 80 | "meta": { 81 | "possibleArticle": false, 82 | "tags": [] 83 | } 84 | }, 85 | "result": true 86 | } 87 | ``` 88 | {% endtab %} 89 | {% endtabs %} 90 | 91 | ## Check URL(s) existence 92 | 93 | `POST` `https://api.raindrop.io/rest/v1/import/url/exists` 94 | 95 | Does specified URL's are already saved? 96 | 97 | #### Request Body 98 | 99 | | Name | Type | Description | 100 | | ---- | ----- | ----------- | 101 | | urls | array | URL's | 102 | 103 | {% tabs %} 104 | {% tab title="200 ids array contains ID of existing bookmarks" %} 105 | ```javascript 106 | //Found 107 | { 108 | "result": true, 109 | "ids": [ 110 | 3322, 111 | 12323 112 | ] 113 | } 114 | 115 | //Not found 116 | { 117 | "result": false, 118 | "ids": [] 119 | } 120 | ``` 121 | {% endtab %} 122 | {% endtabs %} 123 | 124 | ## Parse HTML import file 125 | 126 | `POST` `https://api.raindrop.io/rest/v1/import/file` 127 | 128 | Convert HTML bookmark file to JSON. \ 129 | Support Nestcape, Pocket and Instapaper file formats 130 | 131 | #### Headers 132 | 133 | | Name | Type | Description | 134 | | ------------ | ------ | ------------------- | 135 | | Content-Type | string | multipart/form-data | 136 | 137 | #### Request Body 138 | 139 | | Name | Type | Description | 140 | | ------ | ------ | ----------- | 141 | | import | string | File | 142 | 143 | {% tabs %} 144 | {% tab title="200 " %} 145 | ```javascript 146 | { 147 | "result": true, 148 | "items": [ 149 | { 150 | "title": "Web", 151 | "folders": [ 152 | { 153 | "title": "Default", 154 | "folders": [], 155 | "bookmarks": [ 156 | { 157 | "link": "https://aaa.com/a", 158 | "title": "Name 1", 159 | "lastUpdate": "2016-09-13T11:17:09.000Z", 160 | "tags": ["tag"], 161 | "excerpt": "" 162 | } 163 | ] 164 | } 165 | ], 166 | "bookmarks": [ 167 | { 168 | "link": "https://bbb.com/b", 169 | "title": "Name 2", 170 | "lastUpdate": "2016-09-13T11:17:09.000Z", 171 | "tags": ["tag"], 172 | "excerpt": "" 173 | } 174 | ] 175 | }, 176 | { 177 | "title": "Home", 178 | "folders": [ 179 | { 180 | "title": "Inspiration", 181 | "folders": [], 182 | "bookmarks": [ 183 | { 184 | "link": "https://ccc.com/c", 185 | "title": "Name 3", 186 | "lastUpdate": "2016-09-13T11:17:09.000Z", 187 | "tags": ["tag"], 188 | "excerpt": "" 189 | } 190 | ] 191 | } 192 | ], 193 | "bookmarks": [] 194 | } 195 | ] 196 | } 197 | ``` 198 | {% endtab %} 199 | {% endtabs %} 200 | -------------------------------------------------------------------------------- /v1/raindrops/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: We call bookmarks (or items) as "raindrops" 3 | --- 4 | 5 | # Raindrops 6 | 7 | ### Main fields 8 | 9 | | Field | Type | Description | 10 | | -------------- | --------------- | --------------------------------------------------------------------------------- | 11 | | \_id | `Integer` | Unique identifier | 12 | | collection | `Object` | ​ | 13 | | collection.$id | `Integer` | Collection that the raindrop resides in | 14 | | cover | `String` | Raindrop cover URL | 15 | | created | `String` | Creation date | 16 | | domain | `String` |

Hostname of a link.
Files always have raindrop.io hostname

| 17 | | excerpt | `String` | Description; max length: 10000 | 18 | | note | `String` | Note; max length: 10000 | 19 | | lastUpdate | `String` | Update date | 20 | | link | `String` | URL | 21 | | media | `Array` | ​Covers list in format: `[ {"link":"url"} ]` | 22 | | tags | `Array` | Tags list | 23 | | title | `String` | Title; max length: 1000 | 24 | | type | `String` | `link` `article` `image` `video` `document` or `audio` | 25 | | user | `Object` | ​ | 26 | | user.$id | `Integer` | Raindrop owner | 27 | 28 | ### Other fields 29 | 30 | | Field | Type | Description | 31 | | --------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 32 | | broken | `Boolean` | Marked as broken (original `link` is not reachable anymore) | 33 | | cache | `Object` | Permanent copy (cached version) details | 34 | | cache.status | `String` | `ready` `retry` `failed` `invalid-origin` `invalid-timeout` or `invalid-size` | 35 | | cache.size | `Integer` | Full size in bytes | 36 | | cache.created | `String` | Date when copy is successfully made | 37 | | creatorRef | `Object` |

Sometime raindrop may belong to other user, not to the one who created it.
For example when this raindrop is created in shared collection by other user.
This object contains info about original author.

| 38 | | creatorRef.\_id | `Integer` | Original author (user ID) of a raindrop | 39 | | creatorRef.fullName | `String` | Original author name of a raindrop | 40 | | file | `Object` |

This raindrop uploaded from desktop

Supported file formats

| 41 | | file.name | `String` | File name | 42 | | file.size | `Integer` | File size in bytes | 43 | | file.type | `String` | Mime type | 44 | | important | `Boolean` | Marked as "favorite" | 45 | | highlights | `Array` | | 46 | | highlights\[].\_id | `String` | Unique id of highlight | 47 | | highlights\[].text | `String` | Text of highlight (required) | 48 | | highlights\[].color | `String` |

Color of highlight.
Default yellow

Can be blue, brown, cyan, gray, green, indigo, orange, pink, purple, red, teal, yellow

| 49 | | highlights\[].note | `String` | Optional note for highlight | 50 | | highlights\[].created | `String` | Creation date of highlight | 51 | | reminder | `Object` | Specify this object to attach reminder | 52 | | reminder.data | `Date` | YYYY-MM-DDTHH:mm:ss.sssZ | 53 | 54 | {% hint style="warning" %} 55 | Our API response could contain **other fields**, not described above. It's **unsafe to use** them in your integration! They could be removed or renamed at any time. 56 | {% endhint %} 57 | -------------------------------------------------------------------------------- /v1/raindrops/multiple.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | In this page you will find how to retrieve, create, update or delete multiple 4 | raindrops at once. 5 | --- 6 | 7 | # Multiple raindrops 8 | 9 | ### Common parameters 10 | 11 | To filter, sort or limit raindrops use one of the parameters described below. Check each method for exact list of supported parameters. 12 | 13 | | Parameter | Type | Description | 14 | | ------------ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 15 | | collectionId | `Integer` |

Path parameter that specify from which collection to get raindrops. Or specify one of system:

0 to get all (except Trash)

-1 to get from "Unsorted"

-99 to get from "Trash"

Warning: update or remove methods not support 0 yet. Will be fixed in future.

| 16 | | search | `String` |

As text, check all examples here

You can first test your searches in Raindrop app and if it works correctly, just copy content of search field and use it here

| 17 | | sort | `String` |

Query parameter for sorting:

-created by date descending (default)

created by date ascending

score by relevancy (only applicable when search is specified)

-sort by order

title by title (ascending)

-title by title (descending)

domain by hostname (ascending)

-domain by hostname (descending)

| 18 | | page | `Integer` | Query parameter. 0, 1, 2, 3 ... | 19 | | perpage | `Integer` | Query parameter. How many raindrops per page. 50 max | 20 | | ids | `Array` | You can specify exact raindrop ID's for batch update/remove methods | 21 | | nested | `Boolean` | Also include bookmarks from nested collections (true/false) | 22 | 23 | ## Get raindrops 24 | 25 | `GET` `https://api.raindrop.io/rest/v1/raindrops/{collectionId}` 26 | 27 | #### Path Parameters 28 | 29 | | Name | Type | Description | 30 | | ---------------------------------------------- | ------ | --------------------------------------------- | 31 | | collectionId\* | number | Collection ID. Specify 0 to get all raindrops | 32 | 33 | #### Query Parameters 34 | 35 | | Name | Type | Description | 36 | | ------- | ------- | ----------- | 37 | | sort | string | | 38 | | perpage | number | | 39 | | page | number | | 40 | | search | string | | 41 | | nested | boolean | | 42 | 43 | {% tabs %} 44 | {% tab title="200 " %} 45 | ``` 46 | ``` 47 | {% endtab %} 48 | {% endtabs %} 49 | 50 | ## Create many raindrops 51 | 52 | `POST` `https://api.raindrop.io/rest/v1/raindrops` 53 | 54 | #### Request Body 55 | 56 | | Name | Type | Description | 57 | | --------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------ | 58 | | items\* | array |

Array of objects. Format of single object described in "Create single raindrop".
Maximum 100 objects in array!

| 59 | 60 | {% tabs %} 61 | {% tab title="200 " %} 62 | ```javascript 63 | { 64 | "result": true, 65 | "items": [ 66 | { 67 | ... 68 | } 69 | ] 70 | } 71 | ``` 72 | {% endtab %} 73 | {% endtabs %} 74 | 75 | ## Update many raindrops 76 | 77 | `PUT` `https://api.raindrop.io/rest/v1/raindrops/{collectionId}` 78 | 79 | Specify optional `search` and/or `ids` parameters to limit raindrops that will be updated.\ 80 | Possible fields that could be updated are described in "Body Parameters" 81 | 82 | #### Path Parameters 83 | 84 | | Name | Type | Description | 85 | | ---------------------------------------------- | ------- | ----------- | 86 | | collectionId\* | number | | 87 | | nested | boolean | | 88 | 89 | #### Request Body 90 | 91 | | Name | Type | Description | 92 | | ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | 93 | | ids | array | | 94 | | important | boolean |

TRUE - mark as "favorite"
FALSE - unmark as "favorite"

| 95 | | tags | array |

Will append specified tags to raindrops.
Or will remove all tags from raindrops if [] (empty array) is specified

| 96 | | media | array |

Will append specified media items to raindrops.
Or will remove all media from raindrops if [] (empty array) is specified

| 97 | | cover | string |

Set URL for cover.
Tip: specify <screenshot> to set screenshots for all raindrops

| 98 | | collection | object | Specify `{"$id": collectionId}` to move raindrops to other collection | 99 | 100 | {% tabs %} 101 | {% tab title="200 " %} 102 | ``` 103 | ``` 104 | {% endtab %} 105 | {% endtabs %} 106 | 107 | ## Remove many raindrops 108 | 109 | `DELETE` `https://api.raindrop.io/rest/v1/raindrops/{collectionId}` 110 | 111 | Specify optional `search` and/or `ids` parameters to limit raindrops that will be moved to "**Trash**"\ 112 | When `:collectionId` is **-99**, raindrops will be permanently removed! 113 | 114 | #### Path Parameters 115 | 116 | | Name | Type | Description | 117 | | ---------------------------------------------- | ------- | ----------- | 118 | | collectionId\* | number | | 119 | | nested | boolean | | 120 | 121 | #### Query Parameters 122 | 123 | | Name | Type | Description | 124 | | ------ | ------ | ----------- | 125 | | search | string | | 126 | 127 | #### Request Body 128 | 129 | | Name | Type | Description | 130 | | ---- | ----- | ----------- | 131 | | ids | array | | 132 | 133 | {% tabs %} 134 | {% tab title="200 " %} 135 | ```javascript 136 | { 137 | "result": true, 138 | "modified": 330 139 | } 140 | ``` 141 | {% endtab %} 142 | {% endtabs %} 143 | -------------------------------------------------------------------------------- /v1/raindrops/single.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: >- 3 | In this page you will find how to retrieve, create, update or delete single 4 | raindrop. 5 | --- 6 | 7 | # Single raindrop 8 | 9 | ## Get raindrop 10 | 11 | `GET` `https://api.raindrop.io/rest/v1/raindrop/{id}` 12 | 13 | #### Path Parameters 14 | 15 | | Name | Type | Description | 16 | | ------------------------------------ | ------ | -------------------- | 17 | | id\* | number | Existing raindrop ID | 18 | 19 | {% tabs %} 20 | {% tab title="200 " %} 21 | ``` 22 | ``` 23 | {% endtab %} 24 | {% endtabs %} 25 | 26 | ## Create raindrop 27 | 28 | `POST` `https://api.raindrop.io/rest/v1/raindrop` 29 | 30 | Description and possible values of fields described in "Fields" 31 | 32 | #### Request Body 33 | 34 | | Name | Type | Description | 35 | | -------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | 36 | | pleaseParse | object | Specify empty object to automatically parse meta data (cover, description, html) in the background | 37 | | created | string | | 38 | | lastUpdate | string | | 39 | | order | number |

Specify sort order (ascending).
For example if you want to move raindrop to the first place set this field to 0

| 40 | | important | boolean | | 41 | | tags | array | | 42 | | media | array | | 43 | | cover | string | | 44 | | collection | object | | 45 | | type | string | | 46 | | excerpt | string | | 47 | | title | string | | 48 | | link\* | string | | 49 | | highlights | array | | 50 | | reminder | object | | 51 | 52 | 53 | 54 | {% tabs %} 55 | {% tab title="200 " %} 56 | ```javascript 57 | { 58 | "result": true, 59 | "item": { 60 | ... 61 | } 62 | } 63 | ``` 64 | {% endtab %} 65 | {% endtabs %} 66 | 67 | ## Update raindrop 68 | 69 | `PUT` `https://api.raindrop.io/rest/v1/raindrop/{id}` 70 | 71 | Description and possible values of fields described in "Fields" 72 | 73 | #### Path Parameters 74 | 75 | | Name | Type | Description | 76 | | ------------------------------------ | ------ | -------------------- | 77 | | id\* | number | Existing raindrop ID | 78 | 79 | #### Request Body 80 | 81 | | Name | Type | Description | 82 | | ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ | 83 | | created | string | | 84 | | lastUpdate | string | | 85 | | pleaseParse | object | Specify empty object to re-parse link meta data (cover, type, html) in the background | 86 | | order | number |

Specify sort order (ascending).
For example if you want to move raindrop to the first place set this field to 0

| 87 | | important | boolean | | 88 | | tags | array | | 89 | | media | array | | 90 | | cover | string | | 91 | | collection | object | | 92 | | type | string | | 93 | | excerpt | string | | 94 | | title | string | | 95 | | link | string | | 96 | | highlights | array | | 97 | | reminder | object | | 98 | 99 | {% tabs %} 100 | {% tab title="200 " %} 101 | ```javascript 102 | { 103 | "result": true, 104 | "item": { 105 | ... 106 | } 107 | } 108 | ``` 109 | {% endtab %} 110 | {% endtabs %} 111 | 112 | ## Remove raindrop 113 | 114 | `DELETE` `https://api.raindrop.io/rest/v1/raindrop/{id}` 115 | 116 | When you remove raindrop it will be moved to user `Trash` collection. But if you try to remove raindrop from `Trash`, it will be removed permanently. 117 | 118 | #### Path Parameters 119 | 120 | | Name | Type | Description | 121 | | ------------------------------------ | ------ | -------------------- | 122 | | id\* | number | Existing raindrop ID | 123 | 124 | {% tabs %} 125 | {% tab title="200 " %} 126 | ```javascript 127 | { 128 | "result": true 129 | } 130 | ``` 131 | {% endtab %} 132 | {% endtabs %} 133 | 134 | ## Upload file 135 | 136 | `PUT` `https://api.raindrop.io/rest/v1/raindrop/file` 137 | 138 | Make sure to send PUT request with [multipart/form-data](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST#example) body 139 | 140 | #### Headers 141 | 142 | | Name | Type | Description | 143 | | ---------------------------------------------- | ------ | ------------------- | 144 | | Content-Type\* | string | multipart/form-data | 145 | 146 | #### Request Body 147 | 148 | | Name | Type | Description | 149 | | -------------------------------------- | ------ | ------------- | 150 | | file\* | object | File | 151 | | collectionId | String | Collection Id | 152 | 153 | {% tabs %} 154 | {% tab title="200 " %} 155 | ```javascript 156 | { 157 | "result": true, 158 | "item": { 159 | "title": "File name", 160 | "type": "image", 161 | "link": "https://up.raindrop.io/raindrop/111/file.jpeg", 162 | "domain": "raindrop.io", 163 | "file": { 164 | "name": "File name.jpeg", 165 | "size": 10000 166 | } 167 | ... 168 | } 169 | } 170 | ``` 171 | {% endtab %} 172 | 173 | {% tab title="400 " %} 174 | ```javascript 175 | //file is not specified 176 | { 177 | "result": false, 178 | "error": -1, 179 | "errorMessage": "no file" 180 | } 181 | 182 | //unsupported file format 183 | { 184 | "result": false, 185 | "error": "file_invalid", 186 | "errorMessage": "File is invalid" 187 | } 188 | 189 | //file size is big 190 | { 191 | "result": false, 192 | "error": "file_size_limit", 193 | "errorMessage": "File size limit" 194 | } 195 | ``` 196 | {% endtab %} 197 | {% endtabs %} 198 | 199 | ## Upload cover 200 | 201 | `PUT` `https://api.raindrop.io/rest/v1/raindrop/{id}/cover` 202 | 203 | PNG, GIF or JPEG 204 | 205 | #### Path Parameters 206 | 207 | | Name | Type | Description | 208 | | ------------------------------------ | ------ | -------------------- | 209 | | id\* | number | Existing raindrop ID | 210 | 211 | #### Headers 212 | 213 | | Name | Type | Description | 214 | | ---------------------------------------------- | ------ | ------------------- | 215 | | Content-Type\* | string | multipart/form-data | 216 | 217 | #### Request Body 218 | 219 | | Name | Type | Description | 220 | | --------------------------------------- | ------ | ----------- | 221 | | cover\* | object | File | 222 | 223 | {% tabs %} 224 | {% tab title="200 " %} 225 | ```javascript 226 | { 227 | "result": true, 228 | "item": { 229 | "cover": "https://up.raindrop.io/raindrop/...", 230 | "media": [ 231 | { 232 | "link": "https://up.raindrop.io/raindrop/..." 233 | } 234 | ] 235 | ... 236 | } 237 | } 238 | ``` 239 | {% endtab %} 240 | 241 | {% tab title="400 " %} 242 | ```javascript 243 | //file is not specified 244 | { 245 | "result": false, 246 | "error": -1, 247 | "errorMessage": "no file" 248 | } 249 | 250 | //unsupported file format 251 | { 252 | "result": false, 253 | "error": "file_invalid", 254 | "errorMessage": "File is invalid" 255 | } 256 | 257 | //file size is big 258 | { 259 | "result": false, 260 | "error": "file_size_limit", 261 | "errorMessage": "File size limit" 262 | } 263 | ``` 264 | {% endtab %} 265 | {% endtabs %} 266 | 267 | ## Get permanent copy 268 | 269 | `GET` `https://api.raindrop.io/rest/v1/raindrop/{id}/cache` 270 | 271 | Links permanently saved with all content (only in PRO plan). Using this method you can navigate to this copy. 272 | 273 | #### Path Parameters 274 | 275 | | Name | Type | Description | 276 | | ------------------------------------ | ------ | -------------------- | 277 | | id\* | number | Existing raindrop ID | 278 | 279 | {% tabs %} 280 | {% tab title="307 " %} 281 | ```http 282 | Location: https://s3.aws... 283 | ``` 284 | {% endtab %} 285 | {% endtabs %} 286 | 287 | ## Suggest collection and tags for new bookmark 288 | 289 | `POST` `https://api.raindrop.io/rest/v1/raindrop/suggest` 290 | 291 | #### Request Body 292 | 293 | | Name | Type | Description | 294 | | -------------------------------------- | ------ | ----------- | 295 | | link\* | string | | 296 | 297 | {% tabs %} 298 | {% tab title="200 " %} 299 | ```json 300 | { 301 | "result": true, 302 | "item": { 303 | "collections": [ 304 | { 305 | "$id": 568368 306 | }, 307 | { 308 | "$id": 8519567 309 | }, 310 | { 311 | "$id": 1385626 312 | }, 313 | { 314 | "$id": 8379661 315 | }, 316 | { 317 | "$id": 20865985 318 | } 319 | ], 320 | "tags": [ 321 | "fonts", 322 | "free", 323 | "engineering", 324 | "icons", 325 | "invalid_parser" 326 | ] 327 | } 328 | } 329 | ``` 330 | {% endtab %} 331 | {% endtabs %} 332 | 333 | ## Suggest collection and tags for existing bookmark 334 | 335 | `GET` `https://api.raindrop.io/rest/v1/raindrop/{id}/suggest` 336 | 337 | #### Path Parameters 338 | 339 | | Name | Type | Description | 340 | | ---------------------------------- | ------ | ----------- | 341 | | \* | String | Bookmark id | 342 | 343 | {% tabs %} 344 | {% tab title="200 " %} 345 | ```json 346 | { 347 | "result": true, 348 | "item": { 349 | "collections": [ 350 | { 351 | "$id": 568368 352 | }, 353 | { 354 | "$id": 8519567 355 | }, 356 | { 357 | "$id": 1385626 358 | }, 359 | { 360 | "$id": 8379661 361 | }, 362 | { 363 | "$id": 20865985 364 | } 365 | ], 366 | "tags": [ 367 | "fonts", 368 | "free", 369 | "engineering", 370 | "icons", 371 | "invalid_parser" 372 | ] 373 | } 374 | } 375 | ``` 376 | {% endtab %} 377 | {% endtabs %} 378 | -------------------------------------------------------------------------------- /v1/tags.md: -------------------------------------------------------------------------------- 1 | # Tags 2 | 3 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/tags/{collectionId}" method="get" summary="Get tags" %} 4 | {% swagger-description %} 5 | 6 | {% endswagger-description %} 7 | 8 | {% swagger-parameter in="path" name="collectionId" type="number" %} 9 | Optional collection ID, when not specified all tags from all collections will be retrieved 10 | {% endswagger-parameter %} 11 | 12 | {% swagger-response status="200" description="" %} 13 | ```javascript 14 | { 15 | "result": true, 16 | "items": [ 17 | { 18 | "_id": "api", 19 | "count": 100 20 | } 21 | ] 22 | } 23 | ``` 24 | {% endswagger-response %} 25 | {% endswagger %} 26 | 27 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/tags/{collectionId}" method="put" summary="Rename tag" %} 28 | {% swagger-description %} 29 | 30 | {% endswagger-description %} 31 | 32 | {% swagger-parameter in="path" name="collectionId" type="number" %} 33 | It's possible to restrict rename action to just one collection. It's optional 34 | {% endswagger-parameter %} 35 | 36 | {% swagger-parameter in="body" name="replace" type="string" %} 37 | New name 38 | {% endswagger-parameter %} 39 | 40 | {% swagger-parameter in="body" name="tags" type="array" %} 41 | Specify 42 | 43 | **array** 44 | 45 | with 46 | 47 | **only one** 48 | 49 | string (name of a tag) 50 | {% endswagger-parameter %} 51 | 52 | {% swagger-response status="200" description="" %} 53 | ```javascript 54 | { 55 | "result": true 56 | } 57 | ``` 58 | {% endswagger-response %} 59 | {% endswagger %} 60 | 61 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/tags/{collectionId}" method="put" summary="Merge tags" %} 62 | {% swagger-description %} 63 | Basically this action rename bunch of 64 | 65 | `tags` 66 | 67 | to new name ( 68 | 69 | `replace` 70 | 71 | field) 72 | {% endswagger-description %} 73 | 74 | {% swagger-parameter in="path" name="collectionId" type="string" %} 75 | It's possible to restrict merge action to just one collection. It's optional 76 | {% endswagger-parameter %} 77 | 78 | {% swagger-parameter in="body" name="replace" type="string" %} 79 | New name 80 | {% endswagger-parameter %} 81 | 82 | {% swagger-parameter in="body" name="tags" type="array" %} 83 | List of tags 84 | {% endswagger-parameter %} 85 | 86 | {% swagger-response status="200" description="" %} 87 | ```javascript 88 | { 89 | "result": true 90 | } 91 | ``` 92 | {% endswagger-response %} 93 | {% endswagger %} 94 | 95 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/tags/{collectionId}" method="delete" summary="Remove tag(s)" %} 96 | {% swagger-description %} 97 | 98 | {% endswagger-description %} 99 | 100 | {% swagger-parameter in="path" name="collectionId" type="string" %} 101 | It's possible to restrict remove action to just one collection. It's optional 102 | {% endswagger-parameter %} 103 | 104 | {% swagger-parameter in="body" name="tags" type="array" %} 105 | List of tags 106 | {% endswagger-parameter %} 107 | 108 | {% swagger-response status="200" description="" %} 109 | ```javascript 110 | { 111 | "result": true 112 | } 113 | ``` 114 | {% endswagger-response %} 115 | {% endswagger %} 116 | -------------------------------------------------------------------------------- /v1/user/README.md: -------------------------------------------------------------------------------- 1 | # User 2 | 3 | ### Main fields 4 | 5 | | Field | Publicly visible | Type | Description | 6 | | :--- | :--- | :--- | :--- | 7 | | \_id | **Yes** | `Integer` | Unique user ID | 8 | | config | No | `Object` | More details in "Config fields" | 9 | | email | No | `String` | Only visible for you | 10 | | email\_MD5 | **Yes** | `String` | MD5 hash of email. Useful for using with Gravatar for example | 11 | | files.used | No | `Integer` | How much space used for files this month | 12 | | files.size | No | `Integer` | Total space for file uploads | 13 | | files.lastCheckPoint | No | `String` | When space for file uploads is reseted last time | 14 | | fullName | **Yes** | `String` | Full name, max 1000 chars | 15 | | groups | No | `Array` | More details below in "Groups" | 16 | | password | No | `Boolean` | Does user have a password | 17 | | pro | **Yes** | `Boolean` | PRO subscription | 18 | | proExpire | No | `String` | When PRO subscription will expire | 19 | | registered | No | `String` | Registration date | 20 | 21 | ### Config fields 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 38 | 43 | 44 | 45 | 46 | 47 | 49 | 50 | 51 | 52 | 53 | 54 | 56 | 57 | 58 | 59 | 60 | 61 | 63 | 64 | 65 | 66 | 67 | 68 | 70 | 71 | 72 | 73 | 74 | 75 | 77 | 82 | 83 | 84 | 85 | 86 | 88 | 93 | 94 | 95 |
FieldPublicly visibleTypeDescription
config.broken_levelNoString 37 | 39 |

Broken links finder configuration, possible values:

40 |

basic default strict or off 41 |

42 |
config.font_colorNoString 48 | Bookmark preview style: sunset night or empty
config.font_sizeNoInteger 55 | Bookmark preview font size: from 0 to 9
config.langNoString 62 | UI language in 2 char code
config.last_collectionNoInteger 69 | Last viewed collection ID
config.raindrops_sortNoString 76 | 78 |

Default bookmark sort:

79 |

title -title -sort domain -domain +lastUpdate or -lastUpdate 80 |

81 |
config.raindrops_viewNoString 87 | 89 |

Default bookmark view:

90 |

grid list simple or masonry 91 |

92 |
96 | 97 | ### Groups object fields 98 | 99 | | Field | Type | Description | 100 | | :--- | :--- | :--- | 101 | | title | `String` | Name of group | 102 | | hidden | `Boolean` | Does group is collapsed | 103 | | sort | `Integer` | Ascending order position | 104 | | collections | `Array` | Collection ID's in order | 105 | 106 | ### Other fields 107 | 108 | | Field | Publicly visible | Type | Description | 109 | | :--- | :--- | :--- | :--- | 110 | | facebook.enabled | No | `Boolean` | Does Facebook account is linked | 111 | | twitter.enabled | No | `Boolean` | Does Twitter account is linked | 112 | | vkontakte.enabled | No | `Boolean` | Does Vkontakte account is linked | 113 | | google.enabled | No | `Boolean` | Does Google account is linked | 114 | | dropbox.enabled | No | `Boolean` | Does Dropbox backup is enabled | 115 | | gdrive.enabled | No | `Boolean` | Does Google Drive backup is enabled | 116 | 117 | {% hint style="warning" %} 118 | Our API response could contain **other fields**, not described above. It's **unsafe to use** them in your integration! They could be removed or renamed at any time. 119 | {% endhint %} 120 | 121 | -------------------------------------------------------------------------------- /v1/user/authenticated.md: -------------------------------------------------------------------------------- 1 | # Authenticated user 2 | 3 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/user" method="get" summary="Get user" %} 4 | {% swagger-description %} 5 | Get currently authenticated user details 6 | {% endswagger-description %} 7 | 8 | {% swagger-response status="200" description="" %} 9 | ```javascript 10 | { 11 | "result": true, 12 | "user": { 13 | "_id": 32, 14 | "config": { 15 | "broken_level": "strict", 16 | "font_color": "", 17 | "font_size": 0, 18 | "lang": "ru_RU", 19 | "last_collection": 8492393, 20 | "raindrops_sort": "-lastUpdate", 21 | "raindrops_view": "list" 22 | }, 23 | "dropbox": { 24 | "enabled": true 25 | }, 26 | "email": "some@email.com", 27 | "email_MD5": "13a0a20681d8781912e5314150694bf7", 28 | "files": { 29 | "used": 6766094, 30 | "size": 10000000000, 31 | "lastCheckPoint": "2020-01-26T23:53:19.676Z" 32 | }, 33 | "fullName": "Mussabekov Rustem", 34 | "gdrive": { 35 | "enabled": true 36 | }, 37 | "groups": [ 38 | { 39 | "title": "My Collections", 40 | "hidden": false, 41 | "sort": 0, 42 | "collections": [ 43 | 8364483, 44 | 8364403, 45 | 66 46 | ] 47 | } 48 | ], 49 | "password": true, 50 | "pro": true, 51 | "proExpire": "2028-09-27T22:00:00.000Z", 52 | "registered": "2014-09-30T07:51:15.406Z" 53 | } 54 | } 55 | ``` 56 | {% endswagger-response %} 57 | 58 | {% swagger-response status="401" description="" %} 59 | ```http 60 | Unauthorized 61 | ``` 62 | {% endswagger-response %} 63 | {% endswagger %} 64 | 65 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/user/{name}" method="get" summary="Get user by name" %} 66 | {% swagger-description %} 67 | Get's publicly available user details 68 | {% endswagger-description %} 69 | 70 | {% swagger-parameter in="path" name="name" type="number" required="true" %} 71 | Username 72 | {% endswagger-parameter %} 73 | 74 | {% swagger-response status="200" description="" %} 75 | ```javascript 76 | { 77 | "result": true, 78 | "user": { 79 | "_id": 32, 80 | "email_MD5": "13a0a20681d8781912e5314150694bf7", 81 | "fullName": "Mussabekov Rustem", 82 | "pro": true, 83 | "registered": "2014-09-30T07:51:15.406Z" 84 | } 85 | } 86 | ``` 87 | {% endswagger-response %} 88 | 89 | {% swagger-response status="404" description="" %} 90 | ```javascript 91 | { 92 | "error": -1, 93 | "errorMessage": "not found", 94 | "result": false 95 | } 96 | ``` 97 | {% endswagger-response %} 98 | {% endswagger %} 99 | 100 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/user" method="put" summary="Update user" %} 101 | {% swagger-description %} 102 | To change email, config, password, etc... you can do it from single endpoint 103 | {% endswagger-description %} 104 | 105 | {% swagger-parameter in="body" name="groups" type="array" %} 106 | 107 | {% endswagger-parameter %} 108 | 109 | {% swagger-parameter in="body" name="config" type="object" %} 110 | 111 | {% endswagger-parameter %} 112 | 113 | {% swagger-parameter in="body" name="newpassword" type="string" %} 114 | 115 | {% endswagger-parameter %} 116 | 117 | {% swagger-parameter in="body" name="oldpassword" type="string" %} 118 | 119 | {% endswagger-parameter %} 120 | 121 | {% swagger-parameter in="body" name="fullName" type="string" %} 122 | 123 | {% endswagger-parameter %} 124 | 125 | {% swagger-parameter in="body" name="email" type="string" %} 126 | 127 | {% endswagger-parameter %} 128 | 129 | {% swagger-response status="200" description="" %} 130 | ```javascript 131 | { 132 | "result": true, 133 | "user": { 134 | ... 135 | } 136 | } 137 | ``` 138 | {% endswagger-response %} 139 | 140 | {% swagger-response status="400" description="" %} 141 | ```javascript 142 | //email specified but empty 143 | { 144 | "result": false, 145 | "error": 1, 146 | "errorMessage": "email required" 147 | } 148 | 149 | //fullName specified but empty 150 | { 151 | "result": false, 152 | "error": 2, 153 | "errorMessage": "User validation failed: fullName: is required" 154 | } 155 | 156 | //newpassword specified, but oldpassword is empty 157 | { 158 | "result": false, 159 | "error": 3, 160 | "errorMessage": "oldpassword incorrect" 161 | } 162 | 163 | //incorrect config key value 164 | { 165 | "result": false, 166 | "error": "config.raindrops_sort", 167 | "errorMessage": "User validation failed: config.raindrops_sort: `1` is not a valid enum value for path `raindrops_sort`., config: Validation failed: raindrops_sort: `1` is not a valid enum value for path `raindrops_sort`." 168 | } 169 | ``` 170 | {% endswagger-response %} 171 | {% endswagger %} 172 | 173 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/user/connect/{provider}" method="get" summary="Connect social network account" %} 174 | {% swagger-description %} 175 | Connect social network account as sign in authentication option 176 | {% endswagger-description %} 177 | 178 | {% swagger-parameter in="path" name="provider" type="string" %} 179 | `facebook` `google` `twitter` `vkontakte` `dropbox` or `gdrive` 180 | {% endswagger-parameter %} 181 | 182 | {% swagger-response status="307" description="" %} 183 | ```http 184 | Location: https://some.com/... 185 | ``` 186 | {% endswagger-response %} 187 | {% endswagger %} 188 | 189 | {% swagger baseUrl="https://api.raindrop.io" path="/rest/v1/user/connect/{provider}/revoke" method="get" summary="Disconnect social network account" %} 190 | {% swagger-description %} 191 | Disconnect social network account from available authentication options 192 | {% endswagger-description %} 193 | 194 | {% swagger-parameter in="path" name="provider" type="string" %} 195 | `facebook` `google` `twitter` `vkontakte` `dropbox` or `gdrive` 196 | {% endswagger-parameter %} 197 | 198 | {% swagger-response status="200" description="" %} 199 | ``` 200 | ``` 201 | {% endswagger-response %} 202 | {% endswagger %} 203 | --------------------------------------------------------------------------------