Resolve Catalog Images
curl --request POST \
--url https://api.superseeded.ai/v1/retail-images/resolve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"site_url": "<string>",
"items": [
{
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"botanical_name": "<string>",
"product_name": "<string>"
}
]
}
'import requests
url = "https://api.superseeded.ai/v1/retail-images/resolve"
payload = {
"site_url": "<string>",
"items": [
{
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"botanical_name": "<string>",
"product_name": "<string>"
}
]
}
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({
site_url: '<string>',
items: [
{
product_id: 123,
sku: '<string>',
species_key: '<string>',
botanical_name: '<string>',
product_name: '<string>'
}
]
})
};
fetch('https://api.superseeded.ai/v1/retail-images/resolve', 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://api.superseeded.ai/v1/retail-images/resolve",
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([
'site_url' => '<string>',
'items' => [
[
'product_id' => 123,
'sku' => '<string>',
'species_key' => '<string>',
'botanical_name' => '<string>',
'product_name' => '<string>'
]
]
]),
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://api.superseeded.ai/v1/retail-images/resolve"
payload := strings.NewReader("{\n \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\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://api.superseeded.ai/v1/retail-images/resolve")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superseeded.ai/v1/retail-images/resolve")
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 \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"site_url": "<string>",
"normalized_origin": "<string>",
"results": [
{
"source_status": "<string>",
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"species_hash": "<string>",
"image_url": "<string>",
"thumbnail_url": "<string>",
"version": "<string>",
"message": "<string>"
}
]
}Endpoints
Images API
Resolve image availability and public image URLs for plant catalog items. This endpoint returns already available imagery and does not trigger new image generation.
POST
/
retail-images
/
resolve
Resolve Catalog Images
curl --request POST \
--url https://api.superseeded.ai/v1/retail-images/resolve \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"site_url": "<string>",
"items": [
{
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"botanical_name": "<string>",
"product_name": "<string>"
}
]
}
'import requests
url = "https://api.superseeded.ai/v1/retail-images/resolve"
payload = {
"site_url": "<string>",
"items": [
{
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"botanical_name": "<string>",
"product_name": "<string>"
}
]
}
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({
site_url: '<string>',
items: [
{
product_id: 123,
sku: '<string>',
species_key: '<string>',
botanical_name: '<string>',
product_name: '<string>'
}
]
})
};
fetch('https://api.superseeded.ai/v1/retail-images/resolve', 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://api.superseeded.ai/v1/retail-images/resolve",
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([
'site_url' => '<string>',
'items' => [
[
'product_id' => 123,
'sku' => '<string>',
'species_key' => '<string>',
'botanical_name' => '<string>',
'product_name' => '<string>'
]
]
]),
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://api.superseeded.ai/v1/retail-images/resolve"
payload := strings.NewReader("{\n \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\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://api.superseeded.ai/v1/retail-images/resolve")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.superseeded.ai/v1/retail-images/resolve")
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 \"site_url\": \"<string>\",\n \"items\": [\n {\n \"product_id\": 123,\n \"sku\": \"<string>\",\n \"species_key\": \"<string>\",\n \"botanical_name\": \"<string>\",\n \"product_name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"site_url": "<string>",
"normalized_origin": "<string>",
"results": [
{
"source_status": "<string>",
"product_id": 123,
"sku": "<string>",
"species_key": "<string>",
"species_hash": "<string>",
"image_url": "<string>",
"thumbnail_url": "<string>",
"version": "<string>",
"message": "<string>"
}
]
}Resolve public product image URLs for plant catalog items.
Overview
The Images API supports backend catalog and storefront integrations. Use it to register allowed storefront origins and resolve product image availability for plant items.These endpoints are generic Images API endpoints. They are not specific to any one commerce platform or plugin.
Endpoints
| Endpoint | Purpose |
|---|---|
POST /v1/retail-images/sites | Register or update a storefront origin for your account. |
POST /v1/retail-images/resolve | Resolve image availability and public image URLs for product items. |
Authentication
Use your SuperSeeded API key in theX-API-Key header.
X-API-Key: sk-sup-v1*****************************************
Do not expose API keys in frontend code. Send requests from your backend or server-side integration.
Register Site
Register a storefront origin before resolving images for that site.curl -X POST https://api.superseeded.ai/v1/retail-images/sites \
-H "Content-Type: application/json" \
-H "X-API-Key: sk-sup-v1*****************************************" \
-d '{
"site_url": "https://example-garden-centre.com",
"label": "Example Garden Centre"
}'
Resolve Images
curl -X POST https://api.superseeded.ai/v1/retail-images/resolve \
-H "Content-Type: application/json" \
-H "X-API-Key: sk-sup-v1*****************************************" \
-d '{
"site_url": "https://example-garden-centre.com",
"items": [
{
"product_id": 15133,
"sku": "ACM-200",
"botanical_name": "Acacia melanoxylon"
}
]
}'
Status Values
| Status | Description |
|---|---|
available | image_url is present and can be used in a storefront. |
missing | No image is available for the item. Use your fallback product image. |
invalid | An image was found but could not be returned. Use your fallback product image. |
Security Notes
- Public image URLs are display URLs, not private download URLs.
- Keep API keys server-side.
- Register only storefront origins that belong to your account.
- Do not depend on public image URL secrecy for authorization.
Authorizations
Standard API Key authentication.
Body
application/json
⌘I

