Skip to main content
POST
/
v1
/
skill-submissions
curl -X POST "https://api.danubeai.com/v1/skill-submissions" \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "pdf-processing",
    "skill_md_content": "---\ndescription: Extract and process PDF documents\n---\n\n# PDF Processing\n\n## Steps\n1. Parse the PDF file\n2. Extract text content\n3. Return structured data",
    "scripts": [
      {"name": "extract.py", "content": "import fitz\n\ndef extract(path):\n    doc = fitz.open(path)\n    return [p.get_text() for p in doc]"}
    ]
  }'
{
  "id": "sub_abc123",
  "skill_name": "pdf-processing",
  "status": "pending",
  "submitted_at": "2026-02-24T12:00:00Z",
  "reviewed_at": null,
  "reviewer_notes": null,
  "skill_id": null
}

Overview

Submits a skill for review before it can be published publicly. The skill content is validated before the submission is created. Once approved by an admin, the skill is created as a public skill. Auth: Requires JWT authentication.

Body Parameters

name
string
required
Skill name (e.g. “pdf-processing”)
skill_md_content
string
required
The SKILL.md markdown content with instructions. Should include YAML frontmatter with a description field.
scripts
array
default:[]
Executable script files
reference_files
array
default:[]
Reference documentation files
assets
array
default:[]
Asset files (templates, resources)
service_id
string
Optional service UUID to associate the skill with
license
string
License identifier (e.g. “MIT”, “Apache-2.0”)
compatibility
string
Compatibility notes

Response

id
string
Submission UUID
skill_name
string
Skill name
status
string
Submission status: "pending", "approved", or "rejected"
submitted_at
string
ISO 8601 timestamp

Example

curl -X POST "https://api.danubeai.com/v1/skill-submissions" \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "pdf-processing",
    "skill_md_content": "---\ndescription: Extract and process PDF documents\n---\n\n# PDF Processing\n\n## Steps\n1. Parse the PDF file\n2. Extract text content\n3. Return structured data",
    "scripts": [
      {"name": "extract.py", "content": "import fitz\n\ndef extract(path):\n    doc = fitz.open(path)\n    return [p.get_text() for p in doc]"}
    ]
  }'
{
  "id": "sub_abc123",
  "skill_name": "pdf-processing",
  "status": "pending",
  "submitted_at": "2026-02-24T12:00:00Z",
  "reviewed_at": null,
  "reviewer_notes": null,
  "skill_id": null
}