const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
duration: 123,
size: '<string>',
resolution: '<string>',
aspect_ratio: '<string>',
seed: 123,
sample_count: 123,
negative_prompt: '<string>',
generate_audio: true,
enhance_prompt: true,
compression_quality: 123,
person_generation: '<string>',
resize_mode: '<string>',
input_references: [{type: 'image_url', reference_type: '<string>'}],
provider_params: {},
output: {access: 'both'},
webhook: {url: '<string>', secret: '<string>', events: ['<string>']},
provider: {
order: ['<string>'],
only: ['<string>'],
ignore: ['<string>'],
include_alpha: true,
allow_fallbacks: true,
require_parameters: true,
required_execution_region: '<string>',
required_data_region: '<string>',
require_zero_data_retention: true,
zdr: true,
enforce_distillable_text: true,
quantizations: ['<string>'],
sort: '<string>',
max_price: {prompt: 123, completion: 123, image: 123, audio: 123, request: 123},
preferred_min_throughput: 123,
preferred_max_latency: 123
}
})
};
fetch('https://api.phaseo.ai/v1/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.ai/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"duration": 123,
"size": "<string>",
"resolution": "<string>",
"aspect_ratio": "<string>",
"seed": 123,
"sample_count": 123,
"negative_prompt": "<string>",
"generate_audio": True,
"enhance_prompt": True,
"compression_quality": 123,
"person_generation": "<string>",
"resize_mode": "<string>",
"input_references": [
{
"type": "image_url",
"reference_type": "<string>"
}
],
"provider_params": {},
"output": { "access": "both" },
"webhook": {
"url": "<string>",
"secret": "<string>",
"events": ["<string>"]
},
"provider": {
"order": ["<string>"],
"only": ["<string>"],
"ignore": ["<string>"],
"include_alpha": True,
"allow_fallbacks": True,
"require_parameters": True,
"required_execution_region": "<string>",
"required_data_region": "<string>",
"require_zero_data_retention": True,
"zdr": True,
"enforce_distillable_text": True,
"quantizations": ["<string>"],
"sort": "<string>",
"max_price": {
"prompt": 123,
"completion": 123,
"image": 123,
"audio": 123,
"request": 123
},
"preferred_min_throughput": 123,
"preferred_max_latency": 123
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)curl --request POST \
--url https://api.phaseo.ai/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"duration": 123,
"size": "<string>",
"resolution": "<string>",
"aspect_ratio": "<string>",
"seed": 123,
"sample_count": 123,
"negative_prompt": "<string>",
"generate_audio": true,
"enhance_prompt": true,
"compression_quality": 123,
"person_generation": "<string>",
"resize_mode": "<string>",
"input_references": [
{
"type": "image_url",
"reference_type": "<string>"
}
],
"provider_params": {},
"output": {
"access": "both"
},
"webhook": {
"url": "<string>",
"secret": "<string>",
"events": [
"<string>"
]
},
"provider": {
"order": [
"<string>"
],
"only": [
"<string>"
],
"ignore": [
"<string>"
],
"include_alpha": true,
"allow_fallbacks": true,
"require_parameters": true,
"required_execution_region": "<string>",
"required_data_region": "<string>",
"require_zero_data_retention": true,
"zdr": true,
"enforce_distillable_text": true,
"quantizations": [
"<string>"
],
"sort": "<string>",
"max_price": {
"prompt": 123,
"completion": 123,
"image": 123,
"audio": 123,
"request": 123
},
"preferred_min_throughput": 123,
"preferred_max_latency": 123
}
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.ai/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.phaseo.ai/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.ai/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'duration' => 123,
'size' => '<string>',
'resolution' => '<string>',
'aspect_ratio' => '<string>',
'seed' => 123,
'sample_count' => 123,
'negative_prompt' => '<string>',
'generate_audio' => true,
'enhance_prompt' => true,
'compression_quality' => 123,
'person_generation' => '<string>',
'resize_mode' => '<string>',
'input_references' => [
[
'type' => 'image_url',
'reference_type' => '<string>'
]
],
'provider_params' => [
],
'output' => [
'access' => 'both'
],
'webhook' => [
'url' => '<string>',
'secret' => '<string>',
'events' => [
'<string>'
]
],
'provider' => [
'order' => [
'<string>'
],
'only' => [
'<string>'
],
'ignore' => [
'<string>'
],
'include_alpha' => true,
'allow_fallbacks' => true,
'require_parameters' => true,
'required_execution_region' => '<string>',
'required_data_region' => '<string>',
'require_zero_data_retention' => true,
'zdr' => true,
'enforce_distillable_text' => true,
'quantizations' => [
'<string>'
],
'sort' => '<string>',
'max_price' => [
'prompt' => 123,
'completion' => 123,
'image' => 123,
'audio' => 123,
'request' => 123
],
'preferred_min_throughput' => 123,
'preferred_max_latency' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.ai/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"polling_url": "<string>",
"websocket_url": "<string>",
"model": "<string>",
"request_id": "<string>",
"session_id": "<string>",
"cancel_url": "<string>",
"generation_id": "<string>",
"native_video_id": "<string>",
"created_at": 123,
"started_at": 123,
"completed_at": 123,
"object": "video",
"poll_after_seconds": 20,
"provider": "<string>",
"seconds": 123,
"size": "<string>",
"audio": true,
"content_url": "<string>",
"download_url": "<string>",
"expires_at": 123,
"progress": 123,
"progress_source": "<string>",
"asset": {
"id": "<string>",
"mime_type": "<string>",
"bytes": 123,
"sha256": "<string>",
"width": 123,
"height": 123,
"duration_seconds": 123
},
"outputs": [
{
"index": 123,
"mime_type": "<string>",
"bytes_available": true,
"content_url": "<string>",
"download_url": "<string>",
"expires_at": 123
}
],
"billing": {
"currency": "<string>",
"estimated_provider_cost": "<string>",
"estimated_user_cost": "<string>",
"settled_provider_cost": "<string>",
"settled_user_cost": "<string>",
"billable": true,
"total_nanos": 123,
"estimated_nanos": 123,
"reserved_nanos": 123,
"reservation_id": "<string>",
"reservation_status": "<string>",
"charge_reason": "<string>",
"charged": true,
"billed_at": "<string>"
},
"webhook": {
"url": "<string>",
"events": [
"<string>"
],
"has_secret": true,
"delivery": {
"total_attempts": 123,
"delivered_events": 123,
"delivered_event_types": [
"video.completed"
],
"pending_retries": 123,
"next_retry_at": "<string>",
"last_attempt_at": "<string>",
"last_response_status": 123,
"last_delivered_at": "<string>",
"last_failure_at": "<string>",
"last_error_message": "<string>"
},
"attempts": [
{
"id": "<string>",
"delivery_key": "video.completed",
"event_type": "video.completed",
"attempt_number": 123,
"max_attempts": 123,
"tried_at": "<string>",
"delivered_at": "<string>",
"next_retry_at": "<string>",
"response_status": 123,
"error_message": "<string>",
"response_body_preview": "<string>"
}
]
},
"next_webhook_retry_at": "<string>",
"last_webhook_progress": 123,
"last_webhook_progress_at": "<string>",
"last_webhook_dispatched_at": "<string>",
"usage": {
"cost": 123,
"is_byok": true
},
"error": null
}Video generation (Beta)
Creates an async video generation job. Poll the returned polling_url every 20 seconds until the job reaches a terminal status.
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
duration: 123,
size: '<string>',
resolution: '<string>',
aspect_ratio: '<string>',
seed: 123,
sample_count: 123,
negative_prompt: '<string>',
generate_audio: true,
enhance_prompt: true,
compression_quality: 123,
person_generation: '<string>',
resize_mode: '<string>',
input_references: [{type: 'image_url', reference_type: '<string>'}],
provider_params: {},
output: {access: 'both'},
webhook: {url: '<string>', secret: '<string>', events: ['<string>']},
provider: {
order: ['<string>'],
only: ['<string>'],
ignore: ['<string>'],
include_alpha: true,
allow_fallbacks: true,
require_parameters: true,
required_execution_region: '<string>',
required_data_region: '<string>',
require_zero_data_retention: true,
zdr: true,
enforce_distillable_text: true,
quantizations: ['<string>'],
sort: '<string>',
max_price: {prompt: 123, completion: 123, image: 123, audio: 123, request: 123},
preferred_min_throughput: 123,
preferred_max_latency: 123
}
})
};
fetch('https://api.phaseo.ai/v1/videos', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.phaseo.ai/v1/videos"
payload = {
"model": "<string>",
"prompt": "<string>",
"duration": 123,
"size": "<string>",
"resolution": "<string>",
"aspect_ratio": "<string>",
"seed": 123,
"sample_count": 123,
"negative_prompt": "<string>",
"generate_audio": True,
"enhance_prompt": True,
"compression_quality": 123,
"person_generation": "<string>",
"resize_mode": "<string>",
"input_references": [
{
"type": "image_url",
"reference_type": "<string>"
}
],
"provider_params": {},
"output": { "access": "both" },
"webhook": {
"url": "<string>",
"secret": "<string>",
"events": ["<string>"]
},
"provider": {
"order": ["<string>"],
"only": ["<string>"],
"ignore": ["<string>"],
"include_alpha": True,
"allow_fallbacks": True,
"require_parameters": True,
"required_execution_region": "<string>",
"required_data_region": "<string>",
"require_zero_data_retention": True,
"zdr": True,
"enforce_distillable_text": True,
"quantizations": ["<string>"],
"sort": "<string>",
"max_price": {
"prompt": 123,
"completion": 123,
"image": 123,
"audio": 123,
"request": 123
},
"preferred_min_throughput": 123,
"preferred_max_latency": 123
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)curl --request POST \
--url https://api.phaseo.ai/v1/videos \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"duration": 123,
"size": "<string>",
"resolution": "<string>",
"aspect_ratio": "<string>",
"seed": 123,
"sample_count": 123,
"negative_prompt": "<string>",
"generate_audio": true,
"enhance_prompt": true,
"compression_quality": 123,
"person_generation": "<string>",
"resize_mode": "<string>",
"input_references": [
{
"type": "image_url",
"reference_type": "<string>"
}
],
"provider_params": {},
"output": {
"access": "both"
},
"webhook": {
"url": "<string>",
"secret": "<string>",
"events": [
"<string>"
]
},
"provider": {
"order": [
"<string>"
],
"only": [
"<string>"
],
"ignore": [
"<string>"
],
"include_alpha": true,
"allow_fallbacks": true,
"require_parameters": true,
"required_execution_region": "<string>",
"required_data_region": "<string>",
"require_zero_data_retention": true,
"zdr": true,
"enforce_distillable_text": true,
"quantizations": [
"<string>"
],
"sort": "<string>",
"max_price": {
"prompt": 123,
"completion": 123,
"image": 123,
"audio": 123,
"request": 123
},
"preferred_min_throughput": 123,
"preferred_max_latency": 123
}
}
'package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.phaseo.ai/v1/videos"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.phaseo.ai/v1/videos")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.phaseo.ai/v1/videos",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'prompt' => '<string>',
'duration' => 123,
'size' => '<string>',
'resolution' => '<string>',
'aspect_ratio' => '<string>',
'seed' => 123,
'sample_count' => 123,
'negative_prompt' => '<string>',
'generate_audio' => true,
'enhance_prompt' => true,
'compression_quality' => 123,
'person_generation' => '<string>',
'resize_mode' => '<string>',
'input_references' => [
[
'type' => 'image_url',
'reference_type' => '<string>'
]
],
'provider_params' => [
],
'output' => [
'access' => 'both'
],
'webhook' => [
'url' => '<string>',
'secret' => '<string>',
'events' => [
'<string>'
]
],
'provider' => [
'order' => [
'<string>'
],
'only' => [
'<string>'
],
'ignore' => [
'<string>'
],
'include_alpha' => true,
'allow_fallbacks' => true,
'require_parameters' => true,
'required_execution_region' => '<string>',
'required_data_region' => '<string>',
'require_zero_data_retention' => true,
'zdr' => true,
'enforce_distillable_text' => true,
'quantizations' => [
'<string>'
],
'sort' => '<string>',
'max_price' => [
'prompt' => 123,
'completion' => 123,
'image' => 123,
'audio' => 123,
'request' => 123
],
'preferred_min_throughput' => 123,
'preferred_max_latency' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}require 'uri'
require 'net/http'
url = URI("https://api.phaseo.ai/v1/videos")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"duration\": 123,\n \"size\": \"<string>\",\n \"resolution\": \"<string>\",\n \"aspect_ratio\": \"<string>\",\n \"seed\": 123,\n \"sample_count\": 123,\n \"negative_prompt\": \"<string>\",\n \"generate_audio\": true,\n \"enhance_prompt\": true,\n \"compression_quality\": 123,\n \"person_generation\": \"<string>\",\n \"resize_mode\": \"<string>\",\n \"input_references\": [\n {\n \"type\": \"image_url\",\n \"reference_type\": \"<string>\"\n }\n ],\n \"provider_params\": {},\n \"output\": {\n \"access\": \"both\"\n },\n \"webhook\": {\n \"url\": \"<string>\",\n \"secret\": \"<string>\",\n \"events\": [\n \"<string>\"\n ]\n },\n \"provider\": {\n \"order\": [\n \"<string>\"\n ],\n \"only\": [\n \"<string>\"\n ],\n \"ignore\": [\n \"<string>\"\n ],\n \"include_alpha\": true,\n \"allow_fallbacks\": true,\n \"require_parameters\": true,\n \"required_execution_region\": \"<string>\",\n \"required_data_region\": \"<string>\",\n \"require_zero_data_retention\": true,\n \"zdr\": true,\n \"enforce_distillable_text\": true,\n \"quantizations\": [\n \"<string>\"\n ],\n \"sort\": \"<string>\",\n \"max_price\": {\n \"prompt\": 123,\n \"completion\": 123,\n \"image\": 123,\n \"audio\": 123,\n \"request\": 123\n },\n \"preferred_min_throughput\": 123,\n \"preferred_max_latency\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"polling_url": "<string>",
"websocket_url": "<string>",
"model": "<string>",
"request_id": "<string>",
"session_id": "<string>",
"cancel_url": "<string>",
"generation_id": "<string>",
"native_video_id": "<string>",
"created_at": 123,
"started_at": 123,
"completed_at": 123,
"object": "video",
"poll_after_seconds": 20,
"provider": "<string>",
"seconds": 123,
"size": "<string>",
"audio": true,
"content_url": "<string>",
"download_url": "<string>",
"expires_at": 123,
"progress": 123,
"progress_source": "<string>",
"asset": {
"id": "<string>",
"mime_type": "<string>",
"bytes": 123,
"sha256": "<string>",
"width": 123,
"height": 123,
"duration_seconds": 123
},
"outputs": [
{
"index": 123,
"mime_type": "<string>",
"bytes_available": true,
"content_url": "<string>",
"download_url": "<string>",
"expires_at": 123
}
],
"billing": {
"currency": "<string>",
"estimated_provider_cost": "<string>",
"estimated_user_cost": "<string>",
"settled_provider_cost": "<string>",
"settled_user_cost": "<string>",
"billable": true,
"total_nanos": 123,
"estimated_nanos": 123,
"reserved_nanos": 123,
"reservation_id": "<string>",
"reservation_status": "<string>",
"charge_reason": "<string>",
"charged": true,
"billed_at": "<string>"
},
"webhook": {
"url": "<string>",
"events": [
"<string>"
],
"has_secret": true,
"delivery": {
"total_attempts": 123,
"delivered_events": 123,
"delivered_event_types": [
"video.completed"
],
"pending_retries": 123,
"next_retry_at": "<string>",
"last_attempt_at": "<string>",
"last_response_status": 123,
"last_delivered_at": "<string>",
"last_failure_at": "<string>",
"last_error_message": "<string>"
},
"attempts": [
{
"id": "<string>",
"delivery_key": "video.completed",
"event_type": "video.completed",
"attempt_number": 123,
"max_attempts": 123,
"tried_at": "<string>",
"delivered_at": "<string>",
"next_retry_at": "<string>",
"response_status": 123,
"error_message": "<string>",
"response_body_preview": "<string>"
}
]
},
"next_webhook_retry_at": "<string>",
"last_webhook_progress": 123,
"last_webhook_progress_at": "<string>",
"last_webhook_dispatched_at": "<string>",
"usage": {
"cost": 123,
"is_byok": true
},
"error": null
}501 not_implemented while this surface is being re-enabled.- use
GET /v1/videos/{video_id}for status updates - use
GET /v1/videos/{video_id}/contentwhen the job is complete - use
POST /v1/videos/{video_id}/download_urlwhen you need a short-lived signed download link - use
GET /v1/videosto review owned jobs - use
GET /v1/videos/modelsto inspect active public video models
Lifecycle notes
- Video generation is async by design. Do not expect binary video data in the create response.
- Phaseo can hold funds up front and later settle or void them when the provider reaches a terminal state.
- Terminal states include
completed,failed,cancelled, andexpired. - Webhook configuration can be included in the create request when you want lifecycle notifications instead of pure polling.
- Webhook callback URLs must use HTTPS. Literal private, loopback, link-local, and wildcard hosts are rejected;
http://localhost,http://127.0.0.1, andhttp://[::1]are allowed only for local development callbacks. - Webhook
eventsmay use genericjob.*names or matchingvideo.*names. Includejob.progressorvideo.progressto receive progress notifications when the provider reports progress. If omitted, terminaljob.*events are used. If supplied, at least one event must be valid for video jobs; cross-kind-only or malformed event lists are rejected.
Authorizations
Bearer token authentication
Body
Desired duration in seconds (provider/model dependent).
Explicit dimensions (for example 1280x720). Cannot be combined with resolution or aspect_ratio.
480p, 720p, 1080p, 1K, 2K, 4K. Can be combined with aspect_ratio. Cannot be combined with size.
Aspect ratio such as 16:9, 9:16, 1:1. Can be combined with resolution. Cannot be combined with size.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Provider routing preferences for gateway selection.
Show child attributes
Show child attributes
Response
Video response
WebSocket URL for subscribing to normalized async job lifecycle updates.
queued, processing, completed, failed, cancelled, expired Normalized async lifecycle status for polling, websocket, and webhook consumers.
pending, running, completed, failed, cancelled, expired bytes, signed_url, both Provider-native video/job id when it differs from the gateway-owned id.
"video"
20
Present when output_access includes bytes (authenticated endpoint).
Signed first-party URL for direct download when status is completed.
Unix timestamp (seconds) when the signed download_url expires.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Sanitized async webhook configuration plus delivery state. Secrets are never returned; has_secret indicates whether signed deliveries are enabled. Signed deliveries include x-phaseo-signature, x-phaseo-timestamp, x-phaseo-event-id, x-phaseo-event-type, x-phaseo-delivery-key, x-phaseo-attempt, and x-phaseo-max-attempts headers.
Show child attributes
Show child attributes
ISO timestamp for the next scheduled user-webhook retry, when queued.
Most recent coarse progress bucket dispatched to webhook consumers.
ISO timestamp when the most recent webhook progress bucket was dispatched.
ISO timestamp for the most recent webhook dispatch attempt.
Show child attributes
Show child attributes
Was this page helpful?