Cogitan
Documentation menu

API reference

Qubit design

TransmonCross and parallel-pad cells, readout, junctions, coupling, inverse design, GDS and frequency-collision yield. Paths are shown as the hosted API serves them, under https://api.cogitan.ai/v1/fluxus; a local engine serves the same route under /api. GET routes are free on the hosted API; every POST consumes one call of quota.
POST

/v1/fluxus/cell/eval

engine path /api/cell/eval · metered

Evaluate one placed cell with its surrogate (metrics + health).

What it does, in full

Evaluate one placed cell with its surrogate (metrics + health).

Request

Body: CellEvalRequest

Evaluate one placed cell with its surrogate.

kindrequiredtype "sfq" | "quantum"unit
namerequiredtype stringunit
paramstype map[string, number]unit

Example

curl
curl -s "$FLUXUS_API/cell/eval" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"kind": "quantum", "name": "transmon_resonator", "params": {"lj_nh": 12}}'

Example body: the cell-library quantum cell

What it refuses

  • unknown cell -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_analytic_oracle

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full cell_eval card
GET

/v1/fluxus/chip

engine path /api/chip · free

Chip map for rendering: node coordinates, roles, edges, targets.

What it does, in full

Chip map for rendering: node coordinates, roles, edges, targets.

Coordinates are lattice grid units (scale freely). role is the heavy-hex role code (0/1 vertex sublattice, 2 edge qubit; square lattices report -1). f_ghz is the default frequency-allocation pattern the yield Monte Carlo uses when no targets are supplied.

Request

Query parameters

n_qubitstype integerunit default 127
latticetype "heavy_hex" | "square"unit default "heavy_hex"

Example

curl
curl -s "$FLUXUS_API/chip?n_qubits=27&lattice=heavy_hex" -H "Authorization: Bearer $COGITAN_API_KEY"

Example body: a 27-qubit heavy-hex chip

What it refuses

  • n_qubits outside [1, 2000] -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity metadata

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full chip_map card
POST

/v1/fluxus/coupling/coupler-sweep

engine path /api/coupling/coupler-sweep · metered

ZZ and effective qubit-qubit coupling vs tunable-coupler frequency, and the idle points where each crosses zero (exact), beside Yan et al.'s analytic g~ and its zero.

What it does, in full

ZZ and effective qubit-qubit coupling vs tunable-coupler frequency, and the idle points where each crosses zero (exact), beside Yan et al.'s analytic g~ and its zero.

Request

Body: CouplerSweepRequest

Transmon - tunable coupler - transmon, branch capacitances in fF.

Yan et al., Phys. Rev. Applied 10, 054062 (2018), Fig. 2(a): c1, cc, c2 to ground; c1c, c2c to the coupler; c12 directly between the qubits.

c1_ffrequiredtype numberunit fF> 0, <= 10000
c2_ffrequiredtype numberunit fF> 0, <= 10000
cc_ffrequiredtype numberunit fF> 0, <= 10000
c1c_ffrequiredtype numberunit fF>= 0, <= 10000
c2c_ffrequiredtype numberunit fF>= 0, <= 10000
c12_fftype numberunit fFdefault 0>= 0, <= 10000
qubit1requiredtype QubitJunctionunit
qubit2requiredtype QubitJunctionunit
fc_min_ghzrequiredtype numberunit GHz> 0, <= 50
fc_max_ghzrequiredtype numberunit GHz> 0, <= 50
n_pointstype integerunit default 41>= 2, <= 81
levelstype integer | nullunit >= 3, <= 8

Object: QubitJunction

One transmon's junction: exactly one of lj_nh, ej_ghz, f01_ghz.

f01_ghz is the target BARE frequency of the loaded transmon; EJ is then solved for from the exact charge-basis spectrum.

lj_nhtype number | nullunit nH> 0, <= 1000
ej_ghztype number | nullunit GHz> 0, <= 500
f01_ghztype number | nullunit GHz> 0, <= 50

Example

curl
curl -s "$FLUXUS_API/coupling/coupler-sweep" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"c1_ff": 70, "c2_ff": 72, "cc_ff": 200, "c1c_ff": 4, "c2c_ff": 4.2, "c12_ff": 0.1, "qubit1": {"f01_ghz": 4.0}, "qubit2": {"f01_ghz": 4.0}, "fc_min_ghz": 4.5, "fc_max_ghz": 7.0, "n_points": 41}'

Example body: docs/qubit/API_AND_CLI.md, s14

What it refuses

  • non-symmetric, negative (branch) or non-positive-definite capacitance matrix -> HTTP 400 invalid_circuit with problems[]
  • more than the size caps in envelope -> HTTP 400 invalid_circuit
  • a quantity whose dressed levels are hybridised (overlap below 0.7236) -> null, with the reason in refused
  • out-of-range number (capacitance outside [0, 10000] fF, frequency outside (0, 50] GHz, EJ outside (0, 500] GHz) -> HTTP 422
  • fc_max_ghz not above fc_min_ghz -> HTTP 400
  • a coupler frequency the coupler EC cannot reach as a transmon -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity exact_diagonalisation_of_lumped_circuit

Yan et al., Phys. Rev. Applied 10, 054062 (2018): Eq. (5) worked example and the Fig. 2 circuit

The full coupling_coupler_sweep card
POST

/v1/fluxus/coupling/modes

engine path /api/coupling/modes · metered

Dressed frequencies, anharmonicities and the full chi matrix of a small lumped circuit (a trimon, a coupled pair, a chain), by exact diagonalisation. chi_ij = E(1_i 1_j) - E(1_i) - E(1_j) + E(0).

What it does, in full

Dressed frequencies, anharmonicities and the full chi matrix of a small lumped circuit (a trimon, a coupled pair, a chain), by exact diagonalisation. chi_ij = E(1_i 1_j) - E(1_i) - E(1_j) + E(0).

Request

Body: ModesRequest

A small lumped circuit: capacitance matrix plus junctions.

capacitance_ffrequiredtype list[list[number]]unit fFsquare, symmetric, fF. convention 'branch': diagonal = capacitance to ground, off-diagonal = capacitance between the two nodes (>= 0). 'maxwell': the node capacitance matrix, off-diagonal <= 0
conventiontype "branch" | "maxwell"unit default "branch"
junctionsrequiredtype list[JunctionIn]unit
labelstype "normal" | "local"unit default "normal"
levelstype integer | nullunit >= 3, <= 30

Object: JunctionIn

A junction from node a to node b (null = ground): lj_nh or ej_ghz.

arequiredtype integerunit >= 0
btype integer | nullunit >= 0
lj_nhtype number | nullunit nH> 0, <= 1000
ej_ghztype number | nullunit GHz> 0, <= 500

Example

curl
curl -s "$FLUXUS_API/coupling/modes" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"capacitance_ff": [[46, 21, 4, 21], [21, 30, 21, 3], [4, 21, 53, 21], [21, 3, 21, 36]], "convention": "branch", "labels": "normal", "junctions": [{"a": 0, "b": 1, "ej_ghz": 8.16}, {"a": 1, "b": 2, "ej_ghz": 8.16}, {"a": 2, "b": 3, "ej_ghz": 8.16}, {"a": 3, "b": 0, "ej_ghz": 8.16}]}'

Example body: docs/qubit/API_AND_CLI.md, s15

