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 items → POST /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.refresh → jobs.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": ["..."] }