curl --request POST \
--url https://app.adstellar.ai/api/v1/tools/generate_image \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"aspectRatios": [],
"instructions": "<string>",
"variationCount": 5,
"referenceAssetIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"brandKitId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://app.adstellar.ai/api/v1/tools/generate_image"
payload = {
"aspectRatios": [],
"instructions": "<string>",
"variationCount": 5,
"referenceAssetIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"brandKitId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
aspectRatios: [],
instructions: '<string>',
variationCount: 5,
referenceAssetIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
brandKitId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
productId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
workspaceId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://app.adstellar.ai/api/v1/tools/generate_image', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.adstellar.ai/api/v1/tools/generate_image",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'aspectRatios' => [
],
'instructions' => '<string>',
'variationCount' => 5,
'referenceAssetIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'brandKitId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'productId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'workspaceId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.adstellar.ai/api/v1/tools/generate_image"
payload := strings.NewReader("{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.adstellar.ai/api/v1/tools/generate_image")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.adstellar.ai/api/v1/tools/generate_image")
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 = "{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_bodyGenerate AI image ad creatives for the team. Kicks off an async batch (Inngest) and returns a batchId immediately — poll get_generation_status for results. Charges credits: image cost per generation (aspect ratio × variation). Requires reference images or detailed instructions.
Generate AI image ad creatives for the team. Kicks off an async batch (Inngest) and returns a batchId immediately — poll get_generation_status for results. Charges credits: image cost per generation (aspect ratio × variation). Requires reference images or detailed instructions.
curl --request POST \
--url https://app.adstellar.ai/api/v1/tools/generate_image \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"aspectRatios": [],
"instructions": "<string>",
"variationCount": 5,
"referenceAssetIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"brandKitId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://app.adstellar.ai/api/v1/tools/generate_image"
payload = {
"aspectRatios": [],
"instructions": "<string>",
"variationCount": 5,
"referenceAssetIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"],
"brandKitId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspaceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
aspectRatios: [],
instructions: '<string>',
variationCount: 5,
referenceAssetIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a'],
brandKitId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
productId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
workspaceId: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://app.adstellar.ai/api/v1/tools/generate_image', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.adstellar.ai/api/v1/tools/generate_image",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'aspectRatios' => [
],
'instructions' => '<string>',
'variationCount' => 5,
'referenceAssetIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
],
'brandKitId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'productId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'workspaceId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.adstellar.ai/api/v1/tools/generate_image"
payload := strings.NewReader("{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.adstellar.ai/api/v1/tools/generate_image")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.adstellar.ai/api/v1/tools/generate_image")
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 = "{\n \"aspectRatios\": [],\n \"instructions\": \"<string>\",\n \"variationCount\": 5,\n \"referenceAssetIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ],\n \"brandKitId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"productId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"workspaceId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
AdStellar API key (ast_live_...)
Body
One or more aspect ratios — one generation per ratio × variationCount.
1 - 10 elements1:1, 4:5, 9:16, 16:9 Detailed creative direction. Required when no referenceAssetIds are given.
4000Variations per aspect ratio (default 1).
1 <= x <= 10Media asset ids to use as visual references (from search_assets).
5^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Brand kit to ground the creative in.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Product to feature (resolves brand kit + assets).
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Quality/speed tradeoff (default express).
express, studio Workspace to generate in (must be one this credential can access). Omit for the primary workspace.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Response
Tool result