What it refuses

  • non-symmetric, negative (branch) or non-positive-definite capacitance matrix -> HTTP 400 invalid_circuit with problems[]
  • more than the size caps in envelope -> HTTP 400 invalid_circuit
  • a quantity whose dressed levels are hybridised (overlap below 0.7236) -> null, with the reason in refused
  • out-of-range number (capacitance outside [0, 10000] fF, frequency outside (0, 50] GHz, EJ outside (0, 500] GHz) -> HTTP 422
  • a junction naming a node outside the matrix, or joining a node to itself -> HTTP 400
  • no junction, or no dynamical mode -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity exact_diagonalisation_of_lumped_circuit

Maurya et al., arXiv:2603.04566 (trimon), Appendix B design capacitance matrix and EJ = 8.16 GHz; Table AI measured values

The full coupling_modes card
POST

/v1/fluxus/coupling/pair

engine path /api/coupling/pair · metered

J, static ZZ (exact and perturbative) and dressed frequencies of two transmons coupled by a capacitor (capacitive) or a shared resonator (bus). A value whose dressed levels are hybridised is null, with the reason in refused.

What it does, in full

J, static ZZ (exact and perturbative) and dressed frequencies of two transmons coupled by a capacitor (capacitive) or a shared resonator (bus). A value whose dressed levels are hybridised is null, with the reason in refused.

Request

Body: CouplingPairRequest

Exactly one of capacitive and bus.

capacitivetype CapacitivePair | nullunit
bustype BusPair | nullunit

Object: CapacitivePair

Two grounded transmons joined by one capacitor (branch values, fF).

c1_ffrequiredtype numberunit fF> 0, <= 10000qubit 1 capacitance to ground (shunt plus junction), fF
c2_ffrequiredtype numberunit fF> 0, <= 10000qubit 2 capacitance to ground, fF
cc_ffrequiredtype numberunit fF>= 0, <= 10000capacitance between the qubits, fF
qubit1requiredtype QubitJunctionunit
qubit2requiredtype QubitJunctionunit
levelstype integer | nullunit >= 3, <= 30

Object: QubitJunction

One transmon's junction: exactly one of lj_nh, ej_ghz, f01_ghz.

f01_ghz is the target BARE frequency of the loaded transmon; EJ is then solved for from the exact charge-basis spectrum.

lj_nhtype number | nullunit nH> 0, <= 1000
ej_ghztype number | nullunit GHz> 0, <= 500
f01_ghztype number | nullunit GHz> 0, <= 50

Object: BusPair

Two transmons coupled only through one resonator mode.

f1_ghzrequiredtype numberunit GHz> 0, <= 50
f2_ghzrequiredtype numberunit GHz> 0, <= 50
alpha1_mhzrequiredtype numberunit MHz>= -2000, < 0
alpha2_mhzrequiredtype numberunit MHz>= -2000, < 0
fr_ghzrequiredtype numberunit GHz> 0, <= 50
g1_mhzrequiredtype numberunit MHz> 0, <= 2000
g2_mhzrequiredtype numberunit MHz> 0, <= 2000

Example

curl
curl -s "$FLUXUS_API/coupling/pair" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"capacitive": {"c1_ff": 123.65, "c2_ff": 123.65, "cc_ff": 1, "qubit1": {"lj_nh": 9.686}, "qubit2": {"lj_nh": 10.6}}}'

Example body: docs/qubit/API_AND_CLI.md, s13

What it refuses

  • non-symmetric, negative (branch) or non-positive-definite capacitance matrix -> HTTP 400 invalid_circuit with problems[]
  • more than the size caps in envelope -> HTTP 400 invalid_circuit
  • a quantity whose dressed levels are hybridised (overlap below 0.7236) -> null, with the reason in refused
  • out-of-range number (capacitance outside [0, 10000] fF, frequency outside (0, 50] GHz, EJ outside (0, 500] GHz) -> HTTP 422
  • both or neither of capacitive and bus -> HTTP 400
  • a qubit with not exactly one of lj_nh, ej_ghz, f01_ghz -> HTTP 400
  • a target f01 below the EJ/EC = 1 value -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity exact_diagonalisation_of_lumped_circuit

limits and second-order perturbation theory of the same circuit Hamiltonian; no measured ZZ

The full coupling_pair card
POST

/v1/fluxus/em/inductance

engine path /api/em/inductance · metered

Partial-inductance field solve over supplied conductor segments.

What it does, in full

Partial-inductance field solve over supplied conductor segments.

Runs the REAL closed-form PEEC field solver (fluxus.em.inductance.extract_inductance): Grover straight-bar self terms + Neumann centre-filament mutuals, reduced to a loop/net inductance, with optional London kinetic inductance and a perfect-conductor ground-plane image. Returns the solver's stable dict: L_pH, L_geometric_pH, L_kinetic_pH, L_matrix_pH, n_segments, n_image_segments, london_nm, ground_plane, method, caveat.

DISTINCT from /api/chip/parasitics (a squares-rule ESTIMATE) and /api/chip/extract (an extraction HANDOFF manifest): this is an actual field solve. Its loop sums are checked against closed-form PEEC sums (hairpin, rectangle, square loop) and its mutuals against an independent Neumann quadrature; the model itself (centre-filament mutuals, uniform-current bar self term, ideal image plane) is not validated against measurement or a full field solver, and it is NOT InductEx-grade (no cross-section current solve, no multilayer superconducting stackup). Bad geometry yields a 400 with the structured error envelope.

Request

Body: InductanceRequest

Partial-inductance field-solve request over conductor segments.

segments are the bars of one current path in DRAWN order. london_nm (e.g. ~90 for Nb) adds the superconducting kinetic inductance; ground_plane_z_um (when supplied) puts a perfect-conductor plane at that height, modelled by image bars; the returned L is the conductors' inductance over the plane (half the wire+image loop, L_self - |M_image| for one bar), kinetic term over the real conductors only. All conductors must lie on one side of the plane.

segmentsrequiredtype list[InductanceSegment]unit at least 1 items, at most 1000 items
london_nmtype number | nullunit
ground_plane_z_umtype number | nullunit um

Object: InductanceSegment

One straight rectangular conductor bar for the inductance field solve.

start / end are 3-D points in microns; width_um / thickness_um are the bar cross-section. Matches the dict shape fluxus.em.inductance.extract_inductance consumes.

startrequiredtype list[number]unit
endrequiredtype list[number]unit
width_umtype numberunit umdefault 1
thickness_umtype numberunit umdefault 0.1

Example

curl
curl -s "$FLUXUS_API/em/inductance" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"segments": [{"start": [0, 0, 0], "end": [1000, 0, 0], "width_um": 1.0, "thickness_um": 0.2}, {"start": [1000, 0, 0], "end": [1000, 50, 0], "width_um": 1.0, "thickness_um": 0.2}, {"start": [1000, 50, 0], "end": [0, 50, 0], "width_um": 1.0, "thickness_um": 0.2}, {"start": [0, 50, 0], "end": [0, 0, 0], "width_um": 1.0, "thickness_um": 0.2}]}'

Example body: a 1000 x 50 um rectangular loop, as in the inductance test suite

What it refuses

  • more than 1,000 segments -> HTTP 422
  • degenerate geometry -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity analytic_field_solve

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full em_inductance card
POST

/v1/fluxus/floorplan/eval

engine path /api/floorplan/eval · metered

Evaluate a placed design: per-cell metrics + chip-level rollup.

What it does, in full

Evaluate a placed design: per-cell metrics + chip-level rollup.

Request

Body: FloorplanRequest

cellstype list[FloorplanCell]unit
wirestype list[object]unit

Object: FloorplanCell

idrequiredtype stringunit
kindrequiredtype "sfq" | "quantum"unit
namerequiredtype stringunit
paramstype map[string, number]unit
cirtype string | nullunit

