Contract status
Canonical route contract
This page is based on the route handlers in the original v1 platform repo:
apps/platform/src/app/api/capabilities/route.js
apps/platform/src/app/api/capabilities/import/route.js
apps/platform/src/app/api/capabilities/[id]/route.js
apps/platform/src/app/api/capabilities/[id]/install/route.js
apps/platform/src/app/api/capabilities/categories/route.js
Use this page when
- you are browsing the capability library
- you are compiling capabilities from n8n workflows
- you need to install a capability for a business
- you need to understand dependency-check behavior before install
Golden path
1. Browse categories
GET /api/capabilities/categories
2. Browse or search capabilities
GET /api/capabilities?category=productivity&featured=true
3. Import a capability from a workflow in dry-run mode
POST /api/capabilities/import
Content-Type: application/json
{
"workflow_json": {},
"category_slug": "productivity",
"dry_run": true
}
4. Inspect one capability
GET /api/capabilities/my-capability-slug
5. Install it for a business
POST /api/capabilities/my-capability-slug/install
GET /api/capabilities
Purpose:
- return capability library records
Supported query params from the source:
category
search
featured=true
installed=true
admin=true
Behavior:
- non-admin views only return active capabilities
- admin view requires super-admin auth
- installed view filters by current business installs
- authenticated business requests may get
is_installed annotations
POST /api/capabilities/import
Purpose:
- convert an n8n workflow JSON payload into a capability and publish it
Auth:
Request body fields from the source:
workflow_json
category_slug
name
description
emoji
dry_run
Pipeline behavior:
- parse workflow into IR using
parseWorkflow()
- compile into a capability using
compileCapability()
- block on parse or compile errors
- optionally return a dry-run preview
- upsert into
capabilities
Dry-run success shape
{
"success": true,
"data": {
"capability": {},
"warnings": [],
"errors": [],
"dry_run": true
}
}
Import failure modes
- invalid JSON body
workflow_json missing or not an object
- workflow parse failure
- critical parse errors
- compilation errors
- database upsert failure
GET /api/capabilities/categories
Purpose:
- return active capability categories for the capability library sidebar
Behavior:
- selects active records
- orders by
display_order
GET /api/capabilities/{id}
Purpose:
- return full details for one capability
Path parameter:
Behavior:
- returns active capability only
- includes joined
capability_categories
- annotates
is_installed for the current business when available
PATCH /api/capabilities/{id}
Purpose:
- update capability metadata
Auth:
Accepted fields from the source:
name
description
icon_emoji
category_slug
is_featured
is_active
DELETE /api/capabilities/{id}
Purpose:
- delete or deactivate a capability
Auth:
Delete policy from the source:
- hard delete if install count is zero
- soft delete by setting
is_active=false if installs exist
POST /api/capabilities/{id}/install
Purpose:
- install a capability for the authenticated business
Behavior:
- resolve tenant and business context
- fetch active capability by UUID or slug
- detect already-installed or previously-deactivated installs
- run requirement checks through
checkRequirements()
- create or reactivate
business_capabilities
Important status responses from the source:
installed
already_installed
requirements_missing
Requirements-missing example
{
"success": false,
"status": "requirements_missing",
"requirements": {
"connected": [],
"missing": ["gmail", "slack"],
"can_install": false
}
}
DELETE /api/capabilities/{id}/install
Purpose:
- uninstall a capability for the authenticated business
Behavior:
- soft delete only
- sets
is_active=false on the install row
Operational checks after install
- Verify install status is
installed or already_installed.
- If install fails, inspect
requirements_missing.
- Re-fetch capability details and confirm
is_installed=true.
- Confirm the business can access the expected runtime surface.
v1 reality vs v2 target
Implemented in v1
- capability library endpoints
- workflow-to-capability import
- install and uninstall lifecycle
- requirements-aware install blocking
Carry forward to v2
- dry-run preview before persistence
- install requirement checks
- slug-or-UUID resource lookup
Known mismatch or migration risk
- the capabilities system is adjacent to, but not identical with, the platform app manifest system
- v2 should clarify when a reusable unit is a capability, an app, or both
Last modified on April 18, 2026