BETAWe are currently in beta. Should you encounter any issues, please do not hesitate to contact us.
Discount on all models + if you follow us on twitter and hit us on dm you will get free credit to your email hurry up 🔥🔥🔥 click here
GET · /api/v1/models

Discover what your key can call.

Returns the models your key has access to, with the parameter schema for each (so you can build forms / validate inputs without hard-coding) plus the credit cost band. New models you unlock with us appear here without any code change on your side.

Request

GET /api/v1/models HTTP/1.1
Host: getvivix.com
Authorization: Bearer vvx_live_…

Response

HTTP/1.1 200 OK
{
  "tier":            "pro",
  "credits_balance": 12847,
  "rate_limit":      { "calls_per_minute": 240, "concurrent_jobs": 5 },
  "models": [
    {
      "slug":         "grok-imagine-image-quality",
      "name":         "Grok Imagine Image Quality",
      "category":     "image",
      "creator":      "xAI",
      "description":  "Photorealistic 4K stills. Great for product shots, lifestyle scenes, and editorial composition.",
      "params": {
        "prompt":        { "type": "string",  "required": true, "max_length": 2000 },
        "aspect_ratio":  { "type": "enum",    "values": ["1:1","4:5","9:16","16:9"], "default": "1:1" },
        "resolution":    { "type": "enum",    "values": ["1K","2K","4K"], "default": "2K" },
        "number_results":{ "type": "integer", "min": 1, "max": 4, "default": 1 }
      },
      "credits_band": { "min": 80, "max": 211 },
      "example_request": {
        "model": "grok-imagine-image-quality",
        "prompt": "a misty forest at dawn, cinematic 24mm",
        "aspect_ratio": "16:9",
        "resolution": "4K"
      }
    },
    {
      "slug":         "wan-2.7-text-to-video",
      "name":         "Wan 2.7 Text to Video",
      "category":     "video",
      "creator":      "Alibaba",
      "description":  "Text-to-video up to 10 seconds. Best for product demos, B-roll, atmospheric scenes.",
      "params": {
        "prompt":      { "type": "string",  "required": true },
        "duration":    { "type": "integer", "min": 2, "max": 10, "default": 5 },
        "resolution":  { "type": "enum",    "values": ["720p","1080p"], "default": "1080p" },
        "audio":       { "type": "boolean", "default": false }
      },
      "credits_band": { "min": 400, "max": 1440 },
      "example_request": {
        "model": "wan-2.7-text-to-video",
        "prompt": "neon-lit Tokyo street, cinematic",
        "duration": 5
      }
    }
  ]
}
The response is filtered to youraccount's allowlist — two different customers may see different model lists from the same endpoint. Don't cache the response across customers if you're building a multi-tenant tool.

Building UIs against this

The params schema is enough to render a form dynamically. type tells you the input kind (string, integer, enum,boolean); values populates dropdowns;min / max sets number-range bounds;required drives validation.

type ParamSpec =
  | { type: 'string';  required?: boolean; max_length?: number }
  | { type: 'integer'; min?: number; max?: number; default?: number }
  | { type: 'enum';    values: string[]; default?: string }
  | { type: 'boolean'; default?: boolean }

type Model = {
  slug: string
  name: string
  category: 'image' | 'video' | 'audio' | 'text' | 'utility'
  creator: string
  description: string
  params: Record<string, ParamSpec>
  credits_band: { min: number; max: number }
  example_request: Record<string, unknown>
}

const res  = await fetch('https://getvivix.com/api/v1/models', {
  headers: { Authorization: `Bearer ${process.env.VIVIX_KEY}` },
})
const { models } = await res.json() as { models: Model[] }

Errors

  • 401 KEY_INVALID — bad or missing key
  • 403 TIER_LOCKED — Pro/Ultimate only (Free/Standard get 403 here)

Where to next