# Kling O1 Reference Video — API Reference Model ID: `model_kling-o1-video-reference` --- ## Authentication Scenario API uses HTTP Basic Auth. Encode your credentials in Base64 and pass them as the `Authorization` header. ``` Authorization: Basic base64(":") ``` - **API_KEY** and **API_SECRET** are found in your [Scenario Project Settings](https://app.scenario.com/team&tab=project_api_keys) under API Keys. - In shell: `$(echo -n ':' | base64)` - In JavaScript: `btoa(":")` - In Python: `base64.b64encode(f"{api_key}:{api_secret}".encode()).decode()` --- ## Generate **Endpoint:** `POST https://api.cloud.scenario.com/v1/generate/custom/model_kling-o1-video-reference` ### Parameters | Parameter | Type | Required | Default | Description | |-----------|------|----------|---------|-------------| | `prompt` | string | yes | - | Use @Element1, @Element2 to reference elements and @Image1, @Image2 to reference images in order. | | `duration` | string | - | `5` | The duration of the generated video in seconds. | | `aspectRatio` | string | - | `auto` | The aspect ratio of the generated video frame. If 'auto', the aspect ratio will be determined automatically based on the input video, and the closest aspect ratio to the it will be used. | | `keepAudio` | boolean | - | `true` | Keep the original audio of the reference video. | | `elements` | object[] | - | - | Elements (characters/objects) to include. Reference in prompt as @Element1, @Element2, etc. Maximum 4 total (elements + reference images) when using video. | ### Example Requests **cURL** ```bash curl -X POST "https://api.cloud.scenario.com/v1/generate/custom/model_kling-o1-video-reference" \ -H "Authorization: Basic $(echo -n ':' | base64)" \ -H "Content-Type: application/json" \ --data-binary @- <<'EOF' { "prompt": "A fantasy landscape", "duration": "5", "aspectRatio": "auto", "keepAudio": true } EOF ``` **Python** ```python import requests import base64 api_key = "" api_secret = "" token = base64.b64encode(f"{api_key}:{api_secret}".encode()).decode() url = "https://api.cloud.scenario.com/v1/generate/custom/model_kling-o1-video-reference" headers = { "Authorization": f"Basic {token}", "Content-Type": "application/json" } payload = { "prompt": "A fantasy landscape", "duration": "5", "aspectRatio": "auto", "keepAudio": True } response = requests.post(url, headers=headers, json=payload) print(response.json()) ``` **JavaScript** ```javascript const token = btoa(":"); const body = { "prompt": "A fantasy landscape", "duration": "5", "aspectRatio": "auto", "keepAudio": true }; const response = await fetch( "https://api.cloud.scenario.com/v1/generate/custom/model_kling-o1-video-reference", { method: "POST", headers: { "Authorization": `Basic ${token}`, "Content-Type": "application/json", }, body: JSON.stringify(body), } ); const data = await response.json(); console.log(data); ``` --- ## Retrieve Results After submitting a generation request, you receive a `jobId`. Poll the job status endpoint until the job completes. **Endpoint:** `GET https://api.cloud.scenario.com/v1/jobs/{jobId}` **Headers:** ``` Authorization: Basic base64(":") ``` Poll until `job.status` is `"success"`. The generated asset IDs are in `job.metadata.assetIds`. **Example response:** ```json { "job": { "jobId": "job_abc123", "status": "success", "metadata": { "assetIds": [ "asset_abc123" ] } } } ``` > **Important:** Generated asset URLs are **temporary** and expire after a short period. Download and store any images you wish to keep before the URL expires. More info: [Content Delivery Network (CDN)](https://docs.scenario.com/docs/content-delivery-network-cdn). --- *Generated by [Scenario](https://app.scenario.com)*