kaman.ai

Docs

Documentation

Guides, use cases & API reference

  • Overview
    • Getting Started
    • Platform Overview
  • Features
    • Features Overview
    • AI Assistant
    • Workflow Automation
    • Intelligent Memory
    • Data Management
    • Universal Integrations
    • Communication Channels
    • Security & Control
  • Use Cases Overview
  • Financial Services
  • Fraud Detection
  • Supply Chain
  • Technical Support
  • Software Development
  • Smart ETL
  • Data Governance
  • ESG Reporting
  • TAC Management
  • Reference
    • API Reference
  • Guides
    • Getting Started
    • Authentication
  • Endpoints
    • Workflows API
    • Tools API
    • KDL (Data Lake) API
    • OpenAI-Compatible API
    • A2A Protocol
    • Skills API
    • Knowledge Base (RAG) API
    • Communication Channels

Skills API

Skills are reusable instruction patterns that the agent injects into its system message to handle specific tasks better. Unlike tools (executable functions), skills are prompt-based knowledge that guide the agent's behavior. Skills support semantic vector search, marketplace publishing, and usage tracking.

Base URL

All Skills API requests are served by the kaman-agent service:

/agent/api/skills

For self-hosted installations, prepend your instance URL: http://kaman.ai/agent/api/skills

Authentication

All endpoints require a valid Bearer token in the Authorization header:

Authorization: Bearer kam_your_api_key

List Skills

List all skills accessible to the authenticated client, including system skills.

Endpoint

GET /agent/api/skills

Query Parameters

ParameterTypeRequiredDescription
statusstringNoFilter by status (e.g. active, deprecated)
source_typestringNoFilter by source type (e.g. manual, auto_generated, marketplace)
domainsstringNoComma-separated list of domains to filter by
limitnumberNoMax results to return (default: 50)
offsetnumberNoNumber of results to skip for pagination (default: 0)

Example

bash
curl -X GET "http://kaman.ai/agent/api/skills?status=active&limit=10&offset=0" \
  -H "Authorization: Bearer kam_your_api_key"

Response

json
{
  "skills": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "client_id": "42",
      "name": "SQL Query Best Practices",
      "slug": "sql-query-best-practices",
      "description": "Guidelines for writing efficient and safe SQL queries",
      "version": 1,
      "content": "When writing SQL queries, always use parameterized queries to prevent injection...",
      "content_tokens": 256,
      "trigger_keywords": ["sql", "query", "database"],
      "task_types": ["data-query", "database"],
      "domains": ["engineering", "data"],
      "tools": ["executeSQL", "queryDatabase"],
      "source_type": "manual",
      "usage_count": 15,
      "success_count": 12,
      "failure_count": 3,
      "status": "active",
      "created_at": "2026-02-10T08:00:00.000Z",
      "updated_at": "2026-02-15T14:30:00.000Z",
      "last_used_at": "2026-02-15T14:30:00.000Z",
      "supporting_files": [],
      "is_marketplace": false,
      "is_published": false,
      "author": null
    }
  ],
  "totalCount": 1
}

Search Skills

Search skills using hybrid vector and keyword matching. Returns results ranked by semantic similarity to the query. Only returns active skills with an embedding.

Endpoint

POST /agent/api/skills/search

Request Body

ParameterTypeRequiredDescription
querystringYesNatural language search query
limitnumberNoMax results to return (default: 10)
domainsstring[]NoArray of domains to filter by

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills/search" \
  -H "Authorization: Bearer kam_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "how to write safe SQL queries",
    "limit": 5,
    "domains": ["engineering"]
  }'

Response

Returns an array of skills with a similarity score (0 to 1). Results below 0.3 similarity are filtered out.

json
[
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "SQL Query Best Practices",
    "slug": "sql-query-best-practices",
    "description": "Guidelines for writing efficient and safe SQL queries",
    "content": "When writing SQL queries, always use parameterized queries...",
    "trigger_keywords": ["sql", "query", "database"],
    "domains": ["engineering", "data"],
    "status": "active",
    "similarity": 0.87
  }
]

