Cloud API & Sync
In v2.0 both Nyora SDKs are thin clients over the Nyora cloud helper — no embedded parser engine, no on-device runtime. They call the same REST contract documented below against https://api.nyora.xyz (the kotatsu-parsers engine, ~960 sources). A separate Sync API gives every client — the SDKs, the CLI/TUI, and the native apps — one shared account and library.
Cloud helper REST API
Every endpoint is a plain GET against https://api.nyora.xyz and is
identical across the Python and JavaScript SDKs. Cover and page image
URLs are returned through an /image?u=… proxy on the same host.
| Endpoint | Query | Returns |
|---|---|---|
GET /sources/catalog | — | The full source catalogue (~960 sources). |
GET /sources | — | The currently loaded sources. |
GET /sources/popular | id, page | {entries, hasNextPage} |
GET /sources/latest | id, page | {entries, hasNextPage} |
GET /sources/search | id, q, page | {entries, hasNextPage} |
GET /manga/details | id, url | {manga, chapters} |
GET /manga/pages | id, url | {pages} |
Worked example
Browse a source straight from the cloud with curl — no local server required:
curl "https://api.nyora.xyz/sources/catalog"
curl "https://api.nyora.xyz/sources/popular?id=parser:MANGADEX&page=1"
curl "https://api.nyora.xyz/manga/details?id=parser:MANGADEX&url=/title/abc"
Nyora Sync API
Nyora Sync keeps your library, favourites, history and bookmarks in one account
across every Nyora surface. It is a small OAuth2 + JWT service at
https://sync.nyora.xyz with a single generic,
last-write-wins sync endpoint. The SDKs wrap it as NyoraSync
(Python nyora.sync.NyoraSync, JS NyoraSync from nyora-sdk);
tokens persist to ~/.config/nyora/sync.json.
Endpoint Body Returns POST /auth/register{email, password}access + refresh JWT POST /auth/tokengrant_type=password (form)access + refresh JWT POST /auth/tokengrant_type=refresh_token (form)rotated access + refresh JWT POST /functions/v1/nyora-sync{action, table, …} + Bearerper-user rows
The sync endpoint takes action: "upsert" (rows) or
"select" (optional since watermark) over the per-user tables
nyora_manga, nyora_favourite, nyora_history and
nyora_bookmark. Conflicts resolve last-write-wins on updated_at.
Worked example
# 1. sign in (OAuth2 password grant) → access token
ACCESS=$(curl -s "https://sync.nyora.xyz/auth/token" \
-d grant_type=password -d username=you@example.com -d password=… \
| jq -r .access_token)
# 2. push a favourite, then read the library back
curl "https://sync.nyora.xyz/functions/v1/nyora-sync" -H "Authorization: Bearer $ACCESS" \
-d '{"action":"upsert","table":"nyora_favourite","rows":[…]}'
curl "https://sync.nyora.xyz/functions/v1/nyora-sync" -H "Authorization: Bearer $ACCESS" \
-d '{"action":"select","table":"nyora_favourite"}'
Language guides
For the full typed API surface of each SDK, see the reference docs: