---
title: "POST /experimental/schedules/{id}/skill/versions"
method: POST
path: "/experimental/schedules/{id}/skill/versions"
tags: ["Schedules"]
---

# POST /experimental/schedules/{id}/skill/versions

`POST /experimental/schedules/{id}/skill/versions`

Publishes an edited SKILL.md as a new version of a loop's skill. Only skills the web app published can be edited, and the version must be higher than the skill's current one. The loop is not changed: an unpinned loop uses the new version once it passes moderation.

## Path parameters

- `id` string, uuid, required

## Headers

- `Authorization` string

## Request body

- object
  - `skillMd` string, required
  - `version` string, required — Release version (`major.minor.patch`), higher than the skill's current one.

## Response `201`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
  - `data` object, required
    - `id` string, uuid, required
    - `type` 'tile-version', required
    - `attributes` object, required
      - `skillRef` string, required — Unpinned registry ref for the skill.
      - `pinnedSkillRef` string, required — Registry ref pinned to the new version.
      - `workspaceName` string, required
      - `tileName` string, required
      - `version` string, required
      - `moderationStatus` union, required
        - 'pending'
        - 'pass'
        - 'fail'
        - 'error'
        - 'skipped'

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Default Response
- `404` — Not Found
- `409` — Conflict
- `500` — Internal Server Error
- `501` — Not Implemented

## Changes

- **2026-10-01** `202970d1e3fb` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/tessl/apis/tessl-api/changes/experimental/schedules/:id/skill/versions/post.md)

---

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