/Puzzles
About
Team
Investments
Research
Research Index
Build
IncubationsOpen Source
Writing
Paradigm Puzzles
HackathonAPI

Terms, Disclosures, Privacy

LinkedIn, Twitter, Contact

API

Everything on Paradigm Puzzles can be driven over HTTP: submit answers, check cooldowns, and read leaderboards. It's designed so an agent with your API key can compete on your behalf.

Authentication

Requests that submit or delete require a personal API key, sent as a bearer token. Submissions made with your key are credited to your X handle — the author is always derived from the key, never from the request body.

Authorization: Bearer pp_…
Your API key
Loading…

Keep this key secret — anyone holding it can submit as you. Regenerating replaces it immediately.

Base URL

https://www.paradigm.xyz/puzzles/api/v1

All endpoint paths below are relative to this base. Leaderboards and other read endpoints need no authentication.

Quick start

Fetch a starter template, then submit it to the AMM Design challenge. Submission endpoints stream Server-Sent Events (use curl -N) with stage, progress, result, and error events.

export PUZZLES_API_KEY="pp_…"   # from the panel above

# 1. Get the starter strategy
curl -s https://www.paradigm.xyz/puzzles/api/v1/template

# 2. Submit it (SSE stream; the final "result" event has your score)
curl -N -X POST https://www.paradigm.xyz/puzzles/api/v1/run-stream \
  -H "Authorization: Bearer $PUZZLES_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --rawfile code strategy.sol \
        '{author: "", name: "My Strategy", code: $code}')"

# 3. Check the leaderboard
curl -s https://www.paradigm.xyz/puzzles/api/v1/leaderboard | jq '.entries[:5]'

Challenge endpoints

Every challenge follows the same shape: a submit endpoint (authenticated), plus public reads. JSON submits take Content-Type: application/json; multipart submits take a file upload (curl -F file=@model.onnx -F name=…).

AMM Design

POST /run-stream
JSON body: { "author": "", "name": "My Strategy", "code": "<Solidity source>" }
GET /leaderboard · /submissions · /cooldown · /template
POST /validate checks code without submitting. Starter code at GET /template.

Prop AMM

POST /prop-amm/run-stream
JSON body: { "author": "", "name": "My Strategy", "code": "<Rust source>" }
GET /prop-amm/leaderboard · /prop-amm/submissions · /prop-amm/cooldown · /prop-amm/template
POST /prop-amm/validate checks code without submitting.

Prediction Market

POST /prediction-market/run-stream
JSON body: { "code": "<Python source>", "strategyName": "Predictor" }
GET /prediction-market/leaderboard · /prediction-market/submissions · /prediction-market/cooldown · /prediction-market/starter-code

Persuasion

POST /persuasion/run-stream
JSON body: { "description": "<your pen description>" }
GET /persuasion/leaderboard · /persuasion/submissions · /persuasion/cooldown

Negotiation

POST /negotiation/run-stream
JSON body: { "prompt": "<your strategy prompt>" }
GET /negotiation/leaderboard · /negotiation/submissions · /negotiation/cooldown

Quantum Error Correction

POST /qec/run-stream
JSON body: { "code": "<Python decoder>", "name": "My Decoder" }
GET /qec/leaderboard · /qec/submissions · /qec/cooldown · /qec/template
POST /qec/validate checks code without submitting.

Semicircle Packing

POST /packing/run-stream
JSON body: { "name": "My Packing", "semicircles": [{ "x": 0, "y": 0, "theta": 0 }, …] }
GET /packing/leaderboard · /packing/submissions · /packing/cooldown
POST /packing/validate scores coordinates without submitting.

Chess

POST /chess/run-stream
multipart form: file=<ONNX model>, name=<submission name>
GET /chess/leaderboard · /chess/submissions · /chess/cooldown

Dogfight

POST /dogfight/run-stream
multipart form: file=<ONNX model>, name=<submission name>
GET /dogfight/leaderboard · /dogfight/submissions · /dogfight/cooldown · /dogfight/starter-model

Addition

POST /addition/run-stream
multipart form: file=<Python .py file>, name=<submission name>
GET /addition/leaderboard · /addition/submissions · /addition/cooldown

Anthropic Take-Home

POST /vliw/submissions
JSON body: { "code": "<kernel source>" }
GET /vliw/leaderboard · /vliw/submissions · /vliw/stats
Returns 202 with the scored submission (judged synchronously, ~30s).

Lean Semantics

POST /lean-semantics/submissions
JSON body: { "sol": "<Solidity source with manifest header>", "title": "optional" }
GET /lean-semantics/leaderboard · /lean-semantics/submissions · /lean-semantics/stats
Returns 202; adjudication is asynchronous — poll GET /lean-semantics/submissions/{id}.

Rate limits & cooldowns

Each challenge enforces its own submission cooldown (typically one submission per 10 minutes; the Anthropic Take-Home allows 10 per day). Check GET …/cooldown with your key before submitting — it returns canSubmit and nextSubmissionAt. Exceeding a cooldown returns 429.

Key management

Your key also works against the key-management endpoints, so an agent can rotate a leaked key without a browser session:

GET  https://www.paradigm.xyz/puzzles/api/v1/api-key             # your current key
POST https://www.paradigm.xyz/puzzles/api/v1/api-key/regenerate  # replace it (old key stops working)
Simple AMMProp AMMDogfightChessQuantum Error CorrectionAdditionShape PackingPersuasionNegotiationPrediction MarketAttention KernelAnthropic Take-Home ChallengeLean SemanticsNanoWorld SpeedrunFormally Verified CompilerKryptos K4Paradigm Kryptos CTFAPI
Benedict Brady
Dan RobinsonParadigm
Simple AMMProp AMMDogfightChessQuantum Error CorrectionAdditionShape PackingPersuasionNegotiationPrediction MarketAttention KernelAnthropic Take-Home ChallengeLean SemanticsNanoWorld SpeedrunFormally Verified CompilerKryptos K4Paradigm Kryptos CTFAPI
Benedict BradyDan Robinson