Portablemind
Portablemind
Docs
Open Portablemind
Developers

Developer Resources

REST API, MCP tools, and building your own apps on the platform.

Portablemind is built on an open, API-first platform. Everything you can do in the app — and a great deal more — is available programmatically, so you can integrate Portablemind with your own systems or build entirely custom applications on top of it.

This documentation site covers using the Portablemind app. Developer-level material lives in the platform API guide, summarized below.

The API guide

The API guide is the home for everything code-level:

  • REST API reference — authentication (JWT + tenant headers), response formats, error handling, and the full set of endpoint groups: parties and contacts, business events, security, and AI.
  • MCP tools reference — the Model Context Protocol tools that let AI agents (including external agents like Claude) operate on the platform: creating records, querying data, managing conversations, and more.
  • Dynamic Functions — serverless JavaScript that runs in a sandboxed environment inside your workspace, with OAuth integration and scheduling.
  • Building your own app — scaffolding a single-page application against the platform, including shared authentication components and working sample code.
  • Sample applications — a gallery of prebuilt demo apps showing platform patterns in action.

Template apps: fork a working example

Two complete open-source applications built on Portablemind are published as public repos. Each is a real, deployed product — and each is deliberately structured as a template you can fork to build your own custom app. Both share the same minimal architecture: a single-page HTML + vanilla JavaScript frontend and a tiny zero-dependency Node proxy that injects runtime configuration and forwards authenticated requests to the platform. No framework, no build step.

RepoWhat it is
pm-ticket-portalWhite-label customer support portal: clients register with an access key, submit tickets, and chat with an AI support agent that responds autonomously — with human staff able to step in at any time.
pm-payer-portalWhite-label healthcare payer portal: prior-authorization workflows driven by UM intake agents, with turnaround-time tracking and clinician-controlled denials.

These are the same kind of apps showcased on the Apps page — working examples of what you can build on the platform. In fact, pm-ticket-portal is the code behind our own live support site at support.portablemind.ai, so you can see exactly what the template produces in production.

Build your own app with a coding agent

The fastest path from template to custom app is to hand one of these repos to a coding agent (Claude Code, SiloLink, Codex, …) with a prompt like this:

Clone https://gitlab.com/russonrails/pm-ticket-portal and use it as a template to
build a new app for me.

What I want to build: <describe your app — who uses it, what they can do, and
what the AI agent should handle>.

Keep the template's architecture: a single-page HTML + vanilla JS frontend served
by the zero-dependency Node proxy, which injects runtime config and forwards
authenticated requests to the platform. Reuse its authentication flow, API-client
patterns, and Docker deployment setup unchanged.

Replace the domain-specific screens, workflows, and agent configuration with my
use case, pointed at my Portablemind workspace (API base URL and tenant:
<your values>). For endpoint details, use the platform API guide
(https://www.dsiloed.com/apps/apiguide/index.html) and the interactive API
reference (https://www.dsiloed.com/docs/api/v1/index.html).

Before writing code, read the repo's README and integration guide and confirm
your plan with me.

Swap in whichever repo is closest to what you're building: the support-desk shape (pm-ticket-portal) or the form-and-workflow shape (pm-payer-portal).

Shipping a role with your app

The people who use your app need a security role in each workspace it runs in: the role decides what they can see and do. That role belongs to your app, not to the platform — so it isn't something we seed or migrate for you. You build it once, export it to a file, keep the file in your app's repo, and import it into each workspace as part of your release.

Build it once. In your development workspace, open Administration → Roles, create the role and give it the capabilities your app needs. Prefer scoped grants: a capability with no scope applies to every record of that kind in the workspace, so "delete Tasks" unscoped lets your users delete anyone's tasks, not just your app's. Scope it to the records your app owns — a custom-field tag, the person's own team, the conversations they are in.

Export it. The Export button on the role downloads <role>.role.export.json. It lists the capabilities by what they are (action, resource, scope), never by id, so the same file works in any workspace. One thing to remove before you commit it: if specific records have been shared with the role, those shares come out as entries pointing at record ids that only exist in your workspace. Delete them from the file — it should carry the app's grants, nothing workspace-specific. Then review changes to it the way you review code.

Import it on every release. Administration → Roles → Import Role takes the file (paste or upload); developers can do the same with POST /api/v1/security_roles/import as a workspace admin. An import is exact and repeatable: it creates the role if the workspace lacks it, then replaces the role's capabilities with the file's — anything granted by hand since the last import is removed, which is what keeps the file the truth. Records shared with the role are removed too, so re-share them afterwards if your app relies on that. The description is only overwritten when you tick "overwrite" or the role had none. A role marked external stays external; an import never un-flags one.

Who holds the role is separate. The file says what the role can do. Assigning it to people is workspace membership — User Management, or the role list on a user when your app creates them — and isn't part of the export. When your app creates users with something other than an admin's credentials, it can only hand out roles marked external; an internal role is assigned by an admin.

App users: with or without the Basic role. Every ordinary member holds Basic, and Basic is broad on purpose: members can create, change and delete everyday tasks, boards, channels and tickets, so a new workspace works on day one. A person's access is everything their roles allow together, so your role's scopes only narrow people who don't also hold Basic. If your users are ordinary members, your role adds what they need on your app's own records, and its limits on everyday records make no difference. If a workspace wants "app-only" people (say, staff who should only work inside your app), the workspace gives them your role, plus External Member if they're outside the organisation, and not Basic; then your scopes are the real boundary. That choice is the workspace's to make when it assigns roles. Your job is a role that is correctly scoped on its own; don't try to restrict Basic from your app.

Need a capability that doesn't exist yet? That is the one case that is a platform change rather than an app change; tell us what action on what resource.

Interactive API reference

A browsable Swagger/OpenAPI reference is available at www.dsiloed.com/docs/api/v1, covering request and response schemas for every public endpoint.

Where the two guides meet

Some Portablemind features have both a user-facing side (documented here) and a developer side (documented in the API guide):

FeatureUser docsDeveloper topics in the API guide
Conversations & AIChat & the AI AssistantWebhook ingestion, embedding the chat component
Guest usersGuest UsersCapability creation and assignment APIs
Workspace sharingWorkspace SharingCross-tenant access request APIs
Coding agentsCoding Agents (SiloLink)SiloLink session APIs and MCP bridge
AgentsBuilding AI AgentsAgent and model configuration APIs
Dynamic functionsDynamic FunctionsFunction management and execution APIs
White-label & single sign-onWhite-label Branding & Single Sign-onWhite-label setup and sign-on key APIs, the signed sign-on assertion and its exchange for a session
App rolesShipping a role with your appSecurity role export and import endpoints, scoped capabilities
Sub-workspacesEnterprise Sub-workspacesCreating sub-workspaces, agent template publishing and install, sharing a model with a spend cap, and the per-sub-workspace metrics a parent can read (names and numbers, never content)

Tip: If you're building AI agents that act on the platform, start with the MCP tools reference — it's usually a faster path than the raw REST API.

Agent OrchestrationConnecting AI Apps (MCP)