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": "pending"
}
}{
"error": {
"code": "EDIT_SUBJECT_NOT_COMPLETED",
"status": 400,
"message": "Image must be completed before editing",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"status": 402,
"message": "Not enough credits to edit",
"data": {
"action_url": "<string>"
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "EDIT_SUBJECT_NOT_FOUND",
"status": 404,
"message": "Image not found",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_READY",
"status": 409,
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_FOUND",
"status": 422,
"message": "Brand session not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"message": "Rate limit exceeded",
"data": "<unknown>"
}
}Edit an image
Edit a previously generated or uploaded image. Use the prompt to describe what to change. The aspect ratio remains the same as the original image. Optionally include referenceImageIds for additional context. The endpoint returns a new image ID immediately; poll GET /images/{id} to check the 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": "pending"
}
}{
"error": {
"code": "EDIT_SUBJECT_NOT_COMPLETED",
"status": 400,
"message": "Image must be completed before editing",
"data": "<unknown>"
}
}{
"error": {
"code": "UNAUTHORIZED",
"status": 401,
"message": "Invalid or missing API credentials",
"data": "<unknown>"
}
}{
"error": {
"code": "INSUFFICIENT_CREDITS",
"status": 402,
"message": "Not enough credits to edit",
"data": {
"action_url": "<string>"
}
}
}{
"error": {
"code": "ACCOUNT_BANNED",
"status": 403,
"message": "This account has been suspended.",
"data": "<unknown>"
}
}{
"error": {
"code": "EDIT_SUBJECT_NOT_FOUND",
"status": 404,
"message": "Image not found",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_READY",
"status": 409,
"message": "Brand is not ready for image generation",
"data": "<unknown>"
}
}{
"error": {
"code": "BRAND_NOT_FOUND",
"status": 422,
"message": "Brand session not found",
"data": "<unknown>"
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"status": 429,
"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 ID (from GET /brands)
"2K" (default, 1 credit) or "4K" (2 credits)
2K, 4K Model tier. "fast" is quickest, "standard" is balanced, and "pro" is the default and offers the 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?