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": "Tokyo streets on a rainy night, neon lights reflecting on the wet pavement, cinematic photography",
"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": "Place the person in <IMAGE_0> into the scene of <IMAGE_1> while keeping the lighting consistent",
"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: "A blue ceramic cup in a minimalist white studio, soft product lighting",
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": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Grok Imagine Image 2.0
Grok Imagine Image 2.0 Image Generation and Editing
- Asynchronous image generation; retrieve results through the task query API after submission
- Supports text-to-image, image-to-image, and image editing
- Supports 1K / 2K, Low / Medium quality, and up to 10 output images
- Supports up to 3 reference images and 14 aspect ratio options
- Submitted prompts are subject to platform sensitive word / safety review, and violating content will be directly rejected
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": "Tokyo streets on a rainy night, neon lights reflecting on the wet pavement, cinematic photography",
"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": "Place the person in <IMAGE_0> into the scene of <IMAGE_1> while keeping the lighting consistent",
"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: "A blue ceramic cup in a minimalist white studio, soft product lighting",
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": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Authorizations
string
required
All endpoints require Bearer Token authentication.Visit the API Key management page to get your API Key, and add the following to the request header:
Authorization: Bearer YOUR_API_KEY
Body
string
required
Model name, fixed value:
"grok_imagine_image_2_0".object
required
Model parameters object.
Show params Object Properties
Show params Object Properties
string
required
Image generation or editing instructions. Chinese and English are supported.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[]
Array of reference images. If omitted, text-to-image is used; after passing it in, image-to-image or image editing mode is used automatically.
- Up to 3 images
- Maximum 10MB per image
- JPG, PNG, and WebP are supported
- Public URLs, full Base64 Data URIs, or raw Base64 are supported
When using a URL, the image must be directly accessible from the public internet and cannot rely on login status, cookies, or temporary page authorization.
string
default:"auto"
Output image aspect ratio. Supported values:
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
default:"1K"
Output resolution tier:
1K (default) or 2K. 4K is not supported.string
default:"medium"
Generation quality tier:
low- faster and lower costmedium- better detail (default)
integer
default:"1"
Number of output images, ranging from
1 to 10. Each image is billed separately.string
required
Caller-defined task ID, used for idempotent submission and result retrieval.
- Length: 1-64 characters
- Only letters, numbers, underscores, and hyphens are supported
- Cannot be reused under the same API Key
Query Results
After submission succeeds, call Get Task Status using the sameout_task_id to query. Once the task is completed, the image results are located in 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": "Tokyo streets on a rainy night, neon lights reflecting on the wet pavement, cinematic photography",
"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": "Place the person in <IMAGE_0> into the scene of <IMAGE_1> while keeping the lighting consistent",
"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: "A blue ceramic cup in a minimalist white studio, soft product lighting",
aspect_ratio: "1:1",
resolution: "1K",
quality: "low",
output_n: 1
},
out_task_id: "grok_image_2_js_001"
})
});
console.log(await response.json());
Query Results
After a successful submission, call Get Task Status with the sameout_task_id to query it. Once the task is completed, the image results are located in 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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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": "Place the person from <IMAGE_0> into the scene of <IMAGE_1>, and keep the lighting consistent",
"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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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: "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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" => "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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: "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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"": ""Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography"",
""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\":\"Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography\",\"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": @"Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
@"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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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": "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
"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 = "Tokyo street at night in the rain, neon lights reflecting on wet pavement, cinematic photography",
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": "Invalid request parameters",
"ok": false
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key"
}
}
{
"error": {
"code": 433,
"message": "Insufficient account balance, please top up and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}