ArchiSpark
Reference

API Reference

REST API endpoints for organizations, ArchiMate models and dashboards.

Organizations

Workspaces belong to an organization — see Authentication for the full role matrix (owner/editor/viewer), which applies to Admin exactly as it does to any other user.

MethodPathAuthDescription
GET/api/organizationsviewer+List organizations the caller belongs to, with their role and which one is active (empty for an Admin)
PUT/api/organizations/:idownerRename — body: { name }
POST/api/organizations/:id/activateviewer+Switch the caller's active organization
GET/api/organizations/:id/membersviewer+List members with role and username
POST/api/organizations/:id/membersownerAdd an existing Keycloak user — body: { username, role } (no email invitation)
PUT/api/organizations/:id/members/:userIdownerChange a member's role — body: { role }; refuses to demote the last owner
DELETE/api/organizations/:id/members/:userIdownerRemove a member, including self-removal; refuses to remove the last owner

Invitation routes complement direct member management: POST and GET /api/organizations/:id/invitations, DELETE /api/organizations/:id/invitations/:invitationId, POST on its /resend suffix, plus public token inspection and authenticated acceptance through GET /api/invitations/:token and POST /api/invitations/:token/accept. Create/resend responses may include the one-time accept_url and a delivery_kind of manual, invitation, or onboarding. With e-mail delivery enabled, onboarding means a missing Keycloak identity was created without credentials and received the finish-registration actions.

Platform administration

Admin-only (Keycloak identifier platform_admin). These metadata routes never grant access to organization content — an Admin needs a real organization_members row on an organization (addable to itself through the member-management routes below) to see or act on its workspaces, exactly like any other user — see Authentication.

MethodPathDescription
GET/api/platform/organizationsList every organization (id, slug, name, is_personal, enabled, created_at)
PUT/api/platform/organizations/:idSuspend/reactivate — body: { enabled }
DELETE/api/platform/organizations/:idDelete an organization (cascades to workspaces, members, and tokens)
GET/api/platform/pluginsList every plugin discovered in plugins/ (name, version, icon_count, enabled)
GET/api/platform/plugins/:slugOne plugin's detail — type plus its full icon list, for the /platform/plugins/:slug content view
PUT/api/platform/plugins/:slugEnable/disable a plugin — body: { enabled }
GET/api/platform/plugins/:slug/icons/:iconSlugAdmin preview of one icon's SVG — unlike the public route below, works even when the plugin is disabled

Workspace management

Every workspace belongs to exactly one organization (organization_id) — a caller sees and acts on every workspace of every organization they belong to, subject to their role in that organization.