Example

curl
curl -s "$FLUXUS_API/floorplan/eval" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"cells": [{"id": "q1", "kind": "quantum", "name": "transmon_resonator", "params": {"lj_nh": 12}}, {"id": "q2", "kind": "quantum", "name": "transmon_resonator", "params": {"lj_nh": 14}}], "wires": [{"from": ["q1", "coupler"], "to": ["q2", "coupler"]}]}'

Example body: two coupled cell-library qubits

What it refuses

  • duplicate cell ids or malformed wires -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_analytic_oracle

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full floorplan_eval card
POST

/v1/fluxus/gds

engine path /api/gds · metered

Export one quantum design cell as a GDSII mask, base64 in JSON.

What it does, in full

Export one quantum design cell as a GDSII mask, base64 in JSON.

Builds the planar transmon + CPW-resonator layout with fluxus.layout.gds.cellspec_to_gds (same pad / gap / ground-cutout conventions as the capacitance solver) and returns the GDS file bytes as base64 so the browser can download it. Returns {filename, gds_base64, size_bytes, n_polygons, area_um2, source}. HONEST scope: a single-qubit-plus-resonator mask for layout sanity and area accounting, NOT a DRC-clean, tape-out-ready reticle and NOT an EM mesh. Bad cell parameters yield a 400 with the structured error envelope.

Request

Body: GdsRequest

GDS-export request: one quantum design cell, flat keys.

Same flat-key shape /api/qem accepts (fluxus.core.cell_from_flat aliases), so the Design desk can post its current cell straight to the GDS writer. Omitted fields use CellSpec defaults. An optional filename names the downloaded file (sanitized server-side; defaults to transmon_cell.gds).

pad_width_umtype number | nullunit um
pad_height_umtype number | nullunit um
pad_gap_umtype number | nullunit um
ground_gap_umtype number | nullunit um
lj_nhtype number | nullunit nH
junction_lj_nhtype number | nullunit nH
length_umtype number | nullunit um> 0, <= 100000
kindtype string | nullunit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_cap_fftype number | nullunit fF
filenametype string | nullunit

Example

curl
curl -s "$FLUXUS_API/gds" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{}'

Example body: every field at its default

What it refuses

  • the same physical-validity check as /api/qem -> HTTP 400
  • length_um over 100,000 um -> HTTP 422

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity layout_geometry

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full gds card
POST

/v1/fluxus/gds/cross

engine path /api/gds/cross · metered · returns a file, not JSON

Export one TransmonCross cell (the SQuADDS geometry) as GDSII bytes.

What it does, in full

Export one TransmonCross cell (the SQuADDS geometry) as GDSII bytes.

Draws qiskit-metal's TransmonCross with fluxus.layout.cross (cross, cross pocket, claw with its ground spacing and claw_cpw stub, and a junction marker) and returns the file itself, application/octet-stream with a Content-Disposition filename. Unlike /api/gds (base64 in JSON), the body is the .gds file.

A geometry outside the trained envelope is still exported, since it is only geometry. X-Fluxus-Envelope says in or outside: whether /api/qem/cross's predictions for this cell come from the HFSS-trained engines (capacitance and fr), and X-Fluxus-Envelope-Detail is the JSON from fluxus.layout.cross.cross_envelope naming the field that is outside. HONEST scope (X-Fluxus-Source): the qubit cell alone, not the resonator, not a tape-out-ready reticle and not an EM mesh. A geometry that cannot be drawn, or a non-physical junction or resonator value, is a 400 with the structured error envelope, as on /api/gds.

Request

Body: CrossGdsRequest

GDS-export request for one TransmonCross cell.

The same fields /api/qem/cross takes, so the Design desk can post its cross state to both routes, plus an optional filename (sanitized server-side; defaults to transmon_cross.gds). Only the qubit geometry is drawn. The resonator fields are not drawn; they decide the envelope header (the fr engine's envelope). intervals and alpha change nothing here.

cross_length_umtype number | nullunit um
claw_length_umtype number | nullunit um
ground_spacing_umtype number | nullunit um
junction_lj_nhtype number | nullunit nH
cross_gap_umtype number | nullunit um
cross_width_umtype number | nullunit um
claw_width_umtype number | nullunit um
claw_gap_umtype number | nullunit um
claw_cpw_length_umtype numberunit umdefault 40>= 0
length_umtype number | nullunit um
kindtype "lambda4" | "lambda2"unit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_length_umtype number | nullunit um>= 0
finger_counttype integer | nullunit >= 1
finger_length_umtype number | nullunit um> 0
cap_gap_umtype number | nullunit um> 0
cap_width_umtype number | nullunit um> 0
intervalstype booleanunit default false
alphatype numberunit default 0.1
purcell_filter_suppressiontype numberunit default 1>= 1
squidtype SquidSpec | nullunit
filenametype string | nullunit

Object: SquidSpec

A DC-SQUID in place of the single junction (flux-tunable transmon).

Two junction inductances, lj1_nh and lj2_nh; EJ_sum is their parallel combination and the asymmetry d = |EJ2 - EJ1| / (EJ1 + EJ2) (Koch et al. 2007, Eq. (2.13)). flux_bias_phi0 is the external flux through the loop in flux quanta (periodic; -1 to 1 accepted). The geometry and so EC are unchanged; only EJ depends on flux.

flux_noise_uphi0 (optional) is the 1/f flux-noise amplitude sqrt(A_Phi) at 1 Hz, in micro flux quanta per root hertz. Only when it is given is a first-order dephasing estimate returned (Hutchings et al. 2017), with flux_noise_f_ir_hz and flux_noise_t_us its infrared cut-off and time scale (defaults 1 Hz and 10 us, Hutchings's values).

lj1_nhrequiredtype numberunit nH> 0
lj2_nhrequiredtype numberunit nH> 0
flux_bias_phi0type numberunit Phi0default 0>= -1, <= 1
flux_noise_uphi0type number | nullunit uPhi0> 0
flux_noise_f_ir_hztype numberunit Hzdefault 1> 0
flux_noise_t_ustype numberunit usdefault 10> 0

Example

curl
curl -s "$FLUXUS_API/gds/cross" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"cross_length_um": 240, "claw_length_um": 215, "ground_spacing_um": 10, "junction_lj_nh": 9.686, "length_um": 3900, "coupling_length_um": 225}' -o cell.gds

Example body: docs/qubit/API_AND_CLI.md, s18

What it refuses

  • a non-physical junction or resonator value -> HTTP 400
  • outside the data: still drawn, X-Fluxus-Envelope says outside and names the field

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity layout_geometry

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full gds_cross card
POST

/v1/fluxus/inv

engine path /api/inv · metered

Inverse design: targets -> ranked, oracle-verified candidates.

What it does, in full

Inverse design: targets -> ranked, oracle-verified candidates.

Every candidate is re-solved with fluxus.physics.solve_cell (result.source == 'oracle') and ranked by ascending weighted normalized distance to the targets.

Request

Body: INVRequest

Inverse-design request: target Hamiltonian parameters.

targetsrequiredtype map[string, number]unit
tolerancestype map[string, number] | nullunit
n_candidatestype integerunit default 5>= 1, <= 20
seedtype integer | nullunit
n_screentype integerunit default 2048>= 64, <= 16384

Example

curl
curl -s "$FLUXUS_API/inv" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"targets": {"f01_ghz": 4.8, "fr_ghz": 7.0}, "n_candidates": 1, "n_screen": 256, "seed": 1}'

