curl --request POST \
--url https://api.ttapi.io/bfl/v1/flux-kontext-max \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"input_image": "<string>",
"input_image_2": "<string>",
"input_image_3": "<string>",
"input_image_4": "<string>",
"aspect_ratio": "21:9",
"seed": "<string>",
"output_format": "jpeg",
"prompt_upsampling": "false",
"safety_tolerance": "2",
"webhook_url": "<string>"
}
'import requests
url = "https://api.ttapi.io/bfl/v1/flux-kontext-max"
payload = {
"prompt": "<string>",
"input_image": "<string>",
"input_image_2": "<string>",
"input_image_3": "<string>",
"input_image_4": "<string>",
"aspect_ratio": "21:9",
"seed": "<string>",
"output_format": "jpeg",
"prompt_upsampling": "false",
"safety_tolerance": "2",
"webhook_url": "<string>"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
input_image: '<string>',
input_image_2: '<string>',
input_image_3: '<string>',
input_image_4: '<string>',
aspect_ratio: '21:9',
seed: '<string>',
output_format: 'jpeg',
prompt_upsampling: 'false',
safety_tolerance: '2',
webhook_url: '<string>'
})
};
fetch('https://api.ttapi.io/bfl/v1/flux-kontext-max', 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://api.ttapi.io/bfl/v1/flux-kontext-max",
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>',
'input_image' => '<string>',
'input_image_2' => '<string>',
'input_image_3' => '<string>',
'input_image_4' => '<string>',
'aspect_ratio' => '21:9',
'seed' => '<string>',
'output_format' => 'jpeg',
'prompt_upsampling' => 'false',
'safety_tolerance' => '2',
'webhook_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"TT-API-KEY: <api-key>"
],
]);
$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://api.ttapi.io/bfl/v1/flux-kontext-max"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-API-KEY", "<api-key>")
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.ttapi.io/bfl/v1/flux-kontext-max")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/bfl/v1/flux-kontext-max")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "jobId"
}
}{
"status": "FAILED",
"message": "\"prompt\" cannot be empty.",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Flux Kontext Max API Documentation
Use the Flux Kontext Max API for context-aware image generation and editing with stronger control over complex prompts and visual consistency.
curl --request POST \
--url https://api.ttapi.io/bfl/v1/flux-kontext-max \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"input_image": "<string>",
"input_image_2": "<string>",
"input_image_3": "<string>",
"input_image_4": "<string>",
"aspect_ratio": "21:9",
"seed": "<string>",
"output_format": "jpeg",
"prompt_upsampling": "false",
"safety_tolerance": "2",
"webhook_url": "<string>"
}
'import requests
url = "https://api.ttapi.io/bfl/v1/flux-kontext-max"
payload = {
"prompt": "<string>",
"input_image": "<string>",
"input_image_2": "<string>",
"input_image_3": "<string>",
"input_image_4": "<string>",
"aspect_ratio": "21:9",
"seed": "<string>",
"output_format": "jpeg",
"prompt_upsampling": "false",
"safety_tolerance": "2",
"webhook_url": "<string>"
}
headers = {
"TT-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'TT-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
input_image: '<string>',
input_image_2: '<string>',
input_image_3: '<string>',
input_image_4: '<string>',
aspect_ratio: '21:9',
seed: '<string>',
output_format: 'jpeg',
prompt_upsampling: 'false',
safety_tolerance: '2',
webhook_url: '<string>'
})
};
fetch('https://api.ttapi.io/bfl/v1/flux-kontext-max', 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://api.ttapi.io/bfl/v1/flux-kontext-max",
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>',
'input_image' => '<string>',
'input_image_2' => '<string>',
'input_image_3' => '<string>',
'input_image_4' => '<string>',
'aspect_ratio' => '21:9',
'seed' => '<string>',
'output_format' => 'jpeg',
'prompt_upsampling' => 'false',
'safety_tolerance' => '2',
'webhook_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"TT-API-KEY: <api-key>"
],
]);
$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://api.ttapi.io/bfl/v1/flux-kontext-max"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("TT-API-KEY", "<api-key>")
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.ttapi.io/bfl/v1/flux-kontext-max")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/bfl/v1/flux-kontext-max")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["TT-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"input_image\": \"<string>\",\n \"input_image_2\": \"<string>\",\n \"input_image_3\": \"<string>\",\n \"input_image_4\": \"<string>\",\n \"aspect_ratio\": \"21:9\",\n \"seed\": \"<string>\",\n \"output_format\": \"jpeg\",\n \"prompt_upsampling\": \"false\",\n \"safety_tolerance\": \"2\",\n \"webhook_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "SUCCESS",
"message": "success",
"data": {
"jobId": "jobId"
}
}{
"status": "FAILED",
"message": "\"prompt\" cannot be empty.",
"data": {}
}{
"status": "FAILED",
"message": "Wrong TT-API-KEY or email is not activated."
}Authorizations
You can obtain your API key from the TTAPI Dashboard.
Body
Generate or edit images using the Flux Kontext Max model based on text prompts. Official documentation
Image description. Note: Flux supports multilingual understanding, but English performs best in testing.
Reference image 1, URL or base64
Reference image 2, URL or base64
Reference image 3, URL or base64
Reference image 4, URL or base64
Aspect ratio
21:9, 9:21 "21:9"
Random seed
Output format
jpeg, png "jpeg"
Whether to enable prompt upsampling. true - yes, false - no
false, true "false"
Safety tolerance level for input and output adjustment. Range: 0-6, where 0 is strictest and 6 is most permissive. Default: 2
"2"
Asynchronous callback URL