---
title: "Seal the draw"
method: POST
path: "/v1/draws/{id}/seal"
tags: ["Draws"]
---

# Seal the draw

`POST /v1/draws/{id}/seal`

Freezes the entry list: picks a future drand round, renders the
canonical v2 list file (the round is in the header, so one SHA-256
binds list **and** round), pushes it to the public
`proofdraw/draw-lists` git mirror, and submits the hash to an
OpenTimestamps calendar. The commit must land at least 10 s before the
round publishes or the seal aborts. With `wait: true`, holds the
connection until the round arrives and returns the resolved draw
(bounded by the server's wait cap, default 60 s).

## Request body

- object
  - `round_offset_seconds` integer
  - `wait` boolean

## Response `200`

Draw sealed (resolved when `wait` was true and the round arrived in time).

- SealedDrawResponse
  - `success` boolean
  - `message` string
  - `data` object
    - `draw` object
      - `id` string
      - `name` string
      - `description` string, nullable
      - `state` 'open' | 'sealed' | 'resolved' | 'cancelled'
      - `direction` 'winner' | 'loser'
      - `winner_count` integer
      - `entry_count` integer
      - `drand_chain` 'quicknet' | 'classic'
      - `drand_round` integer, nullable
      - `drand_round_time` string, date-time, nullable
      - `list_hash` string, nullable — SHA-256 over the sealed list bytes.
      - `list_url` string, nullable
      - `verify_url` string, nullable — Public per-draw verification page.
      - `winner_row` integer, nullable — 0-based index into the sealed list.
      - `winner_ticket` string, nullable
      - `callback_url` string, nullable
      - `callback_secret` string, nullable — Returned only on the creating response. HMAC key for webhook signatures.
      - `public_commit_url` string, nullable
      - `sealed_at` string, date-time, nullable
      - `resolved_at` string, date-time, nullable
      - `created_at` string, date-time
      - `ots_proof_url` string, nullable
      - `ots_calendar_url` string, nullable
      - `ots_attested_at` string, date-time, nullable
      - `commitment_text` string — Publish this to a public
      - `tweet_intent_url` string — One-click X post of the commitment.
      - `tickets` string[] — Instant endpoint only: all ticket ids in submission order.

## Other responses

- `401` — Missing or invalid API key (`unauthenticated`).
- `404` — Draw not found or not yours (`not_found`).
- `409` — Operation not valid in the draw's current state (`state_conflict`).

---

[API](https://skmtc.net/proofdraw/apis/proofdraw-api.md) · [All operations](https://skmtc.net/proofdraw/apis/proofdraw-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/proofdraw/proofdraw-api/revisions/5d4ce7cb355d/schema)
