{"openapi":"3.1.0","info":{"title":"strataq API","description":"Susceptibility, reciprocity, dissipation and phase readings for finite games.","version":"0.1.0"},"paths":{"/v1/health":{"get":{"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/solve/qre":{"post":{"summary":"Solve Qre","operationId":"solve_qre_v1_solve_qre_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Qre V1 Solve Qre Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/decompose":{"post":{"summary":"Decompose","operationId":"decompose_v1_decompose_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Decompose V1 Decompose Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/response":{"post":{"summary":"Response","description":"χ^eq, ℛ, and the spectral phase read — with honesty flags attached.\n\nNear criticality the χ magnitudes are unreliable; the API flags rather\nthan hides (and refuses nothing here: matrix-input games carry their own\nconjugate field implicitly — the payoff perturbation h itself).","operationId":"response_v1_response_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Response V1 Response Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dynamics/stationary":{"post":{"summary":"Dynamics Stationary","operationId":"dynamics_stationary_v1_dynamics_stationary_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GamePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dynamics Stationary V1 Dynamics Stationary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/branch":{"post":{"summary":"Solve Branch","operationId":"solve_branch_v1_solve_branch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Branch V1 Solve Branch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/examples":{"get":{"summary":"Examples","description":"Named example games for the app's Lab (both α anchors + the middle).","operationId":"examples_v1_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Examples V1 Examples Get"}}}}}}},"/v1/response/poke":{"post":{"summary":"Response Poke","description":"Nudge one player's incentives, re-equilibrate, report who moved.\n\nThis is the operational content of the reciprocity meter (theory doc 07):\npoke player 1, read player 2; poke player 2, read player 1. The poke is a\nfinite h added to the chosen action's payoff for the chosen player; both\nequilibria are solved fresh (no linearisation), so the readings are honest\nat any poke size.","operationId":"response_poke_v1_response_poke_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PokePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Response Poke V1 Response Poke Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dynamics/sample":{"post":{"summary":"Dynamics Sample","description":"Sample Glauber trajectories and read the irreversibility estimators.\n\nReturns the KLD(k=1) point estimate, the TUR point estimate AND its\ncertified bootstrap-lower quantile, alongside the exact EPR of the same\ngenerator — the app shows convergence of data-side meters to the exact\none. Seeded and deterministic.","operationId":"dynamics_sample_v1_dynamics_sample_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SamplePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dynamics Sample V1 Dynamics Sample Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/estimate/lambda":{"post":{"summary":"Estimate Lambda","description":"Run the fast members of the λ-estimator family on observed counts.\n\nSync-budget subset: frequency MLE (profile-likelihood CI) and dispersion\ninversion (point estimate, no bootstrap). Unidentifiability warnings pass\nthrough — the API never returns a bare number where λ is not identified.","operationId":"estimate_lambda_v1_estimate_lambda_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EstimatePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Estimate Lambda V1 Estimate Lambda Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/sioux_falls/network":{"get":{"summary":"Sioux Network","description":"The real Sioux Falls network: 76 links, top-12 OD pairs, k=3 routes.","operationId":"sioux_network_v1_domains_sioux_falls_network_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sioux Network V1 Domains Sioux Falls Network Get"}}}}}}},"/v1/domains/sioux_falls/sue":{"post":{"summary":"Sioux Sue","description":"Solve the Fisk SUE on real data; returns link flows, costs and totals.\n\nTolls enter route costs exactly linearly — the congestion plugin's\nconjugate field. This is the measurement procedure behind the network's\nR = 0 calibration reading: toll a link, watch flows re-equilibrate.","operationId":"sioux_sue_v1_domains_sioux_falls_sue_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SUEPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sioux Sue V1 Domains Sioux Falls Sue Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/toolkit/reciprocity":{"post":{"summary":"Toolkit Reciprocity","description":"R + verdict from a measured cross-response matrix (curl-able F-0011).\n\nExample: curl -X POST .../v1/toolkit/reciprocity -H 'Content-Type: application/json'\n-d '{\"chi\": [[1.07, 0.003], [0.0005, 0.97]]}'","operationId":"toolkit_reciprocity_v1_toolkit_reciprocity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolkitReciprocityPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Toolkit Reciprocity V1 Toolkit Reciprocity Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/toolkit/irreversibility":{"post":{"summary":"Toolkit Irreversibility","description":"Irreversibility verdict for a scalar time series (the F-0009 instrument).","operationId":"toolkit_irreversibility_v1_toolkit_irreversibility_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolkitSeriesPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Toolkit Irreversibility V1 Toolkit Irreversibility Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/toolkit/rationality":{"post":{"summary":"Toolkit Rationality","description":"Bayesian lambda posterior from choice counts under a known game.","operationId":"toolkit_rationality_v1_toolkit_rationality_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolkitRationalityPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Toolkit Rationality V1 Toolkit Rationality Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/domains/blotto/read":{"post":{"summary":"Blotto Read","description":"Full instrument read of a Colonel Blotto game at the given budgets.\n\nReturns each player's QRE allocation mix (for the heatmap), alpha, R,\nand — when the joint space fits the dense guard — the dissipation read.","operationId":"blotto_read_v1_domains_blotto_read_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlottoPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Blotto Read V1 Domains Blotto Read Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/diagnose":{"post":{"summary":"Diagnose Reading","description":"Locate a system in the irreversibility plane: one quadrant, two bounded coordinates.\n\nReturns the whole :class:`~strataq.diagnose.Diagnosis`: the verdict, the live\nquadrant set when it cannot be narrowed to one, both coordinates with their\n``kind`` (point / interval / one-sided bound / absent) and their method text,\n``alpha``, ``lam``, every warning, every refusal, and provenance. Refusals are\nbounds, not errors — a reading that cannot separate two quadrants says which\ntwo rather than returning nothing.","operationId":"diagnose_reading_v1_diagnose_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiagnosePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Diagnose Reading V1 Diagnose Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fit":{"post":{"summary":"Fit Lambda","description":"Estimate lambda with an interval that names its method, and both LR tests.\n\nReturns lambda-hat (``null`` when the likelihood is flat — the refusal is a\nbound, not a number), the interval and the method that produced it, n, the\nlog-likelihood, likelihood-ratio tests against Nash (lambda -> inf) and\nuniform (lambda = 0) with df, p and the boundary caveat, per-group lambda and\na homogeneity test under ``by=``, every warning and refusal, provenance, and\nthe rendered ``summary`` text.","operationId":"fit_lambda_v1_fit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FitPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Fit Lambda V1 Fit Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/pricing":{"post":{"summary":"Solve Pricing","description":"Recommended price, expected profit, rival price distribution, elasticities.","operationId":"solve_pricing_v1_solve_pricing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Pricing V1 Solve Pricing Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/auction":{"post":{"summary":"Solve Auction","description":"Recommended bid, expected surplus, win probability, rival-bid distribution.","operationId":"solve_auction_v1_solve_auction_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuctionPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Auction V1 Solve Auction Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/routing":{"post":{"summary":"Solve Routing","description":"Link flows, travel times, total cost, and what a toll did to them.","operationId":"solve_routing_v1_solve_routing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Routing V1 Solve Routing Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/allocation":{"post":{"summary":"Solve Allocation","description":"Recommended Blotto allocation, win probability, and both sides' mixes.","operationId":"solve_allocation_v1_solve_allocation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllocationPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Allocation V1 Solve Allocation Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/electricity":{"post":{"summary":"Solve Electricity","description":"Offer curve, expected clearing price, expected revenue for one generator.","operationId":"solve_electricity_v1_solve_electricity_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectricityPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Electricity V1 Solve Electricity Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/repeated":{"post":{"summary":"Solve Repeated","description":"Critical discount factor and the grim-trigger sustainable payoff set.","operationId":"solve_repeated_v1_solve_repeated_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepeatedPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Repeated V1 Solve Repeated Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dynamics/edgeworth":{"post":{"summary":"Dynamics Edgeworth","description":"Period, amplitude and the price path of the Edgeworth cycle on a ladder.","operationId":"dynamics_edgeworth_v1_dynamics_edgeworth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EdgeworthPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Dynamics Edgeworth V1 Dynamics Edgeworth Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/evolutionary":{"post":{"summary":"Solve Evolutionary","description":"Replicator rest points with stability, Moran fixation, and the beta = lambda gap.","operationId":"solve_evolutionary_v1_solve_evolutionary_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvolutionaryPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Evolutionary V1 Solve Evolutionary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/solve/extensive":{"post":{"summary":"Solve Extensive","description":"Agent QRE behaviour at every information set, plus backward induction.","operationId":"solve_extensive_v1_solve_extensive_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtensivePayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Extensive V1 Solve Extensive Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/extensive/catalogue":{"get":{"summary":"Extensive Catalogue","description":"The classic trees this service can solve by name.","operationId":"extensive_catalogue_v1_extensive_catalogue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Extensive Catalogue V1 Extensive Catalogue Get"}}}}}}},"/v1/solve/situation":{"post":{"summary":"Solve Situation Endpoint","description":"The assembled recommendation: action, rivals, alternatives, sensitivity.","operationId":"solve_situation_endpoint_v1_solve_situation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SituationPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Solve Situation Endpoint V1 Solve Situation Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AllocationPayload":{"properties":{"budget":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Budget"},"field_values":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Field Values"},"n_fields":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":2.0},{"type":"null"}],"title":"N Fields"},"rival_budget":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":1.0},{"type":"null"}],"title":"Rival Budget"},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":1.0},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","required":["budget"],"title":"AllocationPayload"},"AuctionPayload":{"properties":{"values":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Values"},"costs":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Costs"},"grid":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Grid"},"grid_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Grid Range"},"n_bidders":{"anyOf":[{"type":"integer","maximum":4.0,"minimum":1.0},{"type":"null"}],"title":"N Bidders"},"reserve":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Reserve"},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":1.0},"bidder":{"type":"integer","minimum":0.0,"title":"Bidder","default":0},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","title":"AuctionPayload"},"BlottoPayload":{"properties":{"budget_a":{"type":"integer","maximum":8.0,"minimum":1.0,"title":"Budget A"},"budget_b":{"type":"integer","maximum":8.0,"minimum":1.0,"title":"Budget B"},"n_fields":{"type":"integer","maximum":3.0,"minimum":2.0,"title":"N Fields","default":3},"field_values":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Field Values"},"lam":{"type":"number","maximum":20.0,"exclusiveMinimum":0.0,"title":"Lam","default":1.5}},"type":"object","required":["budget_a","budget_b"],"title":"BlottoPayload"},"BranchPayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs"},"lam_max":{"type":"number","maximum":20.0,"exclusiveMinimum":0.0,"title":"Lam Max"},"n_points":{"type":"integer","maximum":500.0,"exclusiveMinimum":10.0,"title":"N Points","default":200}},"type":"object","required":["payoffs","lam_max"],"title":"BranchPayload"},"DemandPayload":{"properties":{"kind":{"type":"string","enum":["logit","linear"],"title":"Kind","default":"logit"},"price_sensitivity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price Sensitivity"},"quality":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Quality"},"market_size":{"type":"number","title":"Market Size","default":1.0},"outside_option":{"type":"boolean","title":"Outside Option","default":true},"intercept":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Intercept"},"own_slope":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Own Slope"},"cross_slope":{"type":"number","title":"Cross Slope","default":0.0}},"type":"object","title":"DemandPayload","description":"A demand system. ``CustomDemand`` is Python-only — it takes a callable."},"DiagnosePayload":{"properties":{"payoffs":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Payoffs"},"lam":{"anyOf":[{"type":"number","maximum":100.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Lam"},"chi":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Chi"},"chi_se":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Chi Se"},"series":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Series"},"n_bins":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"N Bins","default":3},"n_surrogates":{"type":"integer","maximum":500.0,"minimum":20.0,"title":"N Surrogates","default":200},"alpha_level":{"type":"number","exclusiveMaximum":0.5,"exclusiveMinimum":0.0,"title":"Alpha Level","default":0.01},"seed":{"type":"integer","minimum":0.0,"title":"Seed","default":0}},"type":"object","title":"DiagnosePayload","description":"A game (``payoffs`` + ``lam``) or readings you already have (``chi`` / ``series``)."},"EdgePayload":{"properties":{"origin":{"type":"integer","title":"Origin"},"destination":{"type":"integer","title":"Destination"},"free_flow":{"type":"number","title":"Free Flow"},"capacity":{"type":"number","title":"Capacity"},"b":{"type":"number","title":"B","default":0.15},"power":{"type":"number","title":"Power","default":4.0}},"type":"object","required":["origin","destination","free_flow","capacity"],"title":"EdgePayload"},"EdgeworthPayload":{"properties":{"costs":{"items":{"type":"number"},"type":"array","maxItems":3,"minItems":2,"title":"Costs"},"ladder":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Ladder"},"ladder_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Ladder Range"},"intercept":{"type":"number","exclusiveMinimum":0.0,"title":"Intercept","default":10.0},"slope":{"type":"number","exclusiveMinimum":0.0,"title":"Slope","default":1.0},"capacities":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Capacities","description":"Per-firm capacity. Unlimited (the default) is textbook Bertrand and does not cycle; capacity below market demand is what produces the Edgeworth cycle."},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":20.0},"n_steps":{"type":"integer","maximum":2000.0,"minimum":2.0,"title":"N Steps","default":400}},"type":"object","required":["costs"],"title":"EdgeworthPayload","description":"Alternating logit best response on a homogeneous-good price ladder."},"ElectricityPayload":{"properties":{"costs":{"items":{"type":"number"},"type":"array","maxItems":2,"minItems":2,"title":"Costs"},"offers":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Offers"},"offers_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Offers Range"},"capacities":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Capacities"},"demand":{"type":"number","exclusiveMinimum":0.0,"title":"Demand","default":1.0},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":1.0},"generator":{"type":"integer","maximum":1.0,"minimum":0.0,"title":"Generator","default":0},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","required":["costs"],"title":"ElectricityPayload"},"EstimatePayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs"},"counts":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Counts","description":"Per-player observed action counts."}},"type":"object","required":["payoffs","counts"],"title":"EstimatePayload","description":"Observed choice counts for the λ-estimator family."},"EvolutionaryPayload":{"properties":{"payoff":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","maxItems":6,"minItems":2,"title":"Payoff"},"intensity":{"type":"number","maximum":1000.0,"minimum":0.0,"title":"Intensity","default":1.0},"population":{"anyOf":[{"type":"integer","maximum":2000.0,"minimum":2.0},{"type":"null"}],"title":"Population"},"mutation":{"anyOf":[{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.0},{"type":"null"}],"title":"Mutation"}},"type":"object","required":["payoff"],"title":"EvolutionaryPayload","description":"A symmetric payoff matrix read as a population game."},"ExtensivePayload":{"properties":{"tree":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}],"title":"Tree","default":"entry_deterrence"},"precision":{"type":"number","maximum":1000.0,"minimum":0.0,"title":"Precision","default":1.0},"options":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Options"}},"type":"object","title":"ExtensivePayload","description":"A game tree, by catalogue name or as the nested-dict form."},"FitPayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs"},"counts":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Counts"},"data":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"additionalProperties":{"items":{},"type":"array"},"type":"object"},{"type":"null"}],"title":"Data"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"By"},"method":{"type":"string","enum":["mle","agreement","bayes"],"title":"Method","default":"mle"},"ci":{"type":"string","enum":["bootstrap","profile","posterior","none"],"title":"Ci","default":"bootstrap"},"n_boot":{"type":"integer","maximum":2000.0,"minimum":1.0,"title":"N Boot","default":200},"n_grid":{"type":"integer","maximum":400.0,"minimum":8.0,"title":"N Grid","default":120},"level":{"type":"number","exclusiveMaximum":1.0,"exclusiveMinimum":0.0,"title":"Level","default":0.95},"seed":{"type":"integer","minimum":0.0,"title":"Seed","default":0},"player":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Player"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"}},"type":"object","required":["payoffs"],"title":"FitPayload","description":"Observed choices for :func:`strataq.fit` — aggregated counts OR a tidy table.\n\n``data`` is the point of this endpoint: one row per observed choice, with the\nsubject / round / treatment columns your experiment software emitted, so the\npanel structure survives into the likelihood and into the interval."},"GamePayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs","description":"One nested-list tensor per player."},"lam":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Lam","description":"Logit precision λ (uniform across players)."}},"type":"object","required":["payoffs","lam"],"title":"GamePayload","description":"A finite game as one payoff tensor per player (row-major nested lists)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ODPayload":{"properties":{"origin":{"type":"integer","title":"Origin"},"destination":{"type":"integer","title":"Destination"},"trips":{"type":"number","title":"Trips"}},"type":"object","required":["origin","destination","trips"],"title":"ODPayload"},"PokePayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs"},"lam":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Lam"},"player":{"type":"integer","minimum":0.0,"title":"Player"},"action":{"type":"integer","minimum":0.0,"title":"Action"},"size":{"type":"number","exclusiveMaximum":100.0,"exclusiveMinimum":-100.0,"title":"Size"}},"type":"object","required":["payoffs","lam","player","action","size"],"title":"PokePayload","description":"A finite payoff nudge to one player's one action — the ℛ measurement procedure."},"PricingPayload":{"properties":{"costs":{"items":{"type":"number"},"type":"array","maxItems":3,"minItems":1,"title":"Costs"},"demand":{"$ref":"#/components/schemas/DemandPayload"},"grid":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Grid"},"grid_range":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Grid Range"},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":1.0},"firm":{"type":"integer","minimum":0.0,"title":"Firm","default":0},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","required":["costs","demand"],"title":"PricingPayload"},"RepeatedPayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs","description":"One nested-list payoff tensor per player."},"discount":{"type":"number","exclusiveMaximum":1.0,"minimum":0.0,"title":"Discount"},"target":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Target","description":"The pure profile to sustain; defaults to the efficient one."},"punishment":{"anyOf":[{"type":"string","enum":["minmax","nash"]},{"items":{"type":"number"},"type":"array"}],"title":"Punishment","default":"minmax"},"precision":{"anyOf":[{"type":"number","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Precision"}},"type":"object","required":["payoffs","discount"],"title":"RepeatedPayload","description":"A stage game plus a discount factor: is the arrangement self-enforcing?"},"RoutingPayload":{"properties":{"network":{"anyOf":[{"type":"string","const":"sioux_falls"},{"items":{"$ref":"#/components/schemas/EdgePayload"},"type":"array"}],"title":"Network","default":"sioux_falls"},"demand":{"anyOf":[{"items":{"$ref":"#/components/schemas/ODPayload"},"type":"array"},{"type":"null"}],"title":"Demand"},"tolls":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Tolls"},"precision":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Precision","default":0.5},"k_routes":{"type":"integer","maximum":6.0,"minimum":1.0,"title":"K Routes","default":3},"max_od":{"type":"integer","maximum":20.0,"minimum":1.0,"title":"Max Od","default":12},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","title":"RoutingPayload"},"SUEPayload":{"properties":{"theta":{"type":"number","maximum":10.0,"exclusiveMinimum":0.0,"title":"Theta","default":0.5},"tolls":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Tolls","description":"Sparse per-link tolls (link index -> toll)."}},"type":"object","title":"SUEPayload","description":"Stochastic-user-equilibrium request with optional per-link tolls."},"SamplePayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs"},"lam":{"type":"number","maximum":100.0,"exclusiveMinimum":0.0,"title":"Lam"},"n_steps":{"type":"integer","exclusiveMinimum":100.0,"title":"N Steps"},"n_trajectories":{"type":"integer","exclusiveMinimum":1.0,"title":"N Trajectories"},"seed":{"type":"integer","minimum":0.0,"title":"Seed","default":0}},"type":"object","required":["payoffs","lam","n_steps","n_trajectories"],"title":"SamplePayload","description":"Trajectory sampling request for the estimator panels."},"SituationPayload":{"properties":{"payoffs":{"items":{},"type":"array","title":"Payoffs","description":"One nested-list payoff tensor per party."},"you":{"type":"integer","minimum":0.0,"title":"You","default":0},"precision":{"type":"number","maximum":1000.0,"exclusiveMinimum":0.0,"title":"Precision","default":1.0},"actions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Actions"},"rival_actions":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Rival Actions"},"players":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Players"},"ladder":{"anyOf":[{"items":{"type":"number"},"type":"array","maxItems":32},{"type":"null"}],"title":"Ladder"},"diagnostics":{"type":"boolean","title":"Diagnostics","default":false}},"type":"object","required":["payoffs"],"title":"SituationPayload","description":"A payoff table, whose player you are, and how sharp you think everyone is."},"ToolkitRationalityPayload":{"properties":{"payoff_matrices":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Payoff Matrices"},"counts":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Counts"},"lam_min":{"type":"number","title":"Lam Min","default":0.05},"lam_max":{"type":"number","title":"Lam Max","default":20.0}},"type":"object","required":["payoff_matrices","counts"],"title":"ToolkitRationalityPayload"},"ToolkitReciprocityPayload":{"properties":{"chi":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Chi"},"chi_se":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Chi Se"}},"type":"object","required":["chi"],"title":"ToolkitReciprocityPayload"},"ToolkitSeriesPayload":{"properties":{"series":{"items":{"type":"number"},"type":"array","title":"Series"},"n_bins":{"type":"integer","title":"N Bins","default":3},"n_surrogates":{"type":"integer","title":"N Surrogates","default":150},"alpha_level":{"type":"number","title":"Alpha Level","default":0.01},"seed":{"type":"integer","title":"Seed","default":0}},"type":"object","required":["series"],"title":"ToolkitSeriesPayload"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}