Example body: the `fluxus inv` example in the CLI help

What it refuses

  • unknown target name -> HTTP 400
  • an unreachable target returns the closest cells; read distance

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity analytic_oracle_verified_search

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full inv card
POST

/v1/fluxus/inv/cross

engine path /api/inv/cross · metered

Inverse design over the SQuADDS TransmonCross envelope.

What it does, in full

Inverse design over the SQuADDS TransmonCross envelope.

Enumerates the whole 4-parameter design space with a fast accelerator, re-solves the finalists with the REAL chain, then polishes them continuously so the answer does not depend on where the grid points fell. Every returned number comes from solve_cross_cell, never from the accelerator.

Simulated reference (HFSS), never silicon. A returned design is a proposal to simulate, not a fabrication instruction.

Request

Body: CrossINVRequest

Target Hamiltonian -> ranked TransmonCross designs.

Name only the targets you care about. An unnamed target is IGNORED, not defaulted -- a target nobody asked for should not steer the search -- and an unknown target NAME is a 400 rather than a silent no-op.

f01_ghztype number | nullunit GHz
anharmonicity_mhztype number | nullunit MHz
fr_ghztype number | nullunit GHz
g_mhztype number | nullunit MHz
chi_mhztype number | nullunit MHz
weightstype map[string, number] | nullunit
toptype integerunit default 3>= 1, <= 20
n_geomtype integerunit default 24>= 8, <= 64
n_ljtype integerunit default 12>= 4, <= 32
n_restype integerunit default 12>= 4, <= 32
refinetype booleanunit default true

Example

curl
curl -s "$FLUXUS_API/inv/cross" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"f01_ghz": 4.5, "anharmonicity_mhz": -200, "fr_ghz": 6.5}'

Example body: docs/qubit/API_AND_CLI.md, s16

What it refuses

  • no target named -> HTTP 400 no_targets
  • unknown target name -> HTTP 400 (never silently ignored)
  • an unreachable target still returns the closest design; read residuals to tell 'best available' from 'hit'

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve+exact_hamiltonian

SQuADDS qubit-TransmonCross-cap_matrix, Ansys HFSS simulated Maxwell capacitance matrix -- NOT silicon

The full inv_cross card
POST

/v1/fluxus/junction

engine path /api/junction · metered

Josephson junction calculator: one of Lj, Ic, EJ, Rn_room -> all the rest.

What it does, in full

Josephson junction calculator: one of Lj, Ic, EJ, Rn_room -> all the rest.

Closed forms (fluxus.physics.junction): Lj = Phi0/(2 pi Ic), EJ = Phi0 Ic/(2 pi), Ic = Jc * area, and the Ambegaokar-Baratoff Ic*Rn = pi Delta/(2e) at T = 0 with Delta = 1.764 kB Tc. Returns lj_nh, ic_na, ej_ghz, rn_ohm_cold, rn_ohm_room (null unless room_over_cold_ratio is given), ic_rn_uv, gap_uev, area_um2 (null unless jc is given), the echoed input and settings, and notes. Missing, duplicate, inconsistent or non-physical input is a 400 naming the problem. Analytic, not measured.

Request

Body: JunctionRequest

Josephson junction calculator input: exactly ONE of the four quantities.

lj_nh (nH), ic_na (nA), ej_ghz (EJ/h, GHz) or rn_ohm_room (room-temperature normal resistance, ohm). Optional critical current density in ONE unit, jc_ua_per_um2 (uA/um^2) or jc_a_per_cm2 (A/cm^2; 1 uA/um^2 = 100 A/cm^2), which adds the junction area. tc_k is the electrode Tc for the Ambegaokar-Baratoff gap (default 1.2 K, aluminium film). room_over_cold_ratio = Rn_room / Rn_cold is process-dependent and has NO default: without it the room-temperature resistance is neither accepted as input nor returned.

lj_nhtype number | nullunit nH
ic_natype number | nullunit nA
ej_ghztype number | nullunit GHz
rn_ohm_roomtype number | nullunit ohm
jc_ua_per_um2type number | nullunit uA/um^2
jc_a_per_cm2type number | nullunit A/cm^2
tc_ktype numberunit Kdefault 1.2
room_over_cold_ratiotype number | nullunit

Example

curl
curl -s "$FLUXUS_API/junction" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"lj_nh": 10.755042613636363, "jc_ua_per_um2": 0.5}'

Example body: docs/qubit/API_AND_CLI.md, s17

What it refuses

  • not exactly one of lj_nh, ic_na, ej_ghz, rn_ohm_room -> HTTP 400 invalid_junction_input
  • rn_ohm_room given without room_over_cold_ratio (process-dependent, never defaulted) -> HTTP 400
  • jc in both units, or any value <= 0 -> HTTP 400

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity analytic_closed_form

The full junction card
POST

/v1/fluxus/preflight

engine path /api/preflight · metered

Logical-qubit preflight: a bounded answer plus its refusals.

Not offered on the hosted API: the deployment withholds the preflight feature, so this route answers 503 there and says so. It answers on a local install that has what it needs.

What it does, in full

Logical-qubit preflight: a bounded answer plus its refusals.

NO PROJECT REQUIRED. Every input has a default or a refusal, because the chain answers a PRE-BUILD question and the person asking it may not have a project yet.

The response deliberately carries structure a caller could flatten and must not: every channel keeps its kind (PREDICTED / PROFILE / BOUND / REFUSED), leakage stays a RANGE conditional on has_lru, and quotable says which of the four decision modes may be answered at all. The go/no-go is REFUSED and that refusal is part of the answer.

Request

Body: PreflightRequest

Inputs for the logical-qubit preflight. All optional except none.

has_lru is asked explicitly rather than defaulted because it is the highest-leverage design question in the profile: worth 10-72x in leakage population, and unstated it widens the band to 156x, which is wider than the threshold crossing itself. None means unstated and is REFUSED.

The four coupler fields drive the experimental coupler-design path. They are optional, and supplying only some of them yields UNAVAILABLE rather than a guess - which is why this is input-driven and not a toggle.

architecturetype stringunit default "tunable_coupler_surface"
n_qubitstype integerunit default 72
t1_ustype numberunit usdefault 93.1> 0
t2_echo_ustype numberunit usdefault 186.2> 0
has_lrutype boolean | nullunit
t_cz_nstype number | nullunit ns> 0
allow_partialtype booleanunit default false
g_qc_ghztype number | nullunit GHz
coupler_t1_ustype number | nullunit us> 0
coupler_t2echo_ustype number | nullunit us> 0
g_over_delta_at_gatetype number | nullunit
code_familytype "surface" | "repetition"unit
target_distancetype integer | nullunit >= 3, <= 101

Example

curl
curl -s "$FLUXUS_API/preflight" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"has_lru": true, "code_family": "surface"}'

Example body: the smallest preflight request

What it refuses

  • has_lru or code_family unstated -> refused with the reason
  • this host does not carry Corpus -> HTTP 503 corpus_unavailable

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity rules_corpus_bound

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full preflight card
POST

/v1/fluxus/qem

engine path /api/qem · metered

Predict the five Hamiltonian targets for one cell.

What it does, in full

Predict the five Hamiltonian targets for one cell.

Returns a serialized fluxus.core.PredictionResult: value (HamiltonianResult incl. source), intervals (split-conformal, alpha=0.1, only when calibration residuals exist and the prediction did not abstain; a weak-tier answer has no chi_mhz interval, see fluxus.qem.chi_tier), in_envelope, abstained, model_version.

Request

