---
title: "Publish a pack version to the global registry"
method: POST
path: "/v1/admin/registry/packs"
tags: ["Registry publishing"]
---

# Publish a pack version to the global registry

`POST /v1/admin/registry/packs`

## Request

- Base URL: `https://brain.inite.ai`
- URL: `https://brain.inite.ai/v1/admin/registry/packs`
- Auth: HTTP bearer

Versions are immutable once published. Republishing an identical (packId, version, checksum) is idempotent (`created: false`); a different body for an existing version is rejected. Source: src/registry/admin-registry.controller.ts.

Required scope: `registry:publish`.

## Request body

- PublishPackRequest
  - `expectedChecksum` string
  - `keywords` string[]
  - `manifest` DomainPackManifest, required
    - `description` string, required
    - `evalFixtures` object[]
    - `extractionProfile` object
    - `id` string, required: snake_case pack id, no `__`.
    - `indexer` object
    - `mcpTools` object[]
    - `memoryModel` object
    - `predicates` object[], required
    - `publisher` string
    - `seedDocuments` object[]
    - `signature` string: ed25519 signature (base64) over the canonical manifest sans this field.
    - `version` string, required: semver MAJOR.MINOR.PATCH.

## Response `201`

Published (or already present).

- PublishPackResponse
  - `checksum` string, required
  - `created` boolean, required
  - `packId` string, required
  - `version` string, required

## Other responses

- `400`: Validation failed.
- `401`: Missing or unknown bearer key.
- `403`: The key lacks the required scope.
- `409`: State conflict — e.g. a lost/mismatched claim token, an already claimed work item, or an immutable-version republish.

---

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