cURL
curl --request POST \
--url https://api.ttapi.io/flux/generate \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"mode": "flux1-dev",
"size": "1024x1024",
"aspect_ratio": "1:1",
"hookUrl": "<string>"
}
'import requests
url = "https://api.ttapi.io/flux/generate"
payload = {
"prompt": "<string>",
"mode": "flux1-dev",
"size": "1024x1024",
"aspect_ratio": "1:1",
"hookUrl": "<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>',
mode: 'flux1-dev',
size: '1024x1024',
aspect_ratio: '1:1',
hookUrl: '<string>'
})
};
fetch('https://api.ttapi.io/flux/generate', 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/flux/generate",
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>',
'mode' => 'flux1-dev',
'size' => '1024x1024',
'aspect_ratio' => '1:1',
'hookUrl' => '<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/flux/generate"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<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/flux/generate")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/flux/generate")
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 \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<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."
}TTAPI Format
Flux Image Generation API Documentation
Use the Flux image generation API to create high-quality images from text prompts for creative, product, and automated visual workflows.
POST
/
flux
/
generate
cURL
curl --request POST \
--url https://api.ttapi.io/flux/generate \
--header 'Content-Type: application/json' \
--header 'TT-API-KEY: <api-key>' \
--data '
{
"prompt": "<string>",
"mode": "flux1-dev",
"size": "1024x1024",
"aspect_ratio": "1:1",
"hookUrl": "<string>"
}
'import requests
url = "https://api.ttapi.io/flux/generate"
payload = {
"prompt": "<string>",
"mode": "flux1-dev",
"size": "1024x1024",
"aspect_ratio": "1:1",
"hookUrl": "<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>',
mode: 'flux1-dev',
size: '1024x1024',
aspect_ratio: '1:1',
hookUrl: '<string>'
})
};
fetch('https://api.ttapi.io/flux/generate', 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/flux/generate",
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>',
'mode' => 'flux1-dev',
'size' => '1024x1024',
'aspect_ratio' => '1:1',
'hookUrl' => '<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/flux/generate"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<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/flux/generate")
.header("TT-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ttapi.io/flux/generate")
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 \"mode\": \"flux1-dev\",\n \"size\": \"1024x1024\",\n \"aspect_ratio\": \"1:1\",\n \"hookUrl\": \"<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
application/json
Note: The synchronous response from the Flux image generation endpoint is not the final result of the task. The final result needs to be received via asynchronous notification using the hookUrl parameter, or by querying through the Flux fetch task result [blocked] endpoint.
Image description. Note: Flux supports multilingual understanding, but English performs best in testing.
Model version
Available options:
flux1-dev, flux1-pro, flux-kontext-pro, flux-kontext-max, flux-2-pro, flux-2-flex, flux-2-max, flux-2-klein-4b, flux-2-klein-9b Example:
"flux1-dev"
Image size
Available options:
1024x1024, 1024x1792, 1792x1024 Example:
"1024x1024"
Aspect ratio
Available options:
21:9, 16:9, 4:3, 3:2, 1:1, 2:3, 3:4, 9:16, 9:21 Example:
"1:1"
Callback notification URL
Last modified on March 21, 2026