Body: QEMRequest

One design cell, flat keys. Omitted fields use CellSpec defaults.

enginetype "surrogate" | "oracle"unit
alphatype numberunit default 0.1> 0, < 1
pad_width_umtype number | nullunit um
pad_height_umtype number | nullunit um
pad_gap_umtype number | nullunit um
ground_gap_umtype number | nullunit um
lj_nhtype number | nullunit nH
junction_lj_nhtype number | nullunit nH
length_umtype number | nullunit um
kindtype string | nullunit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_cap_fftype number | nullunit fF

Example

curl
curl -s "$FLUXUS_API/qem" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"pad_gap_um": 30, "junction_lj_nh": 12, "length_um": 4500, "coupling_cap_ff": 5}'

Example body: the `fluxus qem` example in the CLI help

What it refuses

  • geometry outside SPEC_RANGES -> abstained=true, oracle value
  • kind other than lambda4, or center_width_um=10.0, gap_um=6.0, eps_r=11.45 changed (the surrogate has no input for them) -> abstained=true, oracle value
  • eps_r < 1 -> HTTP 400 from the oracle
  • the worst dressed overlap of the four levels chi reads is below 0.7236 (n_crit_eff < 0.25, |Delta| = g for a two-level pair) -> chi NaN, chi_method='unresolved', dispersive_regime='unresolved'
  • NOT a refusal: between 0.7236 and 0.8536 (n_crit_eff 0.25 to 1.00) chi IS answered, with dispersive_regime='weak' and a chi_caveat; it holds only well below n_crit photons, so read n_crit_eff before using it at readout power
  • dispersive_regime='weak' answers carry NO chi_mhz interval: the calibrated chi interval covers 49.3% of weak-tier answers against a 90% target (98.3% of dispersive ones; fresh 10,000-cell sample, seed 20260710); the chi value and the other four intervals are still served

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_analytic_oracle

fluxus.physics.solve_cell -- an ANALYTIC capacitance/resonator model. Its geometry->Hamiltonian error against a field solve is tens of percent and is NOT included in the numbers below.

The full qem card
POST

/v1/fluxus/qem/cross

engine path /api/qem/cross · metered

Hamiltonian for one TransmonCross cell (SQuADDS geometry family).

What it does, in full

Hamiltonian for one TransmonCross cell (SQuADDS geometry family).