MethodPathDescription
GET/api/workspacesList the caller's active organization's workspaces
POST/api/workspacesCreate workspace — body: { name, path?, description?, organization_id? } (path = XML file to import; organization_id defaults to the caller's active organization — 403 if the caller has no organization membership at all)
PUT/api/workspaces/:idRename workspace and/or update description (owner/editor)
DELETE/api/workspaces/:idDelete workspace (owner/editor; deleting the active one switches to another in the same organization; deleting the last one is allowed and leaves zero — the web UI then redirects to its /workspaces page to create a new one)
POST/api/workspaces/:id/activateSwitch the caller's active workspace (and active organization, if different)

Model routes

MethodPathDescription
GET/apiActive workspace info + model metadata
POST/api/saveNo-op (writes are persisted immediately); kept for compatibility
GET/api/exportDownload model as Open Exchange XML
GET/api/export/zipDownload model XML + all view SVGs as a ZIP archive
POST/api/importReplace the active workspace model from an XML body
POST/api/export/neo4jRebuild the active workspace's Neo4j read model

Elements

MethodPathDescription
GET/api/elements/typesSorted list of element types present in model
GET/api/elementsList elements (?type=, ?name=)
GET/api/elements/:idGet element
POST/api/elementsCreate element — { name, type, documentation?, properties? }
PUT/api/elements/:idUpdate element (partial)
DELETE/api/elements/:idDelete element (cascades to relationships and view nodes)
GET/api/elements/:id/relationshipsRelationships touching one element
GET/api/elements/:id/viewsViews containing one element

Relationships

MethodPathDescription
GET/api/relationships/typesSorted list of relationship types present
GET/api/relationshipsList (?type=, ?source_id=, ?target_id=)
GET/api/relationships/:idGet relationship
POST/api/relationshipsCreate — { type, source, target, name?, documentation?, is_directed?, access_type?, influence_strength? }
PUT/api/relationships/:idUpdate (partial)
DELETE/api/relationships/:idDelete
GET/api/relationships/:id/viewsViews containing the relationship as a connection

Views

MethodPathDescription
GET/api/viewsList views
GET/api/views/:idView detail (nodes + connections)
POST/api/viewsCreate — { name, viewpoint?, documentation? }
PUT/api/views/:idUpdate (partial)
DELETE/api/views/:idDelete
POST/api/views/:id/nodesAdd node — { element_id, x?, y?, w?, h? }
GET/api/views/:id/imageRender view as SVG (?format=svg; PNG export is client-side)
PUT / DELETE/api/views/:id/nodes/:nodeIdUpdate or delete a node
POST/api/views/:id/connectionsAdd a connection between view nodes
PUT / DELETE/api/views/:id/connections/:connectionIdUpdate or delete a connection

GET /api/viewpoints returns the ArchiMate viewpoint catalogue.

Property definitions

MethodPathDescription
GET/api/property-definitionsList
GET/api/property-definitions/:idGet
POST/api/property-definitionsCreate — { name, type? } (types: string, boolean, date, number, enumeration)
PUT/api/property-definitions/:idUpdate
DELETE/api/property-definitions/:idDelete

Each returned definition includes is_system. System definitions, including Archispark Plugin IconPack, are read-only at the definition level: update and delete requests are rejected. Its value on an element or relationship must be a plugin icon's slug (see Plugins), resolved against the enabled plugin that declares it, or a legacy HTTP(S) URL / relative path for values written before the plugin system existed.

Plugins

See Plugins for the plugins/<slug>/ folder format, the discovery/activation split, and the Archispark Plugin IconPack property. Plugins are instance-wide, not organization-scoped — every organization sees the same list. Reading is open to any authenticated user; enabling or disabling a plugin requires the platform_admin realm role (see the /api/platform/plugins routes above).

MethodPathDescription
GET/api/pluginsList enabled plugins with their icons (slug, name, url)
GET/api/plugins/:pluginSlug/icons/:iconSlugPublic — inline SVG of one icon, no auth required, 404 if the plugin is disabled

Dashboards

Workspace-scoped — see docs/../development/architecture.md#dashboards. Editing requires the owner/editor role in the active organization; viewer is read-only.

MethodPathDescription
GET/api/dashboardsList the active organization's latest dashboard revisions
POST/api/dashboardsCreate a dashboard (revision 1) — body: a DashboardDefinition
GET/api/dashboards/:dashboardIdLatest revision
PUT/api/dashboards/:dashboardIdNew revision of an existing dashboard
DELETE/api/dashboards/:dashboardIdSoft delete
GET/api/dashboards/adminAdministration listing (includes soft-deleted, isProvisioned)
GET/api/dashboards/:dashboardId/panels/:panelInstanceIdExecute one panel instance — query-string values are the panel's parameters
GET/api/panel-visualizationsStatic catalogue of panel visualizations (core/graph, core/table, core/metric)
POST/api/exploreAd hoc read-only Cypher query — body: { query, parameters }

Session, profile, and service routes

MethodPathDescription
GET/api/auth/login, /api/auth/callback, /api/auth/logoutBrowser OIDC flow
POST/api/auth/refreshRefresh browser token cookies
GET/api/auth/meCurrent verified Keycloak identity
GET/api/meRead the current profile and memberships
GET / POST/api/settings/api-tokensList or create personal tokens
DELETE/api/settings/api-tokens/:idRevoke a personal token
GET / PUT/api/settings/messagesRead messages; update as an Admin
GET/api/healthService health
GET/api/openapi.jsonOpenAPI document
GET/api/docsInteractive API reference

On this page