Concepts
Five ideas explain almost everything about how NEXORA is built. Understanding them tells you why the API and console behave the way they do.
Organisations, not individual accounts
Products, API keys and billing all belong to an organisation, never to a person directly. A person can belong to more than one organisation and switches between them explicitly. This is why creating an API key in the console asks you to pick an organisation first — the key inherits that organisation’s scope for its entire lifetime.
The Product Registry
Every NEXORA product — regardless of whether it has shipped any code yet — is one record in a single registry. The website’s homepage, the /products page, the console’s product tiles, the sitemap and the API’s product endpoints all read the same records. A product’s lifecycle field — concept, alpha, beta, production — controls where it appears: only beta and later show up publicly.
Machine identity is separate from user identity
Signing in to the console proves who you are, via session cookies. Calling the API proves what organisation is calling, via an API key — a long-lived secret, generated once, hashed at rest, and never tied to a specific person’s session. Revoking your own console session does not revoke your organisation’s API keys, and vice versa.
The Marketplace taxonomy
A Product is one specific thing: a full NEXORA app with a subdomain, a lifecycle and a Tenant Contract to satisfy. Not everything worth listing is that heavy — an API surface, an integration with an external provider, or eventually an agent, model or tool doesn’t need its own subdomain to be real. The marketplace lists both: Products under “Apps”, and everything else as a MarketplaceListing with a kind of api, agent, model, integration or tool. A kind with nothing in it yet is shown as an honest empty state, not hidden — adding the first real listing in it is a data change, not a schema rewrite.
Everything is versioned and reversible
The API is versioned in the URL (/v1/...). A breaking change ships as /v2 with a stated deprecation window for /v1 — existing integrations are never broken without warning.