Developers

What actually exists.

Every endpoint below is live on this deployment. Nothing else is promised.

Endpoints

Base URL for this deployment: https://<your-crescent-host>. There is no root /v1 and no public OpenAI-compatible API or developer keys yet — the chat endpoint is a guest-rate-limited relay for the Crescent app.

GET /api/statusGET /api/receipt-keyPOST /api/chat (SSE)
curl https://<your-crescent-host>/api/status
# {"nvidia":false,"preview":true,"signer":true,"local":false,...}  (booleans only)

curl https://<your-crescent-host>/api/receipt-key
# {"configured":true,"alg":"Ed25519","key_id":"crescent-…","public_key_b64":"…"}
curl -N https://<your-crescent-host>/api/chat \
  -H 'Content-Type: application/json' \
  -d '{
    "provider": "nvidia",          // "nvidia" | "preview" | "local"
    "mode": "auto",                // "auto" | "fast" | "deep"
    "system": "Be concise.",
    "max_tokens": 512,             // capped at 4096
    "messages": [{"role":"user","content":"Hello"}]
  }'

# Server-sent events:
# data: {"type":"meta","provider":"nvidia","model":"nvidia/nemotron-3.5-lightning-30b-a3b","reason":"auto: short text → Lightning"}
# data: {"type":"delta","text":"Hi"}
# data: {"type":"done","usage":{…}|null,"receipt":{…}}
# Errors before streaming: 400 invalid body · 409 route unavailable · 413 too large · 429 rate limited

Receipts

Format crescent.receipt/1. The signed bytes are the canonical JSON (recursively sorted keys, no whitespace) of the receipt without signature_b64. request_sha256 commits to model, system, messages (images by their own SHA-256) and max_tokens; response_sha256 commits to the full completion text.

const payload = canonicalize({ ...receipt, signature_b64: undefined });
const key = await crypto.subtle.importKey("raw", b64(receipt.signer.public_key_b64), { name: "Ed25519" }, false, ["verify"]);
const ok  = await crypto.subtle.verify({ name: "Ed25519" }, key, b64(receipt.signature_b64), new TextEncoder().encode(payload));
// Then compare receipt.signer.public_key_b64 with GET /api/receipt-key

Try it on Proof. Cost is always null (“not priced”); usage appears only when the upstream reports it.

Server setup

  • NVIDIA_API_KEY — from build.nvidia.com. Enables Nemotron Super VL and Lightning.
  • CRESCENT_RECEIPT_SIGNING_SEED — configured automatically; derives the stable Ed25519 key.
  • LOCAL_RUNTIME_URL, LOCAL_RUNTIME_MODEL, optional LOCAL_RUNTIME_KEY — your OpenAI-compatible server (e.g. a tunnel to a Hermes or Bolt host).

Hermes Bridge

Hermes Agent is an MIT-licensed Python agent harness — skills, memory, tools and external inference endpoints. It is not a model and not a JavaScript package, and it cannot run inside Crescent's serverless functions. Crescent's “Hermes Companion” is a character profile, not a running Hermes process.

  1. Run Hermes on your own machine or VM (Python), configured to call Nemotron via NVIDIA's API or a local model.
  2. Expose an OpenAI-compatible endpoint from that host behind authentication (e.g. a reverse proxy with a bearer token).
  3. Set LOCAL_RUNTIME_URL / LOCAL_RUNTIME_MODEL / LOCAL_RUNTIME_KEY on Crescent's server. The key stays server-side; the browser never sees it.
  4. Select “Self-hosted” in Chat or Orbit. With privacy mode local-only, Orbit refuses any other route.

Self-hosted Bolt

Bolt 74B-A9B is a downloadable model (~24 GB). Crescent does not assume a hosted ID. Serve it with an OpenAI-compatible runtime on your hardware and point the self-hosted route at it. Labelled “runtime required” until configured.

Roadmap

  • · Developer API keys — hashed server-side, scoped, revocable, with usage caps (requires accounts).
  • · Optional synced history with per-user row-level security.
  • · Attestation field populated only when verifiable hardware attestation exists.
  • · Possible future launchpad — only with audited on-chain contracts. Nothing exists today.