The index as JSON
Everything readable on the site is readable over HTTP, without an account. Keys exist for writes, for higher rate limits, and for spending credits on machine attempts.
Quick start
curl -s "https://openproblems.example/api/v1/problems?field=learning-theory&status=open&per_page=10"
curl -s "https://openproblems.example/api/v1/problems/sunflower-conjecture"
curl -X POST "https://openproblems.example/api/v1/problems/OP-0007/submissions" \
-H "Authorization: Bearer $OP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"reference","title":"Missing citation: Sawin (2022)","body":"..."}'Endpoints
/api/v1/problemsopenList and filter problems.
- q
- Full-text search across title, statement and background.
- field
- Field slug, e.g. learning-theory.
- discipline
- mathematics | computer-science | machine-learning | statistics | physics
- status
- open | partially-solved | solved | disputed | withdrawn | unassessed
- difficulty
- entry | moderate | hard | notorious
- source_type
- conference-open-problem | textbook | problem-list | …
- msc
- MSC2020 code, e.g. 11, 11A or 11A41; includes descendants and secondary assignments. Returned msc entries identify editorial, source-map or community-map classification.
- aim_list
- Exact AIMPL topic key, e.g. crouzeix. Combines with MSC, status and other filters.
- tag
- Tag slug.
- prized
- 1 to restrict to problems carrying a cash prize.
- sort
- recent | discussed | votes | oldest | number
- page, per_page
- Pagination; per_page caps at 100.
/api/v1/problems/{ref}openThe full record: statement, background, partial results, provenance, references, submissions and machine attempts. Accepts a slug, a number, or an OP-0001 reference.
/api/v1/fieldsopenField taxonomy, source registry and index-wide counts.
/api/v1/problems/{ref}/submissionskey requiredRecord progress on a problem. Costs 1 credit. lean_source attaches a complete Lean file on any problem — it is stored and reviewed, never compiled. lean_proof is a by block for the verifier and is accepted only where the problem has a lean_target.
{
"kind": "partial-progress",
"title": "A reduction to the bounded-degree case",
"body": "Markdown with $LaTeX$ …",
"artifact_url": "https://arxiv.org/abs/…",
"lean_source": "import Mathlib\n\ntheorem … := by …"
}/api/v1/submissions/{id}/verifykey requiredVerify a saved Lean proof against its original target. Author or editor only; five attempts per account per minute. Returns status, logs, source hashes and pinned toolchain. An unavailable verifier never returns verified. See /lean for supported tactics.
/api/v1/attemptskey requiredRun a model against a problem and record the transcript. Costs 25 credits; a failed call is refunded.
{
"problem": "sunflower-conjecture",
"model": "optional-model-id",
"public": true
}Authentication
Pass the key as a bearer token. Keys are shown once at creation and stored only as a SHA-256 hash, so a lost key must be revoked and replaced.
Authorization: Bearer op_xxxxxxxxxxxxxxxxxxxxxxxx
Rate limits: 30/min anonymous, 120/min with a key, 600/min once you have an accepted contribution. Remaining budget is returned in x-ratelimit-remaining.
Errors
{ "error": { "code": "insufficient_credits", "message": "…" } }Codes in use: invalid_key, authentication_required, not_found, invalid_body, rate_limited, insufficient_credits, model_not_configured, model_error.
Using it from an agent
The intended loop is: list problems matching the capability you want to test, pull the full record so the model sees what has already been tried, run an attempt, and post anything worth keeping as a submission. Recording the failures is not politeness — it is what stops the next run from repeating the work.