duvo.ai Skills API
Manage team and system skills (reusable knowledge packs).
Manage team and system skills (reusable knowledge packs).
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/duvoai-skills-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Duvo Public Agent Folders Skills API
description: Public API for programmatic access to Duvo. Authenticate with API keys created in the Duvo dashboard.
version: 1.0.0
servers:
- url: https://api.duvo.ai
description: Production server
tags:
- name: Skills
description: Manage team and system skills (reusable knowledge packs).
paths:
/v2/skills/system:
get:
operationId: listSystemSkills
tags:
- Skills
description: List all system skills (skills available to all teams).
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
skills:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
description: Unique skill identifier
name:
type: string
description: Human-readable skill name
description:
type: string
description: Short summary of what the skill does
required:
- id
- name
- description
additionalProperties: false
description: System skills available to all teams
required:
- skills
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: List System Skills
/v2/skills/{skill_id}:
delete:
operationId: deleteSkill
tags:
- Skills
description: Delete a skill for the current team.
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: True if the skill was deleted
message:
type: string
description: Human-readable result message
required:
- success
- message
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: Delete Skill
/v2/skills/{skill_id}/download:
get:
operationId: downloadSkill
tags:
- Skills
description: Download a custom skill as a ZIP archive. Only custom (team-owned) skills can be downloaded.
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema: {}
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: Download Skill
/v2/skills/{skill_id}/files:
get:
operationId: listSkillFiles
tags:
- Skills
description: List all files in a skill.
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
files:
type: array
items:
type: object
properties:
name:
type: string
description: File name (basename)
path:
type: string
description: Relative path of the file inside the skill
size:
description: File size in bytes
type: number
contentType:
description: MIME content type of the file
type: string
updatedAt:
description: ISO 8601 timestamp of the last update
type: string
required:
- name
- path
additionalProperties: false
description: Files contained in the skill
required:
- files
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: List Skill Files
/v2/skills/{skill_id}/files/{*}:
get:
operationId: getSkillFileContent
tags:
- Skills
description: Get the content of a file in a skill.
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
- schema:
type: string
minLength: 1
in: path
name: '*'
required: true
description: Relative path to the file inside the skill, e.g. SKILL.md.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: UTF-8 decoded contents of the file
path:
type: string
description: Relative path of the file inside the skill
contentType:
description: MIME content type inferred from the file extension
type: string
required:
- content
- path
additionalProperties: false
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: Get Skill File Content
put:
operationId: updateSkillFile
tags:
- Skills
description: Update the content of a file in a skill. Only team skills can be edited.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: New UTF-8 text content for the file.
required:
- content
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
- schema:
type: string
minLength: 1
in: path
name: '*'
required: true
description: Relative path to the file inside the skill, e.g. SKILL.md.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: True if the file was updated
message:
type: string
description: Human-readable result message
skill:
description: Updated skill metadata, present only when SKILL.md was edited
type: object
properties:
id:
type: string
description: Unique skill identifier
name:
type: string
description: Updated skill name parsed from SKILL.md
description:
type: string
description: Updated skill description parsed from SKILL.md
required:
- id
- name
- description
additionalProperties: false
required:
- success
- message
additionalProperties: false
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
'409':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Short error code
message:
description: Human-readable error message
type: string
validationErrors:
description: Per-field validation errors, present on frontmatter validation failure
type: array
items:
type: object
properties:
field:
type: string
description: Name of the invalid field
message:
type: string
description: Validation error message for the field
required:
- field
- message
additionalProperties: false
required:
- error
additionalProperties: false
summary: Update Skill File
/v2/skills/{skill_id}/assignments:
get:
operationId: listSkillAssignments
tags:
- Skills
description: List the agents in the current team whose live build references the given skill. Used to warn users that editing a skill will affect every agent that uses it.
parameters:
- schema:
type: string
format: uuid
in: path
name: skill_id
required: true
description: Skill ID.
security:
- bearerAuth: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
assignments:
type: array
items:
type: object
properties:
id:
type: string
description: Unique assignment (agent) identifier
name:
type: string
description: Human-readable assignment name
required:
- id
- name
additionalProperties: false
description: Agents in the current team whose live build uses the skill
total:
type: integer
minimum: 0
maximum: 9007199254740991
description: Total number of assignments referencing the skill
required:
- assignments
- total
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'404':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: List Skill Assignments
/v2/teams/{teamId}/skills:
get:
operationId: listSkills
tags:
- Skills
description: List all skills for the current team, including system skills.
security:
- bearerAuth: []
parameters:
- schema:
type: string
in: path
name: teamId
required: true
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
skills:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
description: Unique skill identifier
name:
type: string
description: Human-readable skill name
description:
type: string
description: Short summary of what the skill does
team_id:
description: ID of the team that owns the skill, or null for system skills
type:
- string
- 'null'
format: uuid
updated_at:
type: string
description: ISO timestamp of the last update
updated_by_user_id:
description: User ID of the last person who updated the skill
type:
- string
- 'null'
updated_by_user_name:
description: Display name of the last person who updated the skill (falls back to email)
type:
- string
- 'null'
source:
description: 'How the skill was created: ''browser'' or ''computer_use'' if generated from a recording, otherwise null (created/uploaded)'
type:
- string
- 'null'
enum:
- browser
- computer_use
computer_use_backend:
description: 'For computer-use skills, the backend it was recorded on: ''rdp'' (Remote Desktop) or ''sandbox'' (Duvo sandbox); null for other skills. Used to warn about backend mismatches at build time.'
type:
- string
- 'null'
enum:
- rdp
- sandbox
required:
- id
- name
- description
- team_id
- updated_at
- updated_by_user_id
- updated_by_user_name
- source
- computer_use_backend
additionalProperties: false
description: Skills available to the current team (team and system skills)
required:
- skills
additionalProperties: false
'401':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'403':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
'500':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
message:
type: string
required:
- error
additionalProperties: false
summary: List Skills
post:
operationId: createSkill
tags:
- Skills
description: Create or update a skill from a JSON body. The server constructs SKILL.md from the provided fields and stores it. If a skill with the same name already exists in the team, it is updated.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
minLength: 1
maxLength: 64
description: Skill name. 1-64 lowercase alphanumeric chars and hyphens; no leading/trailing or consecutive hyphens.
description:
type: string
minLength: 1
maxLength: 1024
description: 1-1024 chars descr
# --- truncated at 32 KB (46 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/duvo-ai/refs/heads/main/openapi/duvoai-skills-api-openapi.yml