curl --request POST \
--url https://aireiter.com/api/openapi/submit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "grok_imagine_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product photography",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_001"
}'
import requests
response = requests.post(
"https://aireiter.com/api/openapi/submit",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
json={
"model": "grok_imagine_2_0_ext",
"params": {
"prompt": "Glass greenhouse in a wildflower meadow at sunrise, editorial photography style",
"aspect_ratio": "2:3",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_python_001"
}
)
print(response.json())
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_2_0_ext",
params: {
prompt: "A futuristic city street in the rain at night, with neon light reflections",
aspect_ratio: "16:9",
output_n: 1
},
out_task_id: "grok_image_2_ext_js_001"
})
});
console.log(await response.json());
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "grok_image_2_ext_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 recharge and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}
Grok Imagine Image 2.0
Grok Imagine 2.0 Ext Image Generation
- Asynchronous text-to-image generation. After submission, get the result through the task query endpoint
- Supports 7 common image aspect ratios
- Supports generating 1-12 images per request, and the number can be any integer within the supported range
- Text-to-image only; reference image input is not supported
- Submitted prompts will go through the platform’s sensitive word / safety review, and violating content will be rejected directly
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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product photography",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_001"
}'
import requests
response = requests.post(
"https://aireiter.com/api/openapi/submit",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
json={
"model": "grok_imagine_2_0_ext",
"params": {
"prompt": "Glass greenhouse in a wildflower meadow at sunrise, editorial photography style",
"aspect_ratio": "2:3",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_python_001"
}
)
print(response.json())
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_2_0_ext",
params: {
prompt: "A futuristic city street in the rain at night, with neon light reflections",
aspect_ratio: "16:9",
output_n: 1
},
out_task_id: "grok_image_2_ext_js_001"
})
});
console.log(await response.json());
{
"statusCode": 200,
"message": "",
"data": {
"out_task_id": "grok_image_2_ext_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 recharge 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_2_0_ext".object
required
Model parameter object.
Show params Object Properties
Show params Object Properties
string
required
Image generation prompt. Supports Chinese and English, and cannot be empty after trimming leading and trailing spaces.
string
default:"1:1"
Output image aspect ratio. Supported:
1:1(default)2:3/3:23:4/4:39:16/16:9
auto, custom pixel dimensions, and other aspect ratios are not supported.integer
default:"1"
Number of output images, ranging from
1 to 12.Any integer within the range can be used, such as 3, 5, or 7, not limited to 1, 4, 8, or 12.string
required
Caller-defined task ID, used for idempotent submission and result retrieval.
- Length is 1-64 characters
- Only letters, numbers, underscores, and hyphens are supported
- Cannot be reused under the same API Key
This model only supports text-to-image generation. Do not pass
image_url, resolution, quality, size, or output format parameters.Query Results
After the submission succeeds, call Get Task Status and query using the sameout_task_id. After 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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product photography",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_001"
}'
import requests
response = requests.post(
"https://aireiter.com/api/openapi/submit",
headers={
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
json={
"model": "grok_imagine_2_0_ext",
"params": {
"prompt": "Glass greenhouse in a wildflower meadow at sunrise, editorial photography style",
"aspect_ratio": "2:3",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_python_001"
}
)
print(response.json())
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_2_0_ext",
params: {
prompt: "A futuristic city street in the rain at night, with neon light reflections",
aspect_ratio: "16:9",
output_n: 1
},
out_task_id: "grok_image_2_ext_js_001"
})
});
console.log(await response.json());
Query Results
After submission succeeds, call Get Task Status using the sameout_task_id to query. Once the task is completed, the image result is 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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_001"
}'
import requests
url = "https://aireiter.com/api/openapi/submit"
payload = {
"model": "grok_imagine_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_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_2_0_ext",
params: {
prompt: "Red apples on a white ceramic plate, clean studio product shot",
aspect_ratio: "1:1",
output_n: 3
},
out_task_id: "grok_image_2_ext_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_2_0_ext",
"params": map[string]interface{}{
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3,
},
"out_task_id": "grok_image_2_ext_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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_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_2_0_ext",
"params" => [
"prompt" => "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio" => "1:1",
"output_n" => 3
],
"out_task_id" => "grok_image_2_ext_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_2_0_ext",
params: {
prompt: "Red apples on a white ceramic plate, clean studio product shot",
aspect_ratio: "1:1",
output_n: 3
},
out_task_id: "grok_image_2_ext_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_2_0_ext",
"params": [
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
],
"out_task_id": "grok_image_2_ext_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_2_0_ext"",
""params"": {
""prompt"": ""Red apples on a white ceramic plate, clean studio product shot"",
""aspect_ratio"": ""1:1"",
""output_n"": 3
},
""out_task_id"": ""grok_image_2_ext_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_2_0_ext\",\"params\":{\"prompt\":\"Red apples on a white ceramic plate, clean studio product shot\",\"aspect_ratio\":\"1:1\",\"output_n\":3},\"out_task_id\":\"grok_image_2_ext_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_2_0_ext",
@"params": @{
@"prompt": @"Red apples on a white ceramic plate, clean studio product shot",
@"aspect_ratio": @"1:1",
@"output_n": @3
},
@"out_task_id": @"grok_image_2_ext_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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_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_2_0_ext",
"params": {
"prompt": "Red apples on a white ceramic plate, clean studio product shot",
"aspect_ratio": "1:1",
"output_n": 3
},
"out_task_id": "grok_image_2_ext_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_2_0_ext",
params = list(
prompt = "Red apples on a white ceramic plate, clean studio product shot",
aspect_ratio = "1:1",
output_n = 3
),
out_task_id = "grok_image_2_ext_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_ext_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 recharge and try again"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later"
}
}