Each step is exact, trained on HFSS, or a named closed form: geometry -> capacitance matrix (HFSS-trained, 0.30%/0.56% median held-out), capacitance -> EC and L_j -> EJ (exact; C_sigma is the cross-to-ground capacitance plus the claw path in series with the resonator, and leaves out the junction's own capacitance), EC/EJ -> f01 and anharmonicity (exact Cooper-pair box), resonator -> fr (HFSS-trained on the one CPW cross-section SQuADDS simulated, no kinetic inductance), g from the two-node capacitance matrix with the resonator capacitance taken as the admittance slope of the loaded line at the claw node (trained fr, an analytic cross-section Z0 and the HFSS-trained claw-to-ground capacitance; not trained itself, and coverage of its interval is not measured), and finally chi by exact diagonalisation.

claw_cpw_length_um (default 40, the only value in the HFSS capacitance data) is not a model input. Another value is answered, with in_envelope false and outside_trained_configuration naming it.

This is the geometry family qiskit-metal and SQuADDS use. The parallel-pad POST /api/qem path is a DIFFERENT, incompatible geometry and is unaffected.

Refuses with HTTP 422 and a structured outside_envelope body rather than extrapolating the capacitance. A resonator outside the fr engine's envelope is answered with the analytic CPW form instead, and then in_envelope is false, abstained is true and out_of_envelope names the fr refusal. Simulated reference, never silicon.

Readout (added 2026-10-16, fields only added): kappa_khz (kappa / 2 pi, the coupled-line closed form fed with the chain's fr, scored against SQuADDS HFSS kappa), kappa_source, purcell_t1_us (single-mode Purcell limit, divided by the optional user-supplied purcell_filter_suppression), purcell_source, and a readout block with validation flags, refusals and the dispersive-form value.

lambda/2 (2026-10-16): the resonator carries its NCap coupler (finger_count, finger_length_um, cap_gap_um, cap_width_um; defaults are the half-wave eigenmode rows' coupler), and fr and kappa both come from the half-wave NCap engine (kappa_source squadds_halfwave_ncap): HFSS-trained eigenmode fr and NCap capacitances through the series-coupled closed form SQuADDS's own half-wave table is built with. readout.halfwave carries the capacitances and the eigenmode fr before the coupler's loading. Outside its envelope fr falls back as above and kappa is null with the reason.

Request

Body: CrossQEMRequest

One TransmonCross cell (the SQuADDS / qiskit-metal geometry family).

Flat keys matching fluxus.core.TransmonCrossSpec + ResonatorSpec. Omitted fields take the spec defaults.

THE FOUR FIXED FIELDS ARE SETTABLE AND VALIDATED, NOT IGNORED. The HFSS training config holds cross_gap_um, cross_width_um, claw_width_um and claw_gap_um at exactly one value each. Passing a different one returns HTTP 422 with a structured outside_envelope body naming the field and the value it is pinned to, so a caller can repair the request without reading prose. They are accepted at all so a caller can be EXPLICIT about the geometry it means; they are never a way to make the engine guess.

cross_length_umtype number | nullunit um
claw_length_umtype number | nullunit um
ground_spacing_umtype number | nullunit um
junction_lj_nhtype number | nullunit nH
cross_gap_umtype number | nullunit um
cross_width_umtype number | nullunit um
claw_width_umtype number | nullunit um
claw_gap_umtype number | nullunit um
claw_cpw_length_umtype numberunit umdefault 40>= 0
length_umtype number | nullunit um
kindtype "lambda4" | "lambda2"unit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_length_umtype number | nullunit um>= 0
finger_counttype integer | nullunit >= 1
finger_length_umtype number | nullunit um> 0
cap_gap_umtype number | nullunit um> 0
cap_width_umtype number | nullunit um> 0
intervalstype booleanunit default false
alphatype numberunit default 0.1
purcell_filter_suppressiontype numberunit default 1>= 1
squidtype SquidSpec | nullunit

Object: SquidSpec

A DC-SQUID in place of the single junction (flux-tunable transmon).

Two junction inductances, lj1_nh and lj2_nh; EJ_sum is their parallel combination and the asymmetry d = |EJ2 - EJ1| / (EJ1 + EJ2) (Koch et al. 2007, Eq. (2.13)). flux_bias_phi0 is the external flux through the loop in flux quanta (periodic; -1 to 1 accepted). The geometry and so EC are unchanged; only EJ depends on flux.

flux_noise_uphi0 (optional) is the 1/f flux-noise amplitude sqrt(A_Phi) at 1 Hz, in micro flux quanta per root hertz. Only when it is given is a first-order dephasing estimate returned (Hutchings et al. 2017), with flux_noise_f_ir_hz and flux_noise_t_us its infrared cut-off and time scale (defaults 1 Hz and 10 us, Hutchings's values).

lj1_nhrequiredtype numberunit nH> 0
lj2_nhrequiredtype numberunit nH> 0
flux_bias_phi0type numberunit Phi0default 0>= -1, <= 1
flux_noise_uphi0type number | nullunit uPhi0> 0
flux_noise_f_ir_hztype numberunit Hzdefault 1> 0
flux_noise_t_ustype numberunit usdefault 10> 0

Example

curl
curl -s "$FLUXUS_API/qem/cross" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"cross_length_um": 240, "claw_length_um": 215, "ground_spacing_um": 10, "junction_lj_nh": 9.686, "length_um": 3900, "coupling_length_um": 225, "intervals": true}'

Example body: docs/qubit/API_AND_CLI.md, s04

What it refuses

  • a swept axis outside its range -> HTTP 422 outside_envelope with {field, value, allowed:{min,max}}
  • a single-valued axis changed -> HTTP 422 outside_envelope with {field, value, allowed:{const}}
  • eps_r other than 11.45 (the HFSS-trained capacitance and fr models have no permittivity input) -> HTTP 422 outside_envelope with {field: eps_r, allowed:{const}}
  • the capacitance engine has not been trained -> HTTP 503 engine_unavailable with a remedy string
  • the worst dressed overlap of the four levels chi reads is below 0.7236 (n_crit_eff < 0.25, |Delta| = g for a two-level pair) -> chi NaN, chi_method='unresolved', dispersive_regime='unresolved'
  • NOT a refusal: between 0.7236 and 0.8536 (n_crit_eff 0.25 to 1.00) chi IS answered, with dispersive_regime='weak' and a chi_caveat; it holds only well below n_crit photons, so read n_crit_eff before using it at readout power

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve+exact_hamiltonian

SQuADDS qubit-TransmonCross-cap_matrix, Ansys HFSS simulated Maxwell capacitance matrix -- NOT silicon

The full qem_cross card
POST

/v1/fluxus/qem/cross/batch

engine path /api/qem/cross/batch · metered

Many TransmonCross designs in one call.

What it does, in full

Many TransmonCross designs in one call.

results is aligned with items; each slot is exactly the /api/qem/cross body for that item (its 422 or 400 error body when it is refused or malformed) plus status, the HTTP status it would have had. summary counts answered, abstained, refused and error slots and the fields refusals named. Over 500 items: truncated with clamped. Past the request budget: budget_exhausted slots and budget.

Request

Body: CrossBatchRequest

Many /api/qem/cross bodies. intervals and alpha here apply to items that do not set them. Items are checked one by one, so a bad item is an error in its own slot.

itemsrequiredtype list[object]unit
intervalstype boolean | nullunit
alphatype number | nullunit > 0, < 1

Example

curl
curl -s "$FLUXUS_API/qem/cross/batch" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"items": [{"claw_length_um": 215, "coupling_length_um": 225, "cross_length_um": 240, "ground_spacing_um": 10, "junction_lj_nh": 9.686, "length_um": 3900}, {"cross_length_um": 240, "ground_spacing_um": 10.9}]}'

Example body: the request model's own example

What it refuses

  • each slot inherits /api/qem/cross: outside the data -> that slot holds the 422 outside_envelope body; a malformed item -> its 400 or 422 body
  • more than the cap -> truncated with a clamped block
  • past the request budget -> budget_exhausted slots and a budget block

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve+exact_hamiltonian

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_cross_batch card
POST

/v1/fluxus/qem/cross/flux-sweep

engine path /api/qem/cross/flux-sweep · metered

f01, anharmonicity, g, chi and the Purcell T1 limit against flux.

What it does, in full

f01, anharmonicity, g, chi and the Purcell T1 limit against flux.

Each point is the full /api/qem/cross chain with EJ(Phi) from the asymmetric DC-SQUID relation (Koch et al. 2007, Eq. (2.13)); the geometry, EC, fr and kappa do not depend on flux and are the same at every point. Columns are lists aligned with flux_phi0; a point that cannot be solved (EJ = 0 for a symmetric SQUID at half a flux quantum) is null there with the reason in refused, and an unresolved chi is null with chi_method saying so. transmon_regime is false where EJ/EC < 20. No intervals. Off-envelope geometry is refused (422) as on /api/qem/cross.

Request

Body: CrossFluxSweepRequest

A tuning curve: the cross chain on a grid of flux points.

The same fields as /api/qem/cross (squid required), plus the grid: n_points (2 to MAX_FLUX_POINTS, default 41) evenly spaced from flux_min_phi0 to flux_max_phi0 (default -0.5 to 0.5). The sweep carries no intervals; intervals: true is refused rather than ignored.

cross_length_umtype number | nullunit um
claw_length_umtype number | nullunit um
ground_spacing_umtype number | nullunit um
junction_lj_nhtype number | nullunit nH
cross_gap_umtype number | nullunit um
cross_width_umtype number | nullunit um
claw_width_umtype number | nullunit um
claw_gap_umtype number | nullunit um
claw_cpw_length_umtype numberunit umdefault 40>= 0
length_umtype number | nullunit um
kindtype "lambda4" | "lambda2"unit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_length_umtype number | nullunit um>= 0
finger_counttype integer | nullunit >= 1
finger_length_umtype number | nullunit um> 0
cap_gap_umtype number | nullunit um> 0
cap_width_umtype number | nullunit um> 0
intervalstype booleanunit default false
alphatype numberunit default 0.1
purcell_filter_suppressiontype numberunit default 1>= 1
squidtype SquidSpec | nullunit
n_pointstype integerunit default 41>= 2, <= 101
flux_min_phi0type numberunit Phi0default -0.5>= -1, <= 1
flux_max_phi0type numberunit Phi0default 0.5>= -1, <= 1

Object: SquidSpec

A DC-SQUID in place of the single junction (flux-tunable transmon).

Two junction inductances, lj1_nh and lj2_nh; EJ_sum is their parallel combination and the asymmetry d = |EJ2 - EJ1| / (EJ1 + EJ2) (Koch et al. 2007, Eq. (2.13)). flux_bias_phi0 is the external flux through the loop in flux quanta (periodic; -1 to 1 accepted). The geometry and so EC are unchanged; only EJ depends on flux.

flux_noise_uphi0 (optional) is the 1/f flux-noise amplitude sqrt(A_Phi) at 1 Hz, in micro flux quanta per root hertz. Only when it is given is a first-order dephasing estimate returned (Hutchings et al. 2017), with flux_noise_f_ir_hz and flux_noise_t_us its infrared cut-off and time scale (defaults 1 Hz and 10 us, Hutchings's values).

lj1_nhrequiredtype numberunit nH> 0
lj2_nhrequiredtype numberunit nH> 0
flux_bias_phi0type numberunit Phi0default 0>= -1, <= 1
flux_noise_uphi0type number | nullunit uPhi0> 0
flux_noise_f_ir_hztype numberunit Hzdefault 1> 0
flux_noise_t_ustype numberunit usdefault 10> 0

Example

curl
curl -s "$FLUXUS_API/qem/cross/flux-sweep" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"cross_length_um": 240, "claw_length_um": 215, "ground_spacing_um": 10, "length_um": 3900, "coupling_length_um": 225, "squid": {"lj1_nh": 14.53, "lj2_nh": 29.06, "flux_bias_phi0": 0.0}, "n_points": 61}'

Example body: docs/qubit/API_AND_CLI.md, s11

What it refuses

  • no squid block -> HTTP 400
  • intervals true -> HTTP 400 (the sweep has none)
  • n_points above 101 or below 2 -> HTTP 422
  • flux_max_phi0 not above flux_min_phi0 -> HTTP 400
  • off-envelope geometry -> HTTP 422 outside_envelope, as qem_cross
  • a point where EJ = 0 is null, with the reason in refused

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve+exact_hamiltonian

The full qem_cross_flux_sweep card
POST

/v1/fluxus/qem/cross/sweep

engine path /api/qem/cross/sweep · metered

One or two TransmonCross fields over a linear grid, point answers.

What it does, in full

One or two TransmonCross fields over a linear grid, point answers.

Every point is the /api/qem/cross answer for base plus the grid values, projected to f01, anharmonicity, fr, g, chi, EC, EJ, kappa, Purcell T1, regime and source, or to the refusal's code, field and reason. n defaults to 21 and is clamped to 201 for one axis and 41 per axis for two, with a clamped block. No intervals: ask /api/qem/cross/batch with intervals at the points you care about.

Request

Body: CrossSweepRequest

A base /api/qem/cross body and one or two axes.

basetype objectunit
axesrequiredtype list[SweepAxis]unit at least 1 items, at most 2 items

Object: SweepAxis

fieldrequiredtype "cross_length_um" | "claw_length_um" | "ground_spacing_um" | "junction_lj_nh" | "length_um" | "coupling_length_um"unit
startrequiredtype numberunit
stoprequiredtype numberunit
ntype integer | nullunit

Example

curl
curl -s "$FLUXUS_API/qem/cross/sweep" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"axes": [{"field": "junction_lj_nh", "n": 13, "start": 8, "stop": 14}], "base": {"claw_length_um": 215, "coupling_length_um": 225, "cross_length_um": 240, "ground_spacing_um": 10, "length_um": 3900}}'

Example body: the request model's own example

What it refuses

  • a malformed base or axis -> HTTP 400 once
  • base.intervals true -> HTTP 400 (point answers only)
  • points outside the data -> status refused with field and reason
  • n over the cap -> clamped with a clamped block

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve+exact_hamiltonian

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_cross_sweep card
GET

/v1/fluxus/qem/schema

engine path /api/qem/schema · free

Every qubit-design input: unit, default, role (swept, pinned, free, resonator, control), range or pinned value, the unsampled ground-spacing gap and the claw support rule; outputs with units; the engines behind each step; interval coverage; refusal kinds; batch and sweep limits; exit codes; and every qubit route with its CLI command. Read from the constants the engines refuse by.

What it does, in full

Every qubit-design input: unit, default, role (swept, pinned, free, resonator, control), range or pinned value, the unsampled ground-spacing gap and the claw support rule; outputs with units; the engines behind each step; interval coverage; refusal kinds; batch and sweep limits; exit codes; and every qubit route with its CLI command. Read from the constants the engines refuse by.

Request

No parameters.

Example

curl
curl -s "$FLUXUS_API/qem/schema" -H "Authorization: Bearer $COGITAN_API_KEY"

Example body: no parameters

What it refuses

  • never refuses

Responses: 200 Successful Response.

Validated for

fidelity metadata

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_schema card
GET

/v1/fluxus/qem/status

engine path /api/qem/status · free

Whether each qubit-design engine loads on this host, with versions.

What it does, in full

Whether each qubit-design engine loads on this host, with versions.

Request

No parameters.

Example

curl
curl -s "$FLUXUS_API/qem/status" -H "Authorization: Bearer $COGITAN_API_KEY"

Example body: no parameters

What it refuses

  • never refuses; an engine that does not load reports available false with the error

Responses: 200 Successful Response.

Validated for

fidelity metadata

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_status card
POST

/v1/fluxus/qem/triage

engine path /api/qem/triage · metered

Which TransmonCross candidates still need your solver.

What it does, in full

Which TransmonCross candidates still need your solver.

ACCEPT when every requirement's calibrated interval sits inside its window, REJECT when one sits wholly outside, SIMULATE otherwise (and for a refused design, an abstention or a missing interval). Never reads the point estimate. Returns per-candidate decisions with reasons, counts, simulate_rate and the accept and reject risk BOUNDS (k x alpha and alpha), which are bounds from coverage, not measured decision error. Up to 200 candidates; each is an interval solve (about 0.16 s).

Request

Body: TriageRequest

Candidates (/api/qem/cross bodies) and the spec they must meet.

itemsrequiredtype list[object]unit
requirementsrequiredtype list[Requirement]unit at least 1 items
alphatype numberunit default 0.1> 0, < 1

Object: Requirement

targetrequiredtype "ec_mhz" | "f01_ghz" | "anharmonicity_mhz" | "fr_ghz" | "g_mhz" | "chi_mhz" | "kappa_khz"unit
lotype number | nullunit
hitype number | nullunit

Example

curl
curl -s "$FLUXUS_API/qem/triage" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"alpha": 0.1, "items": [{"claw_length_um": 215, "coupling_length_um": 225, "cross_length_um": 240, "ground_spacing_um": 10, "junction_lj_nh": 9.686, "length_um": 3900}], "requirements": [{"hi": 4.7, "lo": 4.3, "target": "f01_ghz"}, {"hi": -150, "target": "anharmonicity_mhz"}]}'

