ChatGPT 5.4 API
Img2Vid exposes ChatGPT 5.4 through the public chat model API as openai/gpt-5.4.
Model identity
| Field | Value |
|---|---|
| Img2Vid model key | openai/gpt-5.4 |
| Runtime model id | gpt-5.4 |
| Provider | OpenAI |
| Public capabilities | Reasoning, image attachments, tool calling |
Pricing
| Unit | Credits |
|---|---|
| Input | 3 credits per 1,000,000 tokens |
| Output | 15 credits per 1,000,000 tokens |
| Cached input | 1 credit per 1,000,000 tokens |
Model options
| Option | Type | Default | Values |
|---|---|---|---|
reasoning_effort |
string | medium |
none, low, medium, high, xhigh |
Set reasoning: true to enable reasoning. Pass the configured effort through options.reasoning_effort.
OpenAI-compatible example
curl https://img2vid.net/api/v1/chat/completions \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4",
"messages": [
{
"role": "system",
"content": "You are a concise technical assistant."
},
{
"role": "user",
"content": "Draft a practical implementation plan for adding an analytics dashboard."
}
],
"reasoning": true,
"options": {
"reasoning_effort": "medium"
},
"max_completion_tokens": 800
}'
Anthropic Messages-compatible example
curl https://img2vid.net/api/v1/messages \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.4",
"system": "You are a concise technical assistant.",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Draft a practical implementation plan for adding an analytics dashboard."
}
]
}
],
"thinking": true,
"options": {
"reasoning_effort": "medium"
},
"max_tokens": 800
}'
Gemini-compatible example
curl https://img2vid.net/api/v1beta/models/openai/gpt-5.4:generateContent \
-H "Authorization: Bearer $BUBLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"systemInstruction": {
"parts": [
{
"text": "You are a concise technical assistant."
}
]
},
"contents": [
{
"role": "user",
"parts": [
{
"text": "Draft a practical implementation plan for adding an analytics dashboard."
}
]
}
],
"reasoning": true,
"options": {
"reasoning_effort": "medium"
},
"generationConfig": {
"maxOutputTokens": 800
}
}'
For Gemini-compatible streaming, use /api/v1beta/models/openai/gpt-5.4:streamGenerateContent.
SDK examples
The examples below use this page's Img2Vid chat model key through the OpenAI-compatible Chat Completions SDK method. They assume you have already initialized the SDK client as shown in the Quickstart and imported the required language SDK types. Anthropic Messages and Gemini-compatible calls use the same model key; Gemini streaming must use the SDK's streamGenerateContent / stream_generate_content method.
JavaScript / TypeScript
const completion = await buble.chat.completions.create({
model: 'openai/gpt-5.4',
messages: [
{ role: 'system', content: 'You are a concise technical assistant.' },
{
role: 'user',
content:
'Draft a practical implementation plan for adding an analytics dashboard.',
},
],
reasoning: true,
options: {
reasoning_effort: 'medium',
},
max_completion_tokens: 800,
});
console.log(completion.choices?.[0]?.message?.content);
Python
completion = client.chat.completions.create(
model="openai/gpt-5.4",
messages=[
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Draft a practical implementation plan for adding an analytics dashboard."},
],
reasoning=True,
options={"reasoning_effort": "medium"},
max_completion_tokens=800,
)
print(completion["choices"][0]["message"]["content"])
Go
completion, err := client.Chat.Completions.Create(ctx, buble.ChatRequest{
"model": "openai/gpt-5.4",
"messages": []any{
map[string]any{"role": "system", "content": "You are a concise technical assistant."},
map[string]any{"role": "user", "content": "Draft a practical implementation plan for adding an analytics dashboard."},
},
"reasoning": true,
"options": map[string]any{"reasoning_effort": "medium"},
"max_completion_tokens": 800,
})
if err != nil {
return err
}
fmt.Println(completion)
Rust
let completion = client.chat().completions().create(serde_json::json!({
"model": "openai/gpt-5.4",
"messages": [
{ "role": "system", "content": "You are a concise technical assistant." },
{ "role": "user", "content": "Draft a practical implementation plan for adding an analytics dashboard." }
],
"reasoning": true,
"options": { "reasoning_effort": "medium" },
"max_completion_tokens": 800
})).await?;
Swift
let completion = try await client.chat.completions.create([
"model": "openai/gpt-5.4",
"messages": [
["role": "system", "content": "You are a concise technical assistant."],
["role": "user", "content": "Draft a practical implementation plan for adding an analytics dashboard."]
],
"reasoning": true,
"options": ["reasoning_effort": "medium"],
"max_completion_tokens": 800
])
Dart / Flutter
final completion = await client.chat.completions.create({
'model': 'openai/gpt-5.4',
'messages': [
{'role': 'system', 'content': 'You are a concise technical assistant.'},
{'role': 'user', 'content': 'Draft a practical implementation plan for adding an analytics dashboard.'},
],
'reasoning': true,
'options': {'reasoning_effort': 'medium'},
'max_completion_tokens': 800,
});
Elixir
{:ok, completion} =
Buble.Chat.Completions.create(client, %{
model: "openai/gpt-5.4",
messages: [
%{role: "system", content: "You are a concise technical assistant."},
%{role: "user", content: "Draft a practical implementation plan for adding an analytics dashboard."}
],
reasoning: true,
options: %{reasoning_effort: "medium"},
max_completion_tokens: 800
})
Java
var completion = client.chat().completions().create(Map.of(
"model", "openai/gpt-5.4",
"messages", List.of(
Map.of("role", "system", "content", "You are a concise technical assistant."),
Map.of("role", "user", "content", "Draft a practical implementation plan for adding an analytics dashboard.")),
"reasoning", true,
"options", Map.of("reasoning_effort", "medium"),
"max_completion_tokens", 800));
.NET
var completion = await client.Chat.Completions.CreateAsync(new Dictionary<string, object?>
{
["model"] = "openai/gpt-5.4",
["messages"] = new[]
{
new Dictionary<string, object?> { ["role"] = "system", ["content"] = "You are a concise technical assistant." },
new Dictionary<string, object?> { ["role"] = "user", ["content"] = "Draft a practical implementation plan for adding an analytics dashboard." }
},
["reasoning"] = true,
["options"] = new Dictionary<string, object?>
{
["reasoning_effort"] = "medium"
},
["max_completion_tokens"] = 800
});
PHP
$completion = $client->chat()->completions()->create([
'model' => 'openai/gpt-5.4',
'messages' => [
['role' => 'system', 'content' => 'You are a concise technical assistant.'],
['role' => 'user', 'content' => 'Draft a practical implementation plan for adding an analytics dashboard.'],
],
'reasoning' => true,
'options' => [
'reasoning_effort' => 'medium',
],
'max_completion_tokens' => 800,
]);
Ruby
completion = client.chat.completions.create(
model: "openai/gpt-5.4",
messages: [
{ role: "system", content: "You are a concise technical assistant." },
{ role: "user", content: "Draft a practical implementation plan for adding an analytics dashboard." }
],
reasoning: true,
options: {reasoning_effort: "medium"},
max_completion_tokens: 800
)