Skip to content
Andreas Gohr edited this page Jan 31, 2018 · 20 revisions

This is the interesting API. The current endpoint is document-storage-production-dot-remarkable-production.appspot.com, but the Service Discovery should be used to make sure that the right one is used.

All requests should be made with a Bearer authentication header. Input and Output is JSON.

General Item Info

The Storage API uses a JSON object to represent individual file or folder items. These items are passed to and from the calls described below. Not all of the fields are always present or needed.

The items used in the API are similar but not the same as the *.metadata files located on the reMarkable device itself.

{
	"ID": "10280264-2546-4319-a150-0cd02ca69c2d",
	"Version": 2,
	"Message": "",
	"Success": true,
	"BlobURLGet": "",
	"BlobURLGetExpires": "0001-01-01T00:00:00Z",
	"ModifiedClient": "2018-01-24T21:02:59.624624Z",
	"Type": "CollectionType",
	"VissibleName": "Projects",
	"CurrentPage": 0,
	"Bookmarked": false,
	"Parent": "6d6ad886-5d8d-4b3e-aa6f-b05d46d31e83"
}
Field Type Description
ID uuid The unique ID of this object. UUID-4 format. This is always required!
Version integer The item's version counting starts at 1
Message string This is used in API replies to return error messages regarding this item
Success boolean This is used in API replies to signal that an error occurred handling this item (=false)
BlobURLGet string FIXME probably the download URL
BlobURLGetExpires datetime when above URL expires
BlobURLPut string Where the data for the file can be uploaded
BlobURLPutExpires datetime when above URL expires
ModifiedClient datetime The last modified date time as set on the client that created the item
Type type The type of the object. See below for available types
VissibleName string The file's label. Yes, there is a typo in this key.
CurrentPage integer The currently open page, starting at 0
Bookmarked boolean is this bookmarked?
Parent uuid The ID of the parent object or empty if this is a top level object

The Type is sent as string using the following values:

  • DocumentType for Notebooks
  • CollectionType for Folders

datetimes are specified in ISO 8601 format.

Note that all calls accepting items as input, expect an array of items and will alway return a corresponding array of items. However the example PHP implementation will always pass single items (eg. arrays of a single item) to make error handling easier.

Listing Items

GET https://document-storage-production-dot-remarkable-production.appspot.com/document-storage/json/2/docs

The response is a JSON encoded array of items:

[{
	"ID": "10280264-2546-4319-a150-0cd02ca69c2d",
	"Version": 2,
	"Message": "",
	"Success": true,
	"BlobURLGet": "",
	"BlobURLGetExpires": "0001-01-01T00:00:00Z",
	"ModifiedClient": "2018-01-24T21:02:59.624624Z",
	"Type": "CollectionType",
	"VissibleName": "Projects",
	"CurrentPage": 0,
	"Bookmarked": false,
	"Parent": "6d6ad886-5d8d-4b3e-aa6f-b05d46d31e83"
},...]

Note, that the BlobURLGet values are always empty in this call.

Updating Meta-Data

PUT https://document-storage-production-dot-remarkable-production.appspot.com/document-storage/json/2/upload/update-status'

Payload is a JSON array as described under Listing Files. You can use this to 'move' or 'rename' an item. Since an array is passed, it might be possible to change multiple objects at once.

[{
    "Bookmarked": false,
    "ID": "1dd71dfc-a463-4317-9428-ece0bff128b9",
    "ModifiedClient": "2018-01-29T19:18:55.017017Z",
    "Parent": "",
    "Type": "CollectionType",
    "Version": 1,
    "VissibleName": "Folder"
}]

FIXME response?

Adding an Item

To create an item you create a minimal stub of the object first. The ID needs to be generated by yourself (a UUID-4). Since an array is passed, it might be possible to create multiple objects at once.

PUT https://document-storage-production-dot-remarkable-production.appspot.com/document-storage/json/2/upload/request
[{
    "ID": "1dd71dfc-a463-4317-9428-ece0bff128b9",
    "Parent": "",
    "Type": "CollectionType",
    "Version": 1
}]

The response is a typical item. But with the upload URL available.

[{
	"ID": "1dd71dfc-a463-4317-9428-ece0bff128b9",
	"Version": 1,
	"Message": "",
	"Success": true,
	"BlobURLPut": "https://storage.googleapis.com/remarkable-production-document-storage/user-auth0%7C5a68dc51cb30df3877a1d7c4/1dd71dfc-a463-4317-9428-ece0bff128b9?Expires=1517253532\u0026GoogleAccessId=remarkable-production%40appspot.gserviceaccount.com\u0026Signature=RklnAKXYxl6%2FEDXxAj%2B0d8W8IrqymHYeNZoPXEcHTGdjc1F0%2B8jsxsYFC7AVYVYG2yHt3R3ujTaWfaV1fa%2BX1MMjdLEjzsbhDv5F5HW3dJ4OHtllwBMi7HY8pEj%2FIO2c0PkY1vhfNuRriAhhPKVMm3Y17g7vdm%2Bcli90QtIvdh%2FlHfPh8OWhlZ%2BShH5fwEzNH%2Bs5EgUoq2YVqEOzWdPUclSPQGp9PbKQwJuKw7tTynjbfQCV%2FRFrh2zDn%2BK7Pci4CVCMjZCKfFqUThTxVmPEBLHtC%2F2oKWTOL4CQ8FQPtAWIPmL65zm7iGIlmfkTzu9BRpUov86QXds6tpSFSLcAmQ%3D%3D",
	"BlobURLPutExpires": "2018-01-29T19:18:52.854382809Z"
}]

The actual file contents can then be uploaded with a PUT request to the BlobURLPut URL.

After creating a new item, you can rename it as mentioned above.

Deleting an Item

Downloading a File

Clone this wiki locally