JSON API
Public, read-only, no rate limit. Everything on the site — the whole idea corpus, filters, tags, categories — is queryable as JSON.
Endpoints
Authentication: none. All endpoints are GET-only and read-only. Machine-readable contract: OpenAPI 3.1 specification. Discovery manifest: API Catalog.
GET /api/ideas | filtered, paginated idea list (compact records) |
GET /api/idea/{id}.json | full record of one idea: description, math, implementation, verification, artifacts |
GET /api/idea/{id}.md | same idea as clean Markdown for agents and scripts; HTML idea URLs also negotiate Markdown with Accept: text/markdown |
GET /api/categories | all categories with idea counts |
GET /api/tags | three tag taxonomies — math, ml, solves — with counts |
/api/ideas — filters
Same axes as the Ideas page. Repeatable parameters accept multiple values: tags are AND-ed within and across taxonomies, so an idea must carry every requested tag. If you want to discover valid slugs first, call /api/tags and /api/categories.
Verification has three explicit fields: verification_axes.toy_mechanism_gate is the Stage-1 prerequisite; verification_axes.benchmark_mechanism says whether the claimed phenomenon transferred to the trained benchmark model; verification_axes.practical_benchmark says whether task performance significantly beat the tuned baseline. Stage 1 must pass before Stage 2 runs. A practical win with benchmark_mechanism.confirmed=false means “performance improved, but the claimed cause was not reproduced,” not “the failed toy mechanism was promoted.”
status | unverified (no experiment ran yet) · beats_baseline (benchmark won vs tuned baseline, 8 paired seeds) · mech_ok_no_baseline (mechanism transferred to the benchmark model, practical win not established) · failed_benchmark (mechanism ran, benchmark lost) · mechanism_failed (Stage-1 toy gate failed, benchmark never ran) |
category | category name, see /api/categories |
solves · ml · math | tag names per taxonomy, see /api/tags |
tag | shorthand tax/slug, repeatable (e.g. tag=math/optimization) |
min_usefulness | integer 1–10 (rating axis) |
max_difficulty | integer 1–10 (lower = easier to implement) |
min_novelty | integer 1–10 |
year | source-paper year |
q | free-text search over titles and summaries |
trivial=1 | also include “re-invented” ideas. During extraction the pipeline flags an idea as trivial when its core trick is already a known ML technique (standard attention, plain dropout, vanilla augmentation…). Such ideas are hidden by default everywhere on the site and in the API; pass trivial=1 if you want the full corpus including them. |
sort | value (default) · newest · easiest · hardest |
page · per_page | pagination; per_page default 50, max 200 |
The response carries total, pages and an echoed filters object, so a client can page without guessing.
Examples
1. Filtered idea list
Ideas tagged math/optimization and ml/training-dynamics, newest first. Repeatable tag/solves/ml/math parameters are AND-ed: an idea must carry every listed tag. The response echoes the applied filters and always carries total / pages, so a client knows when to stop paging.
curl 'https://synthcore.org/api/ideas?tag=math/optimization&tag=ml/training-dynamics&sort=newest&per_page=2'
{
"filters": {
"category": "",
"math": [
"optimization"
],
"max_difficulty": -1,
"min_novelty": -1,
"min_usefulness": -1,
"ml": [
"training-dynamics"
],
"q": "",
"solves": [],
"sort": "newest",
"status": "",
"trivial": false,
"year": ""
},
"items": [
{
"api_url": "https://synthcore.org/api/idea/1338.json",
"arxiv_id": "2607.23866",
"category": "dynamics",
"difficulty": 6,
"has_experiment": {
"benchmark": false,
"mechanism": false
},
"id": 1338,
"math_tags": [
"control-theory",
"stochastic-processes",
"optimization",
"probability",
"linear-algebra"
],
"ml_areas": [
"optimizer",
"training-dynamics",
"scheduler"
],
"novelty": 7,
"paper": "Bound-Optimized Task Choice for Path Integral Control",
"solves": [
"stability",
"speed"
],
"status": "unverified",
"status_label": "Unverified",
"title": "Bound-Optimized Stochastic Preconditioner",
"trivial": false,
"url": "https://synthcore.org/idea/1338/bound-optimized-stochastic-preconditioner",
"usefulness": 6,
"year": "2026"
},
{
"api_url": "https://synthcore.org/api/idea/1335.json",
"arxiv_id": "2607.23839",
"category": "dynamics",
"difficulty": 5,
"has_experiment": {
"benchmark": false,
"mechanism": false
},
"id": 1335,
"math_tags": [
"control-theory",
"dynamical-systems",
"optimization"
],
"ml_areas": [
"rl",
"mlp",
"training-dynamics"
],
"novelty": 6,
"paper": "Flight Envelope Protection for a Hypersonic Glide Vehicle Using Adaptive Safety-Critical Control",
"solves": [
"stability",
"accuracy",
"generalization"
],
"status": "unverified",
"status_label": "Unverified",
"title": "Adaptive CBF Safety Layer for Neural Policies",
"trivial": false,
"url": "https://synthcore.org/idea/1335/adaptive-cbf-safety-layer-for-neural-policies",
"usefulness": 8,
"year": "2026"
}
],
"page": 1,
"pages": 89,
"per_page": 2,
"total": 177
}
2. Pagination
page starts at 1. pages tells you the last valid page; if you request beyond it you get "items": [] with the meta intact — just stop, or step back. Example: page 2 of beaten-baseline ideas rated ≥ 8:
curl 'https://synthcore.org/api/ideas?status=beats_baseline&min_usefulness=8&sort=newest&page=2&per_page=2'
{
"filters": {
"category": "",
"math": [],
"max_difficulty": -1,
"min_novelty": -1,
"min_usefulness": 8,
"ml": [],
"q": "",
"solves": [],
"sort": "newest",
"status": "beats_baseline",
"trivial": false,
"year": ""
},
"items": [
{
"api_url": "https://synthcore.org/api/idea/1067.json",
"arxiv_id": "2607.17358",
"category": "architecture",
"difficulty": 7,
"has_experiment": {
"benchmark": true,
"mechanism": true
},
"id": 1067,
"math_tags": [
"dynamical-systems",
"control-theory",
"spectral-theory",
"linear-algebra"
],
"ml_areas": [
"rnn",
"ssm",
"training-dynamics"
],
"novelty": 7,
"paper": "Richards' equation as a hydrodynamic limit: Chapman--Enskog reduction of the continuum kinetic equation for unsaturated soil water",
"solves": [
"stability",
"accuracy",
"memory"
],
"status": "beats_baseline",
"status_label": "Beats tuned baseline",
"title": "Conservative Chapman–Enskog Neural Layer",
"trivial": false,
"url": "https://synthcore.org/idea/1067/conservative-chapman-enskog-neural-layer",
"usefulness": 8,
"year": "2026"
},
{
"api_url": "https://synthcore.org/api/idea/1020.json",
"arxiv_id": "2607.16676",
"category": "architecture",
"difficulty": 5,
"has_experiment": {
"benchmark": true,
"mechanism": true
},
"id": 1020,
"math_tags": [
"probability",
"stochastic-processes",
"information-theory"
],
"ml_areas": [
"graph-nn",
"architecture",
"training-dynamics"
],
"novelty": 6,
"paper": "The Value of Depth in Message Passing on Sparse Graphs: A Kesten-Stigum Dichotomy",
"solves": [
"accuracy",
"stability",
"scalability"
],
"status": "beats_baseline",
"status_label": "Beats tuned baseline",
"title": "Kesten–Stigum Attenuated Message Passing",
"trivial": false,
"url": "https://synthcore.org/idea/1020/kesten-stigum-attenuated-message-passing",
"usefulness": 8,
"year": "2026"
}
],
"page": 2,
"pages": 6,
"per_page": 2,
"total": 11
}
Got an empty list? Check total first: if total: 0, your filter combination matched nothing (e.g. a tag slug that exists in one taxonomy but not another — pick slugs from /api/tags). If total > 0 but items is empty, your page is past pages.
3. Full idea record
curl 'https://synthcore.org/api/idea/502.json'
{
"artifacts": [
{
"name": "README.md",
"url": "https://synthcore.org/code/240/README.md"
},
{
"name": "bench_experiment.py",
"url": "https://synthcore.org/code/240/bench_experiment.py"
},
"… 4 more"
],
"category": "optimization",
"description": "Replace ordinary randomized coordinate descent inside a least-squares neural subproblem with RPLSS's projected …",
"download_zip": "https://synthcore.org/download/240",
"formulas_latex": [
"$$\\mathbf{s}_{k}=\\mathbf{A}\\mathbf{e}_{i}$$",
"$$\\mathbf{p}_{k}=\\gamma_{k-1}\\left(\\mathbf{W}\\mathbf{A}^{T}\\mathbf{s}_{k}-\\mathbf{P}_{k-1}\\mathbf{\\Theta}_{k-1}^{-1}\\mathbf{P}_{k-1}^{T}\\mathbf{A}^{T}\\mathbf{s}_{k}\\right),\\qquad \\mathbf{\\Theta}_{k-1}=\\mathbf{P}_{k-1}^{T}\\mathbf{W}^{-1}\\mathbf{P}_{k-1}$$",
"$$\\gamma_{k-1}=\\frac{\\mathbf{s}_{k}^{T}(\\mathbf{b}-\\mathbf{A}\\mathbf{x}_{k-1})}{\\mathbf{s}_{k}^{T}\\mathbf{A}\\mathbf{W}\\mathbf{A}^{T}\\mathbf{s}_{k}-\\|\\mathbf{d}_{k-1}\\|_{2}^{2}},\\qquad \\mathbf{d}_{k-1}=\\mathbf{\\Theta}_{k-1}^{-1/2}\\mathbf{P}_{k-1}^{T}\\mathbf{A}^{T}\\mathbf{s}_{k}$$",
"$$\\mathbf{x}_{k}=\\mathbf{x}_{k-1}+\\mathbf{p}_{k}$$"
],
"id": 502,
"implementation": "1. Integration point: implement this as an inner optimizer for a small …",
"math_summary": "For a linear system A x = b with A in R^{m x n}, x in R^n, choose a po …",
"math_tags": [
"optimization",
"linear-algebra",
"numerical-analysis"
],
"ml_areas": [
"optimizer",
"fine-tuning",
"training-dynamics"
],
"paper": {
"arxiv_id": "2607.06917",
"arxiv_url": "https://arxiv.org/abs/2607.06917",
"summary_what_math_gives_to_ml": "The paper's transferable asset is a projected randomized coordinate solver that stores previously discovered search directions and removes their contribution before accepting a new direction. Unlike ordinary randomized Kaczmarz or coordinate descent, the update is globally corrected by an explicit Gram-matrix projection, which can prevent repeated work in already-explained subspaces and can terminate after a finite number of independent directions. The most plausible neural-network use is not generic nonlinear training, but solving least-squares Gauss–Newton subproblems for a linear output head, LoRA adapter, or small last-layer block using minibatch Jacobian columns and partial parameter access.",
"title": "RPLSS: A randomized projected linear systems solver",
"year": "2026"
},
"ratings": {
"difficulty": 6,
"novelty": 7,
"usefulness": 7
},
"solves": [
"speedup",
"stability",
"sample-efficiency"
],
"title": "Projected Randomized Gauss–Newton Updates",
"url": "https://synthcore.org/idea/502/projected-randomized-gauss-newton-updates",
"verification": {
"benchmark": "…",
"mechanism_confirmed": false,
"peer_reviewed": false,
"practical_verdict": "helps",
"stage1_mechanism_check": "…",
"status": "beats_baseline",
"status_label": "Beats tuned baseline",
"updated_at": "2026-08-30T21:28:06",
"verdict_source": "deterministic test code (paired-seed permutation statistics)"
}
}
title · id · url | idea identity and canonical page URL |
description | plain-language statement of the idea |
math_summary | the mathematical core (LaTeX in $…$ / display math) |
implementation | numbered integration and implementation notes |
formulas_latex | key formulas as standalone LaTeX strings |
ratings | usefulness / difficulty / novelty, each 1–10 |
category · solves · ml_areas · math_tags | taxonomy slugs (same vocabulary as /api/tags, /api/categories) |
paper | source arXiv paper: arxiv_id, arxiv_url, title, year, summary_what_math_gives_to_ml |
verification | verdict block: status + status_label, mechanism_confirmed, stage1_mechanism_check (toy-system report with metrics/verdict), benchmark (paired-seed comparison with per-seed results and p-value), practical_verdict, verdict_source, updated_at |
artifacts · download_zip | code viewer / raw file URLs for the experiment, and the ZIP of everything |
All experiment files are also fetchable directly: /raw/{exp}/{file} for contents, /code/{exp}/{file} for the highlighted viewer.
List item fields
id · title · url · api_url | numeric id, idea title, canonical page URL, full-record JSON URL |
status · status_label | machine slug and human wording of the verification verdict |
usefulness · difficulty · novelty | public ratings 1–10 (novelty = 10 − how well the idea is already represented in ML) |
category · solves · ml_areas · math_tags | taxonomy assignments; slugs match /api/tags and /api/categories |
has_experiment | mechanism — stage-1 toy-system report exists; benchmark — stage-2 paired-seed benchmark report exists |
paper · arxiv_id · year | source paper the idea was extracted from |
Notes
- Rate limit: none. The database is opened read-only; feel free to iterate.
- Updates: the pipeline appends new ideas continuously; list responses are cached for 5 minutes.
- Machine-readable alternative: every idea page also embeds schema.org JSON-LD (
TechArticlewith experiment artifacts asDataset/SoftwareSourceCode) — use that if you prefer structured-data markup over this API. - Corpus: 3136 public ideas, 879 of them with a passed verification stage.