Getting started
Base URL, get an API key, your first call, and the machine-discovery surface.
Base URL
All requests go to the versioned gateway under your Norano origin:
https://norano.ai/api/v1The /v1 major never breaks within the major version. Deprecations are announced with Deprecation + Sunset headers and a window.
Get an API key
API keys are decoupled from the browser/Clerk session. A key looks like norano_sk_live_… (live) or norano_sk_test_… (test mode).
Your first call
Send the key as a bearer token:
GET /api/v1/projects
Authorization: Bearer norano_sk_live_…{ "object": "list", "data": [], "has_more": false, "url": "/api/v1/projects" }Single objects are returned bare with an object discriminator; lists are wrapped with cursor pagination (limit, starting_after/ending_before, has_more, next_cursor). Every response echoes a Request-Id header.
The machine-discovery surface
An agent with only the base URL can bootstrap from these (all public, no key):
GET /api/v1/openapi.json— the OpenAPI 3.1 document. SendAccept: text/markdown(or use/api/v1/openapi.md) for Markdown.GET /llms.txt— a curated, LLM-oriented map of the API.GET /llms-full.txt— the whole-corpus blob (map + error catalog + enums + the full OpenAPI JSON) for a single-shot context load.GET /.well-known/oauth-protected-resourceand the MCP manifest — advertise the MCP server URL and the auth scheme.
Point an agent at the MCP server
Norano runs a remote MCP server (Streamable HTTP). Add it to any MCP-capable assistant — ChatGPT, Claude, or your own host — with an API key as the bearer token. The server only exposes the tools your key’s scopes allow.
https://mcp.norano.ai/mcpHost config
{
"mcpServers": {
"norano": {
"type": "http",
"url": "https://mcp.norano.ai/mcp",
"headers": {
"Authorization": "Bearer norano_sk_live_…"
}
}
}
}