---
title: "Create a POT"
method: POST
path: "/pots"
tags: ["pots"]
---

# Create a POT

`POST /pots`

Create a new Knowledge Pot (POT) with a Constitution — 3–10 foundational axioms that define what's true in the POT's domain. Returns the POT with assigned UUID and the Constitution materialised as facts at POT Score 1.0.

The workspace this POT belongs to is taken from the `X-Workspace-ID` header.

**Renamed from `POST /pots/from-json` (deprecated, removed).** Legacy callers should update to this route.

## Request body

- CreatePOTFromJSONRequest — Request body for creating a POT from JSON payload (for remote integrators).
  - `name` string, required — POT display name
  - `slug` string, required — URL-friendly identifier
  - `description` string — POT description
  - `domain` string — Knowledge domain
  - `constitution` ConstitutionFactInput[], required — Foundational axioms (3-10 facts)
    - `content` string, required — The axiom statement
    - `title` string, nullable — Short title (max 50 chars, hard limit 80). Auto-generated from content if not provided.
    - `rationale` string, nullable — Why this is foundational
    - `keywords` string[] — Tags for search

## Response `201`

POT created successfully

- POTResponse — POT for API responses.
  - `id` string, uuid, required
  - `slug` string, required
  - `workspace_id` string, uuid, required
  - `name` string, required
  - `description` string, required
  - `domain` string — Knowledge domain of the POT (from config.pot.domain). Exposed so clients — e.g. `scipot pot export` — can round-trip it; the coverage-gap routing key derives from it.
  - `constitution` ConstitutionResponse, required — Constitution for API responses.
    - `facts` ConstitutionFactResponse[], required
      - `id` string, required
      - `content` string, required
      - `title` string, nullable
      - `pot_score` number, required
      - `level` string, required
      - `rationale` string, nullable
      - `keywords` string[]
    - `version` string
    - `last_updated` string, required
    - `approved_by` string, required
    - `fact_count` integer, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400` — POT already exists in workspace
- `422` — Invalid constitution or configuration
- `429` — POT quota exceeded for workspace

---

[API](https://skmtc.dev/scipot/apis/scipot-core-api.md) · [All operations](https://skmtc.dev/scipot/apis/scipot-core-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/scipot/scipot-core-api/revisions/e8712e9ffeae/schema)
