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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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" => "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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"": ""Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas"",
""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\":\"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas\","
"\"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": @"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
@"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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': 'Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas',
'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 = "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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
Generación de imágenes Seedream-5.0-Pro
- Modo de procesamiento asíncrono, devuelve un ID de tarea para consultas posteriores
- Admite text-to-image, generación con una imagen de referencia y con múltiples referencias (hasta 10)
- Admite niveles de resolución 1K / 1.5K / 2K, o píxeles exactos mediante
size - Modelo de una sola imagen: una imagen por solicitud; salida PNG / JPEG
- Los enlaces de las imágenes generadas son válidos durante 72 horas; guárdelos cuanto antes
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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" => "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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"": ""Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas"",
""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\":\"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas\","
"\"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": @"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
@"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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': 'Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas',
'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 = "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"size": "16:9",
"resolution": "2K"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "seedream-5-0-pro",
"prompt": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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" => "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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: "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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"": ""Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas"",
""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\":\"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas\","
"\"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": @"Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
@"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": "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
"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': 'Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas',
'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 = "Paisaje urbano nocturno de estilo ciberpunk, luces de neón reflejándose en las calles mojadas",
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"
}
}
Autorización
string
requerido
Todos los endpoints de la API requieren autenticación mediante Bearer TokenObtenga su clave de API:Visite la página de gestión de claves de API para obtener su clave de APIAñádala a la cabecera de la solicitud:
Authorization: Bearer YOUR_API_KEY
Modelo de imagen única:
seedream-5-0-pro genera solo 1 imagen por solicitud (excepto en la descomposición por capas). Los siguientes parámetros se rechazan (HTTP 400, sin tarea ni cobro):n > 1sequential_image_generation(no se admite la generación en grupo)stream(no se admite streaming)tools(no se admite la búsqueda web)- más de 10 elementos en
image_urls
Edición interactiva
Use coordenadas
<point> / <bbox> en el prompt o cargue una imagen con anotaciones dibujadas a mano para ubicar las ediciones con precisión.- Coordenadas de punto:
<point>x y</point>(especifican un solo punto; el modelo determina el área afectada) - Coordenadas de cuadro delimitador:
<bbox>x1 y1 x2 y2</bbox>(especifican las coordenadas superior izquierda e inferior derecha para controlar con precisión el tamaño del área de edición)
Descomposición por capas
Separe una imagen en una imagen base y hasta 16 capas PNG transparentes, con información de posición y orden de apilamiento.
Cuerpo de la solicitud
string
predeterminado:"seedream-5-0-pro"
requerido
Nombre del modelo de generación de imágenes
seedream-5-0-pro(recomendado)- También se acepta:
seedream-5.0-pro
boolean
predeterminado:"false"
Indica si se debe moderar el contenido antes de enviar la tarea de imagen.
true: revisar los prompts y las imágenes de entrada conomni-moderation-latestfalseu omitido: no enviar una solicitud de moderación, sin coste ni latencia de moderación adicionales (predeterminado)
string
requerido
Descripción textual para la generación de la imagenEs opcional cuando
layer_decomposition: true; si se omite, el modelo identifica y separa automáticamente los elementos principales de la imagen.Además de chino e inglés, la generación nativa de texto admite ruso, árabe, filipino, tailandés, turco, coreano, malayo, español, portugués, indonesio, francés, alemán, vietnamita y japonés.Consejo: manténgala en menos de 600 palabras en inglés; una descripción demasiado larga puede perder detalle.
string
predeterminado:"1K"
Nivel de resolución (se aceptan minúsculas). Es una extensión de API Mart equivalente a indicar el nivel directamente en
size.1K(predeterminado)1.5K(mismo precio que 1K, mejor calidad — prefiera 1.5K salvo motivo en contra)2K
size como nivel y resolution, prevalece size.Cuando
size es un valor de píxel exacto (p. ej. 2048x1024), este campo se ignora y las dimensiones salen solo de size.string
predeterminado:"auto"
Una palabra clave de nivel, una relación de aspecto, Ambas formas son equivalentes. Si solo se especifica un nivel, describa el diseño deseado en el prompt (por ejemplo, “cartel vertical” o “portada horizontal”) y deje que el modelo elija la relación de aspecto.
auto o dimensiones exactas en píxeles.Forma ①: nivel de resolución (recomendado)
El nivel puede indicarse directamente ensize o mediante el campo de extensión de API Mart resolution:{ "size": "2K" }
{ "resolution": "2K" }
Forma ②: nivel + relación de aspecto
Se usa conresolution. Proporciones admitidas:1:1,4:3,3:4,16:9,9:16,3:2,2:3,2:1,1:2,21:9- También acepta separador
xestilo16x9 2x1equivale a2:1y1x2equivale a1:2. Laxdebe escribirse en minúscula y no se admiten espacios.auto(predeterminado): solo el nivel de resolución; la proporción final se elige según el prompt / las referencias
9:21) devuelven 400 — sin fallback silencioso a 1:1.Nivel × proporción → píxeles de salida:| Resolución | 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" }
Forma ③: píxeles exactos
Cuandosize es widthxheight, los píxeles se usan tal cual y resolution no aplica. Acepta 2048X1024 / 2048×1024.| Restricción | Rango |
|---|---|
| Píxeles totales (ancho × alto) | [921600, 4624220] (aprox. 1280×720 ~ 2048×2048×1.1025) |
| Proporción (ancho / alto) | [1/16, 16] |
Los límites se aplican al producto de ancho y alto, no a cada lado por separado. Ejemplo:
512×512 es demasiado pequeño (400); 2048×1024 es válido.string
predeterminado:"opaque"
Modo de fondo de salida:
opaque: fondo opaco (predeterminado)transparent: fondo transparente
transparent solo está disponible para solicitudes de imagen a imagen con exactamente una imagen de entrada que ya tenga canal alfa; también se requiere output_format: "png".boolean
predeterminado:"false"
Indica si se descompone la imagen en capas. Al activarlo, el modelo devuelve una imagen base y hasta 16 capas PNG con canal alfa.Se requiere exactamente una imagen PNG o JPEG. Debe contener entre
[262144, 36000000] píxeles totales y no superar 30 MB. size solo acepta 1K, 1.5K, 2K o auto, y su valor predeterminado es auto. output_format solo controla el formato de la imagen base; las capas descompuestas siempre son PNG.object
predeterminado:"{\"mode\":\"standard\"}"
Modo de optimización del prompt:
standard: modo estándar con mejor calidad (predeterminado)
"optimize_prompt_options.mode": "standard".integer
predeterminado:"1"
Número de imágenes que se generarán. Solo se admite
1; use seedream-5-0-lite para generar grupos de imágenes.array
Lista de URL de imágenes de referencia para image-to-image con una / varias referencias, hasta 10Dos formatos:1. URL pública
http://ohttps://- Ejemplo:
https://example.com/image.jpg
- Formato:
data:image/<format>;base64,<data>—<format>debe ir en minúsculas - Ejemplo:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg...
- Formatos: jpeg / png / webp / bmp / tiff / gif / heic / heif
- Proporción (a/al):
[1/16, 16] - Cada lado > 14 px
- Tamaño ≤ 30 MB
- Píxeles totales ≤
6000×6000(36.000.000)
Facturación: la primera imagen de referencia es gratuita; cada imagen adicional tiene un recargo fijo.
string
predeterminado:"jpeg"
Formato de salida de la imagen
jpeg(predeterminado)png
Compatibilidad:response_formatequivale aoutput_format; otros valores se tratan comojpeg.
boolean
predeterminado:"false"
Si se añade una marca de agua “AI generated” en la esquina inferior derecha
true: añadir marca de aguafalse: sin marca de agua (predeterminado)
Ejemplos de solicitud
Text-to-image (nivel + proporción)
{
"model": "seedream-5-0-pro",
"prompt": "Escena nocturna de ciudad cyberpunk, reflejos de neón en calles mojadas",
"resolution": "2K",
"size": "2:1",
"output_format": "png"
}
Text-to-image (píxeles exactos)
{
"model": "seedream-5-0-pro",
"prompt": "Imagen hero de e-commerce minimalista, fondo blanco, producto centrado",
"size": "1600x1600"
}
Multi-referencia
{
"model": "seedream-5-0-pro",
"prompt": "Reemplazar el atuendo de la imagen 1 por el de la imagen 2",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/dress.jpg"
],
"resolution": "2K",
"size": "auto"
}
Recomendado: 1.5K mismo precio, mejor calidad
{
"model": "seedream-5-0-pro",
"prompt": "Un gato naranja lindo en el alféizar al sol de la tarde, cinematográfico",
"resolution": "1.5K",
"size": "16:9"
}
Descomposición por capas
{
"model": "seedream-5-0-pro",
"image_urls": ["https://example.com/poster.png"],
"layer_decomposition": true,
"size": "2K"
}
<bbox> normalizadas a 0–1000 para identificar con precisión los elementos que desea extraer:
{
"model": "seedream-5-0-pro",
"prompt": "Separa la imagen en capas precisas. El texto está en <bbox>180 64 812 198</bbox>; el loro está en <bbox>347 305 642 997</bbox>.",
"image_urls": ["https://example.com/poster.png"],
"layer_decomposition": true
}
Edición interactiva
Describa con lenguaje natural las anotaciones dibujadas a mano en la imagen:{
"model": "seedream-5-0-pro",
"prompt": "Edita la imagen según el boceto. Añade una pila de revistas en el área marcada abajo a la izquierda y una taza de café en el área marcada a la derecha. Elimina todas las líneas del boceto y conserva la composición.",
"image_urls": ["https://example.com/sketch.png"],
"size": "2K",
"output_format": "png"
}
<point> / <bbox>:
{
"model": "seedream-5-0-pro",
"prompt": "Coloca el sujeto de la imagen 1 en <bbox>179 283 796 986</bbox> dentro de la imagen 2, en <bbox>118 331 933 871</bbox>.",
"image_urls": [
"https://example.com/a.png",
"https://example.com/b.png"
]
}
Edición del canal alfa
{
"model": "seedream-5-0-pro",
"prompt": "Cambia el loro por un pavo real y conserva el fondo transparente",
"image_urls": ["https://cdn.example.com/images/layer.png"],
"background": "transparent",
"output_format": "png",
"size": "2K"
}
Ejemplo completo: enviar una tarea y obtener la imagen
El siguiente script muestra el flujo completo: enviar una tarea asíncrona, consultar su estado, gestionar los estados de error y leer la URL final de la imagen. SustituyaYOUR_API_KEY antes de ejecutarlo.
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. Enviar la tarea de generación
create_response = requests.post(
f"{BASE_URL}/v1/images/generations",
headers=headers,
json={
"model": "seedream-5-0-pro",
"prompt": "Un pueblo acuático de Jiangnan con estilo de tinta y una ligera niebla matinal",
"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"Tarea enviada: {task_id}")
# 2. Consultar el estado de la tarea
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"Estado: {status}; progreso: {task.get('progress', 0)}%")
if status == "success":
image = task["result"]["images"][0]
print("URL de la imagen:", image["url"][0])
print("Tamaño de la imagen:", image["sizes"][0])
print("Formato de la imagen:", image["output_formats"][0])
break
if status in {"failed", "cancelled"}:
raise RuntimeError(task.get("error", f"Tarea {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
}
]
}
}
Las imágenes devueltas se replican en almacenamiento administrado por la plataforma. Aun así, descárguelas y guárdelas cuanto antes en su propio sistema; no trate la URL del resultado como almacenamiento permanente.
Escenarios completos con cURL
Composición de varias imágenes (hasta 10 referencias)
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": "Coloca a la persona de la imagen 1 en la escena de la imagen 2 y unifica la iluminación al atardecer",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "1.5K",
"size": "16:9",
"output_format": "png"
}'
Píxeles exactos, optimización del prompt y marca de agua
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": "Un horizonte urbano ciberpunk con luces de neón reflejadas en calles mojadas",
"size": "2048x1024",
"optimize_prompt_options": { "mode": "standard" },
"watermark": true
}'
Descomponer y editar una capa transparente por separado
Primero, descomponga la imagen de origen: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": "Cambia el loro de la imagen por un pavo real",
"image_urls": ["https://cdn.example.com/images/image_task_xxx_4.png"],
"background": "transparent",
"output_format": "png",
"size": "2K"
}'
Respuesta y reconstrucción de la descomposición por capas
Los arraysurl, sizes, output_formats y layers se corresponden por índice; el índice 0 siempre es la imagen base:
{
"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": "Texto del título",
"description": "Texto de título amarillo grande con tipografía serif",
"bounding_box": {
"absolute": [383, 120, 1655, 384],
"normalized": [187, 59, 808, 188]
}
},
{
"z_index": 2,
"size": "492x98",
"output_format": "png",
"name": "Eslogan superior izquierdo",
"description": "Eslogan en inglés de dos líneas en blanco",
"bounding_box": {
"absolute": [140, 451, 631, 548],
"normalized": [68, 220, 308, 268]
}
}
]
}]
}
}
z_index. Para reconstruirlas sobre la imagen base de salida con coordenadas absolutas:
x = left
y = top
w = right - left
h = bottom - top
W × H, use coordenadas normalizadas:
x = left / 1000 × W
y = top / 1000 × H
w = (right - left) / 1000 × W
h = (bottom - top) / 1000 × H
La descomposición por capas se factura por imagen. Al enviar la tarea se preautorizan hasta 17 imágenes. Al finalizar, cada salida se clasifica según su cantidad real de píxeles y se liquida por separado; cualquier exceso de preautorización se reembolsa automáticamente. El saldo debe cubrir la preautorización de 17 imágenes y
size: "auto" se preautoriza en el nivel 2K.Notas de facturación
Total = precio unitario de salida + recargo por referencias × max(0, n.º_refs − 1)
| Condición | Precio unitario |
|---|---|
Píxeles totales ≤ 2.61M (1.5K o inferior: resolution 1K / 1.5K / omitido, o píxeles exactos ≤ 2,601,124) | $0.045 / imagen |
Píxeles totales > 2.61M (superior a 1.5K: resolution: "2K", o píxeles exactos > 2,601,124) | $0.09 / imagen |
- 1.5K cuesta lo mismo que 1K ($0.045).
- Con píxeles exactos en
size, la facturación usa el área de salida real;resolutionno influye (p. ej.size: "2048x2048"→ $0.09). - La 1.ª imagen de referencia es gratis; cada una adicional tiene recargo.
- Las tareas fallidas se reembolsan por completo.
Preautorización y liquidación de la descomposición por capas
Como al enviar la tarea no se conocen el número ni las dimensiones finales de las capas, la preautorización aplica reglas conservadoras basadas en la solicitud:- Píxeles exactos: nivel según el área de píxeles solicitada.
1K/1.5K: preautorizado en el nivel 1K.2K: preautorizado en el nivel 2K.auto: puede generar hasta 2K, por lo que se preautoriza en el nivel 2K.
Ejemplo: una entrada de
1080×1080 se descompone en 10 imágenes. La tarea se preautoriza como 17 imágenes × nivel 2K. Si las 10 imágenes finales no superan 2,61 millones de píxeles, se liquida como 10 imágenes × nivel 1K y el crédito restante se reembolsa automáticamente.Errores comunes
| Caso | Notas |
|---|---|
Nivel resolution no admitido | p. ej. 3K / 4K → 400 |
Valor de size no admitido | No es 1K / 1.5K / 2K / auto, una relación de aspecto admitida ni dimensiones de píxeles válidas → 400 |
| Total de píxeles exactos fuera de rango | Debe estar en [921600, 4624220] |
| Proporción de píxeles exactos fuera de rango | Debe estar en [1/16, 16] |
n > 1 / parámetros de imágenes agrupadas | Rechazado por el modelo de imagen única |
| Más de 10 imágenes de referencia | Rejected |
| Descomposición sin imagen o con varias imágenes | Se requiere exactamente una imagen |
| Descomposición con relación o píxeles exactos | size solo admite 1K / 1.5K / 2K / auto |
| Fondo transparente para texto a imagen o varias entradas | Se requiere exactamente una imagen de entrada con canal alfa |
| Fondo transparente con JPEG | Establezca output_format: "png" |
stream / tools | No admitido por este modelo; devuelve 400 |
| Modo de optimización del prompt no válido | Solo se admite standard |
⏱️ Generación más lenta: ~90 s para 1K y ~160 s para 2K (prioridad a la calidad). Consulte Obtener estado de la tarea cada 5–10 segundos y configure el tiempo de espera del cliente en 5 minutos. Guarde los resultados generados cuanto antes.
Respuesta
integer
Código de estado de la respuesta