curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "krea-2-turbo",
"prompt": "A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting",
"size": "16:9",
"quality": "1K"
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "krea-2-turbo",
"prompt": "A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting",
"size": "16:9",
"quality": "1K"
}
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({
model: 'krea-2-turbo',
prompt: 'A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting',
size: '16:9',
quality: '1K'
})
};
fetch('https://api.evolink.ai/v1/images/generations', 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.evolink.ai/v1/images/generations",
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([
'model' => 'krea-2-turbo',
'prompt' => 'A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting',
'size' => '16:9',
'quality' => '1K'
]),
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://api.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\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://api.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/images/generations")
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 \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1751280000,
"id": "task-unified-1751280000-k2t9x8a3",
"model": "krea-2-turbo",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 0.05,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: krea-2-turbo",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Krea 2 Turbo Image Generation
- Krea 2 Turbo is an ultra-fast text-to-image generation model that produces high-fidelity, cinematic visuals
- Text-to-image only; reference images are not supported
- Asynchronous processing mode, use the returned task ID to query
- Generated image links are valid for 24 hours, please save them promptly
curl --request POST \
--url https://api.evolink.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "krea-2-turbo",
"prompt": "A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting",
"size": "16:9",
"quality": "1K"
}
'import requests
url = "https://api.evolink.ai/v1/images/generations"
payload = {
"model": "krea-2-turbo",
"prompt": "A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting",
"size": "16:9",
"quality": "1K"
}
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({
model: 'krea-2-turbo',
prompt: 'A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting',
size: '16:9',
quality: '1K'
})
};
fetch('https://api.evolink.ai/v1/images/generations', 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.evolink.ai/v1/images/generations",
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([
'model' => 'krea-2-turbo',
'prompt' => 'A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting',
'size' => '16:9',
'quality' => '1K'
]),
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://api.evolink.ai/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\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://api.evolink.ai/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.evolink.ai/v1/images/generations")
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 \"model\": \"krea-2-turbo\",\n \"prompt\": \"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting\",\n \"size\": \"16:9\",\n \"quality\": \"1K\"\n}"
response = http.request(request)
puts response.read_body{
"created": 1751280000,
"id": "task-unified-1751280000-k2t9x8a3",
"model": "krea-2-turbo",
"object": "image.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 45
},
"type": "image",
"usage": {
"billing_rule": "per_call",
"credits_reserved": 0.05,
"user_group": "default"
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: krea-2-turbo",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Authorizations
##All APIs require Bearer Token authentication##
Get API Key:
Visit API Key Management Page to get your API Key
Add to request header:
Authorization: Bearer YOUR_API_KEY
Body
Image generation model name
krea-2-turbo "krea-2-turbo"
Prompt describing the image to be generated. English works best, with a maximum length of 640 tokens
"A cinematic product poster, silver headphones floating against a deep matte-black backdrop with soft rim lighting"
Aspect ratio of the generated image; defaults to 1:1 when omitted. The actual output pixels are determined jointly by size and quality.
Supported ratios (11 total): 1:1, 4:3, 3:4, 5:4, 4:5, 2:3, 3:2, 9:16, 16:9, 1:2, 2:1
Output pixel reference (size × quality):
| Ratio | 1K | 2K |
|---|---|---|
1:1 | 1024×1024 | 2048×2048 |
4:3 | 1152×896 | 2304×1728 |
3:4 | 896×1152 | 1728×2304 |
5:4 | 1152×896 | 2240×1792 |
4:5 | 896×1152 | 1792×2240 |
2:3 | 832×1280 | 1664×2496 |
3:2 | 1280×832 | 2496×1664 |
9:16 | 768×1344 | 1472×2688 |
16:9 | 1344×768 | 2688×1472 |
1:2 | 704×1472 | 1408×2816 |
2:1 | 1472×704 | 2816×1408 |
1:1, 4:3, 3:4, 5:4, 4:5, 2:3, 3:2, 9:16, 16:9, 1:2, 2:1 "16:9"
Output resolution tier 1K / 2K; defaults to 1K when omitted. 2K produces higher-resolution images than 1K. Billing differs by tier — see the pricing page
1K, 2K "1K"
Random seed for generating similar compositions
Note:
- Range:
0to1048576 0or empty uses a random seed- Same seed with same prompt may reproduce the same composition
0 <= x <= 104857612345
Enable additional NSFW content moderation
Note:
- Default:
false(disabled) - Basic content moderation is always active even when disabled
- Enable for stricter content filtering
false
HTTPS callback address after task completion
Callback Timing:
- Triggered when task is completed, failed, or cancelled
- Sent after billing confirmation is completed
Security Restrictions:
- Only HTTPS protocol is supported
- Callback to internal IP addresses is prohibited (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- URL length must not exceed
2048characters
Callback Mechanism:
- Timeout:
10seconds - Maximum
3retries on failure (retries after1second/2seconds/4seconds) - Callback response body format is consistent with the task query API response format
- Callback address returning 2xx status code is considered successful, other status codes will trigger retry
"https://your-domain.com/webhooks/image-task-completed"
Response
Image generation task created successfully
Task creation timestamp
1751280000
Task ID
"task-unified-1751280000-k2t9x8a3"
Actual model name used
"krea-2-turbo"
Specific type of the task
image.generation.task Task progress percentage (0-100)
0 <= x <= 1000
Task status
pending, processing, completed, failed "pending"
Async task information
Show child attributes
Show child attributes
Output type of the task
text, image, audio, video "image"
Usage and billing information
Show child attributes
Show child attributes