Example body: the request model's own example

What it refuses

  • a requirement on an unknown target, or with lo > hi or a NaN bound -> HTTP 400
  • a candidate outside the data -> simulate, refusal named; never accept or reject without an interval

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity conformal_interval_decision

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_triage card
POST

/v1/fluxus/qem/verify

engine path /api/qem/verify · metered

The /api/qem prediction for one parallel-pad cell beside the analytic oracle's: per-target delta (predicted minus verified) and, where an interval is served, whether the oracle value falls inside it. The oracle is a closed form, not an EM solver; this checks the surrogate against its own teacher.

What it does, in full

The /api/qem prediction for one parallel-pad cell beside the analytic oracle's: per-target delta (predicted minus verified) and, where an interval is served, whether the oracle value falls inside it. The oracle is a closed form, not an EM solver; this checks the surrogate against its own teacher.

Request

Body: PadVerifyRequest

A parallel-pad cell (the /api/qem fields) to check against the oracle.

enginetype "surrogate" | "oracle"unit
alphatype numberunit default 0.1> 0, < 1
pad_width_umtype number | nullunit um
pad_height_umtype number | nullunit um
pad_gap_umtype number | nullunit um
ground_gap_umtype number | nullunit um
lj_nhtype number | nullunit nH
junction_lj_nhtype number | nullunit nH
length_umtype number | nullunit um
kindtype string | nullunit
center_width_umtype number | nullunit um
gap_umtype number | nullunit um
eps_rtype number | nullunit
coupling_cap_fftype number | nullunit fF

Example

curl
curl -s "$FLUXUS_API/qem/verify" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{}'

Example body: every field at its default

What it refuses

  • the same refusals as /api/qem

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_vs_analytic_oracle

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full qem_verify card
POST

/v1/fluxus/resonator

engine path /api/resonator · metered

Predict resonator fr (GHz) with the persisted SQuADDS surrogate.

What it does, in full

Predict resonator fr (GHz) with the persisted SQuADDS surrogate.

Input is resonator geometry (ResonatorSpec fields + optional coupling_length_um). Returns fr_ghz from the data-trained surrogate, its held-out rel_interval (the measured p95 relative error, a fractional band -- NOT a per-point conformal interval), and source: "squadds_surrogate". HONEST: trained on SQuADDS HFSS eigenmode simulation (EM-simulated, not silicon); predicts the resonator fr only. 503 (with the shared error envelope) when the checkpoint has not been trained/persisted yet.

Request

Body: ResonatorRequest

Resonator geometry for the SQuADDS fr surrogate (ResonatorSpec fields).

Flat keys matching fluxus.core.ResonatorSpec plus an optional coupling_length_um (a SQuADDS coupler feature not on ResonatorSpec). Omitted fields use ResonatorSpec defaults / the surrogate's training default (coupling_length_um = 0).

