Pika 2.2 API - AI Video Generation APIs
by Pika Labs
Pika 2.2 API, developers can harness Pika's unique artistic capabilities for generating videos with distinctive visual styles. The API excels at creative video generation, making it popular among artists, content creators, and brands seeking unique video content.

Models Version
Get $5 Free Credit on First Payment
No strings attached — add funds and get $5 bonus instantly
Pika 2.2 Text to Video API Documentation
https://gateway.pixazo.ai/pika-2-2-text-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Pika 2.2 (Text to Video) generate request - Pika 2.2 (Text to Video)
Request Code
POST https://gateway.pixazo.ai/pika-2-2-text-to-video/v1/pika-2-2-text-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"prompt": "A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit"
}
import requests
url = "https://gateway.pixazo.ai/pika-2-2-text-to-video/v1/pika-2-2-text-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"prompt": "A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/pika-2-2-text-to-video/v1/pika-2-2-text-to-video-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
prompt: 'A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/pika-2-2-text-to-video/v1/pika-2-2-text-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"prompt": "A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika 2.2 (Text to Video) generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| prompt | Yes | string | — | — | Text description of the desired video. Be specific for best results. |
| seed | No | integer | — | — | Optional integer to control randomness for reproducible outputs. |
| negative_prompt | No | string | ugly, bad, terrible | — | Text describing undesired elements to avoid. Helps refine output quality. |
| aspect_ratio | No | enum | 16:9 | 16:9, 9:16, 1:1, 4:5, 5:4, 3:2, 2:3 | Video aspect ratio. Allowed values: 16:9, 9:16, 1:1, 4:5, 5:4, 3:2, 2:3. |
| resolution | No | enum | 720p | 720p, 1080p | Output video resolution. Allowed values: 720p, 1080p. |
| duration | No | enum | 5 | 5, 10 | Duration of the generated video in seconds. Allowed values: 5, 10. |
Minimum Request
{
"prompt": "A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit"
}
Full Request (all options)
{
"prompt": "A large elegant white poodle on the deck of a yacht wearing oversized sunglasses, glossy magazine style, slow camera orbit",
"seed": 42,
"negative_prompt": "ugly, bad, terrible",
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 5
}
Response
{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response Fields - Pika 2.2 (Text to Video) generate request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for tracking the video generation request. |
| status | string | Current status of the request (e.g., QUEUED, PROCESSING). |
| polling_url | string | URL to check the status of the request for result retrieval. |
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Pika 2.2 (Text to Video) generate request.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
400 Validation Error
{
"error": "Missing required field: prompt"
}
401 Unauthorized
{
"error": "Invalid or missing subscription key"
}
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field for details |
| ERROR | System error — request was not processed and not charged |
Status Flow
Submit Request → QUEUED → PROCESSING → COMPLETED
↘ FAILED
↘ ERROR
Typical Workflow
- Submit request to /pika-2-2-text-to-video-request endpoint
- Receive response with request_id
- Poll /v2/requests/status/{request_id} every 2–3 seconds
- When status is COMPLETED, use the media_url in response
- Handle FAILED or ERROR statuses by retrying or adjusting prompts
Pika 2.2 (Text to Video) check status - Pika 2.2 (Text to Video)
Request Code
POST https://gateway.pixazo.ai/v2/requests/status/pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
import requests
url = "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/v2/requests/status/pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const headers = {
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
request_id: 'pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika 2.2 (Text to Video) check status
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| request_id | Yes | string | — | — | Unique identifier returned from the initial request to check status. |
Minimum Request
{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Full Request (all options)
{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response
{
"request_id": "pika-2-2-text-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "pika-2-2-text-to-video",
"error": null,
"output": {
"media_url": ["https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/pika-2-2-text-to-video_019dxxxx/output.mp4"],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:45.000Z",
"completed_at": "2026-03-31T10:00:45.000Z"
}
Response Fields - Pika 2.2 (Text to Video) check status
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for tracking the video generation request. |
| status | string | Current status of the request (e.g., COMPLETED, FAILED). |
| model_id | string | Identifier of the model used for generation. |
| error | string/null | Error message if status is FAILED or ERROR; null otherwise. |
| output.media_url | array | Array containing the URL to the generated video file. |
| output.media_type | string | MIME type of the output media (e.g., video/mp4). |
| created_at | string | Timestamp when the request was created. |
| updated_at | string | Timestamp when the request was last updated. |
| completed_at | string | Timestamp when the request was completed. |
Request Headers
| Header | Value |
|---|---|
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Pika 2.2 (Text to Video) check status.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request (invalid request_id) |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found (request_id not found) |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Notes & Tips
- Poll the status endpoint every 2–3 seconds until COMPLETED, FAILED, or ERROR.
- Implement exponential backoff for retry logic on ERROR or 500 responses.
- Use detailed, vivid prompts with style and motion cues (e.g., “slow camera orbit”, “glossy magazine style”).
- Use negative_prompt to exclude unwanted elements like blur, distortion, or artifacts.
- For consistent results across generations, specify a fixed seed value.
- Prefer 1080p resolution for professional use, but use 720p for faster turnaround.
- Video generation typically takes 30–90 seconds depending on complexity and server load.
- Failed requests are not charged; only completed requests incur costs.
Pika 2.2 Text to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| 720p (5 sec) | $0.2 |
| 720p (10 sec) | $0.4 |
| 1080p (5 sec) | $0.45 |
| 1080p (10 sec) | $0.9 |
Pika 2.2 Image to Video API Documentation
https://gateway.pixazo.ai/pika-2-2-image-to-video/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Pika 2.2 (Image to Video) generate request - Pika 2.2 (Image to Video)
Request Code
POST https://gateway.pixazo.ai/pika-2-2-image-to-video/v1/pika-2-2-image-to-video-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_url": "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
"prompt": "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out"
}
import requests
url = "https://gateway.pixazo.ai/pika-2-2-image-to-video/v1/pika-2-2-image-to-video-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_url": "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
"prompt": "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/pika-2-2-image-to-video/v1/pika-2-2-image-to-video-request";
const headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
image_url: "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
prompt: "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/pika-2-2-image-to-video/v1/pika-2-2-image-to-video-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image_url": "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
"prompt": "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika 2.2 (Image to Video) generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_url | Yes | string | — | — | URL of the image to use as the first frame. Must be publicly accessible. |
| prompt | Yes | string | — | — | Text prompt describing the desired motion. Be specific about camera movement, subject action, and environmental details. |
| seed | No | integer | — | — | Seed for reproducibility. Use the same seed to generate identical results from the same input. |
| negative_prompt | No | string | "" | — | A negative prompt to guide the model away from undesired elements. Example: "blurry, low quality, distorted limbs". |
| resolution | No | enum | 720p | — | Output video resolution. Allowed: 720p, 1080p. |
| duration | No | enum | 5 | — | Duration of the generated video in seconds. Allowed: 5, 10. |
Minimum Request
{
"image_url": "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
"prompt": "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out"
}
Full Request (all options)
{
"image_url": "https://example.com/example_inputs/pika/pika_i2v_v22_input.png",
"prompt": "The man and the horse are slowly walking towards the camera, the camera orbits and dolly out",
"seed": 42,
"negative_prompt": "blurry, low quality, distorted limbs",
"resolution": "1080p",
"duration": 5
}
Response
{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response Fields - Pika 2.2 (Image to Video) generate request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the generated request. |
| status | string | Current status of the request (e.g., QUEUED, PROCESSING). |
| polling_url | string | URL to use for checking the status of the request. |
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Pika 2.2 (Image to Video) generate request.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
400 Validation Error
{
"error": "Missing required parameter: image_url"
}
404 Not Found
{
"error": "Endpoint not found"
}
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field for details |
| ERROR | System error — request was not processed and will not be charged |
Status Flow
QUEUED → PROCESSING → (COMPLETED | FAILED)
Typical Workflow
- Submit request to /pika-2-2-image-to-video-request
- Receive request_id in response
- Poll /v2/requests/status/{request_id} every 2-3 seconds
- Once status is COMPLETED, retrieve video from output.media_url
Pika 2.2 (Image to Video) check status - Pika 2.2 (Image to Video)
Request Code
POST https://gateway.pixazo.ai/v2/requests/status/pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
import requests
url = "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
const headers = {
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
};
const data = {
request_id: "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
curl -X POST "https://gateway.pixazo.ai/v2/requests/status/pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika 2.2 (Image to Video) check status
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| request_id | Yes | string | — | — | Unique identifier of the request from the initial submission. |
Minimum Request
{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Full Request (all options)
{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response
{
"request_id": "pika-2-2-image-to-video_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "pika-2-2-image-to-video",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/pika-2-2-image-to-video_019dxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:01:45.000Z",
"completed_at": "2026-03-31T10:01:45.000Z"
}
Response Fields - Pika 2.2 (Image to Video) check status
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the generated request. |
| status | string | Current status of the request (e.g., COMPLETED). |
| model_id | string | Model used to generate the video. |
| error | string or null | Error message if the request failed, otherwise null. |
| output.media_url | string array | Array of URLs pointing to the generated video file. |
| output.media_type | string | MIME type of the generated media (e.g., video/mp4). |
Request Headers
| Header | Value |
|---|---|
| Ocp-Apim-Subscription-Key | Your subscription key |
Response Handling
Common status codes for Pika 2.2 (Image to Video) check status.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Notes & Tips
- Poll the status endpoint every 2–3 seconds until COMPLETED or FAILED.
- Implement exponential backoff for retry logic on ERROR or 500 responses.
- Use detailed, cinematic prompts for best motion control (e.g., "camera slowly zooms in while the subject turns slowly").
- Test with lower resolution (720p) first to optimize prompts before generating 1080p.
- Always validate that image_url is publicly accessible and uses HTTPS.
Pika 2.2 Image to Video API Pricing
| Resolution | Price (USD) |
|---|---|
| 720p (5 sec) | $0.2 |
| 720p (10 sec) | $0.4 |
| 1080p (5 sec) | $0.45 |
| 1080p (10 sec) | $0.9 |
Pika 2.2 Reference to Video (Ref Images to Video) API Documentation
https://gateway.pixazo.ai/pika-scenes-2-2/v1
Authentication
All requests require an API key passed via header.
| Header | Type | Required | Description |
|---|---|---|---|
| Ocp-Apim-Subscription-Key | string | Yes | Your API subscription key |
Pika Scenes 2.2 generate request - Pika Scenes 2.2
Request Code
POST https://gateway.pixazo.ai/pika-scenes-2-2/v1/pika-scenes-2-2-request
Content-Type: application/json
Cache-Control: no-cache
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"image_urls": [
"https://example.com/example_inputs/pika/pika_scenes/a.png"
],
"prompt": "A cinematic scene with smooth motion"
}
import requests
url = "https://gateway.pixazo.ai/pika-scenes-2-2/v1/pika-scenes-2-2-request"
headers = {
"Content-Type": "application/json",
"Cache-Control": "no-cache",
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"image_urls": ["https://example.com/example_inputs/pika/pika_scenes/a.png"],
"prompt": "A cinematic scene with smooth motion"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/pika-scenes-2-2/v1/pika-scenes-2-2-request';
const headers = {
'Content-Type': 'application/json',
'Cache-Control': 'no-cache',
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
image_urls: ['https://example.com/example_inputs/pika/pika_scenes/a.png'],
prompt: 'A cinematic scene with smooth motion'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/pika-scenes-2-2/v1/pika-scenes-2-2-request" \
-H "Content-Type: application/json" \
-H "Cache-Control: no-cache" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"image_urls": [
"https://example.com/example_inputs/pika/pika_scenes/a.png"
],
"prompt": "A cinematic scene with smooth motion"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika Scenes 2.2 generate request
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| image_urls | Yes | string[] | — | — | Array of HTTP/HTTPS URLs pointing to input images to be combined into a video. Must contain at least one image. |
| prompt | Yes | string | — | — | Text prompt describing the desired video motion, scene, and style. Must be detailed for best results. |
| negative_prompt | No | string | "ugly, bad, terrible" | — | Text prompt specifying undesired elements to avoid. Helps guide the model away from low-quality or irrelevant outputs. |
| seed | No | integer | — | — | Optional integer seed for reproducible results. Using the same seed with identical inputs produces the same output. |
| aspect_ratio | No | enum | "16:9" | 16:9, 9:16, 1:1, 4:5, 5:4, 3:2, 2:3 | Aspect ratio of the output video. Allowed values: 16:9, 9:16, 1:1, 4:5, 5:4, 3:2, 2:3. |
| resolution | No | enum | "1080p" | 720p, 1080p | Output video resolution. Allowed values: 720p, 1080p. |
| duration | No | enum | 5 | 5, 10 | Duration of the output video in seconds. Allowed values: 5, 10. |
| ingredients_mode | No | enum | "precise" | — | Control over how input images are interpreted. precise maintains exact object placement and motion; creative allows more imaginative interpretation and motion variation. |
Minimum Request
{
"image_urls": [
"https://example.com/example_inputs/pika/pika_scenes/a.png"
],
"prompt": "A cinematic scene with smooth motion"
}
Full Request (all options)
{
"image_urls": [
"https://example.com/example_inputs/pika/pika_scenes/a.png",
"https://example.com/example_inputs/pika/pika_scenes/b.png",
"https://example.com/example_inputs/pika/pika_scenes/c.png"
],
"prompt": "The gorilla is wearing the coat and sitting in the living room, cinematic scene, camera orbit and dolly out",
"negative_prompt": "ugly, bad, terrible",
"seed": 42,
"aspect_ratio": "16:9",
"resolution": "1080p",
"duration": 5,
"ingredients_mode": "precise"
}
Response
{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "QUEUED",
"polling_url": "https://gateway.pixazo.ai/v2/requests/status/pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response Fields - Pika Scenes 2.2 generate request
| Field | Type | Description |
|---|---|---|
| request_id | string | Unique identifier for the request used to poll for results. |
| status | string | Current status of the request (QUEUED, PROCESSING, etc.). |
| polling_url | string | URL to use for checking the status of the request. |
Request Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| Cache-Control | no-cache |
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Pika Scenes 2.2 generate request.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Error Responses
401 Unauthorized
{
"error": "Unauthorized",
"message": "Invalid or missing Ocp-Apim-Subscription-Key header"
}
400 Bad Request
{
"error": "Bad Request",
"message": "Required parameter 'prompt' is missing",
"details": [
{
"field": "image_urls",
"message": "Array must contain at least one URL"
}
]
}
Status Values
| Status | Description |
|---|---|
| QUEUED | Request accepted, waiting to be processed |
| PROCESSING | Being processed by the model |
| COMPLETED | Done — output contains the result |
| FAILED | Failed — check error field for details |
| ERROR | System error occurred — request was not processed and will not be charged |
Status Flow
Submitted → QUEUED → PROCESSING → COMPLETED
↘ FAILED
↘ ERROR
Typical Workflow
- Submit request to /pika-scenes-2-2-request endpoint.
- Receive response with request_id.
- Poll status endpoint every 2–5 seconds using request_id.
- When status is COMPLETED, extract video URL from output.
- For FAILED or ERROR, check error details and retry or adjust input.
Pika Scenes 2.2 check status - Pika Scenes 2.2
Request Code
POST https://gateway.pixazo.ai/v2/requests/status/pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY
{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
import requests
url = "https://gateway.pixazo.ai/v2/requests/status/pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {
"Ocp-Apim-Subscription-Key": "YOUR_SUBSCRIPTION_KEY"
}
data = {
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const url = 'https://gateway.pixazo.ai/v2/requests/status/pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const headers = {
'Ocp-Apim-Subscription-Key': 'YOUR_SUBSCRIPTION_KEY'
};
const data = {
request_id: 'pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
};
fetch(url, {
method: 'POST',
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
curl -X POST "https://gateway.pixazo.ai/v2/requests/status/pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
-H "Ocp-Apim-Subscription-Key: YOUR_SUBSCRIPTION_KEY" \
--data-raw '{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}'
Output
{
"video": {
"file_size": 14530500,
"file_name": "output.mp4",
"content_type": "application/octet-stream",
"url": "[RESPONSE_URL]"
}
}
Request Parameters - Pika Scenes 2.2 check status
| Parameter | Required | Type | Default | Allowed values / range | Description |
|---|---|---|---|---|---|
| request_id | Yes | string | — | — | The unique request_id returned from the initial submission. |
Minimum Request
{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Full Request (all options)
{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Response
{
"request_id": "pika-scenes-2-2_019dxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "COMPLETED",
"model_id": "pika-scenes-2-2",
"error": null,
"output": {
"media_url": [
"https://pub-582b7213209642b9b995c96c95a30381.r2.dev/v1/pika-scenes-2-2_019dxxxx/output.mp4"
],
"media_type": "video/mp4"
},
"created_at": "2026-03-31T10:00:00.000Z",
"updated_at": "2026-03-31T10:00:45.000Z",
"completed_at": "2026-03-31T10:00:45.000Z"
}
Response Fields - Pika Scenes 2.2 check status
| Field | Type | Description |
|---|---|---|
| request_id | string | The unique identifier for the request. |
| status | string | Current status: QUEUED, PROCESSING, COMPLETED, FAILED, ERROR. |
| model_id | string | The model used to generate the video. |
| error | null | string | Details of error if status is FAILED or ERROR. |
| output.media_url | string[] | Array of URLs to the generated video files. |
| output.media_type | string | Media type of output (e.g., video/mp4). |
| created_at | string | Timestamp when the request was created. |
| updated_at | string | Timestamp when the request was last updated. |
| completed_at | string | Timestamp when the request was completed. |
Request Headers
| Header | Value |
|---|---|
| Ocp-Apim-Subscription-Key | Your API subscription key |
Response Handling
Common status codes for Pika Scenes 2.2 check status.
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request |
| 401 | Unauthorized |
| 404 | Not Found |
| 429 | Too Many Requests |
| 500 | Internal Server Error |
Notes & Tips
- Poll the status endpoint every 2–5 seconds until status is COMPLETED, FAILED, or ERROR.
- Use exponential backoff when retrying after ERROR or 500 responses.
- Use detailed prompts describing motion, lighting, camera movement, and mood for best results.
- Specify a seed value for reproducible outputs across runs.
- Use precise mode for object fidelity; creative mode for artistic interpretations.
- Ensure image URLs are publicly accessible and use HTTPS.
- Processing time varies based on video duration and complexity — typically 30–120 seconds.
- The maximum video duration is 10 seconds and maximum resolution is 1080p.
- Each request consumes credits based on video duration and resolution.
Pika 2.2 Reference to Video (Ref Images to Video) API Pricing
| Resolution | Price (USD) |
|---|---|
| 720p (5 sec) | $0.2 |
| 720p (10 sec) | $0.4 |
| 1080p (5 sec) | $0.45 |
| 1080p (10 sec) | $0.9 |