NovaKitv1.0

Credits & Quotas

Understanding the NovaKit credit system, quotas, and usage tracking

Credits & Quotas

NovaKit uses a quota-based system to track and manage API usage. This guide explains how quotas work, how they're structured, and how to monitor your usage.

How Credits Work

1 credit = 1,000 tokens (input + output combined)

Credits are used for chat completions. Your monthly credit allowance determines how many tokens you can use for AI chat.

Quota Limits by Plan

Web App Plans

ResourceFreeProBusiness
Credits100/mo200/mo800/mo
Image generations-150/mo600/mo
Image edits-75/mo300/mo
Video seconds-15 min/mo60 min/mo
STT seconds-60 min/mo300 min/mo
TTS characters-200K/mo800K/mo
Music tracks-20/mo80/mo

CLI Plans (API-only)

ResourceCLI ProCLI Team
Credits2,000/mo10,000/mo
Team members13
All model tiers

Token conversion: 1 credit = 1,000 tokens. A Pro plan with 200 credits gives you 200,000 tokens per month.

Model Tiers

Models are categorized into tiers that affect credit consumption:

Basic Tier (1x multiplier)

  • GPT-4o Mini
  • Claude 3 Haiku
  • Gemini 1.5 Flash
  • Llama 3.1 8B
  • Flux Schnell
  • SD 3.5 Turbo

Standard Tier (1.5-2x multiplier)

  • GPT-4o
  • Claude 3.5 Sonnet
  • Gemini 1.5 Pro
  • Llama 3.1 70B
  • Flux Dev
  • MiniMax Video

Powerful Tier (2-3x multiplier)

  • GPT-4 Turbo
  • Claude 3 Opus
  • o1 Preview
  • Llama 3.1 405B
  • Flux Pro
  • Luma Pro

Checking Your Quota

Via Dashboard

Go to Dashboard → Usage to see:

  • Current credit balance
  • Usage breakdown by bucket
  • Historical usage graphs
  • Upcoming reset date

Via API

curl https://www.novakit.ai/api/v1/quota \
  -H "Authorization: Bearer sk_your_api_key"

Response:

{
  "org_id": "org_abc123",
  "plan": {
    "code": "pro_monthly",
    "name": "Pro Monthly",
    "kind": "recurring",
    "entitled": true,
    "period_end": "2025-02-01T00:00:00Z"
  },
  "quotas": {
    "credits": {
      "remaining": 170,
      "limit": 200,
      "used": 30,
      "usage_percent": 15
    },
    "image_generations": {
      "remaining": 138,
      "limit": 150,
      "used": 12,
      "usage_percent": 8
    },
    "video_seconds": {
      "remaining": 810,
      "limit": 900,
      "used": 90,
      "usage_percent": 10
    },
    "stt_seconds": {
      "remaining": 3240,
      "limit": 3600,
      "used": 360,
      "usage_percent": 10
    }
  }
}

Usage in Responses

Every API response includes usage information:

Chat Completions

{
  "choices": [...],
  "usage": {
    "prompt_tokens": 150,
    "completion_tokens": 200,
    "total_tokens": 350
  },
  "model": "openai/gpt-4o-mini",
  "model_tier": "basic"
}

Tokens are deducted from your credit balance. 1,000 tokens = 1 credit.

Image Generation

{
  "data": [...],
  "usage": {
    "generations_used": 1,
    "generations_remaining": 149
  },
  "model": "fal-ai/flux/dev",
  "model_tier": "standard"
}

Video Generation

{
  "data": {...},
  "usage": {
    "seconds_used": 5,
    "seconds_remaining": 895
  },
  "model": "fal-ai/minimax/video-01",
  "model_tier": "standard"
}

Quota Exceeded Errors

When you exceed a quota, you'll receive a 402 Payment Required response:

{
  "error": "Quota exceeded for image_generations",
  "bucket": "image_generations",
  "remaining": 0,
  "limit": 100,
  "reset_at": "2025-02-01T00:00:00Z"
}

Handling Quota Errors

