curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "seedream-5-0-pro",
"prompt" => "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size" => "16:9",
"resolution" => "2K"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/images/generations";
var payload = @"{
""model"": ""seedream-5-0-pro"",
""prompt"": ""Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах"",
""size"": ""16:9"",
""resolution"": ""2K""
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"seedream-5-0-pro\","
"\"prompt\":\"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах\","
"\"size\":\"16:9\","
"\"resolution\":\"2K\""
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"seedream-5-0-pro",
@"prompt": @"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
@"size": @"16:9",
@"resolution": @"2K"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/images/generations');
final payload = {
'model': 'seedream-5-0-pro',
'prompt': 'Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах',
'size': '16:9',
'resolution': '2K'
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/images/generations"
payload <- list(
model = "seedream-5-0-pro",
prompt = "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size = "16:9",
resolution = "2K"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error. Please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Bad gateway. The server is temporarily unavailable",
"type": "bad_gateway"
}
}
Seedream-5.0-Pro
Генерация изображений Seedream-5.0-Pro
- Асинхронный режим обработки, возвращает идентификатор задачи для последующих запросов
- Поддерживает text-to-image, image-to-image с одним изображением и с несколькими референсными изображениями (до 10)
- Поддерживает уровни разрешения 1K / 1.5K / 2K или точные пиксели через
size - Модель одиночного изображения: 1 изображение за запрос; вывод PNG / JPEG
- Ссылки на сгенерированные изображения действительны в течение 72 часов, своевременно сохраняйте их
POST
/
v1
/
images
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "seedream-5-0-pro",
"prompt" => "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size" => "16:9",
"resolution" => "2K"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/images/generations";
var payload = @"{
""model"": ""seedream-5-0-pro"",
""prompt"": ""Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах"",
""size"": ""16:9"",
""resolution"": ""2K""
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"seedream-5-0-pro\","
"\"prompt\":\"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах\","
"\"size\":\"16:9\","
"\"resolution\":\"2K\""
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"seedream-5-0-pro",
@"prompt": @"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
@"size": @"16:9",
@"resolution": @"2K"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/images/generations');
final payload = {
'model': 'seedream-5-0-pro',
'prompt': 'Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах',
'size': '16:9',
'resolution': '2K'
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/images/generations"
payload <- list(
model = "seedream-5-0-pro",
prompt = "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size = "16:9",
resolution = "2K"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error. Please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Bad gateway. The server is temporarily unavailable",
"type": "bad_gateway"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.apimart.ai/v1/images/generations"
payload := map[string]interface{}{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K",
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer <token>")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/images/generations";
String payload = """
{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/images/generations";
$payload = [
"model" => "seedream-5-0-pro",
"prompt" => "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size" => "16:9",
"resolution" => "2K"
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer <token>",
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/images/generations")
payload = {
model: "seedream-5-0-pro",
prompt: "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size: "16:9",
resolution: "2K"
}
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 = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/images/generations")!
let payload: [String: Any] = [
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/images/generations";
var payload = @"{
""model"": ""seedream-5-0-pro"",
""prompt"": ""Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах"",
""size"": ""16:9"",
""resolution"": ""2K""
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
int main(void) {
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/images/generations";
const char *payload = "{"
"\"model\":\"seedream-5-0-pro\","
"\"prompt\":\"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах\","
"\"size\":\"16:9\","
"\"resolution\":\"2K\""
"}";
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/images/generations"];
NSDictionary *payload = @{
@"model": @"seedream-5-0-pro",
@"prompt": @"Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
@"size": @"16:9",
@"resolution": @"2K"
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer <token>" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/images/generations"
let payload = {|{
"model": "seedream-5-0-pro",
"prompt": "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
"size": "16:9",
"resolution": "2K"
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" "Bearer <token>"
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/images/generations');
final payload = {
'model': 'seedream-5-0-pro',
'prompt': 'Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах',
'size': '16:9',
'resolution': '2K'
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer <token>',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/images/generations"
payload <- list(
model = "seedream-5-0-pro",
prompt = "Городской ночной пейзаж в стиле киберпанк, неоновые огни отражаются на мокрых улицах",
size = "16:9",
resolution = "2K"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K"
}
]
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Invalid authentication credentials",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance. Please top up your account",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden. You don't have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Rate limit exceeded. Please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error. Please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Bad gateway. The server is temporarily unavailable",
"type": "bad_gateway"
}
}
Авторизация
string
обязательно
Все конечные точки API требуют аутентификации Bearer TokenПолучите свой API Key:Перейдите на страницу управления API ключами, чтобы получить свой API KeyДобавьте его в заголовок запроса:
Authorization: Bearer YOUR_API_KEY
Модель одиночных изображений:
seedream-5-0-pro создаёт только 1 изображение за запрос (кроме декомпозиции на слои). Следующие параметры отклоняются (HTTP 400, задача не создаётся, оплата не списывается):n > 1sequential_image_generation(групповая генерация не поддерживается)stream(потоковая передача не поддерживается)tools(веб-поиск не поддерживается)- более 10 элементов в
image_urls
Интерактивное редактирование
Используйте координаты
<point> / <bbox> в промпте или загрузите изображение с рукописными пометками, чтобы точно указать область редактирования.- Координаты точки:
<point>x y</point>(задают одну точку; модель определяет область воздействия) - Координаты ограничивающей рамки:
<bbox>x1 y1 x2 y2</bbox>(задают координаты левого верхнего и правого нижнего углов для точного управления размером области редактирования)
Декомпозиция на слои
Разделите одно изображение на базовое изображение и до 16 прозрачных PNG-слоёв с данными о позиции и порядке наложения.
Тело запроса
string
по умолчанию:"seedream-5-0-pro"
обязательно
Название модели генерации изображений
seedream-5-0-pro(рекомендуется)- Также принимается:
seedream-5.0-pro
boolean
по умолчанию:"false"
Выполнять ли проверку содержимого перед отправкой задачи генерации изображения.
true: проверить промпты и входные изображения с помощьюomni-moderation-latestfalseили параметр не указан: не отправлять запрос на проверку, без дополнительных затрат и задержки (по умолчанию)
string
обязательно
Текстовое описание для генерации изображенияНеобязателен при
layer_decomposition: true; если опущен, модель автоматически определит и разделит основные элементы изображения.Помимо китайского и английского, нативная генерация текста поддерживает русский, арабский, филиппинский, тайский, турецкий, корейский, малайский, испанский, португальский, индонезийский, французский, немецкий, вьетнамский и японский языки.Совет: не более 600 английских слов; слишком длинное описание может привести к потере деталей.
string
по умолчанию:"1K"
Уровень разрешения (допускается нижний регистр). Это расширение API Mart, эквивалентное прямому указанию уровня в
size.1K(по умолчанию)1.5K(та же цена, что у 1K, лучше качество — предпочтительно 1.5K, если нет причин иначе)2K
size в виде уровня и resolution, приоритет имеет size.Когда
size — точное значение в пикселях (например 2048x1024), это поле игнорируется, размеры берутся только из size.string
по умолчанию:"auto"
Ключевое слово уровня, соотношение сторон, Эти форматы эквивалентны. Если задан только уровень, опишите желаемую компоновку в промпте (например, “вертикальный плакат” или “горизонтальная обложка”) и позвольте модели выбрать соотношение сторон.
auto или точные размеры в пикселях.Формат ①: уровень разрешения (рекомендуется)
Уровень можно указать непосредственно вsize или через поле расширения API Mart resolution:{ "size": "2K" }
{ "resolution": "2K" }
Формат ②: уровень + соотношение сторон
Используется сresolution. Поддерживаемые соотношения:1:1,4:3,3:4,16:9,9:16,3:2,2:3,2:1,1:2,21:9- Также принимается разделитель
xв стиле16x9 2x1эквивалентно2:1, а1x2—1:2. Символxдолжен быть строчным; пробелы не допускаются.auto(по умолчанию): применяется только уровень разрешения; итоговое соотношение выбирается по prompt / референсам
9:21) возвращают 400 — без тихого отката к 1:1.Уровень × соотношение → пиксели вывода:| Разрешение | 1:1 | 4:3 | 3:4 | 16:9 | 9:16 | 3:2 | 2:3 | 2:1 | 1:2 | 21:9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 1K | 1024×1024 | 1152×864 | 864×1152 | 1312×736 | 736×1312 | 1248×832 | 832×1248 | 1440×720 | 720×1440 | 1568×672 |
| 1.5K | 1536×1536 | 1792×1344 | 1344×1792 | 2048×1152 | 1152×2048 | 1872×1248 | 1248×1872 | 2176×1088 | 1088×2176 | 2352×1008 |
| 2K | 2048×2048 | 2304×1728 | 1728×2304 | 2560×1440 | 1440×2560 | 2496×1664 | 1664×2496 | 2880×1440 | 1440×2880 | 3024×1296 |
{ "resolution": "2K", "size": "2:1" }
Формат ③: точные пиксели
Когдаsize — widthxheight, пиксели используются как есть, resolution не применяется. Принимаются 2048X1024 / 2048×1024.| Ограничение | Диапазон |
|---|---|
| Всего пикселей (ширина × высота) | [921600, 4624220] (примерно 1280×720 ~ 2048×2048×1.1025) |
| Соотношение сторон (ширина / высота) | [1/16, 16] |
Ограничения применяются к произведению ширины и высоты, а не к каждой стороне отдельно. Пример:
512×512 слишком мало (400); 2048×1024 допустимо.string
по умолчанию:"opaque"
Режим фона выходного изображения:
opaque: непрозрачный фон (по умолчанию)transparent: прозрачный фон
transparent доступен только для запросов image-to-image с ровно одним входным изображением, уже содержащим альфа-канал; также требуется output_format: "png".boolean
по умолчанию:"false"
Указывает, нужно ли разложить изображение на слои. При включении модель возвращает одно базовое изображение и до 16 PNG-слоёв с альфа-каналами.Требуется ровно одно изображение PNG или JPEG. Оно должно содержать от
[262144, 36000000] пикселей и иметь размер не более 30 МБ. size принимает только 1K, 1.5K, 2K или auto; по умолчанию — auto. output_format управляет только форматом базового изображения; слои всегда возвращаются в PNG.object
по умолчанию:"{\"mode\":\"standard\"}"
Режим оптимизации промпта:
standard: стандартный режим с лучшим качеством (по умолчанию)
"optimize_prompt_options.mode": "standard".integer
по умолчанию:"1"
Число создаваемых изображений. Поддерживается только
1; для групповой генерации используйте seedream-5-0-lite.array
Список URL референсных изображений для image-to-image с одним / несколькими референсами, до 10Два формата:1. Публичный URL
http://илиhttps://- Пример:
https://example.com/image.jpg
- Формат:
data:image/<format>;base64,<data>—<format>должен быть в нижнем регистре - Пример:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg...
- Форматы: jpeg / png / webp / bmp / tiff / gif / heic / heif
- Соотношение сторон (w/h):
[1/16, 16] - Каждая сторона > 14 px
- Размер ≤ 30 MB
- Всего пикселей ≤
6000×6000(36,000,000)
Тарификация: первое референсное изображение бесплатно; каждое дополнительное — фиксированная доплата.
string
по умолчанию:"jpeg"
Формат выходного изображения
jpeg(по умолчанию)png
Совместимость:response_formatэквивалентенoutput_format; прочие значения обрабатываются какjpeg.
boolean
по умолчанию:"false"
Добавлять ли водяной знак “AI generated” в правом нижнем углу
true: добавить водяной знакfalse: без водяного знака (по умолчанию)
Примеры запросов
Text-to-image (уровень + соотношение)
{
"model": "seedream-5-0-pro",
"prompt": "Киберпанк ночной город, неон отражается на мокрых улицах",
"resolution": "2K",
"size": "2:1",
"output_format": "png"
}
Text-to-image (точные пиксели)
{
"model": "seedream-5-0-pro",
"prompt": "Минималистичный e-commerce hero, белый фон, товар по центру",
"size": "1600x1600"
}
Несколько референсов
{
"model": "seedream-5-0-pro",
"prompt": "Заменить одежду на изображении 1 одеждой с изображения 2",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/dress.jpg"
],
"resolution": "2K",
"size": "auto"
}
Рекомендуется: 1.5K та же цена, лучше качество
{
"model": "seedream-5-0-pro",
"prompt": "Милый рыжий кот на подоконнике в послеобеденном солнце, кинематографично",
"resolution": "1.5K",
"size": "16:9"
}
Декомпозиция на слои
{
"model": "seedream-5-0-pro",
"image_urls": ["https://example.com/poster.png"],
"layer_decomposition": true,
"size": "2K"
}
<bbox>, нормализованные к 0–1000, чтобы точно указать извлекаемые элементы:
{
"model": "seedream-5-0-pro",
"prompt": "Точно раздели изображение на слои. Текст находится в <bbox>180 64 812 198</bbox>; попугай — в <bbox>347 305 642 997</bbox>.",
"image_urls": ["https://example.com/poster.png"],
"layer_decomposition": true
}
Интерактивное редактирование
Опишите рукописные пометки на изображении естественным языком:{
"model": "seedream-5-0-pro",
"prompt": "Отредактируй изображение по эскизу. Добавь стопку журналов в отмеченной области слева внизу и чашку кофе в отмеченной области справа. Удали все линии эскиза и сохрани композицию.",
"image_urls": ["https://example.com/sketch.png"],
"size": "2K",
"output_format": "png"
}
<point> / <bbox>:
{
"model": "seedream-5-0-pro",
"prompt": "Помести объект из изображения 1 в <bbox>179 283 796 986</bbox> на изображение 2 в позицию <bbox>118 331 933 871</bbox>.",
"image_urls": [
"https://example.com/a.png",
"https://example.com/b.png"
]
}
Редактирование альфа-канала
{
"model": "seedream-5-0-pro",
"prompt": "Замени попугая на павлина, сохранив прозрачный фон",
"image_urls": ["https://cdn.example.com/images/layer.png"],
"background": "transparent",
"output_format": "png",
"size": "2K"
}
Полный пример: отправка задачи и получение изображения
Скрипт ниже показывает полный цикл: отправку асинхронной задачи, опрос её статуса, обработку ошибок и чтение итогового URL изображения. Перед запуском заменитеYOUR_API_KEY.
Python
import time
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.apimart.ai"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# 1. Отправка задачи генерации
create_response = requests.post(
f"{BASE_URL}/v1/images/generations",
headers=headers,
json={
"model": "seedream-5-0-pro",
"prompt": "Водный город Цзяннань в стиле тушевой живописи, лёгкий утренний туман",
"resolution": "1.5K",
"size": "16:9",
"output_format": "png",
},
timeout=30,
)
create_response.raise_for_status()
task_id = create_response.json()["data"][0]["task_id"]
print(f"Задача отправлена: {task_id}")
# 2. Опрос статуса задачи
while True:
task_response = requests.get(
f"{BASE_URL}/v1/tasks/{task_id}",
headers=headers,
timeout=30,
)
task_response.raise_for_status()
task = task_response.json()
status = task["status"]
print(f"Статус: {status}; прогресс: {task.get('progress', 0)}%")
if status == "success":
image = task["result"]["images"][0]
print("URL изображения:", image["url"][0])
print("Размер изображения:", image["sizes"][0])
print("Формат изображения:", image["output_formats"][0])
break
if status in {"failed", "cancelled"}:
raise RuntimeError(task.get("error", f"Задача {status}"))
time.sleep(5)
{
"id": "task_01JFXYZ123456789ABCDEF",
"status": "success",
"progress": 100,
"cost": 0.045,
"result": {
"images": [
{
"url": ["https://cdn.example.com/images/image_task_xxx_0.png"],
"sizes": ["2048x1152"],
"output_formats": ["png"],
"expires_at": 1784696685
}
]
}
}
Возвращаемые изображения зеркалируются в хранилище под управлением платформы. Всё равно своевременно скачайте и сохраните их в своей системе; не считайте URL результата постоянным хранилищем.
Полные сценарии cURL
Композиция из нескольких изображений (до 10 референсов)
curl -X POST "https://api.apimart.ai/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-5-0-pro",
"prompt": "Помести человека с изображения 1 в сцену с изображения 2 и приведи освещение к сумеречному",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "1.5K",
"size": "16:9",
"output_format": "png"
}'
Точные пиксели, оптимизация промпта и водяной знак
curl -X POST "https://api.apimart.ai/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-5-0-pro",
"prompt": "Городской горизонт в стиле киберпанк с неоном, отражающимся на мокрых улицах",
"size": "2048x1024",
"optimize_prompt_options": { "mode": "standard" },
"watermark": true
}'
Декомпозиция и отдельное редактирование прозрачного слоя
Сначала разложите исходное изображение:curl -X POST "https://api.apimart.ai/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-5-0-pro",
"image_urls": ["https://example.com/poster.png"],
"layer_decomposition": true,
"size": "2K"
}'
curl -X POST "https://api.apimart.ai/v1/images/generations" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedream-5-0-pro",
"prompt": "Замени попугая на изображении на павлина",
"image_urls": ["https://cdn.example.com/images/image_task_xxx_4.png"],
"background": "transparent",
"output_format": "png",
"size": "2K"
}'
Ответ декомпозиции на слои и реконструкция
Массивыurl, sizes, output_formats и layers соответствуют друг другу по индексу; индекс 0 всегда обозначает базовое изображение:
{
"result": {
"images": [{
"url": [
"https://cdn.example.com/images/image_task_xxx_0.jpeg",
"https://cdn.example.com/images/image_task_xxx_1.png",
"https://cdn.example.com/images/image_task_xxx_2.png"
],
"sizes": ["2048x2048", "1273x265", "492x98"],
"output_formats": ["jpeg", "png", "png"],
"layer_decomposition": true,
"layers": [
{ "z_index": 0, "size": "2048x2048", "output_format": "jpeg" },
{
"z_index": 1,
"size": "1273x265",
"output_format": "png",
"name": "Текст заголовка",
"description": "Крупный жёлтый текст заголовка шрифтом с засечками",
"bounding_box": {
"absolute": [383, 120, 1655, 384],
"normalized": [187, 59, 808, 188]
}
},
{
"z_index": 2,
"size": "492x98",
"output_format": "png",
"name": "Слоган слева вверху",
"description": "Белый двухстрочный слоган на английском",
"bounding_box": {
"absolute": [140, 451, 631, 548],
"normalized": [68, 220, 308, 268]
}
}
]
}]
}
}
z_index. Для реконструкции на базовом выходном изображении по абсолютным координатам:
x = left
y = top
w = right - left
h = bottom - top
W × H используйте нормализованные координаты:
x = left / 1000 × W
y = top / 1000 × H
w = (right - left) / 1000 × W
h = (bottom - top) / 1000 × H
Декомпозиция на слои оплачивается за каждое изображение. При отправке задачи предавторизуется до 17 изображений. После завершения каждому выходу назначается уровень по фактическому числу пикселей и он оплачивается отдельно; излишек предавторизации возвращается автоматически. Баланс должен покрывать предавторизацию 17 изображений, а
size: "auto" предавторизуется на уровне 2K.Примечания по тарификации
Итого = цена за выход + надбавка за референсы × max(0, число_референсов − 1)
| Условие | Цена |
|---|---|
Всего пикселей ≤ 2.61M (1.5K и ниже: resolution 1K / 1.5K / не указан, или точные пиксели ≤ 2,601,124) | $0.045 / изображение |
Всего пикселей > 2.61M (выше 1.5K: resolution: "2K", или точные пиксели > 2,601,124) | $0.09 / изображение |
- 1.5K стоит столько же, сколько 1K ($0.045).
- При точных пикселях в
sizeучитывается фактическая площадь;resolutionне влияет (напримерsize: "2048x2048"→ $0.09). - Первое референс-изображение бесплатно; каждое следующее — с надбавкой.
- При сбое задачи — полный автоматический возврат.
Предавторизация и расчёт декомпозиции на слои
Поскольку при отправке задачи конечное число и размеры слоёв неизвестны, предавторизация использует консервативные правила по параметрам запроса:- Точные пиксели: уровень по запрошенной площади в пикселях.
1K/1.5K: предавторизация на уровне 1K.2K: предавторизация на уровне 2K.auto: может выводить до 2K, поэтому предавторизуется на уровне 2K.
Пример: вход
1080×1080 разлагается на 10 изображений. Задача предавторизуется как 17 изображений × уровень 2K. Если все 10 итоговых изображений содержат не более 2,61 млн пикселей, расчёт идёт как 10 изображений × уровень 1K, а остаток средств возвращается автоматически.Типичные ошибки
| Случай | Примечания |
|---|---|
Неподдерживаемый уровень resolution | напр. 3K / 4K → 400 |
Неподдерживаемое значение size | Не 1K / 1.5K / 2K / auto, не поддерживаемое соотношение сторон и не допустимые размеры в пикселях → 400 |
| Сумма точных пикселей вне диапазона | Должно быть в [921600, 4624220] |
| Соотношение точных пикселей вне диапазона | Должно быть в [1/16, 16] |
n > 1 / параметры групповых изображений | Отклоняется моделью одиночных изображений |
| Более 10 референсных изображений | Rejected |
| Декомпозиция без изображения или с несколькими изображениями | Требуется ровно одно изображение |
| Декомпозиция с соотношением сторон или точными пикселями | size поддерживает только 1K / 1.5K / 2K / auto |
| Прозрачный фон для text-to-image или нескольких входов | Требуется ровно одно входное изображение с альфа-каналом |
| Прозрачный фон с JPEG | Установите output_format: "png" |
stream / tools | Не поддерживается этой моделью; возвращает 400 |
| Недопустимый режим оптимизации промпта | Поддерживается только standard |
⏱️ Более медленная генерация: около 90 с для 1K и 160 с для 2K (приоритет качества). Опрашивайте статус задачи каждые 5–10 секунд и установите тайм-аут клиента на 5 минут. Своевременно сохраняйте созданные результаты.
Ответ
integer
Код состояния ответа