curl --request POST \
--url https://open.skills.video/api/v1/generation/openai/gpt-image-2 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "<string>"
}
'import requests
url = "https://open.skills.video/api/v1/generation/openai/gpt-image-2"
payload = { "prompt": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '<string>'})
};
fetch('https://open.skills.video/api/v1/generation/openai/gpt-image-2', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://open.skills.video/api/v1/generation/openai/gpt-image-2",
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([
'prompt' => '<string>'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://open.skills.video/api/v1/generation/openai/gpt-image-2"
payload := strings.NewReader("{\n \"prompt\": \"<string>\"\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://open.skills.video/api/v1/generation/openai/gpt-image-2")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://open.skills.video/api/v1/generation/openai/gpt-image-2")
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 \"prompt\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = ["prompt": "<string>"] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://open.skills.video/api/v1/generation/openai/gpt-image-2")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self)){
"id": "gen_123",
"status": "IN_QUEUE",
"input": {
"prompt": "a cat",
"aspect_ratio": "1:1",
"resolution": "1024x1024",
"n": 1
},
"usage": {
"total": 20,
"subscription": 20,
"permanent": 0
}
}{
"error": "IMAGE_GENERATION_INVALID_INPUT",
"code": "IMAGE_GENERATION_INVALID_INPUT",
"message": "'prompt' parameter is required"
}{
"error": "UNAUTHORIZED",
"code": "UNAUTHORIZED",
"message": "Unauthorized"
}{
"error": "INSUFFICIENT_CREDITS",
"code": "IMAGE_GENERATION_INSUFFICIENT_CREDITS",
"message": "Insufficient credits for this generation."
}{
"error": "WORKSPACE_FORBIDDEN",
"code": "WORKSPACE_FORBIDDEN",
"message": "You do not have access to this workspace."
}{
"error": "TEMPLATE_NOT_FOUND",
"code": "TEMPLATE_NOT_FOUND",
"message": "Template not found."
}{
"error": "IMAGE_GENERATION_CONTENT_REJECTED",
"code": "IMAGE_GENERATION_CONTENT_REJECTED",
"message": "Request content was rejected by the moderation policy."
}{
"error": "IMAGE_GENERATION_RATE_LIMITED",
"code": "IMAGE_GENERATION_RATE_LIMITED",
"message": "Rate limit exceeded. Please retry later."
}{
"error": "IMAGE_GENERATION_FAILED",
"code": "IMAGE_GENERATION_FAILED",
"message": "Generation failed."
}{
"error": "IMAGE_GENERATION_FAILED",
"code": "IMAGE_GENERATION_FAILED",
"message": "Generation failed."
}{
"error": "IMAGE_GENERATION_PROVIDER_UNAVAILABLE",
"code": "IMAGE_GENERATION_PROVIDER_UNAVAILABLE",
"message": "Upstream generation provider is temporarily unavailable."
}{
"error": "IMAGE_GENERATION_TIMEOUT",
"code": "IMAGE_GENERATION_TIMEOUT",
"message": "Generation timed out."
}GPT Image 2
curl --request POST \
--url https://open.skills.video/api/v1/generation/openai/gpt-image-2 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"prompt": "<string>"
}
'import requests
url = "https://open.skills.video/api/v1/generation/openai/gpt-image-2"
payload = { "prompt": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({prompt: '<string>'})
};
fetch('https://open.skills.video/api/v1/generation/openai/gpt-image-2', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://open.skills.video/api/v1/generation/openai/gpt-image-2",
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([
'prompt' => '<string>'
]),
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;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://open.skills.video/api/v1/generation/openai/gpt-image-2"
payload := strings.NewReader("{\n \"prompt\": \"<string>\"\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://open.skills.video/api/v1/generation/openai/gpt-image-2")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://open.skills.video/api/v1/generation/openai/gpt-image-2")
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 \"prompt\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyimport Foundation
let parameters = ["prompt": "<string>"] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://open.skills.video/api/v1/generation/openai/gpt-image-2")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self)){
"id": "gen_123",
"status": "IN_QUEUE",
"input": {
"prompt": "a cat",
"aspect_ratio": "1:1",
"resolution": "1024x1024",
"n": 1
},
"usage": {
"total": 20,
"subscription": 20,
"permanent": 0
}
}{
"error": "IMAGE_GENERATION_INVALID_INPUT",
"code": "IMAGE_GENERATION_INVALID_INPUT",
"message": "'prompt' parameter is required"
}{
"error": "UNAUTHORIZED",
"code": "UNAUTHORIZED",
"message": "Unauthorized"
}{
"error": "INSUFFICIENT_CREDITS",
"code": "IMAGE_GENERATION_INSUFFICIENT_CREDITS",
"message": "Insufficient credits for this generation."
}{
"error": "WORKSPACE_FORBIDDEN",
"code": "WORKSPACE_FORBIDDEN",
"message": "You do not have access to this workspace."
}{
"error": "TEMPLATE_NOT_FOUND",
"code": "TEMPLATE_NOT_FOUND",
"message": "Template not found."
}{
"error": "IMAGE_GENERATION_CONTENT_REJECTED",
"code": "IMAGE_GENERATION_CONTENT_REJECTED",
"message": "Request content was rejected by the moderation policy."
}{
"error": "IMAGE_GENERATION_RATE_LIMITED",
"code": "IMAGE_GENERATION_RATE_LIMITED",
"message": "Rate limit exceeded. Please retry later."
}{
"error": "IMAGE_GENERATION_FAILED",
"code": "IMAGE_GENERATION_FAILED",
"message": "Generation failed."
}{
"error": "IMAGE_GENERATION_FAILED",
"code": "IMAGE_GENERATION_FAILED",
"message": "Generation failed."
}{
"error": "IMAGE_GENERATION_PROVIDER_UNAVAILABLE",
"code": "IMAGE_GENERATION_PROVIDER_UNAVAILABLE",
"message": "Upstream generation provider is temporarily unavailable."
}{
"error": "IMAGE_GENERATION_TIMEOUT",
"code": "IMAGE_GENERATION_TIMEOUT",
"message": "Generation timed out."
}Authorizations
API Key for API endpoints
Body
The prompt for image generation
Optional input image URLs for edit mode. When provided, the model performs image editing.
Optional mask image URL to constrain the editable region in edit mode.
Aspect ratio for generated image dimensions.
1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 Resolution hint used with Aspect Ratio to derive image size.
1K, 2K, 4K Generation quality level.
low, medium, high Number of images to generate (1-4).
1 <= x <= 4Output format for generated images.
jpeg, png, webp Number of results to generate (1-4)
1 <= x <= 4Response
Generation submission accepted
Generation id.
Queue status
IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED, CANCELED Normalized input payload for the generation task.
Show child attributes
Show child attributes
Credit usage breakdown for the request
Show child attributes
Show child attributes
Machine-readable generation error code. Present when status is FAILED.
Sanitized human-readable failure message. Present when status is FAILED.