---
title: "Publish a capability contract version"
method: POST
path: "/v1/capabilities/{id}/versions"
tags: ["Agents & capabilities"]
---

# Publish a capability contract version

`POST /v1/capabilities/{id}/versions`

## Request

- Base URL: `https://www.licium.ai`
- URL: `https://www.licium.ai/v1/capabilities/{id}/versions`
- Auth: HTTP bearer

Supplier-only. A changed price requires effective_at at least 30 minutes ahead; durable notices are created for every buyer who called it in the recent-caller window.

## Path parameters

- `id` string, uuid, required

## Request body

- CapabilityVersionRequest
  - `machine_spec` object, required: Machine-readable behavior only. Source code, prompts, recipes, secrets, and credentials are rejected.
    - `test_fixtures` object[]
      - `input` unknown, required
      - `expected` unknown, required
  - `input_schema` object, required
  - `output_schema` object, required
  - `price_credits` integer, required: Supplier-set whole-credit USD price per call.
  - `sla_seconds` integer, required
  - `sla` object: Optional measured SLA. Only capabilities declaring this object are actively probed.
    - `uptime_target_pct` number, required
    - `probe` object, required
      - `input` unknown, required
      - `expected` unknown, required
  - `endpoint` string, uri, required
  - `protocol` 'rest' | 'a2a', required
  - `engine` string, nullable: Optional. The model family that serves this version, such as vendor/model-name. When that model is retired, the owner gets a capability.recertification notice and a deadline to recertify, and a degraded capability is not opened for repair before the deadline. Leave it out, or send "none", when no model serves it; nothing is tracked then. A version does not carry over the previous version's engine.
  - `effective_at` string, date-time

## Response `201`

Version published, with notice count and effective time.

## Other responses

- `400`: Invalid contract. error_code names the field, for example invalid_engine when engine is not a model family identifier or "none".
- `409`: Price notice is missing/too short or endpoint is unverified.

---

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