Introduction
The Nova Content API is a simple HTTPS/JSON API. Send a request with your API key and a prompt, and get back generated media. All endpoints are served from your Nova Content domain under /api.
Base URL
loading…
data: URL in the JSON response (not a hosted file link). Decode it client-side or save it to your own storage.Authentication
Authenticate every request with your secret API key in the Authorization header as a Bearer token. Keys start with nc_live_. Keep them secret — anyone with your key can spend your credits.
Authorization: Bearer nc_live_your_secret_key
Don't have a key yet? Create one below (free — you just need a Nova Content account).
Your API keys
Create, copy, and revoke your API keys here. You can have up to 5 active keys.
Loading…
Never run out of credits
Turn on auto-recharge and we'll automatically top up your balance with a credit pack whenever it drops below your chosen threshold — so your API calls never hard-stop mid-integration. We charge the card you save here, and the credits land in your non-expiring pack balance.
Loading…
JavaScript / TypeScript SDK
A zero-dependency SDK that works in Node 18+, Deno, Bun, and the browser. Import it directly from your Nova Content domain — no install step:
Or download nova-content.js and bundle it with your app.
Example
The SDK exposes generateImage, generateVoice, generateMusic, listVoices, and getUsage. Errors throw a NovaContentError with status and body.
Rate limits
Each API key is limited to … requests per minute. Every response includes these headers so you can track your budget:
| Header | Meaning |
|---|---|
| X-RateLimit-Limit | Max requests allowed per minute for your key. |
| X-RateLimit-Remaining | Requests left in the current window. |
| Retry-After | Seconds to wait before retrying (only on a 429 response). |
If you exceed the limit you'll get a 429 Too Many Requests response. Back off for the number of seconds in Retry-After and try again.
Generate image
POST/api/generate/image 5 credits / image
Create an image from a text prompt.
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | required | What to generate. |
| style | string | optional | One of photographic, digital-art, comic-book, anime, 3d-model, cinematic, fantasy-art, neon-punk, isometric. Default photographic. |
| aspectRatio | string | optional | e.g. 1:1, 16:9, 9:16. Default 1:1. |
Example request
Example response
{
"imageUrl": "data:image/png;base64,iVBORw0KGgo…",
"creditsUsed": 5,
"creditsRemaining": 695,
"provider": "stability"
}
Generate voice
POST/api/generate/voice 10 credits min
Convert text to a natural-sounding voiceover. Cost is max(10, ceil(text.length × 0.01)) credits.
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
| text | string | required | The text to speak. |
| voiceId | string | optional | A voice ID from GET /api/generate/voices. Default is "Rachel". |
| stability | number | optional | 0–1. Default 0.45. |
| similarityBoost | number | optional | 0–1. Default 0.82. |
| style | number | optional | 0–1. Default 0.35. |
Example request
Example response
{
"audioUrl": "data:audio/mpeg;base64,SUQzBA…",
"creditsUsed": 10,
"creditsRemaining": 685
}
List available voices: GET/api/generate/voices
Generate music
POST/api/generate/music 15 (clip) / 30 (full)
Generate a music track from a text prompt. There are two tiers: Quick Clip (≤30s, 15 credits) and Full Song (up to 3 min, 30 credits). The tier is auto-derived from durationSec (over 30s ⇒ full) unless you set tier explicitly.
Body parameters
| Field | Type | Required | Description |
|---|---|---|---|
| prompt | string | required | Describe the music (genre, mood, instruments). |
| durationSec | number | optional | Target length in seconds. |
| tier | string | optional | clip or full. Overrides auto-detection. |
| instrumental | boolean | optional | Generate without vocals. |
Example request
Example response
{
"audioUrl": "data:audio/mpeg;base64,SUQzBA…",
"tier": "clip",
"creditsUsed": 15,
"creditsRemaining": 670
}
Errors
The API uses standard HTTP status codes. Error responses are JSON with an error message.
| Status | Meaning |
|---|---|
| 400 | Bad request — a required field is missing or invalid. |
| 401 | Invalid or revoked API key. |
| 402 | Insufficient credits. Response includes credits and required. |
| 429 | Rate limit exceeded. Includes retryAfterSeconds. |
| 503 | A generation provider is temporarily unavailable — retry shortly. |
Usage
Track how many calls each of your keys has made.
Sign in to see your usage.