Helium PIM API

Modules

Live op list from GET /v1/catalog. Do not hand-maintain this page.

organisations

MCP pim_organisations. Org membership + invites + workspace access. No create/delete organisation.

{
  "op": "list"
}
  • list (read) — List orgs the key/user can see
  • get (read) — Get one organisation
  • list_members (read) — List org members
  • list_invitations (admin) — List pending invites
  • invite (admin) — Invite an email
  • cancel_invite (admin) — Cancel pending invite
  • remove_member (admin) — Remove an org member
  • get_workspace_access (admin) — Org workspace membership map
  • set_workspace_access (admin) — Replace-set member workspace roles

workspaces

MCP pim_workspaces. Workspaces + membership.

{
  "op": "list"
}
  • list (read) — List accessible workspaces
  • get (read) — Get one workspace
  • create (admin) — Create a workspace
  • list_members (read) — List workspace members
  • invite_member (admin) — Invite a workspace member
  • remove_member (admin) — Remove a workspace member

skills

MCP pim_skills. Agent skills catalog.

{
  "op": "list"
}
  • list (read) — Search skill manifest
  • get (read) — Load skill markdown
  • fetch (write) — HTTPS fetch via helium-fetch

resources

MCP pim_resources. Resource types, list, grid, find-by-name, unique_values, query, create_type, create, update. Create seeds Resource.attrs JSON; published columns auto-enrich.

{
  "op": "create",
  "workspaceId": "<uuid>",
  "resourceTypeKey": "blog",
  "attrs": {
    "title": "Hello",
    "slug": "hello",
    "body": "…"
  }
}
  • list_types (read) — List resource types
  • list (read) — List resources (includes attrs)
  • grid (read) — Grid rows with attrs + cells keyed by column key
  • find (read) — Resolve names to ids
  • unique_values (read) — Distinct attr/column values
  • query (read) — Filter + sort resources
  • create_type (write) — Create a workspace resource type
  • create (write) — Create a resource with authored JSON attrs
  • update (write) — Merge authored JSON attrs onto a resource

columns

MCP pim_columns. Prefer op=author (NL). Then publish/refresh. Use-case sets: namespaced keys ugc_video.script, ugc_video.video.

{
  "op": "author",
  "workspaceId": "<uuid>",
  "resourceTypeId": "<uuid>",
  "prompt": "SEO title from product title"
}
  • list (read) — List columns
  • get (read) — Get one column
  • author (write) — NL draft a column. Namespaced keys for a use-case set: ugc_video.script.
  • create (write) — Manual create escape hatch
  • create_version (write) — Manual version escape hatch
  • publish (write) — Publish a draft version
  • refresh (write) — Generate/refresh cells

jobs

MCP pim_jobs. Ops runs / progress / cancel / errors.

{
  "op": "get_progress",
  "workspaceId": "<uuid>",
  "columnDefinitionId": "<uuid>"
}
  • list_runs (read) — List column ops runs
  • get_progress (read) — Poll fill progress
  • cancel (write) — Cancel a running fill
  • list_errors (read) — Failed cell errors

schedules

MCP pim_schedules. Workspace cron. column_refresh + meta.onlyMissing fills empty cells only (voice leads). Same as session /workspaces/:id/schedules.

{
  "op": "create",
  "workspaceId": "<uuid>",
  "kind": "column_refresh",
  "columnDefinitionId": "<uuid>",
  "cron": "*/15 10-16 * * 1-5",
  "timezone": "UTC",
  "meta": {
    "onlyMissing": true
  }
}
  • list (read) — List schedules
  • get (read) — Get one schedule
  • create (write) — Create a schedule
  • update (write) — Update a schedule
  • delete (write) — Delete a schedule

cells

MCP pim_cells. Get or edit a cell. Edit only when the user asks.

{
  "op": "get",
  "workspaceId": "<uuid>",
  "cellId": "<uuid>"
}
  • get (read) — Read a cell
  • edit (write) — Manual cell override

assets

MCP pim_assets. Import HTTPS image to workspace CDN.

{
  "op": "import",
  "workspaceId": "<uuid>",
  "sourceUrl": "https://example.com/a.png"
}
  • import (write) — Import an image URL

connectors

MCP pim_connectors. Sources. Create/sync are writes.

{
  "op": "list",
  "workspaceId": "<uuid>"
}
  • catalog (read) — Connector catalog
  • list (read) — List connectors
  • get (read) — Get one connector
  • create (admin) — Create a connector
  • shopify_status (read) — Shopify token readiness
  • sync_runs (read) — List sync runs
  • bindings (read) — List bindings
  • sync (write) — Enqueue a sync
  • cancel (write) — Stop an in-flight sync

connector

MCP pim_connector. Live api/code/cdn on an active connector. list/describe are reads. api/code/cdn use the merchant token (write). Shopify + GitHub.

