Overview/OpenAPI/Quickstart

Quickstart

Authenticate, make a first creation, and retrieve its outputs.

Quickstart

This walkthrough creates a minimal Explainer Video. The production base URL is:

https://api.kpainter.ai/openapi/v1

1. Prepare an API Key

Activate and copy your key from the API Key page, then keep it in a server-side environment variable. Never ship it in browser code or logs.

export KPAINTER_API_KEY="<your_api_key>"export KPAINTER_BASE_URL="https://api.kpainter.ai/openapi/v1"

2. Verify the Account

curl -s "$KPAINTER_BASE_URL/me" \  -H "Authorization: Bearer $KPAINTER_API_KEY"

3. Read Current Capabilities

curl -s "$KPAINTER_BASE_URL/capabilities" \  -H "Authorization: Bearer $KPAINTER_API_KEY"

Choose duration, voice, template, and expression style from this response. Do not treat example values as permanent configuration.

4. Create Content

curl -s "$KPAINTER_BASE_URL/creations" \  -H "Authorization: Bearer $KPAINTER_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "type": "video",    "prompt": "Explain the customer escalation process to new employees",    "instructions": "Use a concise professional tone and preserve source terminology",    "max_credits": 300,    "video": {      "duration_seconds": 120,      "aspect_ratio": "16:9",      "language": "en"    }  }'

5. Poll Progress

Creation and editing are asynchronous. Keep the returned creation id and poll the same result.

import time while True:    response = requests.get(        f"{BASE_URL}/creations/{creation_id}",        headers=HEADERS,        timeout=30,    )    response.raise_for_status()    creation = response.json()     print(        creation["status"],        creation["progress_pct"],        creation.get("estimated_remaining_seconds"),        creation.get("estimated_credits"),    )     if creation["status"] in {"ready", "failed", "paused"}:        break     time.sleep(5)

6. Read Outputs

Read outputs only when status is ready or has_usable_delivery is true:

outputs = requests.get(    f"{BASE_URL}/creations/{creation_id}/outputs",    headers=HEADERS,    timeout=30,)outputs.raise_for_status()print(outputs.json()["outputs"])

Treat returned URLs as authoritative. Do not construct storage paths.

Add Source Files

Upload each source with POST /files, then include its file_id in input_file_ids. All three products accept uploaded files. See Create and retrieve for an example.