Get Skill by ID

Retrieve a single skill by its UUID. Returns skills belonging to the authenticated client or system skills.

Endpoint

GET /agent/api/skills/:id

Path Parameters

ParameterTypeDescription
idstring (UUID)The skill ID

Example

bash
curl -X GET "http://kaman.ai/agent/api/skills/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer kam_your_api_key"

Response

Returns the full skill object.

json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "client_id": "42",
  "name": "SQL Query Best Practices",
  "slug": "sql-query-best-practices",
  "description": "Guidelines for writing efficient and safe SQL queries",
  "version": 1,
  "content": "When writing SQL queries, always use parameterized queries...",
  "content_tokens": 256,
  "trigger_keywords": ["sql", "query", "database"],
  "task_types": ["data-query", "database"],
  "domains": ["engineering", "data"],
  "tools": ["executeSQL", "queryDatabase"],
  "source_type": "manual",
  "source_session_id": null,
  "parent_skill_id": null,
  "usage_count": 15,
  "success_count": 12,
  "failure_count": 3,
  "status": "active",
  "created_at": "2026-02-10T08:00:00.000Z",
  "updated_at": "2026-02-15T14:30:00.000Z",
  "last_used_at": "2026-02-15T14:30:00.000Z",
  "supporting_files": [],
  "marketplace_plugin_id": null,
  "is_marketplace": false,
  "is_published": false,
  "author": null
}

Create Skill

Create a new skill. A slug is auto-generated from the name, and a 384-dimensional vector embedding is computed from the name, description, and content for semantic search. Token count is estimated at ~4 characters per token.

Endpoint

POST /agent/api/skills

Request Body

ParameterTypeRequiredDescription
namestringYesSkill name (max 255 chars)
contentstringYesThe skill content -- reusable instructions or patterns
descriptionstringNoHuman-readable description
trigger_keywordsstring[]NoKeywords that trigger this skill
task_typesstring[]NoTask types this skill applies to
domainsstring[]NoDomain categories (e.g. engineering, data)
toolsstring[]NoAssociated tool names
source_typestringNoHow the skill was created: manual (default), auto_generated, marketplace
source_session_idstringNoSession ID that generated this skill (for auto-generated skills)
parent_skill_idstring (UUID)NoID of parent skill if this is a derived version
supporting_filesobject[]NoAdditional files bundled with the skill
supporting_files[].pathstring--File path within the skill bundle
supporting_files[].filenamestring--File name
supporting_files[].contentstring--File content
supporting_files[].sizenumber--File size in bytes
supporting_files[].shastring--SHA hash of the file content

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills" \
  -H "Authorization: Bearer kam_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "SQL Query Best Practices",
    "description": "Guidelines for writing efficient and safe SQL queries",
    "content": "When writing SQL queries:\n1. Always use parameterized queries\n2. Add LIMIT clauses to prevent runaway queries\n3. Use indexes on frequently filtered columns",
    "trigger_keywords": ["sql", "query", "database"],
    "task_types": ["data-query"],
    "domains": ["engineering", "data"],
    "tools": ["executeSQL"]
  }'

Response (201 Created)

json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "client_id": "42",
  "name": "SQL Query Best Practices",
  "slug": "sql-query-best-practices",
  "description": "Guidelines for writing efficient and safe SQL queries",
  "version": 1,
  "content": "When writing SQL queries:\n1. Always use parameterized queries\n2. Add LIMIT clauses to prevent runaway queries\n3. Use indexes on frequently filtered columns",
  "content_tokens": 41,
  "trigger_keywords": ["sql", "query", "database"],
  "task_types": ["data-query"],
  "domains": ["engineering", "data"],
  "tools": ["executeSQL"],
  "source_type": "manual",
  "usage_count": 0,
  "success_count": 0,
  "failure_count": 0,
  "status": "active",
  "supporting_files": [],
  "is_marketplace": false,
  "is_published": false,
  "created_at": "2026-02-17T10:00:00.000Z",
  "updated_at": "2026-02-17T10:00:00.000Z"
}