{
  "op": "list",
  "workspaceId": "<uuid>"
}
  • list (read) — List agent-capable connectors
  • describe (read) — Describe surfaces, scopes, skills
  • api (write) — Authenticated fetch (base URL + auth injected)
  • code (write) — Codebase trees/list/read/write/search (GitHub also pr)
  • cdn (write) — Upload to connector CDN

sandbox

MCP pim_sandbox. Named VM pim-ws-{workspaceId} with two GitHub remotes (/org + /workspace). Terminal exec, not fs_*. Helium site always in workspace/site. Hosting is optional Vercel Git deploy. One custom domain per workspace (op=domain, admin). Use hydrate/start to clone remotes (server injects git auth into that command). Never git clone via exec. Connector working copies: export_code onto /workspace/connectors/{id} (VM-only, gitignored). Flush via pim_connector code.

{
  "op": "status",
  "workspaceId": "<uuid>"
}
  • status (read) — Sandbox + git remotes + preview/prod URLs + custom domain verification
  • start (write) — getOrCreate VM, clone/pull remotes, npm install site/
  • hydrate (write) — Clone/pull GitHub remotes with App token in git argv (not env). Start the VM if it is down. Do not git clone via exec.
  • stop (write) — Stop the named VM
  • exec (write) — Run a command jailed to /org or /workspace (mutating needs Approve)
  • preview (read) — Sandbox next-dev preview URL for iframe
  • deploy (admin) — Hydrate remotes, enable hosting, link Vercel Git, commit+push site/ (always Approve)
  • domain (admin) — Add or replace the workspace custom hostname on the site Vercel project (omit/empty hostname to detach). Always Approve. Serves traffic only after a production Deploy.
  • export_code (write) — Materialize a code-capable connector onto /workspace/connectors/{id} (always Approve). Gitignored. Flush via pim_connector code.

exports

MCP pim_exports. Output bindings. Flush is a write.

{
  "op": "list",
  "workspaceId": "<uuid>"
}
  • list (read) — List bindings
  • get (read) — Get one binding
  • deliveries (read) — Delivery log
  • flush (admin) — Flush deliveries

generate

MCP pim_generate. Atomic text/json/image/video/audio/call/agent generations. workspaceId required. Optional resourceId for context only. call: template + phone, returns QUEUED immediately. audio: approved batch TTS/music model + prompt (never Bolna). Image knobs: aspectRatio, size, seed, count. list accepts q (label search). Never writes a cell.

{
  "op": "image",
  "workspaceId": "<uuid>",
  "prompt": "Studio packshot on white",
  "resourceId": "<uuid>",
  "aspectRatio": "1:1"
}
  • text (write) — Generate text
  • json (write) — Generate JSON
  • image (write) — Generate image(s)
  • video (write) — Generate video (async)
  • audio (write) — Generate batch audio / TTS (fal; never Bolna)
  • call (write) — Queue a voice call (template + phone)
  • agent (write) — Run a tool-loop agent
  • list (read) — List generations
  • get (read) — Get one generation
  • cancel (write) — Cancel a running generation

voice_agents

MCP pim_voice_agents. Workspace-authored Bolna voice agents. Template for generate.call / column voiceTemplate is key or id (never Bolna agent id). Member/admin write; not available on generate_only keys.

{
  "op": "create",
  "workspaceId": "<uuid>",
  "key": "demo_qualifier",
  "name": "Demo qualifier",
  "systemPrompt": "Qualify interest in a product demo."
}
  • list (read) — List workspace VoiceAgents
  • get (read) — Get one by id or key
  • create (write) — Create + provision on Bolna
  • update (write) — Update + re-provision when needed
  • delete (write) — Delete workspace VoiceAgent row

models

MCP pim_models. APPROVED catalog models + per-model invocation schema. Same data as session GET /accounts/:accountKey/models.

{
  "op": "list",
  "modality": "image"
}
  • list (read) — List APPROVED models
  • schema (read) — Safe invocation schema for one catalog entry

research

MCP pim_research. One-shot Apify runs (Pinterest / Meta ads / any actor). JSON items only — never writes a cell. Prefer this over skills.fetch for Apify (300s vs 30s).

{
  "op": "pinterest",
  "workspaceId": "<uuid>",
  "queries": [
    "niacinamide serum flat lay"
  ],
  "limit": 12
}
  • apify (write) — Run any Apify actor
  • pinterest (write) — Pinterest search scraper
  • meta_ads (write) — Meta Ad Library scraper

keys

MCP pim_keys. Org API keys for /v1 (not /mcp). HTML mini-app: kind=publishable then pim_skills({ op: "get", skillId: "pim/js-client" }) — do not raw-fetch /v1. Curl: pim/http-api. create returns next hint + raw key once.

{
  "op": "list",
  "organisationId": "<id>"
}
  • list (admin) — List org keys
  • get (admin) — Get key metadata
  • create (admin) — Mint a key (raw shown once). HTML: kind=publishable then load pim/js-client. Response includes next.
  • revoke (admin) — Revoke a key