Generate Endpoint - VicSee API Video & Image Generation

Create AI videos and images with VicSee's unified generate endpoint. Supports all models including Seedance 2.0, Veo 3.1, FLUX 2, and Nano Banana with async processing.

Create AI-generated content using a unified endpoint. Also available as agent tools via the VicSee MCP Server.

POST /api/v1/generate

Put every generation parameter inside the input object. A fully flat body — model, prompt and the parameters all at the top level, with no input key at all — is also accepted.

Do not mix the two. If input is present and parameters are sent at the top level, those top-level ones cannot be read, so the request is rejected with 422 MIXED_ENVELOPE naming the stray keys. Nothing is generated and no credits are used — fix the body and retry.

Two exceptions: model is always top-level, and prompt is accepted in either place — inside input or at the top level. If you send both, input.prompt wins. If you are building an agent, the simplest way to never think about this is the MCP Server: it takes flat parameters and builds the correct request for you.

Omitted parameters fall back to the model's default, which is not always the cheapest one. MiniMax H3 defaults to 2K, so a 15-second video with no resolution costs 600 credits instead of the 375 it would cost at 768P.

Send resolution and duration explicitly, and read the resolvedParams object returned by both POST /generate and GET /tasks/{id} — it lists the settings that were actually applied, so you never have to infer them from the credit charge.

Request

Headers

HeaderRequiredDescription
AuthorizationYesBearer token with your API key
Content-TypeYesMust be application/json

Body Parameters

ParameterTypeRequiredDescription
modelstringYesThe model to use. Call GET /api/v1/models for available IDs.
promptstringYes*Text description of what to generate. *Optional for upscale and some image-to-video models.
inputobjectYesWrapper holding all generation parameters (see below).

options is accepted as a legacy alias for input. New integrations should use input. Do not send both.

input parameters

Valid values are model-specific. Always check the GET /api/v1/models response for the exact options, requires, and accepts of the model you are calling.

ParameterTypeApplies toDescription
durationnumbervideoVideo length in seconds. Range is model-specific (e.g. Seedance 2 Mini: 4–15).
resolutionstringvideo / imagee.g. 480p, 720p, 1080p for video; 1K, 2K, 4K for image.
aspect_ratiostringmostOutput aspect ratio, e.g. 16:9, 9:16, 1:1.
image_urlsstring[]image-to-video, image-to-imageSource image(s). Each must be a public http(s) URL or a base64 data: URI. Aspect ratio 0.4–2.5 (width÷height), max 36 MP.
reference_image_urlsstring[]reference-to-videoUp to 7 reference images. Refer to them in the prompt as @Image1, @Image2, … Each image: aspect ratio 0.4–2.5 (width÷height), max 36 MP — wide-strip composites are rejected; use a 2×2 grid.
reference_video_urlsstring[]reference-to-videoUp to 3 reference videos (total ≤ 15s). Public http(s) URLs only.
reference_audio_urlsstring[]reference-to-videoUp to 3 reference audio clips (total ≤ 15s). Public http(s) URLs only.
audiobooleanvideoGenerate synchronized native audio (default true where supported).

Example Request — text-to-video

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-mini-text-to-video",
    "prompt": "A timelapse of a flower blooming",
    "input": {
      "duration": 15,
      "resolution": "480p",
      "aspect_ratio": "16:9"
    }
  }'

Example Request — reference-to-video

Pass references in reference_image_urls (and optionally reference_video_urls / reference_audio_urls), then refer to them positionally in the prompt.

curl -X POST https://vicsee.com/api/v1/generate \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seedance-2-mini-reference-to-video",
    "prompt": "@Image1 walking through a neon-lit street at night",
    "input": {
      "duration": 8,
      "resolution": "720p",
      "reference_image_urls": ["https://example.com/character.png"]
    }
  }'

Response

{
  "success": true,
  "data": {
    "id": "task_abc123",
    "model": "seedance-2-mini-text-to-video",
    "status": "processing",
    "creditsUsed": 143,
    "creditsRemaining": 1450,
    "createdAt": "2026-06-25T10:30:00.000Z"
  }
}

Response Fields

FieldTypeDescription
idstringUnique task ID for polling status
modelstringThe model used
statusstringTask status: pending, processing, completed, or failed. The polling endpoint GET /api/v1/tasks/{id} reports completed on success and failed on failure.
creditsUsednumberCredits consumed
creditsRemainingnumberYour remaining balance

Next Steps

  1. Save the id from the response
  2. Poll GET /api/v1/tasks/id for status updates
  3. When status is completed, download your content

Request Errors

These codes are returned by POST /api/v1/generate when a request is rejected before a task is created. They arrive as an HTTP 4xx/5xx response with { "success": false, "error": { "code": ... } }. They are distinct from a task that is created and later fails during processing — that case returns HTTP 200 with status: "failed" (poll GET /api/v1/tasks/{id} for details).

CodeDescription
MISSING_MODELNo model specified
MISSING_PROMPTNo prompt provided
MISSING_IMAGEModel requires image_urls (image-to-video / image-to-image)
MISSING_REFERENCEReference-to-video model requires at least one of reference_image_urls, reference_video_urls, reference_audio_urls
INVALID_INPUT_URLA media input was not a public http(s) URL or base64 data: URI
INVALID_MODELModel does not exist
INVALID_DURATIONduration is out of range or not an allowed value for this model (e.g. Seedance 2.0 accepts 4-15s; Kling 2.6 accepts 5 or 10). The error message lists the allowed values. Returned before any task is created, so no credits are spent.
INSUFFICIENT_CREDITSNot enough credits
RATE_LIMITEDToo many requests