Hadrian is experimental alpha software. Do not use in production.
Hadrian

Skills

Manage Skills (OpenAI-compatible /v1/skills). A skill packages a SKILL.md instruction file plus optional bundled scripts, references, and assets, published as immutable versions with a default_version/latest_version pointer. Upload as a JSON file array, a multipart directory, or a zip bundle; download a version as zip via /content.

Hadrian Extensions

  • owner_type/owner_id for organization/team/project/user ownership (OpenAI is project-scoped)
  • JSON files array ({path, content}) alongside the spec's zip/multipart upload
  • files/files_manifest, total_bytes, and frontmatter flags on responses
  • skill_reference accepts a prefixed/bare id or a name slug, plus a specific version

List skills for the current project (or a specific owner / accessible set).

GET
/api/v1/skills
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Query Parameters

owner_type?string|null

Hadrian Extension: owner kind for single-owner listing.

owner_id?string|null

Hadrian Extension: owner id for single-owner listing.

Formatuuid
limit?integer|null
Formatint64
Range1 <= value <= 100
order?null|SortOrder
after?string|null
before?string|null

Hadrian Extension: cursor for backward pagination (id of the first item from a previous page).

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/skills"
{
  "data": [
    {
      "allowed_tools": [
        "string"
      ],
      "argument_hint": "string",
      "created_at": 0,
      "default_version": "string",
      "description": "string",
      "disable_model_invocation": true,
      "files": [
        {
          "byte_size": 0,
          "content": "string",
          "content_type": "string",
          "created_at": "2019-08-24T14:15:22Z",
          "path": "string"
        }
      ],
      "files_manifest": [
        {
          "byte_size": 0,
          "content_type": "string",
          "path": "string"
        }
      ],
      "frontmatter_extra": {
        "property1": null,
        "property2": null
      },
      "id": "string",
      "latest_version": "string",
      "name": "string",
      "object": "string",
      "owner_id": "string",
      "owner_type": "string",
      "source_ref": "string",
      "source_url": "string",
      "total_bytes": 0,
      "user_invocable": true
    }
  ],
  "first_id": "string",
  "has_more": true,
  "last_id": "string",
  "object": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Create a new skill (and its first version).

POST
/api/v1/skills
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Request Body

application/json

allowed_tools?|null

Hadrian Extension: SKILL.md frontmatter — tools the skill may use.

argument_hint?string|null

Hadrian Extension: SKILL.md frontmatter — argument hint for autocomplete.

description?string|null

Hadrian Extension: description; sniffed from SKILL.md frontmatter when omitted.

disable_model_invocation?boolean|null

Hadrian Extension: SKILL.md frontmatter flag — block model auto-invocation.

files?

Hadrian Extension: skill files as {path, content} objects (the spec uploads binary files[] / a zip via multipart instead).

frontmatter_extra?|null

Hadrian Extension: unknown/forward-compat frontmatter keys, preserved verbatim.

name?string|null

Hadrian Extension: skill name slug; sniffed from SKILL.md frontmatter when omitted.

owner?null|
source_ref?string|null

Hadrian Extension: git ref when imported.

source_url?string|null

Hadrian Extension: origin URL when imported.

user_invocable?boolean|null

Hadrian Extension: SKILL.md frontmatter flag — hide from the user / menu.

Response Body

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/skills" \  -H "Content-Type: application/json" \  -d '{}'
{
  "allowed_tools": [
    "string"
  ],
  "argument_hint": "string",
  "created_at": 0,
  "default_version": "string",
  "description": "string",
  "disable_model_invocation": true,
  "files": [
    {
      "byte_size": 0,
      "content": "string",
      "content_type": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "path": "string"
    }
  ],
  "files_manifest": [
    {
      "byte_size": 0,
      "content_type": "string",
      "path": "string"
    }
  ],
  "frontmatter_extra": {
    "property1": null,
    "property2": null
  },
  "id": "string",
  "latest_version": "string",
  "name": "string",
  "object": "string",
  "owner_id": "string",
  "owner_type": "string",
  "source_ref": "string",
  "source_url": "string",
  "total_bytes": 0,
  "user_invocable": true
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Get a skill by id.

GET
/api/v1/skills/{skill_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/skills/string"
{
  "allowed_tools": [
    "string"
  ],
  "argument_hint": "string",
  "created_at": 0,
  "default_version": "string",
  "description": "string",
  "disable_model_invocation": true,
  "files": [
    {
      "byte_size": 0,
      "content": "string",
      "content_type": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "path": "string"
    }
  ],
  "files_manifest": [
    {
      "byte_size": 0,
      "content_type": "string",
      "path": "string"
    }
  ],
  "frontmatter_extra": {
    "property1": null,
    "property2": null
  },
  "id": "string",
  "latest_version": "string",
  "name": "string",
  "object": "string",
  "owner_id": "string",
  "owner_type": "string",
  "source_ref": "string",
  "source_url": "string",
  "total_bytes": 0,
  "user_invocable": true
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Set the default version pointer for a skill.

POST
/api/v1/skills/{skill_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Request Body

application/json

default_version*string

The skill version number to set as default.

Response Body

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/skills/string" \  -H "Content-Type: application/json" \  -d '{    "default_version": "string"  }'
{
  "allowed_tools": [
    "string"
  ],
  "argument_hint": "string",
  "created_at": 0,
  "default_version": "string",
  "description": "string",
  "disable_model_invocation": true,
  "files": [
    {
      "byte_size": 0,
      "content": "string",
      "content_type": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "path": "string"
    }
  ],
  "files_manifest": [
    {
      "byte_size": 0,
      "content_type": "string",
      "path": "string"
    }
  ],
  "frontmatter_extra": {
    "property1": null,
    "property2": null
  },
  "id": "string",
  "latest_version": "string",
  "name": "string",
  "object": "string",
  "owner_id": "string",
  "owner_type": "string",
  "source_ref": "string",
  "source_url": "string",
  "total_bytes": 0,
  "user_invocable": true
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Delete a skill.

DELETE
/api/v1/skills/{skill_id}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Response Body

application/json

application/json

curl -X DELETE "https://loading/api/v1/skills/string"
{
  "deleted": true,
  "id": "string",
  "object": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Download the default version of a skill as a zip bundle.

GET
/api/v1/skills/{skill_id}/content
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Response Body

application/zip

application/json

curl -X GET "https://loading/api/v1/skills/string/content"
Empty
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

List a skill's versions.

GET
/api/v1/skills/{skill_id}/versions
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Query Parameters

limit?integer|null
Formatint64
Range1 <= value <= 100
order?null|SortOrder
after?string|null
before?string|null

Hadrian Extension: cursor for backward pagination (id of the first item from a previous page).

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/skills/string/versions"
{
  "data": [
    {
      "allowed_tools": [
        "string"
      ],
      "argument_hint": "string",
      "created_at": 0,
      "description": "string",
      "disable_model_invocation": true,
      "files": [
        {
          "byte_size": 0,
          "content": "string",
          "content_type": "string",
          "created_at": "2019-08-24T14:15:22Z",
          "path": "string"
        }
      ],
      "files_manifest": [
        {
          "byte_size": 0,
          "content_type": "string",
          "path": "string"
        }
      ],
      "frontmatter_extra": {
        "property1": null,
        "property2": null
      },
      "id": "string",
      "name": "string",
      "object": "string",
      "skill_id": "string",
      "source_ref": "string",
      "source_url": "string",
      "total_bytes": 0,
      "user_invocable": true,
      "version": "string"
    }
  ],
  "first_id": "string",
  "has_more": true,
  "last_id": "string",
  "object": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Create a new immutable version of a skill.

POST
/api/v1/skills/{skill_id}/versions
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

Request Body

application/json

allowed_tools?|null

Hadrian Extension: SKILL.md frontmatter — tools the skill may use.

argument_hint?string|null

Hadrian Extension: SKILL.md frontmatter — argument hint for autocomplete.

default?boolean

Whether to set this version as the default.

description?string|null

Hadrian Extension: description; sniffed from SKILL.md frontmatter when omitted.

disable_model_invocation?boolean|null

Hadrian Extension: SKILL.md frontmatter flag — block model auto-invocation.

files?

Hadrian Extension: skill files as {path, content} objects (the spec uploads binary files[] / a zip via multipart instead).

frontmatter_extra?|null

Hadrian Extension: unknown/forward-compat frontmatter keys, preserved verbatim.

source_ref?string|null

Hadrian Extension: git ref when imported.

source_url?string|null

Hadrian Extension: origin URL when imported.

user_invocable?boolean|null

Hadrian Extension: SKILL.md frontmatter flag — hide from the user / menu.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://loading/api/v1/skills/string/versions" \  -H "Content-Type: application/json" \  -d '{}'
{
  "allowed_tools": [
    "string"
  ],
  "argument_hint": "string",
  "created_at": 0,
  "description": "string",
  "disable_model_invocation": true,
  "files": [
    {
      "byte_size": 0,
      "content": "string",
      "content_type": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "path": "string"
    }
  ],
  "files_manifest": [
    {
      "byte_size": 0,
      "content_type": "string",
      "path": "string"
    }
  ],
  "frontmatter_extra": {
    "property1": null,
    "property2": null
  },
  "id": "string",
  "name": "string",
  "object": "string",
  "skill_id": "string",
  "source_ref": "string",
  "source_url": "string",
  "total_bytes": 0,
  "user_invocable": true,
  "version": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Get a specific skill version.

GET
/api/v1/skills/{skill_id}/versions/{version}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

version*string

Version number

Response Body

application/json

application/json

curl -X GET "https://loading/api/v1/skills/string/versions/string"
{
  "allowed_tools": [
    "string"
  ],
  "argument_hint": "string",
  "created_at": 0,
  "description": "string",
  "disable_model_invocation": true,
  "files": [
    {
      "byte_size": 0,
      "content": "string",
      "content_type": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "path": "string"
    }
  ],
  "files_manifest": [
    {
      "byte_size": 0,
      "content_type": "string",
      "path": "string"
    }
  ],
  "frontmatter_extra": {
    "property1": null,
    "property2": null
  },
  "id": "string",
  "name": "string",
  "object": "string",
  "skill_id": "string",
  "source_ref": "string",
  "source_url": "string",
  "total_bytes": 0,
  "user_invocable": true,
  "version": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Delete a skill version.

DELETE
/api/v1/skills/{skill_id}/versions/{version}
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

version*string

Version number

Response Body

application/json

application/json

application/json

curl -X DELETE "https://loading/api/v1/skills/string/versions/string"
{
  "deleted": true,
  "id": "string",
  "object": "string",
  "version": "string"
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}

Download a specific skill version as a zip bundle.

GET
/api/v1/skills/{skill_id}/versions/{version}/content
AuthorizationBearer <token>

API key authentication using Bearer token format

In: header

Path Parameters

skill_id*string

Skill id

version*string

Version number

Response Body

application/zip

application/json

curl -X GET "https://loading/api/v1/skills/string/versions/string/content"
Empty
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget limit exceeded for monthly period",
    "param": null,
    "request_id": "550e8400-e29b-41d4-a716-446655440000",
    "type": "invalid_request_error"
  }
}