curl --request POST \
--url https://www.trybloom.ai/api/v1/images/{id}/edit \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"referenceImageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://www.trybloom.ai/api/v1/images/{id}/edit"
payload = {
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"referenceImageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
imageSize: '2K',
referenceImageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://www.trybloom.ai/api/v1/images/{id}/edit', 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://www.trybloom.ai/api/v1/images/{id}/edit",
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([
'prompt' => '<string>',
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'imageSize' => '2K',
'referenceImageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://www.trybloom.ai/api/v1/images/{id}/edit"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://www.trybloom.ai/api/v1/images/{id}/edit")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/images/{id}/edit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<unknown>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Image must be completed before editing",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Not enough credits to edit",
"data": {
"action_url": "<string>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Plan upgrade required",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Image not found",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Brand session not found",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Rate limit exceeded",
"data": "<unknown>"
}Edit an image
Edit a previously generated or uploaded image. The prompt describes what to change. Aspect ratio is locked to the original image’s ratio. Optionally include referenceImageIds for additional context. Returns immediately with a new image ID. Poll GET /images/ to check status and retrieve the result.
curl --request POST \
--url https://www.trybloom.ai/api/v1/images/{id}/edit \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"referenceImageIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
'import requests
url = "https://www.trybloom.ai/api/v1/images/{id}/edit"
payload = {
"prompt": "<string>",
"brandSessionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"imageSize": "2K",
"referenceImageIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
prompt: '<string>',
brandSessionId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
imageSize: '2K',
referenceImageIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']
})
};
fetch('https://www.trybloom.ai/api/v1/images/{id}/edit', 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://www.trybloom.ai/api/v1/images/{id}/edit",
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([
'prompt' => '<string>',
'brandSessionId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'imageSize' => '2K',
'referenceImageIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://www.trybloom.ai/api/v1/images/{id}/edit"
payload := strings.NewReader("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://www.trybloom.ai/api/v1/images/{id}/edit")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.trybloom.ai/api/v1/images/{id}/edit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"prompt\": \"<string>\",\n \"brandSessionId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"imageSize\": \"2K\",\n \"referenceImageIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<unknown>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Image must be completed before editing",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Not enough credits to edit",
"data": {
"action_url": "<string>"
}
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Plan upgrade required",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Image not found",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Brand session not found",
"data": "<unknown>"
}{
"defined": "<unknown>",
"code": "<unknown>",
"status": "<unknown>",
"message": "Rate limit exceeded",
"data": "<unknown>"
}Authorizations
Bloom API key, for example x-api-key: bloom_sk_....
Path Parameters
ID of a completed or uploaded image to edit
Body
What to change — describe the edit (e.g. "make the background blue"). Aspect ratio is locked to the original image's ratio.
1 - 2000Brand session ID (from GET /brands)
"2K" (default, 1 credit) or "4K" (2 credits, Plus/Pro)
2K, 4K Model tier. "fast" (cheaper/faster), "standard" (mid tier), or "pro" (default, highest quality).
fast, standard, pro IDs of uploaded or generated images for additional context (max 9)
9Response
OK
Show child attributes
Show child attributes
Was this page helpful?