Products
Products represent your catalog items. Use these endpoints to list, create, update, sync from Shopify, and request AI optimizations.
The product model
The product model contains core catalog data, readiness scoring, and references to optimizations.
Properties
-
- Name
id- Type
- string
- Description
-
- Name
shopify_id- Type
- integer
- Description
-
- Name
title- Type
- string
- Description
-
- Name
handle- Type
- string
- Description
-
- Name
status- Type
- string
- Description
-
- Name
vendor- Type
- string
- Description
-
- Name
product_type- Type
- string
- Description
-
- Name
readiness_score- Type
- integer
- Description
-
- Name
readiness_grade- Type
- string
- Description
-
- Name
optimization_status- Type
- string
- Description
-
- Name
pending_optimizations_count- Type
- integer
- Description
-
- Name
primary_image_url- Type
- string
- Description
-
- Name
last_synced_at- Type
- string
- Description
-
- Name
created_at- Type
- string
- Description
-
- Name
updated_at- Type
- string
- Description
-
- Name
description- Type
- string
- Description
-
- Name
meta_title- Type
- string
- Description
-
- Name
meta_description- Type
- string
- Description
-
- Name
og_title- Type
- string
- Description
- AI-optimized Open Graph title for social media previews
-
- Name
og_description- Type
- string
- Description
- AI-optimized Open Graph description for social media previews
-
- Name
tags- Type
- string
- Description
-
- Name
options- Type
- object[]
- Description
-
- Name
images- Type
- image[]
- Description
-
- Name
price_min- Type
- number
- Description
-
- Name
latest_optimization- Type
- optimization_summary
- Description
-
- Name
score_history- Type
- score_history_summary[]
- Description
List all products
Returns a paginated list of products for the authenticated account
Optional parameters
-
- Name
page- Type
- integer
- Description
- Default
1.
-
- Name
per_page- Type
- integer
- Description
- Default
25. Max100.
-
- Name
status- Type
- string
- Description
- One of
active,draft,archived.
-
- Name
min_score- Type
- integer
- Description
- Max
100.
-
- Name
max_score- Type
- integer
- Description
- Max
100.
-
- Name
grade- Type
- string
- Description
- One of
excellent,good,fair,poor,critical.
-
- Name
needs_optimization- Type
- boolean
- Description
-
- Name
q- Type
- string
- Description
- Search by title
Request
curl -G \
https://beaconed.ai/api/v1/products \
-H "Authorization: Bearer {token}"
uri = URI("https://beaconed.ai/api/v1/products?per_page=10")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{token}"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
Response
{
"success": true,
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"shopify_id": 7982561779890,
"title": "Organic Cotton T-Shirt",
"status": "active",
"readiness_score": 85,
"grade": "B",
"optimized_at": "2026-03-15T14:30:00Z",
"created_at": "2026-03-01T10:00:00Z"
}
]
}
Create a product
Create a product from external data (non-Shopify). Use external_id for idempotency.
Optional attributes
-
- Name
title- Type
- string
- Description
- Product title
-
- Name
description- Type
- string
- Description
- Full product description (HTML supported)
-
- Name
handle- Type
- string
- Description
- URL-safe product handle
-
- Name
status- Type
- string
- Description
-
- Name
vendor- Type
- string
- Description
- Brand or manufacturer name
-
- Name
product_type- Type
- string
- Description
- Product category
-
- Name
meta_title- Type
- string
- Description
- SEO meta title (shown in search results)
-
- Name
meta_description- Type
- string
- Description
- SEO meta description (shown in search results)
-
- Name
og_title- Type
- string
- Description
- Open Graph title for social media previews
-
- Name
og_description- Type
- string
- Description
- Open Graph description for social media previews
-
- Name
tags- Type
- string
- Description
- Comma-separated product tags
-
- Name
external_id- Type
- string
- Description
- Your system's product ID. Used for idempotency on create.
-
- Name
images- Type
- object[]
- Description
Request
curl -X POST \
https://beaconed.ai/api/v1/products \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"product": {"title": "New Product", "shopify_id": 123456}}'
Get a product
Returns detailed information about a specific product
Request
curl https://beaconed.ai/api/v1/products/{id} \
-H "Authorization: Bearer {token}"
Update a product
Update a product's fields. Only include fields you want to change.
Optional attributes
-
- Name
title- Type
- string
- Description
- Product title
-
- Name
description- Type
- string
- Description
- Full product description (HTML supported)
-
- Name
handle- Type
- string
- Description
- URL-safe product handle
-
- Name
status- Type
- string
- Description
-
- Name
vendor- Type
- string
- Description
- Brand or manufacturer name
-
- Name
product_type- Type
- string
- Description
- Product category
-
- Name
meta_title- Type
- string
- Description
- SEO meta title (shown in search results)
-
- Name
meta_description- Type
- string
- Description
- SEO meta description (shown in search results)
-
- Name
og_title- Type
- string
- Description
- Open Graph title for social media previews
-
- Name
og_description- Type
- string
- Description
- Open Graph description for social media previews
-
- Name
tags- Type
- string
- Description
- Comma-separated product tags
-
- Name
external_id- Type
- string
- Description
- Your system's product ID. Used for idempotency on create.
-
- Name
images- Type
- object[]
- Description
Request
curl -X PATCH \
https://beaconed.ai/api/v1/products/{id} \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"product": {"tags": "organic,cotton,sustainable"}}'
Sync a product
Triggers a sync of the product from Shopify
Request
curl -X POST \
https://beaconed.ai/api/v1/products/{product_id}/sync \
-H "Authorization: Bearer {token}"
Request optimization
Queue AI optimization for one or more fields on a product. Each field generates a separate Optimization record with suggested content. Poll GET /api/v1/optimizations?product_id={product_id}&status=pending to retrieve results.
Optional attributes
-
- Name
fields- Type
- string[]
- Description
- Fields to optimize. Defaults to all fields if omitted.
Request
curl -X POST \
https://beaconed.ai/api/v1/products/{product_id}/optimization \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"fields": ["title", "description"]}'
Response
{
"success": true,
"data": {
"id": "opt-uuid-here",
"product_id": "a1b2c3d4-...",
"fields": ["title", "description"],
"status": "queued",
"created_at": "2026-03-31T10:00:00Z"
}
}