length_umtype numberunit umdefault 4000> 0
kindtype "lambda4" | "lambda2"unit default "lambda4"
center_width_umtype numberunit umdefault 11.7
gap_umtype numberunit umdefault 5.1
claw_length_umtype number | nullunit um
coupling_length_umtype number | nullunit um
finger_counttype integer | nullunit >= 1
finger_length_umtype number | nullunit um> 0
cap_gap_umtype number | nullunit um> 0
cap_width_umtype number | nullunit um> 0
ground_spacing_umtype number | nullunit um> 0

Example

curl
curl -s "$FLUXUS_API/resonator" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"length_um": 8150, "kind": "lambda2", "claw_length_um": 185.9, "finger_count": 10, "finger_length_um": 30.9, "cap_gap_um": 4.1, "cap_width_um": 10.9, "ground_spacing_um": 4.1}'

Example body: docs/qubit/API_AND_CLI.md, s10

What it refuses

  • checkpoint absent -> HTTP 503
  • center_width_um or gap_um differs from the single trained value -> HTTP 422 resonator_outside_envelope
  • length_um or coupling_length_um outside the trained range for its kind -> HTTP 422 resonator_outside_envelope
  • NCap fields with kind lambda4, with a coupling_length_um, or without claw_length_um -> HTTP 400
  • NCap request outside the half-wave envelope (see qem_cross envelope._halfwave_ncap) -> HTTP 422 naming the field

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity surrogate_of_em_solve

SQuADDS HFSS eigenmode (EM-simulated, not silicon)

The full resonator_fr card
POST

/v1/fluxus/yld

engine path /api/yld · metered

Monte Carlo frequency-collision yield for a fixed-frequency chip.

What it does, in full

Monte Carlo frequency-collision yield for a fixed-frequency chip.

Returns a serialized fluxus.core.YieldReport: n_trials, yield_fraction, collision_counts (Hertzberg et al. arXiv:2009.00781 rule name -> mean violations per chip), notes.

Request

Body: YLDRequest

ChipSpec fields plus Monte Carlo controls.

n_qubitsrequiredtype integerunit >= 1, <= 2000
latticetype "heavy_hex" | "square"unit default "heavy_hex"
target_f_ghztype list[number] | nullunit GHz
sigma_f_mhztype numberunit MHzdefault 12>= 0
anharm_mhztype numberunit MHzdefault -300
n_trialstype integerunit default 20000>= 1, <= 1000000
seedtype integer | nullunit

Example

curl
curl -s "$FLUXUS_API/yld" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"n_qubits": 127, "sigma_f_mhz": 12, "n_trials": 20000, "seed": 1}'

Example body: docs/qubit/API_AND_CLI.md, s19

What it refuses

  • over the request budget -> HTTP 422 naming the n_trials that fits

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity monte_carlo_of_collision_rules

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full yld card
POST

/v1/fluxus/yld/curve

engine path /api/yld/curve · metered

Yield versus frequency spread: [[sigma_f_mhz, yield], ...].

What it does, in full

Yield versus frequency spread: [[sigma_f_mhz, yield], ...].

Request

Body: CurveRequest

Yield-vs-sigma sweep: YLDRequest fields plus the sigma list.

n_qubitsrequiredtype integerunit >= 1, <= 2000
latticetype "heavy_hex" | "square"unit default "heavy_hex"
target_f_ghztype list[number] | nullunit GHz
sigma_f_mhztype numberunit MHzdefault 12>= 0
anharm_mhztype numberunit MHzdefault -300
n_trialstype integerunit default 20000>= 1, <= 1000000
seedtype integer | nullunit
sigmastype list[number]unit at most 64 items

Example

curl
curl -s "$FLUXUS_API/yld/curve" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"n_qubits": 27, "n_trials": 2000, "sigmas": [8, 12, 16], "seed": 1}'

Example body: a 27-qubit heavy-hex chip

What it refuses

  • over the request budget (one run per sigma) -> HTTP 422

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity monte_carlo_of_collision_rules

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full yld_curve card
POST

/v1/fluxus/yld/detail

engine path /api/yld/detail · metered

Yield Monte Carlo with per-qubit collision attribution.

What it does, in full

Yield Monte Carlo with per-qubit collision attribution.

Same simulation as /api/yld plus per_qubit_rate (fraction of trials each qubit participated in >= 1 violation -- for chip-map coloring) and targets_ghz (the allocation pattern used).

Request

Body: YLDRequest

ChipSpec fields plus Monte Carlo controls.

n_qubitsrequiredtype integerunit >= 1, <= 2000
latticetype "heavy_hex" | "square"unit default "heavy_hex"
target_f_ghztype list[number] | nullunit GHz
sigma_f_mhztype numberunit MHzdefault 12>= 0
anharm_mhztype numberunit MHzdefault -300
n_trialstype integerunit default 20000>= 1, <= 1000000
seedtype integer | nullunit

Example

curl
curl -s "$FLUXUS_API/yld/detail" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"n_qubits": 27, "n_trials": 2000, "seed": 1}'

Example body: a 27-qubit heavy-hex chip

What it refuses

  • over the request budget -> HTTP 422

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity monte_carlo_of_collision_rules

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full yld_detail card
POST

/v1/fluxus/yld/graph

engine path /api/yld/graph · metered

Frequency-collision yield over the supplied qubit graph + targets.

What it does, in full

Frequency-collision yield over the supplied qubit graph + targets.

Runs the SAME Hertzberg et al. (arXiv:2009.00781) collision Monte Carlo as /api/yld, but over the EXPLICIT topology the caller supplies -- frequencies_ghz[k] is qubit k's target frequency and edges are 0-based index pairs (the floorplan's real wiring) -- rather than a generated heavy-hex / square lattice. Mirrors the shape of /api/yld/detail so the frontend can reuse its rendering: n_qubits, n_edges, n_trials, yield_fraction, collision_counts, per_qubit_rate, note, source.

n_trials is clamped to <= 50000. Empty frequencies or edges that reference out-of-range / self-looped indices return a 400 envelope.

Request

Body: GraphYLDRequest

Frequency-collision yield over an explicit qubit graph + targets.

frequencies_ghz[k] is qubit k's design target frequency; edges are 0-based index pairs into that list (the floorplan's actual wiring). Drives the SAME Hertzberg et al. collision Monte Carlo as /api/yld, but over this supplied topology rather than a generated lattice. n_trials is clamped to a sane cap (<= 50000) by the service.

frequencies_ghzrequiredtype list[number]unit GHz
edgestype list[list[integer]]unit
sigma_f_mhztype numberunit MHzdefault 12
anharm_mhztype numberunit MHzdefault -300
n_trialstype integerunit default 20000
seedtype integer | nullunit

Example

curl
curl -s "$FLUXUS_API/yld/graph" -H "Authorization: Bearer $COGITAN_API_KEY" \
  -H 'content-type: application/json' \
  -d '{"frequencies_ghz": [5.0, 5.08, 5.16, 5.04], "edges": [[0, 1], [1, 2], [2, 3]], "seed": 1}'

Example body: a four-qubit chain written for this page

What it refuses

  • edges out of range or self-loops -> HTTP 400
  • n_trials over 50,000 -> clamped

Responses: 200 Successful Response; 422 Validation Error.

Validated for

fidelity monte_carlo_of_collision_rules

see qem_cross for the TransmonCross chain and qem for the parallel-pad family; nothing here is silicon

The full yld_graph card

Generated from Fluxus 0.3.0 at commit b9aa57d on 2026-10-20 by python -m fluxus.docs_bundle.