Skip to content

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.

EndpointQueryReturns
GET /sources/catalogThe full source catalogue (~960 sources).
GET /sourcesThe currently loaded sources.
GET /sources/popularid, page{entries, hasNextPage}
GET /sources/latestid, page{entries, hasNextPage}
GET /sources/searchid, q, page{entries, hasNextPage}
GET /manga/detailsid, url{manga, chapters}
GET /manga/pagesid, 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.

EndpointBodyReturns
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: