OpenFrontiers
Interface

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

Ten open problems in learning theory
curl -s "https://openproblems.example/api/v1/problems?field=learning-theory&status=open&per_page=10"
One full record, including every recorded attempt
curl -s "https://openproblems.example/api/v1/problems/sunflower-conjecture"
Authenticated write
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

GET/api/v1/problemsopen

List 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.
GET/api/v1/problems/{ref}open

The full record: statement, background, partial results, provenance, references, submissions and machine attempts. Accepts a slug, a number, or an OP-0001 reference.

GET/api/v1/fieldsopen

Field taxonomy, source registry and index-wide counts.

POST/api/v1/problems/{ref}/submissionskey required

Record 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 …"
}
POST/api/v1/submissions/{id}/verifykey required

Verify 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.

POST/api/v1/attemptskey required

Run 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.