Remarkable.Api.Client 0.2.0

dotnet add package Remarkable.Api.Client --version 0.2.0
                    
NuGet\Install-Package Remarkable.Api.Client -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Remarkable.Api.Client" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Remarkable.Api.Client" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Remarkable.Api.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Remarkable.Api.Client --version 0.2.0
                    
#r "nuget: Remarkable.Api.Client, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Remarkable.Api.Client@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Remarkable.Api.Client&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Remarkable.Api.Client&version=0.2.0
                    
Install as a Cake Tool

Remarkable.Api.Client

A small .NET client for the reMarkable cloud. Covers the three operations needed to pair a device and upload a PDF:

  1. Exchange a one-time pairing code for a long-lived device token.
  2. Exchange that device token for a short-lived session token.
  3. Upload a PDF to the user's library root with a chosen display name.

The client is stateless with respect to tokens — each method takes the token it needs as an argument, leaving persistence and refresh policy to the caller.

Install

dotnet add package Remarkable.Api.Client

Targets net10.0.

Usage

using Remarkable.Api.Client;

using var http = new HttpClient();
var client = new RemarkableClient(http);

// 1. Pair. The user gets the 8-character code from
//    https://my.remarkable.com/device/desktop/connect
var deviceToken = await client.PairDeviceAsync(
    code: "ABCD1234",
    deviceDescription: DeviceDescriptions.DesktopMacOs);

// Persist deviceToken — it does not expire.

// 2. Refresh. Session tokens expire after roughly an hour; refresh whenever
//    uploads start returning 401.
var sessionToken = await client.RefreshSessionAsync(deviceToken);

// 3. Upload.
await using var pdf = File.OpenRead("paper.pdf");
var result = await client.UploadPdfAsync(sessionToken, "Interesting paper", pdf);

Console.WriteLine($"Uploaded {result.DocumentId}");

Errors from the cloud surface as RemarkableApiException with the HTTP status code and response body.

Device descriptions

The deviceDescription passed to PairDeviceAsync must match the connect-URL family that produced the one-time code:

Description constant Connect URL family
DeviceDescriptions.DesktopWindows my.remarkable.com/device/desktop/connect
DeviceDescriptions.DesktopMacOs my.remarkable.com/device/desktop/connect
DeviceDescriptions.DesktopLinux my.remarkable.com/device/desktop/connect
DeviceDescriptions.MobileAndroid my.remarkable.com/device/mobile/connect
DeviceDescriptions.MobileIos my.remarkable.com/device/mobile/connect
DeviceDescriptions.BrowserChrome my.remarkable.com/device/browser/connect

Custom hosts

For testing against a mock or self-hosted backend, pass a RemarkableHosts:

var hosts = new RemarkableHosts(
    AuthHost:   new Uri("https://auth.local"),
    UploadHost: new Uri("https://upload.local"));
var client = new RemarkableClient(http, hosts);

Samples

Two CLI samples live under samples/:

  • rmpair — pair a device and print the device token.
  • rmupload — upload a PDF, optionally refreshing the session token first.

Protocol reference

This library is a clean-room implementation of the protocol described in docs/protocol-reference.md, derived from reading the source of the MIT-licensed rmapi-js project.

This library is not affiliated with reMarkable AS.

License

MIT

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 48 5/30/2026