curl --request POST \
--url https://api.ttapi.io/bfl/v1/flux-3-image-klein \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"images": "<string>",
"aspect_ratio": "auto",
"width": 3160,
"height": 3160,
"seed": 2147483647,
"safety_tolerance": 2,
"output_format": "jpeg",
"steps": 16,
"webhook_url": "<string>"
}
'import requests
url = "https://api.ttapi.io/bfl/v1/flux-3-image-klein"
payload = {
"prompt": "<string>",
"images": "<string>",
"aspect_ratio": "auto",
"width": 3160,
"height": 3160,
"seed": 2147483647,
"safety_tolerance": 2,
"output_format": "jpeg",
"steps": 16,
"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>',
images: '<string>',
aspect_ratio: 'auto',
width: 3160,
height: 3160,
seed: 2147483647,
safety_tolerance: 2,
output_format: 'jpeg',
steps: 16,
webhook_url: '<string>'
})
};
fetch('https://api.ttapi.io/bfl/v1/flux-3-image-klein', 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-3-image-klein",
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>',
'images' => '<string>',
'aspect_ratio' => 'auto',
'width' => 3160,
'height' => 3160,
'seed' => 2147483647,
'safety_tolerance' => 2,
'output_format' => 'jpeg',
'steps' => 16,
'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-3-image-klein"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\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-3-image-klein")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\n \"webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/bfl/v1/flux-3-image-klein")
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 \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\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."
}Generate an image with FLUX 3 Image Klein
Use the FLUX 3 Image Klein API to generate or edit images. It belongs to the same FLUX 3 image family, runs smaller and faster, and accepts exact size, seed, and sampling steps.
curl --request POST \
--url https://api.ttapi.io/bfl/v1/flux-3-image-klein \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"images": "<string>",
"aspect_ratio": "auto",
"width": 3160,
"height": 3160,
"seed": 2147483647,
"safety_tolerance": 2,
"output_format": "jpeg",
"steps": 16,
"webhook_url": "<string>"
}
'import requests
url = "https://api.ttapi.io/bfl/v1/flux-3-image-klein"
payload = {
"prompt": "<string>",
"images": "<string>",
"aspect_ratio": "auto",
"width": 3160,
"height": 3160,
"seed": 2147483647,
"safety_tolerance": 2,
"output_format": "jpeg",
"steps": 16,
"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>',
images: '<string>',
aspect_ratio: 'auto',
width: 3160,
height: 3160,
seed: 2147483647,
safety_tolerance: 2,
output_format: 'jpeg',
steps: 16,
webhook_url: '<string>'
})
};
fetch('https://api.ttapi.io/bfl/v1/flux-3-image-klein', 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-3-image-klein",
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>',
'images' => '<string>',
'aspect_ratio' => 'auto',
'width' => 3160,
'height' => 3160,
'seed' => 2147483647,
'safety_tolerance' => 2,
'output_format' => 'jpeg',
'steps' => 16,
'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-3-image-klein"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\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-3-image-klein")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\n \"webhook_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/bfl/v1/flux-3-image-klein")
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 \"images\": \"<string>\",\n \"aspect_ratio\": \"auto\",\n \"width\": 3160,\n \"height\": 3160,\n \"seed\": 2147483647,\n \"safety_tolerance\": 2,\n \"output_format\": \"jpeg\",\n \"steps\": 16,\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
Free-form prompt describing the image. Without images, it generates a new image from the prompt. With reference images, state what to change and refer to them in order as image 1 and image 2. Bounding boxes can be appended to the prompt, using a 0 to 1000 grid as [top, left, bottom, right].
Optional reference images. Omit them for text-to-image. When present, the prompt edits, restyles, or combines them. Each item is an http(s) URL or base64, 1 to 10 total. The first image is the picture being edited and sets the default output size.
Output aspect ratio. With auto, a reference image uses the first image's exact ratio; without references, a ratio is chosen from the prompt, otherwise 16:9. Ignored when width and height are both set.
auto, 21:9, 2:1, 16:9, 3:2, 7:5, 4:3, 5:4, 1:1, 4:5, 3:4, 5:7, 2:3, 9:16, 1:2, 9:21 Resolution tier: 768sq, 1k, 1.5k, 2k, or 4k. Omitted text-to-image requests use 1k. With a reference image and this field omitted, the first image's own size is used, or the nearest tier when aspect_ratio is also set. Ignored when width and height are both set.
768sq, 1k, 1.5k, 2k, 4k Output width in pixels, from 64 to 6256. Must be sent together with height, and overrides aspect_ratio and resolution. Width times height must not exceed 16822272 pixels.
64 <= x <= 6256Output height in pixels, from 64 to 6256. Must be sent together with width. Width times height must not exceed 16822272 pixels.
64 <= x <= 6256Seed used to reproduce a result. Random when omitted. Range: 0 to 4294967295.
0 <= x <= 4294967295Harm moderation tolerance from 0 to 7, with 0 the strictest. Default is 2. The route and organization determine the approved maximum and the ceiling for each category.
0 <= x <= 7Output image format.
jpeg, png Denoising steps. Default is 16. Range: 1 to 16.
1 <= x <= 16Async callback URL. The initial response returns jobId. Use this callback or the Flux fetch API to get the final image.