Novence

Surface · SDK

Typed clients, same control plane

npm install @novence/sdk or pip install novence. Bootstrap a key, upload a directory, deploy, and poll until live — without assembling the REST loop yourself.

TypeScript

Node 18+. Dual ESM and CommonJS. Typed responses — Project, Deployment, ChecksResults.

npm install @novence/sdk

import { Novence, bootstrapAccount, verifyEmail } from "@novence/sdk";

const { apiKey } = await bootstrapAccount("you@example.com");
await verifyEmail("you@example.com", process.env.VERIFY_CODE!);

const client = new Novence({ apiKey });
const { project, url } = await client.projects.create({ name: "launch" });
await client.files.uploadDir(project.id, "./site");
await client.deployments.create(project.id);
console.log(url); // https://{suffix}.novence.ai

Poll client.deployments.latest until status is live or failed. Defaults to https://api.novence.ai.

Python

Python 3.10+. Standard library only. wait_for_deployment() polls until live.

pip install novence

from novence import Novence, bootstrap_account, verify_email

boot = bootstrap_account("you@example.com")
verify_email("you@example.com", "123456")

client = Novence(api_key=boot["apiKey"])
project = client.create_project("launch")
pid = project["project"]["id"]

client.upload_dir(pid, "./dist")
client.deploy(pid)
print(client.wait_for_deployment(pid)["liveUrl"])

Coverage

AreaTypeScriptPython
Projectsclient.projects.create · list · getcreate_project · list_projects
Uploadclient.files.uploadDirupload_dir · upload_bytes
Deployclient.deployments.create · latestdeploy · wait_for_deployment
Domainsclient.domains.configure · statusconfigure_domain · domain_status
Formsclient.forms.create · listSubmissionscreate_form · list_form_submissions
Billingclient.billing.quotas · checkout · mppUpgradequotas · checkout · mpp_upgrade
AccountbootstrapAccount · verifyEmail · client.accountbootstrap_account · verify_email

Same services as REST at https://api.novence.ai/v1, GraphQL, and MCP. Full contract: OpenAPI.

Which surface

FAQ

Which language should I use?

TypeScript if you are already in Node. Python if your agent or pipeline is Python. Both speak the same control plane as the CLI, REST, GraphQL, and MCP.

Do I still need the CLI?

No. The CLI is the one-command path from a directory to a live URL. Use the SDKs when you want the loop inside your own code — bootstrap, upload, deploy, domains, forms, billing.

Is this a wrapper around curl?

The SDKs are typed clients over the same REST API. TypeScript ships dual ESM and CommonJS with typed responses. Python is 3.10+ with no third-party dependencies. Both default to https://api.novence.ai.

How do I wait for a deploy?

Deploys are asynchronous. TypeScript: poll client.deployments.latest until status is live or failed. Python: wait_for_deployment(project_id) blocks until it settles. Do not poll project.status — that is lifecycle, not deploy state.

Where does the API key go?

Read NOVENCE_API_KEY from the environment. Never put an nv_ key in browser HTML, a URL, or git. Bootstrap helpers email a 6-digit OTP; verify to unlock full Free quotas.

Ship with Novence

Typed clients for the same plane as the CLI. API at https://api.novence.ai.