Helium PIM API

Recipes

Generate image, research refs, author a column, query then refresh.

Generate image for a product

{ "op": "find", "workspaceId": "<uuid>", "names": ["Hydra Serum"] }
{
  "op": "image",
  "workspaceId": "<uuid>",
  "resourceId": "<uuid>",
  "prompt": "Studio packshot on white",
  "model": "openai/gpt-image-2",
  "aspectRatio": "1:1"
}

POST /v1/resources then POST /v1/generate. resourceId is context only — no cell write. Discover models with POST /v1/models { "op": "list", "modality": "image" }.

Research then generate

{ "op": "pinterest", "workspaceId": "<uuid>", "queries": ["niacinamide serum flat lay"], "limit": 12 }

Pick HTTPS image URLs from itemsPOST /v1/assets { "op": "import", "sourceUrl" }generate.image with refs. Same pattern: research.meta_ads with pageUrl. Needs APIFY_TOKEN. JSON only — no cell write.

Do not use generate.agent as a scrape loop (text + image tools only). Grid fills still use a tool_loop column.

Author a column

{ "op": "author", "workspaceId": "<uuid>", "resourceTypeId": "<uuid>", "prompt": "PDP title from attrs" }

Then columns.publish / columns.refreshjobs.get_progress.

Query then refresh

{ "op": "unique_values", "workspaceId": "<uuid>", "resourceTypeId": "<uuid>", "path": "vendor" }
{ "op": "query", "workspaceId": "<uuid>", "filters": [{ "path": "vendor", "op": "eq", "value": "Acme" }], "limit": 50 }
{ "op": "refresh", "workspaceId": "<uuid>", "columnDefinitionId": "<uuid>", "resourceIds": ["..."] }