Imágenes
Las fotos de cada producto, con su texto alternativo y las tres medidas.
El scope
Este endpoint pide el scope media:read, aparte de catalog:read. Va separado porque las direcciones que devuelve SON el acceso al archivo: el CDN sirve por ruta no adivinable, así que quien tiene la dirección tiene la imagen. Una llave que solo lee la ficha no la recibe.
Imágenes de un producto
Devuelve las imágenes asignadas, la principal primero y luego por posición. El orden ES el dato: cualquier integración puede tomar la primera como imagen base.
GET /v1/products/{id}/media
{
"product_id": "…",
"media": [
{
"id": "…",
"filename": "portada.jpg",
"mime": "image/jpeg",
"bytes": 482913,
"role": "main",
"alt": { "es": "Frasco blanco de crema, 50 ml", "en": "White 50 ml cream jar" },
"url": "https://media.bruxel.ai/orig/…/….jpg",
"medium_url": "https://media.bruxel.ai/deriv/…/…/medium.webp",
"thumb_url": "https://media.bruxel.ai/deriv/…/…/thumb.webp"
}
]
}url es el ORIGINAL: es lo que se importa a tu tienda, que genera sus propios tamaños. medium_url (1024 px) y thumb_url (320 px) son derivados en WebP para pintar interfaces — no los uses como imagen de producto. Si un derivado aún no existe, cae al original.
Sincronizar el catálogo completo
No uses este endpoint producto por producto. El CSV del catálogo ya trae las columnas de imagen con los nombres que Adobe Commerce espera: una llamada para todo el catálogo, en vez de una por producto.
curl -s "https://bruxel.ai/api/public/v1/export/catalog.csv" \
-H "Authorization: Bearer bxk_…" -o catalogo.csv
# columnas: base_image, small_image, thumbnail, additional_imagesQué aparece y qué no
Solo las imágenes listas y asignadas al producto. Lo que el cliente mandó a la papelera no aparece, aunque siga siendo restaurable durante 30 días; una subida a medias tampoco.