---
title: "Publish a verified harness directory into an organization namespace"
method: POST
path: "/orgs/{slug}/imports/harness-dir"
---

# Publish a verified harness directory into an organization namespace

`POST /orgs/{slug}/imports/harness-dir`

## Request

- Base URL: `https://superskill.sh/api`
- URL: `https://superskill.sh/api/orgs/{slug}/imports/harness-dir`
- Auth: HTTP bearer

Requires ORGS_ENABLED=true and a Bearer org token with publish scope. Accepts the same bounded hh publish <dir> payload as /imports/harness-dir, then marks the manifest visibility: org before server-side validation, security scan, eval and gate checks.

## Path parameters

- `slug` string, required

## Request body

- object
  - `name` string
  - `files` object[], required
    - `path` string, required
    - `content` string, required
    - `truncated` boolean

## Response `200`

Verified org-private harness

- object
  - `item` RegistryItem
    - `owner` string, required
    - `ownerLabel` string
    - `name` string, required
    - `title` string, required
    - `summary` string, required
    - `tags` string[], required
    - `job` string
    - `outcome` string
    - `runtime` string
    - `forgeUrl` string: Public repository or upstream URL when available. Local filesystem paths are never exposed.
    - `contentType` 'harness' | 'directory', required
    - `directory` object
      - `url` string
      - `itemCount` integer
      - `category` string
      - `notes` string
    - `compatibility` object, required
      - `targets` object[], required
        - `id` string
        - `name` string
        - `status` 'planned' | 'available' | 'verified', required
        - `notes` string
        - `last_verified_at` string, date-time
    - `valid` boolean, required
    - `riskScore` number
    - `riskTier` string, required
    - `evalStatus` string, required
    - `evalScore` number
    - `contextCost` ContextCost, required: Deterministic estimate from markdown instruction files. It is not a measured LLM bill.
      - `approxTokens` number, required
      - `files` number, required
      - `bytes` number, required
      - `status` 'estimated', required
    - `standard` 'conformant' | 'partial', required
    - `stars` number
    - `forks` number
    - `threads` number
    - `runs` number
    - `installConfirms` number
    - `signalCount` number
    - `heatQualified` boolean
    - `heat` number
    - `heatDelta` number
    - `freshness` string
    - `badge` string
    - `cliCommand` string, required
    - `updatedAt` string
  - `snapshotVersion` string
  - `verified` boolean
  - `gate` object
    - `score` number
    - `risk` number
    - `cost` number
    - `failures` string[]

## Other responses

- `400`: Bad request
- `401`: Authorization required
- `403`: Authorization was provided but is not allowed for this action
- `404`: Resource not found
- `422` (unresolved $ref)

---

[API](https://skmtc.dev/superskill/apis/superskill-api.md) · [All operations](https://skmtc.dev/superskill/apis/superskill-api/llms.txt) · [OpenAPI document](https://skmtc.dev/superskill/apis/superskill-api/revisions/ced2d2d1f217?raw)
