Summary
On the v4 sync API (after the mirror fix from #62 landed in v0.0.34), rmapi get --id <uuid> fails with Error: file doesn't exist for every document, even though:
rmapi stat "<path>" resolves that path to the same UUID, and
rmapi get "<path>" downloads the document fine.
So listing/mirroring works, path-based download works, but ID-based download is broken on v4. The trace shows get --id loads the node with the requested docid into the tree and then fails the local lookup — it never issues a blob request.
This breaks any tool that downloads by document ID (e.g. Scrybble's sync, which fetches by rm_file_id); the only workaround is to download by path.
Version / environment
- rmapi v0.0.34 (latest release)
- reMarkable cloud sync v4 (
GET /sync/v4/root, schemaVersion: 3)
- Auth is fine (mirror,
ls, stat, and path-based get all succeed with the same config)
Reproduction
$ rmapi stat "/Daily Journal/2026-05-31 copy"
{
"ID": "473b7bf1-6a06-44ff-a2da-a343bb36029c",
"Name": "2026-05-31 copy",
"Version": 0,
"Type": "DocumentType"
}
# ID-based download — the same UUID stat just returned:
$ rmapi get --id 473b7bf1-6a06-44ff-a2da-a343bb36029c
ERROR: main.go:86: Error: file doesn't exist # exit 1, nothing downloaded
# Path-based download — same document:
$ rmapi get "/Daily Journal/2026-05-31 copy"
downloading: [/Daily Journal/2026-05-31 copy]...
OK # downloads the .rmdoc
This reproduces for every document in the account — freshly created on the tablet, on-device duplicates, and reMarkable's own shipped "Getting started" notebook alike. All of them currently report Version: 0.
Trace (RMAPI_TRACE=1, auth token redacted)
$ rmapi get --id 473b7bf1-6a06-44ff-a2da-a343bb36029c
request: GET /sync/v4/root HTTP/1.1 # sync v4
HTTP/2.0 200 OK {"hash":"a790186c…","generation":1780251186051790,"schemaVersion":3}
got root gen: 1780251186051790
Writing cache: .../rmapi/tree.cache
...
adding: 2026-05-31 copy docid: 473b7bf1-6a06-44ff-a2da-a343bb36029c # <- node IS loaded with this exact id
...
ERROR: main.go:86: Error: file doesn't exist # <- lookup fails; NO blob GET is ever made
For contrast, rmapi get "<path>" on the same document issues several GET requests (root + content blobs) and writes the file. So the failure is purely in the get --id node lookup against the v4 tree, not the document, the auth, or the network.
Notes
rmapi get --help documents only get <remote_file> — --id isn't listed, so it may simply not have been carried forward to the v4 code path.
- Happy to test patches or provide more traces.
Related: #62 (v4 migration — mirror/rm-filename, fixed in v0.0.34).
Summary
On the v4 sync API (after the mirror fix from #62 landed in v0.0.34),
rmapi get --id <uuid>fails withError: file doesn't existfor every document, even though:rmapi stat "<path>"resolves that path to the same UUID, andrmapi get "<path>"downloads the document fine.So listing/mirroring works, path-based download works, but ID-based download is broken on v4. The trace shows
get --idloads the node with the requested docid into the tree and then fails the local lookup — it never issues a blob request.This breaks any tool that downloads by document ID (e.g. Scrybble's sync, which fetches by
rm_file_id); the only workaround is to download by path.Version / environment
GET /sync/v4/root,schemaVersion: 3)ls,stat, and path-basedgetall succeed with the same config)Reproduction
This reproduces for every document in the account — freshly created on the tablet, on-device duplicates, and reMarkable's own shipped "Getting started" notebook alike. All of them currently report
Version: 0.Trace (
RMAPI_TRACE=1, auth token redacted)For contrast,
rmapi get "<path>"on the same document issues severalGETrequests (root + content blobs) and writes the file. So the failure is purely in theget --idnode lookup against the v4 tree, not the document, the auth, or the network.Notes
rmapi get --helpdocuments onlyget <remote_file>—--idisn't listed, so it may simply not have been carried forward to the v4 code path.Related: #62 (v4 migration — mirror/
rm-filename, fixed in v0.0.34).