Nookara API guide: Python library, raw HTTP, REST reference, realtime, bots and voice

1. Getting Started

Every Nookara-connected project starts the same way: drop in the sign in to Nookara block with a project name and a Permission Integer, which controls exactly which parts of a player's account your project can touch. Use the Permissions Calculator to build one instead of guessing at the bitmask by hand.

Request the minimum you actually need A project that only checks who's logged in needs the default permissions (5) and nothing else. Every extra scope you request is something a player has to trust you with, and something you're responsible for protecting once granted.

Everything below assumes you've already read the API, Extension Scopes & Developer Terms section of the Terms of Service - this page is the practical, "how do I not mess this up" companion to that.

2. Token Security

Once a player signs in, your project holds a session token scoped to exactly the permissions they approved. The extension keeps this internally and uses it to authenticate every request it makes on the player's behalf - you never need to see or touch it directly, except when deliberately persisting it (see below).

The current token reporter block exists for reading that value out - either for debugging, or to save it so a returning player doesn't have to sit through the login popup every single time your project loads.

A leaked token is a leaked account Anyone holding a player's token can act as that player for whatever scopes were granted - read their storage, send instant messages as them, spend their credits, whatever the scope list allows. Treat it with the same seriousness as a password.

Rules for handling tokens

If a token does leak, the affected player can revoke it from their account dashboard's sessions list at any time - encourage players to do this if they suspect anything.

Persisting a token for auto-login

Not making a player log in again every time they open your project is a completely normal, expected thing to build. The login with token [TOKEN] block exists exactly for this: save the value of current token somewhere that lives only on that player's own device, then feed it back into login with token the next time your project starts, instead of opening the login popup again.

The rule is "stays on their device," not "never save it" Local, per-device persistence (a saved project file, a browser-local save feature, whatever your host platform offers) is fine, because it never leaves the player's own machine or becomes visible to anyone else. That's a completely different thing from a cloud variable or a third-party server, both of which hand the token to people who aren't supposed to have it.

A couple of things worth building in regardless: give players an obvious way to log out (which should also clear whatever you saved locally), and remember a saved token can go stale - if login with token fails, just fall back to the normal sign in to Nookara flow.

3. Client-Side Storage

The set storage ID block gives your project's save data a namespace (usually your project's name). Every key/value pair you read or write with get value of key / set key ... in storage lives inside that namespace, scoped to whoever is currently signed in.

This isolation is enforced server-side, not just by convention Storage is keyed by the account making the request, not anything the project sends. Two different players can use the exact same storage ID in the exact same project and never see each other's data - there's no way for your project code to accidentally (or deliberately) read or write another player's storage.

A few practical notes:

4. Anti-Exfiltration Rules

"Exfiltration" here means anything that moves a player's Nookara data - their token, email, storage contents, friends list, whatever a scope exposes - somewhere it shouldn't go: off-platform, into public view, or into another player's hands. This is a Terms of Service violation (see Content Guidelines) as well as a bad practice that gets projects and accounts banned.

Don't Send any Nookara account data (token, email, storage values, friend list, etc.) to a server you don't control, a webhook, a form, or any endpoint outside nookara.cc.
Do Let the Nookara extension make all Nookara-related requests itself. If your project needs its own backend, keep it entirely separate from anything the extension returns.
Don't Use cloud variables, chat blocks, or anything else visible to other players to relay account data you fetched for the current player.
Do Keep fetched account data in local variables/lists that stay inside the current player's own session.
Don't Request scopes you don't use "just in case," or ask for a broader Permission Integer than your project actually needs.
Do Request only what a feature genuinely requires, and mark anything non-essential as optional in the Permissions Calculator so players can decline it.

Scope enforcement happens on Nookara's servers regardless of what your project's code does or doesn't check - a player who declines a scope stays protected even if your project has a bug. But that's a safety net, not permission to skip building things correctly.

5. Media & Public Link Disclosures

The upload image / upload audio / upload video blocks (and profile picture uploads) return a plain public URL once the upload finishes - there is no login or permission check on viewing an uploaded file, only on creating one.

Anyone with the link can view it - forever, until deleted Uploaded media is not private, encrypted, or access-controlled. If your project lets players upload images, audio, or video, they need to know that content becomes a publicly reachable link the moment it's uploaded, not something only they or your project can see.

What your project should tell players

If you need a player to remove something they uploaded, point them to delete instant message/account settings equivalents where available, or have them contact [email protected] for content without an in-project delete option yet.