Update Skill

Update an existing skill. If name, description, or content change, the vector embedding is automatically re-generated. Token count is recalculated if content or supporting_files change.

System skills (client_id = "system") cannot be modified.

Endpoint

PUT /agent/api/skills/:id

Path Parameters

ParameterTypeDescription
idstring (UUID)The skill ID

Request Body

All fields from the create endpoint are accepted. Only provided fields are updated.

ParameterTypeRequiredDescription
namestringNoUpdated skill name
contentstringNoUpdated skill content
descriptionstringNoUpdated description
trigger_keywordsstring[]NoUpdated keywords
task_typesstring[]NoUpdated task types
domainsstring[]NoUpdated domains
toolsstring[]NoUpdated tool associations
supporting_filesobject[]NoUpdated supporting files
statusstringNoUpdated status

Example

bash
curl -X PUT "http://kaman.ai/agent/api/skills/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer kam_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Updated SQL best practices:\n1. Always use parameterized queries\n2. Add LIMIT clauses\n3. Use CTEs for readability\n4. Avoid SELECT *",
    "trigger_keywords": ["sql", "query", "database", "optimization"]
  }'

Response

Returns the full updated skill object.

json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "SQL Query Best Practices",
  "content": "Updated SQL best practices:\n1. Always use parameterized queries\n2. Add LIMIT clauses\n3. Use CTEs for readability\n4. Avoid SELECT *",
  "trigger_keywords": ["sql", "query", "database", "optimization"],
  "updated_at": "2026-02-17T12:00:00.000Z"
}

Delete Skill (Soft Delete)

Soft-delete a skill by setting its status to deprecated. The record remains in the database but is excluded from search results and active listings.

System skills (client_id = "system") cannot be deleted.

Endpoint

DELETE /agent/api/skills/:id

Path Parameters

ParameterTypeDescription
idstring (UUID)The skill ID

Example

bash
curl -X DELETE "http://kaman.ai/agent/api/skills/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer kam_your_api_key"

Response

json
{
  "message": "Skill deprecated"
}

Publish Skill to Marketplace

Publish a skill to the marketplace so other clients can discover and install it. Sends an extension_saved event via Kafka with the skill manifest and marks the skill as published.

System skills cannot be published.

Endpoint

POST /agent/api/skills/:id/publish

Path Parameters

ParameterTypeDescription
idstring (UUID)The skill ID

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills/a1b2c3d4-e5f6-7890-abcd-ef1234567890/publish" \
  -H "Authorization: Bearer kam_your_api_key"

Response

