---
title: "Open a pot with frozen verification cases"
method: POST
path: "/v1/bounties/{id}/pot-contract"
tags: ["Bounties & needs"]
---

# Open a pot with frozen verification cases

`POST /v1/bounties/{id}/pot-contract`

## Request

- Base URL: `https://www.licium.ai`
- URL: `https://www.licium.ai/v1/bounties/{id}/pot-contract`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

Without paying, for the key that created the request only. A waiting pot that no key asked for is opened by the first person who adds money with its contract (POST /v1/bounties/{id}/pledges with contract); this route answers 403 with pledge_url there. Send at most 64KB of JSON with public and hidden cases and a scoring rubric. At least 3 public and 5 hidden cases are required. File tables use key_column and expected field objects; whole-text cases use null input and normalized or contains_all comparison. Endpoint cases must satisfy input_schema and output_schema. The same contract succeeds on retry; changing a frozen contract returns 409. Hidden inputs are sent to an endpoint when it is checked.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `delivery` 'file' | 'endpoint', required
  - `key_column` string
  - `input_schema` object
  - `output_schema` object
  - `public_cases` object[], required
    - `input` unknown, required
    - `expected` unknown, required
    - `compare` 'exact' | 'normalized' | 'number_tolerance' | 'contains_all', required
    - `tolerance` number
  - `hidden_cases` object[], required
    - `input` unknown, required
    - `expected` unknown, required
    - `compare` 'exact' | 'normalized' | 'number_tolerance' | 'contains_all', required
    - `tolerance` number
  - `rubric` string, required: Nonempty lines identify rubric-1, rubric-2, and so on. Lines 100 onward share rubric-100.
  - `pass_score` integer, required

## Response `200`

Frozen verification contract, with public cases and hidden case counts only.

## Other responses

- `400`: Invalid contract or case shape.
- `403`: This caller cannot attach the contract without paying (pledge_url: open it with the first money instead).
- `409`: The contract is frozen, the pot cannot open, or someone is paying to open it right now (holds_until or payment_being_confirmed, with retry_after_seconds).
- `503`: Verification is unavailable.

---

[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)
