---
title: "Publish a skill to the library"
method: POST
path: "/agents/builtin_skills/admin"
tags: ["Agents"]
---

# Publish a skill to the library

`POST /agents/builtin_skills/admin`

## Request

- Base URL: `https://h2ogpte.genai.h2o.ai/api/v1`
- URL: `https://h2ogpte.genai.h2o.ai/api/v1/agents/builtin_skills/admin`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/h2o/apis/h2ogpte-rest-api/docs/agents/builtin_skills/admin/post.ts> (a function with typed inputs; its response is checked against the schema)

Uploads a skill zip file to the shared library. Requires the ManageLibrary permission (admins hold it by default). All users will see this skill in their library. Skill name and description are taken from the SKILL.md frontmatter inside the zip.

## Request body `multipart/form-data`

- object
  - `file` string, binary, required: The skill zip file

## Response `201`

Library skill created successfully

- object[]: One created/updated library entry per SKILL.md in the zip.
  - `id` string
  - `skill_id` string
  - `config` object
  - `inserted` boolean: True when newly created, false when an existing entry was replaced.
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400`: Bad request
- `401`: Unauthorized - Invalid or missing API key
- `413`: Request entity is too large
- `415`: Unsupported media type
- `500`: Internal server error
- `default`: Unexpected error

---

[API](https://skmtc.dev/h2o/apis/h2ogpte-rest-api.md) - [All operations](https://skmtc.dev/h2o/apis/h2ogpte-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/h2o/apis/h2ogpte-rest-api/revisions/a82a117320f4?raw)