json
{
  "message": "Skill published to marketplace",
  "skillId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Side Effects

  • Sets is_published to true on the skill record
  • Sets author to the authenticated user's name
  • Produces a Kafka extension_saved message with the following payload:
json
{
  "name": "SQL Query Best Practices",
  "description": "Guidelines for writing efficient and safe SQL queries",
  "type": "skill",
  "published": true,
  "isDraft": false,
  "status": "published",
  "version": "1.0.0",
  "clientId": 42,
  "userId": "user-uuid",
  "author": "Jane Doe",
  "category": "engineering",
  "skill_manifest": {
    "content": "When writing SQL queries...",
    "triggerKeywords": ["sql", "query", "database"],
    "taskTypes": ["data-query"],
    "domains": ["engineering", "data"],
    "tools": ["executeSQL"],
    "supporting_files": []
  },
  "manifest": {
    "skill_manifest": { "..." : "..." }
  }
}

Unpublish Skill

Remove a skill from the marketplace. Sends an extension_deleted event via Kafka and marks the skill as unpublished.

System skills cannot be unpublished.

Endpoint

POST /agent/api/skills/:id/unpublish

Path Parameters

ParameterTypeDescription
idstring (UUID)The skill ID

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills/a1b2c3d4-e5f6-7890-abcd-ef1234567890/unpublish" \
  -H "Authorization: Bearer kam_your_api_key"

Response

json
{
  "message": "Skill unpublished from marketplace",
  "skillId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Side Effects

  • Sets is_published to false on the skill record
  • Produces a Kafka extension_deleted message with:
json
{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "name": "SQL Query Best Practices",
  "type": "skill",
  "clientId": 42,
  "skill_manifest": {
    "content": "When writing SQL queries..."
  }
}

Install Marketplace Skill

Install a published skill from another client into your own workspace. Creates a copy of the skill with source_type set to marketplace and is_marketplace set to true.

Endpoint

POST /agent/api/skills/:id/install

Path Parameters

ParameterTypeDescription
idstring (UUID)The source skill ID (from marketplace search results)

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills/b2c3d4e5-f6a7-8901-bcde-f12345678901/install" \
  -H "Authorization: Bearer kam_your_api_key"

Response (201 Created)

Returns the newly created skill copy.

json
{
  "id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "client_id": "42",
  "name": "SQL Query Best Practices",
  "slug": "sql-query-best-practices",
  "content": "When writing SQL queries...",
  "source_type": "marketplace",
  "is_marketplace": true,
  "status": "active",
  "created_at": "2026-02-17T10:00:00.000Z"
}

Error Responses

StatusErrorDescription
400Cannot install your own skillThe source skill belongs to the same client
404Published skill not foundThe skill ID does not exist, is not published, or is not active
409Skill already installedA skill with the same name already exists for this client

Search Marketplace Skills

Search for published skills from other clients that are available for installation. Returns results ranked by semantic similarity. Skills belonging to the requesting client and system skills are excluded.

Endpoint

POST /agent/api/skills/marketplace/search

Request Body

ParameterTypeRequiredDescription
querystringYesNatural language search query
limitnumberNoMax results to return (default: 10)

Example

bash
curl -X POST "http://kaman.ai/agent/api/skills/marketplace/search" \
  -H "Authorization: Bearer kam_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "database optimization techniques",
    "limit": 5
  }'

Response

Returns an array of marketplace skill summaries with similarity scores. Results below 0.15 similarity are filtered out.

json
[
  {
    "skillId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "name": "SQL Query Best Practices",
    "description": "Guidelines for writing efficient and safe SQL queries",
    "domains": ["engineering", "data"],
    "trigger_keywords": ["sql", "query", "database"],
    "content_tokens": 256,
    "author": "Jane Doe",
    "sourceClientId": "99",
    "pluginId": null,
    "similarity": 0.82
  }
]

Database Schema

The kaman_skills table stores all skill records.

Columns

ColumnTypeNullableDefaultDescription
iduuidNogen_random_uuid()Primary key
client_idvarchar(50)No--Owner client ID (or system for system skills)
namevarchar(255)No--Skill name
slugvarchar(255)No--URL-safe slug, auto-generated from name
descriptiontextYes--Human-readable description
versionintegerNo1Version number
contenttextNo--The skill content (instructions/patterns)
content_tokensintegerYes--Estimated token count (~4 chars per token)
trigger_keywordstext[]Yes--Keywords for matching
trigger_embeddingvector(384)Yes--Embedding for semantic search
task_typestext[]Yes--Applicable task types
domainstext[]Yes--Domain categories
toolstext[]Yes--Associated tool names
source_typevarchar(50)NomanualOrigin: manual, auto_generated, marketplace
source_session_idvarchar(100)Yes--Session that generated the skill
parent_skill_iduuidYes--FK to parent skill (self-referencing)
usage_countintegerNo0Total invocation count
success_countintegerNo0Successful invocations
failure_countintegerNo0Failed invocations
statusvarchar(20)NoactiveStatus: active, deprecated
supporting_filesjsonbNo[]Bundled files: [{ path, filename, content, size, sha }]
marketplace_plugin_idintegerYes--Linked marketplace plugin ID
is_marketplacebooleanNofalseWhether installed from marketplace
is_publishedbooleanNofalseWhether published to marketplace
authorvarchar(255)Yes--Author name (set on publish)
created_attimestampNonow()Creation timestamp
updated_attimestampNonow()Last update timestamp
last_used_attimestampYes--Last usage timestamp

Unique Constraint

UNIQUE (client_id, slug, version)

Indexes

IndexTypeDescription
idx_kaman_skills_clientbtreeClient ID lookup
idx_kaman_skills_embeddinghnsw (vector_cosine_ops)Semantic vector search
idx_kaman_skills_statusbtree (partial)Active skills only
idx_kaman_skills_domainsginDomain array overlap queries
idx_kaman_skills_keywordsginKeyword array overlap queries
idx_kaman_skills_marketplace_pluginbtree (partial)Non-null marketplace plugin IDs
idx_kaman_skills_publishedbtree (partial)Published skills only

Error Handling

StatusErrorDescription
400name and content are requiredMissing required fields on create
400query is requiredMissing query on search endpoints
401UnauthorizedMissing or invalid authentication token
403System skills cannot be modifiedAttempted to update/delete/publish a system skill
404Skill not foundSkill does not exist or is not accessible to this client
409Skill already installedDuplicate install attempt (same name + client)
500Internal server errorUnexpected server-side error

Error Response Format

json
{
  "error": "Error message describing what went wrong"
}

Code Examples

TypeScript

typescript
const API_KEY = process.env.KAMAN_API_KEY;
const BASE_URL = 'http://kaman.ai';

// List skills with pagination
async function listSkills(limit = 50, offset = 0) {
  const response = await fetch(
    `${BASE_URL}/agent/api/skills?limit=${limit}&offset=${offset}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );
  return response.json(); // { skills: [...], totalCount: number }
}

// Semantic search
async function searchSkills(query: string, limit = 10) {
  const response = await fetch(`${BASE_URL}/agent/api/skills/search`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ query, limit })
  });
  return response.json();
}

// Create a skill
async function createSkill(name: string, content: string) {
  const response = await fetch(`${BASE_URL}/agent/api/skills`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      name,
      content,
      domains: ['general'],
      trigger_keywords: ['example']
    })
  });
  return response.json();
}

// Publish to marketplace
async function publishSkill(skillId: string) {
  const response = await fetch(
    `${BASE_URL}/agent/api/skills/${skillId}/publish`,
    {
      method: 'POST',
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );
  return response.json();
}

// Browse and install from marketplace
async function browseAndInstall(query: string) {
  const results = await fetch(
    `${BASE_URL}/agent/api/skills/marketplace/search`,
    {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ query, limit: 5 })
    }
  ).then(r => r.json());

  if (results.length > 0) {
    const installed = await fetch(
      `${BASE_URL}/agent/api/skills/${results[0].skillId}/install`,
      {
        method: 'POST',
        headers: { 'Authorization': `Bearer ${API_KEY}` }
      }
    ).then(r => r.json());
    return installed;
  }
}

Python

python
import requests
import os

class KamanSkills:
    def __init__(self, base_url: str):
        self.base_url = f'{base_url}/agent/api/skills'
        self.headers = {
            'Authorization': f'Bearer {os.getenv("KAMAN_API_KEY")}',
            'Content-Type': 'application/json'
        }

    def list(self, limit=50, offset=0, status=None):
        """List skills with optional filters."""
        params = {'limit': limit, 'offset': offset}
        if status:
            params['status'] = status
        resp = requests.get(self.base_url, params=params, headers=self.headers)
        return resp.json()

    def search(self, query: str, limit=10, domains=None):
        """Semantic search for skills."""
        body = {'query': query, 'limit': limit}
        if domains:
            body['domains'] = domains
        resp = requests.post(f'{self.base_url}/search', json=body, headers=self.headers)
        return resp.json()

    def get(self, skill_id: str):
        """Get a skill by ID."""
        resp = requests.get(f'{self.base_url}/{skill_id}', headers=self.headers)
        return resp.json()

    def create(self, name: str, content: str, **kwargs):
        """Create a new skill."""
        body = {'name': name, 'content': content, **kwargs}
        resp = requests.post(self.base_url, json=body, headers=self.headers)
        return resp.json()

    def update(self, skill_id: str, **kwargs):
        """Update an existing skill."""
        resp = requests.put(f'{self.base_url}/{skill_id}', json=kwargs, headers=self.headers)
        return resp.json()

    def delete(self, skill_id: str):
        """Soft-delete a skill (sets status to deprecated)."""
        resp = requests.delete(f'{self.base_url}/{skill_id}', headers=self.headers)
        return resp.json()

    def publish(self, skill_id: str):
        """Publish a skill to the marketplace."""
        resp = requests.post(f'{self.base_url}/{skill_id}/publish', json={}, headers=self.headers)
        return resp.json()

    def unpublish(self, skill_id: str):
        """Unpublish a skill from the marketplace."""
        resp = requests.post(f'{self.base_url}/{skill_id}/unpublish', json={}, headers=self.headers)
        return resp.json()

    def search_marketplace(self, query: str, limit=10):
        """Search for installable marketplace skills."""
        body = {'query': query, 'limit': limit}
        resp = requests.post(f'{self.base_url}/marketplace/search', json=body, headers=self.headers)
        return resp.json()

    def install(self, skill_id: str):
        """Install a marketplace skill."""
        resp = requests.post(f'{self.base_url}/{skill_id}/install', json={}, headers=self.headers)
        return resp.json()

# Example usage
client = KamanSkills('http://kaman.ai')

# Create and publish a skill
skill = client.create(
    name='API Error Handling',
    content='When handling API errors:\n1. Always check HTTP status codes\n2. Parse error response bodies\n3. Implement exponential backoff for retries',
    domains=['engineering'],
    trigger_keywords=['api', 'error', 'retry']
)
client.publish(skill['id'])

# Search and install from marketplace
marketplace_skills = client.search_marketplace('error handling patterns')
for s in marketplace_skills:
    print(f"{s['name']} (similarity: {s['similarity']:.2f})")
if marketplace_skills:
    installed = client.install(marketplace_skills[0]['skillId'])

Best Practices

  1. Write descriptive content: The skill content is injected into the agent's system message. Write clear, actionable instructions.
  2. Use meaningful keywords: trigger_keywords improve search recall alongside vector embeddings.
  3. Set domains for filtering: Domains allow consumers to scope skill searches to relevant areas.
  4. Link related tools: The tools array documents which tools pair well with the skill.
  5. Include supporting files: For complex skills, bundle schema definitions, templates, or example scripts via supporting_files.
  6. Track usage metrics: Monitor usage_count, success_count, and failure_count to identify skills that need improvement.

Next Steps

  • Tools API - Execute individual functions
  • Workflows API - Chain tools into workflows
  • Authentication - Learn about API authentication

On this page

  • Base URL
  • Authentication
  • List Skills
  • Endpoint
  • Query Parameters
  • Example
  • Response
  • Search Skills
  • Endpoint
  • Request Body
  • Example
  • Response
  • Get Skill by ID
  • Endpoint
  • Path Parameters
  • Example
  • Response
  • Create Skill
  • Endpoint
  • Request Body
  • Example
  • Response (201 Created)
  • Update Skill
  • Endpoint
  • Path Parameters
  • Request Body
  • Example
  • Response
  • Delete Skill (Soft Delete)
  • Endpoint
  • Path Parameters
  • Example
  • Response
  • Publish Skill to Marketplace
  • Endpoint
  • Path Parameters
  • Example
  • Response
  • Side Effects
  • Unpublish Skill
  • Endpoint
  • Path Parameters
  • Example
  • Response
  • Side Effects
  • Install Marketplace Skill
  • Endpoint
  • Path Parameters
  • Example
  • Response (201 Created)
  • Error Responses
  • Search Marketplace Skills
  • Endpoint
  • Request Body
  • Example
  • Response
  • Database Schema
  • Columns
  • Unique Constraint
  • Indexes
  • Error Handling
  • Error Response Format
  • Code Examples
  • TypeScript
  • Python
  • Best Practices
  • Next Steps