Docs · Reference
API reference
Every endpoint of the FastAPI research API, generated from openapi.json.
Conventions
QMint Research API 1.0.0. Evidence-labelled research API over merged QMint lanes. Research platform only: not money, not a payment service. Base path /api/v1; JSON only; the web app calls it same-origin through a Next.js rewrite.
- Every response is an envelope:
status(OK,DEMO_ADAPTERorNOT_AVAILABLE),evidence_kindof the headline numbers,provenance,reason(required unlessOK) anddata. - Every displayable number is a
Quantity.value: nullmeans not available — never 0. - This page is generated from
web/lib/api/openapi.json; regenerate it withpnpm gen:api.
Quantity
evidence_kindEvidenceKindrequiredformulastring | nullidstringrequiredintervalConfidenceInterval | nulllabelstringrequiredlog10_valuenumber | nulllog10(value), for values below float range
method"closed_form" | "exact_enumeration" | "aer_sampling" | "monte_carlo" | "numerical_sdp" | "event_simulation" | "published_value" | "measured_dataset" | "not_available"requirednotestring | nullsourcestringrequiredmodule path or citation (URL + anchor)
unitUnitrequiredvaluenumber | nullrequired
ApiProvenance
generated_at_utcstringrequiredgit_shastringrequirednotesstring | nullseedinteger | nullsoftwareRecord<string, string>sourcestringrequired
Meta
/api/v1/healthLiveness probe.
curl -s localhost:8787/api/v1/health/api/v1/metaAPI and schema versions, git sha, lane package probe and the research-platform disclaimer.
curl -s localhost:8787/api/v1/meta/api/v1/meta/trackerGate and task status read verbatim from project/TRACKER.yaml (lead-maintained).
curl -s localhost:8787/api/v1/meta/trackerProtocols
/api/v1/gamesSecurity games W1..C1 with transcribed closed-form bounds and their theorem / proof-obligation anchors.
curl -s localhost:8787/api/v1/games/api/v1/protocolsRegistered protocol ids, their games, and whether a merged lane implements them.
curl -s localhost:8787/api/v1/protocolsLab
/api/v1/lab/attackAttack
Request body · AttackRequest
attack"A01_basis_guess_resend" | "A01b_basis_guess_bayes_resend" | "A02_breidbart_resend" | "A02b_breidbart_bayes_resend" | "A03_universal_buzek_hillery" | "A03b_phase_covariant_xz" | "A04_mvw_optimal_channel" | "A06_split_and_report_loss" | "A08_adaptive_oracle_probe" | "CTRL_secret_leak"default "A04_mvw_optimal_channel"include_sdpbooleandefault truemax_error_fractionnumber≥ 0 · ≤ 0.5 · default 0A06 toy verifier
max_loss_fractionnumber≥ 0 · ≤ 1 · default 0.5A06 toy verifier
ninteger≥ 1 · ≤ 8 · default 2noiseLabNoisehonest holder's channel (honest acceptance only)
probesinteger≥ 1 · ≤ 16 · default 10A08 Z-probes per position
seedinteger≥ 0 · ≤ 2147483647 · default 42trialsinteger≥ 0 · ≤ 5000 · default 1000
422 Request validation error · 500 Internal error · 504 Compute deadline exceeded — body: ApiError
curl -s -X POST localhost:8787/api/v1/lab/attack \ -H 'content-type: application/json' -d '{}'/api/v1/lab/mintMint
Request body · MintRequest
backend"exact" | "aer"default "aer"n_qubitsinteger≥ 1 · ≤ 8 · default 4noiseLabNoiseprotocol_id"wiesner_ideal" | "wiesner_noisy"default "wiesner_ideal"seedinteger≥ 0 · ≤ 2147483647 · default 42shotsinteger≥ 1 · ≤ 20000 · default 2000teaching_revealbooleandefault falseTEST_ONLY: also return the issuer secret of this note (OUT_OF_MODEL teaching view)
thresholdinteger≥ 0 · ≤ 8 · default 0max wrong positions accepted (wiesner_noisy)
trialsinteger≥ 0 · ≤ 5000 · default 1000fresh notes for the honest Monte Carlo
422 Request validation error · 500 Internal error · 504 Compute deadline exceeded — body: ApiError
curl -s -X POST localhost:8787/api/v1/lab/mint \ -H 'content-type: application/json' -d '{}'Benchmarks
/api/v1/benchmarksBenchmarks
curl -s localhost:8787/api/v1/benchmarksCertificates
/api/v1/certificatesCertificates
Request body · CertificateRequest
calibration"none" | "schiansky_photon_Z" | "schiansky_photon_X" | "schiansky_published_aggregate"default "none"declared_assumptionsstring[]gameGameIddefault "W1"honest_error_tolerancenumber | nullideal games: any value > 0 is outside the theorem; S2: used as gamma_err when not given
noise_source"published_kent_2022" | "published_schiansky_2023" | "hypothetical" | "calibration" | nullparametersRecord<string, integer | number | IntervalIn>theorem parameters: a number or an interval {lo, hi}
protocol_idstring | nulldefaults to the protocol registered for the game
targetsTargetsIn
422 Request validation error · 500 Internal error — body: ApiError
curl -s -X POST localhost:8787/api/v1/certificates \ -H 'content-type: application/json' -d '{}'/api/v1/certificates/catalogCatalog
422 Request validation error · 500 Internal error — body: ApiError
curl -s localhost:8787/api/v1/certificates/catalogResearch
/api/v1/research/sourcesResearch library index: papers, theorems, obligations, datasets, corrections, novelty audit.
422 Request validation error · 500 Internal error — body: ApiError
curl -s localhost:8787/api/v1/research/sources/api/v1/research/sources/{entry_id}One research entry with every field of its source record and related entries (404 if unknown).
Parameters
- entry_idstringpath · required
404 Unknown entry id · 422 Request validation error · 500 Internal error — body: ApiError
curl -s localhost:8787/api/v1/research/sources/P01Evidence
/api/v1/evidenceIndex of experiment records in the RecordStore registry, newest first (may be empty). Each record passes the provenance gate: unverifiable or fixture records are served as SYNTHETIC.
curl -s localhost:8787/api/v1/evidence/api/v1/evidence/highlightsHeadline numbers (SDP bracket, reproduced QBER, matched-topology latency) with source files and evidence.
curl -s localhost:8787/api/v1/evidence/highlights/api/v1/evidence/labelsDisplay labels for every EvidenceKind, CertificateStatus and API status.
curl -s localhost:8787/api/v1/evidence/labelsErrors
Every 4xx and 5xx response, including request validation, has the same body. Validation errors are 422 validation_error with pydantic's error list in detail; unknown routes and research ids are 404 not_found.
{ "error": { "code": "not_found", "message": "unknown research entry 'NOPE'", "detail": null } }codestringrequireddetailany | nullmessagestringrequired