Appearance
Operations reference - every Studio action from the command line
Each operation is one Studio action. Run it as erp plugin op <name> [--field value ...], or from an AI coding agent through the MCP tool erp_plugin_op. Put structured input in --json '{...}'. Run erp login first.
This page is generated from the operation table in tools/erp-cli/plugin-builder-ops.mjs, so it lists exactly what the CLI and MCP server accept.
Plugins and workspace
| Operation | Calls | What it does |
|---|---|---|
list | GET | List the plugins that exist in the workspace. |
info | GET | Name, version, and whether it has Java, Node or a backend service. |
contents | GET | Every artifact in the plugin, grouped by type. |
scaffold | POST | Create a new plugin (pluginId, name, category, ...). |
clone | POST | Copy a plugin in the workspace under a new id (pluginId, newPluginId, newName). |
extend-installed | POST | Recommended. Start your own plugin that builds on an installed one and keeps receiving its updates (pluginId = the installed plugin, newPluginId, newName). |
copy-installed | POST | Make your own editable copy of an installed plugin, published under its own name and version. You take over merging its later changes (pluginId, newPluginId, newName). |
overrides | GET | List this tenant's overrides of plugin-shipped artifacts. |
override-report | GET | How every override stands against the current shipped artifacts (what a plugin upgrade left unapplied). Optional plugin narrows it. |
override-get | GET | One override and how it stands (type = page/form/dashboard/..., name = the artifact's name). |
override-preview | POST | What the artifact would look like with these operations (type, name, operations). Nothing is saved. Operations: set, remove, replace, insertBefore, insertAfter, append, each with a target (a block's instanceId). |
override-set | PUT | Save the override (type, name, operations, status = active/disabled). |
override-clear | DELETE | Back to the artifact exactly as the plugin ships it. |
extension-points | GET | Every named extension point: built-in and plugin-declared, with semantics and owner. |
update-manifest | POST | Change plugin.json fields (pluginId, changes). |
bump-version | POST | Raise the plugin version (pluginId, part: patch/minor/major). |
validate | POST | Check the plugin and list problems. |
build | POST | Build the installable .spk package. |
snapshot | POST | Save a snapshot (pluginId, label). |
restore | POST | Restore a snapshot (pluginId, snapshot). |
workspace | GET | The plugin's workspace: status, owner, expiry, starting snapshot, last scan. |
build-limits | GET | CPU, memory, time and network limits every build and test job runs under. |
add-java-backend | POST | Add a standalone Java backend service starter. |
java-compile | POST | Compile the Java backend in a disposable container. |
java-test | POST | Run the Java tests. |
java-package | POST | Package the Java backend (service jar stays on the build host). |
node-run | POST | Run a Node script (pluginId, script: ci/test/build). |
java-files | GET | List the Java source files. |
source-files | GET | List the plugin's source files in every language (java, python, nodejs, typescript, react). |
source-read | GET | Read one source file (path relative to the plugin folder). |
source-write | POST | Create or replace one source file (pluginId, path, content, optional expectedRevision). Then run java-compile / java-test / node-run. |
Designer artifacts, entities and rules
| Operation | Calls | What it does |
|---|---|---|
artifact-list | GET | List artifacts of one type, e.g. type=forms (latestOnly=true for the newest of each name). |
artifact-get | GET | One artifact with its full definition (type, id). |
artifact-history | GET | Every version of an artifact by name. |
artifact-create | POST | Create a draft (type, name, description, definition = the artifact's JSON object). |
artifact-update | PUT | Change a draft (type, id, expectedRevision, name, definition). |
artifact-publish | POST | Publish a draft as a new version. |
artifact-delete | DELETE | Delete a draft. |
entity-list | GET | List entity definitions. |
entity-get | GET | One entity definition with its fields. |
rule-list | GET | List entity rules (optionally for one entityType). |
rule-create | POST | Create a rule (entityType, name, triggerEvent, conditions, actions, priority, active). |
rule-delete | DELETE | Delete a rule. |
AI Studio
| Operation | Calls | What it does |
|---|---|---|
add-ai-asset | POST | Add an AI asset to a plugin (pluginId, kind = prompt/rag/eval/agent/knowledge, code, source = starter/workspace). workspace copies what was built in AI Studio; starter writes a template. |
ai-prompts | GET | List the tenant's library prompts with their labels. |
ai-prompt-run | POST | Run a prompt (code, label or version, values = the variable values). |
ai-rag-list | GET | List the tenant's RAG pipelines with their labels. |
ai-rag-run | POST | Run a RAG pipeline (code, question, label). Returns the answer, citations and what every stage did. |
ai-kb-list | GET | List the tenant's knowledge bases. |
ai-kb-query | POST | Search a knowledge base (code, query, mode = HYBRID/VECTOR/KEYWORD, topK). |
ai-eval-run | POST | Run an evaluation dataset against a prompt or pipeline (code = dataset, targetCode, label). |
ai-usage | GET | Model calls, tokens, latency and cost for the last N days (default 7). |
ai-bundle-export | POST | Export prompts, RAG pipelines, evaluation datasets, knowledge bases and agents as one portable JSON bundle (optional prompts, ragPipelines, evalDatasets, knowledgeBases, agents = lists of codes; includeDocuments). |
ai-bundle-import | POST | Import a bundle (the bundle fields as the body; overwrite=true updates what exists). |
ai-keys | GET | List app API keys for the OpenAI-compatible endpoint (never the secrets). |
ai-key-create | POST | Make an app API key (name, applicationCode, allowedModels, rateLimitPerMinute). The secret is shown once in the answer. |
Bots and agents
| Operation | Calls | What it does |
|---|---|---|
agent-list | GET | List the tenant's agents and bots. |
agent-get | GET | One agent or bot with its settings. |
agent-save | POST | Create an agent or bot (the agent fields as the body: code, name, instructions, tools ...). |
agent-update | PUT | Change an agent or bot. |
agent-publish | POST | Publish the agent (its publish policy and guardrails apply). |
agent-run | POST | Run an agent once (input = the message). |
agent-executions | GET | Recent runs of the agent. |
agent-steps | GET | Every step of one run: model calls, tool calls, approvals. |
agent-explain | GET | Why the run did what it did. |
agent-handoffs | GET | Open hand-overs from bots to people. |
agent-draft | POST | Ask the platform's model to draft an agent from a description (prompt). |
Voice and phone calls
| Operation | Calls | What it does |
|---|---|---|
voice-lines | GET | The phone lines: provider, number, answering agent (credentials are never shown). |
voice-calls | GET | Recent calls and voice sessions with outcome and summary. |
voice-call | GET | One call: transcript, summary, outcome, sentiment and follow-ups. |
voice-analytics | GET | Call counts, outcomes and durations. |
voice-campaigns | GET | Outbound call campaigns with their window, repeat and state. |
Engagement
| Operation | Calls | What it does |
|---|---|---|
engagement-overview | GET | Journeys, audiences and send counts at a glance. |
engagement-audiences | GET | List the saved audiences. |
engagement-audience-set | PUT | Create or change an audience (code, name, filter). |
engagement-audience-preview | POST | Count and sample the people an audience filter picks. |
engagement-journeys | GET | List the journeys with their status. |
engagement-journey | GET | One journey with its steps. |
engagement-journey-set | PUT | Create or change a journey draft (code, name, audience, steps ...). |
engagement-journey-draft | POST | Ask the platform's model to draft a journey from a plain goal (need, 15 to 2000 characters). Nothing is saved. |
engagement-journey-check | POST | Check the journey and list problems before publishing. |
engagement-journey-publish | POST | Publish the journey. |
engagement-journey-launch | POST | Start the journey for its audience (now or on its schedule). |
engagement-journey-pause | POST | Pause a running journey. |
engagement-journey-resume | POST | Resume a paused journey. |
engagement-journey-end | POST | End a journey. |
engagement-members | GET | Who is in the journey and where each person is. |
engagement-contact-policy | GET | Quiet hours and frequency caps. |
engagement-dnc | GET | The do-not-contact list. |
Document management
| Operation | Calls | What it does |
|---|---|---|
dms-cabinets | GET | List the cabinets. |
dms-folders | GET | Folders under a cabinet or folder (cabinetId, parentId). |
dms-file | GET | One file's details. |
dms-upload-start | POST | Start a chunked upload of a large file (cabinetId, folderId, name, size, chunkBytes). Parts and complete need file bytes: use client.dms.uploadLarge. |
dms-upload-status | GET | Which parts of an upload have arrived. |
dms-playback | POST | A signed, expiring playback address for a video or audio file (and whether this person may download it). |
dms-media | GET | Status of the adaptive streaming copies of a file. |
dms-media-prepare | POST | Queue the adaptive streaming copies again (force=true to redo them). |
dms-delete | DELETE | Delete a file. |
Portals
| Operation | Calls | What it does |
|---|---|---|
portal-members | GET | The people with access to a portal. |
portal-invitations | GET | Open invitations to a portal. |
portal-invite | POST | Invite one person to a portal (email, role ...). |
Websites
| Operation | Calls | What it does |
|---|---|---|
website-members | GET | The website's signed-up members. |
website-page-views | GET | Page views of a website. |
website-feedback | GET | Visitor feedback. |
website-domain | GET | The website's custom domain and its state. |
Moving definitions between environments
| Operation | Calls | What it does |
|---|---|---|
package-kinds | GET | The kinds of definition this environment can export and install (audience, journey, contact-policy, document-category, retention-policy, document-type ...). |
package-export | POST | Export definitions of one kind as JSON items (kind; optional codes = a list; empty means all). Needs that feature's manage right. |
package-install | POST | Install exported items into this environment (kind, items = [{code, json}], overwrite=true to replace what exists). Journeys arrive as drafts; the result lists warnings for anything missing here. |
Backend services of a plugin
| Operation | Calls | What it does |
|---|---|---|
service-deploy | POST | Run the built backend jar as its own container; rolls back if unhealthy. |
service-status | GET | Container state, health and version. |
service-stats | GET | Live CPU and memory use. |
service-logs | GET | Recent log lines (tail, default 200). |
service-versions | GET | Deployed versions and which one runs. |
service-config | GET | CPU, memory and environment settings. |
service-set-config | POST | Change cpus (0.25-4), memory (128m-4g) and env. CPU/memory apply live; env restarts. |
service-start | POST | Start a stopped service. |
service-halt | POST | Stop the service but keep it and its settings. |
service-restart | POST | Restart the service. |
service-rollback | POST | Run an earlier version (pluginId, version). |
service-stop | POST | Remove the service container (images stay). |
Other
| Operation | Calls | What it does |
|---|---|---|
snapshots | GET | List saved snapshots. |
workspaces | GET | List the development workspaces (one per plugin) with status, owner and last scan. |
workspace-start | PUT | Start the workspace (its starting point is snapshotted) or rename it / move its expiry (name, kind, expiresInDays). |
workspace-status | POST | Move the workspace on (action: submit/approve/reject/published/reopen/archive/restore, notes). Someone else approves. |
workspace-changes | GET | The change set: every file added, removed or changed since the workspace started (or between two snapshots), with line diffs. |
workspace-scan | POST | Security scan: secrets, dependencies, permissions, tenant isolation, fixed addresses. Critical findings block publishing. |
workspace-history | GET | Saved history of the work (plans, steps, builds, tests, scans, publishes) so it can be resumed. |
workspace-log | POST | Save one step of AI-assisted work (kind: plan/step/tool/files/build/test/scan/preview/publish/note, summary, detail). |
workspace-plan | POST | Ask the platform's model for a build plan from a description (description); counts against workspace AI budgets. |
add-package-item | POST | Add an Engagement or Documents definition to a plugin (pluginId, kind = audience/journey/contact-policy/document-category/retention-policy/document-type, code, content = the item's JSON as package-export returns it, overwrite?). Writes metadata/KIND/CODE.json. |
