Skip to main content
POST
/
api
/
v1
/
skills
/
submit
Submit Skill
curl --request POST \
  --url https://api.example.com/api/v1/skills/submit \
  --header 'Content-Type: application/json' \
  --data '
{
  "manifest": {},
  "skill_id": "<string>"
}
'
{
  "submission": {
    "id": "<string>",
    "status": "<string>",
    "reviewTier": "<string>",
    "autoApproved": true
  },
  "review": {
    "passed": true,
    "tier": "<string>",
    "checks": {}
  }
}
Submit a skill manifest for marketplace review. Automated checks run immediately, and the skill is either auto-approved or queued for manual review based on its risk tier.

Authentication

Requires a Bearer token. See Authentication.

Request Body

manifest
object
required
The full skill manifest object. See Manifest Reference for all fields.
skill_id
string
Existing skill UUID if this is a version update (not a new submission).

Request Examples

curl -X POST https://hitheo.ai/api/v1/skills/submit \
  -H "Authorization: Bearer $THEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "manifest": {
      "name": "Inventory Check",
      "slug": "inventory-check",
      "version": "1.0.0",
      "description": "Real-time inventory lookup and reorder alerts",
      "category": "automation",
      "author": { "name": "Acme Corp" },
      "systemPromptExtension": "You are an inventory management specialist...",
      "tools": [],
      "permissions": ["execute:tools"]
    }
  }'

Response (HTTP 201)

submission
object
review
object

Risk Tiers

TierDescription
autoLow-risk manifests that pass all automated checks — approved without human review.
staffManifests that introduce tools, knowledge files, or write-scoped permissions — reviewed by the Theo marketplace team.
securityManifests that combine external network access with write capability or other sensitive surfaces — reviewed by the security team before publish.

Example Response (Auto-Approved)

{
  "submission": {
    "id": "sub_abc123",
    "status": "approved",
    "reviewTier": "auto",
    "autoApproved": true
  },
  "review": {
    "passed": true,
    "tier": "auto",
    "checks": { "schema": "pass", "injection_scan": "pass", "tool_names": "pass" }
  }
}

Errors

StatusCodeDescription
422review_failedAutomated checks failed — review.checks contains details
429rate_limit_exceededSubmission rate limit exceeded — try again later