curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤 도쿄 거리, 젖은 도로에 반사되는 네온사인, 영화 같은 사진",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "<IMAGE_0>의 인물을 <IMAGE_1>의 장면에 넣고, 조명은 동일하게 유지합니다",
"image_url": [
"https://example.com/person.png",
"https://example.com/scene.png"
],
"aspect_ratio": "16:9",
"resolution": "1K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_edit_001"
}'
const response = await fetch("https://aireiter.com/api/openapi/submit", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "grok_imagine_image_2_0",
params: {
prompt: "미니멀한 흰색 사진 스튜디오의 파란색 세라믹 컵, 부드러운 제품 조명",
aspect_ratio: "1:1",
resolution: "1K",
quality: "low",
output_n: 1
},
out_task_id: "grok_image_2_js_001"
})
});
console.log(await response.json());
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "grok_image_2_text_001",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "요청 파라미터가 유효하지 않습니다",
"ok": false
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요"
}
}
{
"error": {
"code": 433,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요"
}
}
{
"error": {
"code": 500,
"message": "서버 내부 오류입니다. 잠시 후 다시 시도하세요"
}
}
Grok Imagine Image 2.0
Grok Imagine Image 2.0 이미지 생성 및 편집
- 비동기 이미지 생성, 제출 후 작업 조회 인터페이스를 통해 결과를 가져옵니다
- 텍스트-이미지, 이미지-이미지 및 이미지 편집을 지원합니다
- 1K / 2K, Low / Medium 품질 및 최대 10장 출력을 지원합니다
- 최대 3장의 참조 이미지와 14가지 가로세로 비율 옵션을 지원합니다
- 제출된 prompt는 플랫폼 민감어 / 안전 검토를 거치며, 위반 콘텐츠는 직접 거부됩니다
POST
/
api
/
openapi
/
submit
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤 도쿄 거리, 젖은 도로에 반사되는 네온사인, 영화 같은 사진",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "<IMAGE_0>의 인물을 <IMAGE_1>의 장면에 넣고, 조명은 동일하게 유지합니다",
"image_url": [
"https://example.com/person.png",
"https://example.com/scene.png"
],
"aspect_ratio": "16:9",
"resolution": "1K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_edit_001"
}'
const response = await fetch("https://aireiter.com/api/openapi/submit", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "grok_imagine_image_2_0",
params: {
prompt: "미니멀한 흰색 사진 스튜디오의 파란색 세라믹 컵, 부드러운 제품 조명",
aspect_ratio: "1:1",
resolution: "1K",
quality: "low",
output_n: 1
},
out_task_id: "grok_image_2_js_001"
})
});
console.log(await response.json());
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "grok_image_2_text_001",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "요청 파라미터가 유효하지 않습니다",
"ok": false
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요"
}
}
{
"error": {
"code": 433,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요"
}
}
{
"error": {
"code": 500,
"message": "서버 내부 오류입니다. 잠시 후 다시 시도하세요"
}
}
Authorizations
string
필수
모든 엔드포인트는 Bearer Token 인증이 필요합니다.API Key 관리 페이지에 접속하여 API Key를 얻고, 요청 헤더에 다음을 추가하세요:
Authorization: Bearer YOUR_API_KEY
Body
string
필수
Model name, fixed value:
"grok_imagine_image_2_0".object
필수
Model parameter object.
표시 params Object Properties
표시 params Object Properties
string
필수
Image generation or editing instructions. Supports Chinese and English.When using multiple reference images, you can use
<IMAGE_0>, <IMAGE_1>, and <IMAGE_2> in the prompt to refer to the corresponding images.string[]
Reference image array. Omitted for text-to-image; after being passed in, it automatically uses image-to-image or image editing mode.
- Up to 3 images
- Maximum 10MB per image
- Supports JPG, PNG, and WebP
- Supports public URLs, complete Base64 Data URIs, or plain Base64
When using a URL, the image must be directly accessible from the public internet and cannot depend on login status, cookies, or temporary page authorization.
string
기본값:"auto"
Output image aspect ratio. Supports:
auto(default)1:14:3/3:43:2/2:316:9/9:162:1/1:219.5:9/9:19.520:9/9:20
WIDTHxHEIGHT pixel dimensions are not supported.string
기본값:"1K"
Output resolution level:
1K (default) or 2K. 4K is not supported.string
기본값:"medium"
Generation quality level:
low- faster and lower costmedium- better details (default)
integer
기본값:"1"
Number of output images, ranging from
1 to 10. Each image is billed separately.string
필수
Caller-defined task ID, used for idempotent submission and result querying.
- Length: 1-64 characters
- Only letters, numbers, underscores, and hyphens are supported
- Cannot be reused under the same API Key
查询结果
제출 성공 후, 작업 상태 가져오기를 호출하고, 동일한out_task_id를 사용하여 조회합니다. 작업이 완료되면 이미지 결과는 data.output에 있습니다.
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤 도쿄 거리, 젖은 도로에 반사되는 네온사인, 영화 같은 사진",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "<IMAGE_0>의 인물을 <IMAGE_1>의 장면에 넣고, 조명은 동일하게 유지합니다",
"image_url": [
"https://example.com/person.png",
"https://example.com/scene.png"
],
"aspect_ratio": "16:9",
"resolution": "1K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_edit_001"
}'
const response = await fetch("https://aireiter.com/api/openapi/submit", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "grok_imagine_image_2_0",
params: {
prompt: "미니멀한 흰색 사진 스튜디오의 파란색 세라믹 컵, 부드러운 제품 조명",
aspect_ratio: "1:1",
resolution: "1K",
quality: "low",
output_n: 1
},
out_task_id: "grok_image_2_js_001"
})
});
console.log(await response.json());
쿼리 결과
제출에 성공한 후 작업 상태 가져오기를 호출하고, 동일한out_task_id를 사용해 쿼리합니다. 작업이 완료되면 이미지 결과는 data.output에 있습니다.
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}'
curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "<IMAGE_0>의 인물을 <IMAGE_1>의 장면에 넣고, 조명은 일관되게 유지",
"image_url": [
"https://example.com/person.png",
"https://example.com/scene.png"
],
"aspect_ratio": "16:9",
"resolution": "1K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_edit_001"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://aireiter.com/api/openapi/submit";
const payload = {
model: "grok_imagine_image_2_0",
params: {
prompt: "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
aspect_ratio: "16:9",
resolution: "2K",
quality: "medium",
output_n: 1
},
out_task_id: "grok_image_2_text_001"
};
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://aireiter.com/api/openapi/submit"
payload := map[string]interface{}{
"model": "grok_imagine_image_2_0",
"params": map[string]interface{}{
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1,
},
"out_task_id": "grok_image_2_text_001",
}
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://aireiter.com/api/openapi/submit";
String payload = """
{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}
""";
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://aireiter.com/api/openapi/submit";
$payload = [
"model" => "grok_imagine_image_2_0",
"params" => [
"prompt" => "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio" => "16:9",
"resolution" => "2K",
"quality" => "medium",
"output_n" => 1
],
"out_task_id" => "grok_image_2_text_001"
];
$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://aireiter.com/api/openapi/submit")
payload = {
model: "grok_imagine_image_2_0",
params: {
prompt: "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
aspect_ratio: "16:9",
resolution: "2K",
quality: "medium",
output_n: 1
},
out_task_id: "grok_image_2_text_001"
}
http = Net::HTTP.new(url.host, url.port)
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://aireiter.com/api/openapi/submit")!
let payload: [String: Any] = [
"model": "grok_imagine_image_2_0",
"params": [
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
],
"out_task_id": "grok_image_2_text_001"
]
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://aireiter.com/api/openapi/submit";
var payload = @"
{
""model"": ""grok_imagine_image_2_0"",
""params"": {
""prompt"": ""비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영"",
""aspect_ratio"": ""16:9"",
""resolution"": ""2K"",
""quality"": ""medium"",
""output_n"": 1
},
""out_task_id"": ""grok_image_2_text_001""
}";
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://aireiter.com/api/openapi/submit";
const char *payload = "{\"model\":\"grok_imagine_image_2_0\",\"params\":{\"prompt\":\"비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영\",\"aspect_ratio\":\"16:9\",\"resolution\":\"2K\",\"quality\":\"medium\",\"output_n\":1},\"out_task_id\":\"grok_image_2_text_001\"}";
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://aireiter.com/api/openapi/submit"];
NSDictionary *payload = @{
@"model": @"grok_imagine_image_2_0",
@"params": @{
@"prompt": @"비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
@"aspect_ratio": @"16:9",
@"resolution": @"2K",
@"quality": @"medium",
@"output_n": @1
},
@"out_task_id": @"grok_image_2_text_001"
};
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://aireiter.com/api/openapi/submit"
let payload = {|{
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
}|}
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://aireiter.com/api/openapi/submit');
final payload = {
"model": "grok_imagine_image_2_0",
"params": {
"prompt": "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
"aspect_ratio": "16:9",
"resolution": "2K",
"quality": "medium",
"output_n": 1
},
"out_task_id": "grok_image_2_text_001"
};
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://aireiter.com/api/openapi/submit"
payload <- list(
model = "grok_imagine_image_2_0",
params = list(
prompt = "비 오는 밤의 도쿄 거리, 젖은 노면에 반사되는 네온사인, 시네마틱 촬영",
aspect_ratio = "16:9",
resolution = "2K",
quality = "medium",
output_n = 1
),
out_task_id = "grok_image_2_text_001"
)
response <- POST(
url,
add_headers(
Authorization = "Bearer <token>",
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "grok_image_2_text_001",
"status": "pending",
"estimated_credits": 100,
"created_at": "2025-12-22T06:03:28.242Z"
}
}
{
"statusCode": 400,
"message": "요청 파라미터가 유효하지 않습니다",
"ok": false
}
{
"error": {
"code": 401,
"message": "인증에 실패했습니다. API 키를 확인하세요"
}
}
{
"error": {
"code": 433,
"message": "계정 잔액이 부족합니다. 충전 후 다시 시도하세요"
}
}
{
"error": {
"code": 500,
"message": "서버 내부 오류입니다. 잠시 후 다시 시도하세요"
}
}