Documentation

Build on NUCALORIC.

The NUCALORIC API is OpenAI-compatible. If your code already talks to the Chat Completions API, change the base URL and the key.

Quickstart

  1. Create an account. It starts with $0.50 of credit.
  2. Open API keys in the app and create a key. It's shown once; store it as NUCALORIC_API_KEY.
  3. Point any OpenAI SDK at https://YOUR-NUCALORIC-HOST/v1.
pip install openai

from openai import OpenAI
import os

client = OpenAI(base_url="https://YOUR-NUCALORIC-HOST/v1", api_key=os.environ["NUCALORIC_API_KEY"])
r = client.chat.completions.create(
    model="qwen2.5-coder:7b",
    messages=[{"role": "user", "content": "Write a Python function that slugifies a title"}],
)
print(r.choices[0].message.content)
print(r.usage)  # prompt_tokens, completion_tokens, total_tokens, cost_usd

Authentication

Send your key as a bearer token on every request. Keys start with nuc_live_. Only a hash is stored, so a lost key can't be recovered: revoke it and create a new one.

Authorization: Bearer nuc_live_…

Chat completions

POST /v1/chat/completions takes model, messages (system, user and assistant roles), and optionally max_tokens, stream and response_format. If you leave model out, the default general model is used.

curl https://YOUR-NUCALORIC-HOST/v1/chat/completions \
  -H "Authorization: Bearer $NUCALORIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemma4:12b",
    "messages": [
      {"role": "system", "content": "You write release notes."},
      {"role": "user", "content": "Summarize: fixed login bug, added dark mode"}
    ]
  }'

The response has the standard shape, with usage.cost_usd added: the exact amount charged for the call.

Streaming

Set "stream": true to receive server-sent events with chat.completion.chunk objects. The final chunk includes usage, and the stream ends with data: [DONE].

const stream = await client.chat.completions.create({ model: "qwen2.5-coder:7b", messages, stream: true });
for await (const chunk of stream) process.stdout.write(chunk.choices[0]?.delta?.content ?? "");

JSON output

Pass response_format: {"type": "json_object"} to get valid JSON, or {"type": "json_schema", "json_schema": {"schema": {…}}} to constrain output to a schema on open models.

Models

GET /v1/models lists every model available right now, with its price. Open models run on NUCALORIC hardware. Models tagged cloud are free third-party models through OpenRouter, and their providers may log prompts.

ModelBest forInput / 1MOutput / 1M
Loading models…

Errors and limits

StatusMeaning
401Missing, invalid or revoked API key.
402Balance too low. Output is capped to what your balance covers, and a request that can't afford 32 output tokens is refused.
429More than 30 requests a minute, or more than 2 running at once, per account.
503No model is available right now.

Output is limited to 4,096 tokens per request.

Agents

Six agents come with every workspace: Staff Engineer, Product Lead, Support Lead, Growth Marketer, Ops & Finance and Chief of Staff. Start a conversation from a project, and the agent sees that project's purpose, milestone, tasks and docs. Save any reply into the project as a doc.

Plan with AI on a project turns its current milestone into four to eight tasks, using structured JSON output, and adds them to the board.

Hosting

Create a site, then upload a folder (an index.html at the root) or describe the page and let the code model write it. Sites are served at /s/your-site/. Your first 1 site is free; each additional site is $1.50 per 30 days, charged from your balance. Sites are limited to 5 MB and 300 files.

Hosted pages run in a sandbox with an isolated origin, so they can't touch a visitor's NUCALORIC session. As a result, localStorage and cookies aren't available to hosted pages.

Deploy: GitHub, Vercel, Netlify, Pterodactyl

Every site has one source and any number of destinations. NUCALORIC deploys static output: build in CI and point at the output folder, or commit it. Build scripts never run on NUCALORIC servers.

GitHub (source)

In Sites, choose GitHub and enter owner/repo or a github.com URL, plus an optional branch and folder (for example dist). The folder needs an index.html. Public repositories work without a token. For private ones, add a fine-grained token with Contents: read in Connections → GitHub.

Push to deploy: after the first import, the site card shows a payload URL and secret. In GitHub, go to Settings → Webhooks → Add webhook, paste both, set the content type to application/json, and choose push events. Pushes to the tracked branch redeploy automatically, and every request is verified with HMAC-SHA256.

Payload URL   https://YOUR-HOST/api/hooks/github/<site-id>
Content type  application/json
Secret        <from the site card>

Vercel

Create an access token at vercel.com/account/tokens and add it in Connections → Vercel, with a team ID if the project belongs to a team. Publish → Vercel creates a production deployment named nucaloric-<site> and links it on the card.

Netlify

Add a personal access token (User settings → Applications) in Connections → Netlify. The first publish creates a Netlify site; later publishes zip-deploy to the same site.

Pterodactyl

In Connections → Pterodactyl, enter your panel URL, a client API key (Account → API Credentials), the server's short ID (from its URL) and a target folder (for example /www). Publishing writes every file into that folder through the client API. Pair it with a web-server egg, or any server that serves static files.

ZIP and everything else

Download ZIP on any site gives you the exact deployed files: drag them into Cloudflare Pages, or serve them anywhere containers run:

FROM nginx:alpine
COPY . /usr/share/nginx/html

Railway, Render and Fly.io can also build directly from the same GitHub repository.

Terminal

The app's terminal runs workspace commands: help, projects, use <project>, tasks, add <title>, done <n>, plan, sites, balance, models and ai <prompt>, which streams an answer that's billed like any other call.

Billing

Everything draws from one prepaid balance, stored to the micro-dollar. New accounts get $0.50, every account gets $0.10 each calendar month, and credit packs add more by card (Stripe) or USDC (Solana Pay). Billing in the app shows every charge, usage by model, and payments.