try {
  const response = await novakit.images.generate({
    prompt: "A sunset",
  });
} catch (error) {
  if (error.status === 402) {
    // Quota exceeded
    console.log(`Quota exceeded for ${error.bucket}`);
    console.log(`Resets at: ${error.reset_at}`);

    // Notify user or upgrade plan
    await notifyUser("quota_exceeded", error.bucket);
  }
}

Top-ups

Purchase additional quota without upgrading your plan:

  1. Go to Dashboard → Billing → Top-up
  2. Select a package or custom amount
  3. Complete payment
  4. Quota is added immediately

Top-up Bundles

BundleContentsPrice
Creator Boost200 credits + 100 images + 200 edits~$15
Media Boost10 min video + 30 min STT + 200K TTS~$17
API Chat Pack (2.5K)2,500 credits$50
API Chat Pack (10K)10,000 credits$200
Video Pack (15 min)15 min video generation$15
Video Pack (60 min)60 min video generation$60
Music Pack (20)20 music tracks$10
Music Pack (80)80 music tracks$40

Per-Unit Pricing

ResourcePrice
Credits$0.02 per credit (1K tokens)
Images$0.10 per image
Image edits$0.05 per edit
Video$1.00 per minute
STT$0.50 per minute
TTS$0.05 per 1K characters
Music$0.50 per track
Agent runs$0.25 per run

Top-ups don't expire at the end of your billing period. They're used after your plan allowance is exhausted.

Quota Reset

  • Monthly plans: Quotas reset on your billing date
  • Annual plans: Quotas reset monthly on your signup date
  • Top-ups: Never expire, used after plan allowance

Monitoring & Alerts

Low Credit Alerts

NovaKit sends notifications when credits are running low:

AlertTrigger
Warning20% remaining
Critical10% remaining
Depleted0% remaining

Configure alerts in Dashboard → Settings → Notifications.

Webhook Events

Subscribe to billing webhooks for programmatic alerts:

// credits.low event
{
  "type": "credits.low",
  "data": {
    "bucketType": "chat_tokens",
    "remaining": 100000,
    "limit": 1000000,
    "percentUsed": 90
  }
}

See Webhooks Guide for setup.

Best Practices

1. Monitor Usage Regularly

Check the dashboard weekly and set up alerts to avoid unexpected cutoffs.

2. Use Appropriate Models

Don't use expensive models for simple tasks:

TaskRecommended ModelWhy
Simple Q&AGPT-4o MiniFast, cheap
Complex reasoningGPT-4oGood balance
Critical tasksClaude 3 OpusBest quality

3. Implement Caching

Cache responses to reduce redundant API calls:

const cache = new Map();

async function getCachedResponse(prompt: string) {
  const key = hashPrompt(prompt);

  if (cache.has(key)) {
    return cache.get(key);
  }

  const response = await novakit.chat.completions.create({
    messages: [{ role: "user", content: prompt }],
  });

  cache.set(key, response);
  return response;
}

4. Batch Operations

Use async mode and batch parameters where available:

// Generate multiple images in one request
const response = await novakit.images.generate({
  prompt: "A sunset",
  n: 4, // Generate 4 images at once
});

5. Set Client-Side Limits

Prevent runaway usage with client-side limits:

const MAX_DAILY_REQUESTS = 1000;
let dailyRequests = 0;

async function makeRequest() {
  if (dailyRequests >= MAX_DAILY_REQUESTS) {
    throw new Error("Daily limit reached");
  }

  dailyRequests++;
  // Make API call...
}

Usage Analytics

View detailed usage analytics in Dashboard → Usage:

  • Usage by Model: See which models consume the most credits
  • Usage by Tool: Breakdown by chat, image, video, etc.
  • Daily Trends: Usage patterns over time
  • Top Users: If using team features, see per-user breakdown

FAQ

Do unused credits roll over?

Plan allowances reset each billing period. Only top-up credits carry over.

What happens when I exceed my quota?

API requests return 402 Payment Required. Services continue working once you top up or the quota resets.

Can I get a refund for unused credits?

Plan credits are use-it-or-lose-it. Top-up credits are non-refundable but never expire.

How are tokens counted?

We use the same tokenization as OpenAI. Roughly 1 token = 4 characters or ~0.75 words.

Do failed requests consume credits?

No. Credits are only consumed for successful completions. Failed requests don't count against your quota.

On this page