{"openapi":"3.1.0","info":{"title":"Reliafy API","version":"1.1.0","description":"Every Reliafy MCP tool action over REST: POST /api/v1/{tool}/{action} with the action's arguments as a JSON object (POST /api/v1/{tool} for a tool without actions). Results and refusals are the same as over MCP. Long-running calculations answer with a job_id: poll POST /api/v1/get/job with {\"id\": job_id}. Operations tagged rest_only have no MCP twin."},"servers":[{"url":"https://reliafy.com"}],"components":{"schemas":{"Error":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"]},"life_data_analysis__CoxOptions":{"properties":{"tie_method":{"anyOf":[{"enum":["efron","breslow","exact","kalbfleisch-prentice"],"type":"string"},{"type":"null"}],"default":null,"description":"How tied failure times are handled (default efron).","title":"Tie Method"},"strata_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A dataset column to stratify on: each of its levels gets its own baseline hazard and no coefficient (site, batch). Not one of the covariates.","title":"Strata Column"},"cluster_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A dataset column grouping rows that aren't independent (a unit or site id): diagnostics.robust then gives standard errors clustered by it.","title":"Cluster Column"}},"title":"CoxOptions","type":"object"},"life_data_analysis__DemandBatch":{"properties":{"demands":{"description":"Demands (trials) in this batch: proof tests, starts, activations.","minimum":1,"title":"Demands","type":"integer"},"failures":{"description":"Failures among those demands (0 to demands).","minimum":0,"title":"Failures","type":"integer"},"label":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Optional name for the batch, e.g. a site, lot or test campaign.","title":"Label"}},"required":["demands","failures"],"title":"DemandBatch","type":"object"},"life_data_analysis__Param":{"properties":{"name":{"description":"SurPyval parameter name, e.g. alpha, beta, mu, sigma, failure_rate.","title":"Name","type":"string"},"value":{"title":"Value","type":"number"}},"required":["name","value"],"title":"Param","type":"object"},"strategy__CalendarShut":{"properties":{"name":{"description":"The shut's name, e.g. annual shutdown.","title":"Name","type":"string"},"cost":{"description":"What replacing the part at this shut costs.","minimum":0,"title":"Cost","type":"number"},"every":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"It comes every this many every_unit...","title":"Every"},"every_unit":{"anyOf":[{"enum":["days","weeks","months","years"],"type":"string"},{"type":"null"}],"default":null,"description":"... (default days)","title":"Every Unit"},"start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"... from this date (YYYY-MM-DD; default today).","title":"Start"},"dates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Or its dates (YYYY-MM-DD) instead of every.","title":"Dates"}},"required":["name","cost"],"title":"CalendarShut","type":"object"},"strategy__Param":{"properties":{"name":{"description":"SurPyval parameter name, e.g. alpha, beta, mu, sigma, failure_rate.","title":"Name","type":"string"},"value":{"title":"Value","type":"number"}},"required":["name","value"],"title":"Param","type":"object"},"rbd_analysis__BlockState":{"properties":{"failed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Non-repairable: true if the block has failed (it stays failed).","title":"Failed"},"down":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True: the block is down now (in a repair).","title":"Down"},"since":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"With down: how long it has been down so far (diagram unit; 0 = just failed).","title":"Since"},"age":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A running block: time since it was new or last renewed (diagram unit).","title":"Age"}},"title":"BlockState","type":"object"},"models__CoxOptions":{"properties":{"tie_method":{"anyOf":[{"enum":["efron","breslow","exact","kalbfleisch-prentice"],"type":"string"},{"type":"null"}],"default":null,"description":"How tied failure times are handled (default efron).","title":"Tie Method"},"strata_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A dataset column to stratify on: each of its levels gets its own baseline hazard and no coefficient (site, batch). Not one of the covariates.","title":"Strata Column"},"cluster_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A dataset column grouping rows that aren't independent (a unit or site id): diagnostics.robust then gives standard errors clustered by it.","title":"Cluster Column"}},"title":"CoxOptions","type":"object"},"models__DemandBatch":{"properties":{"demands":{"description":"Demands (trials) in this batch: proof tests, starts, activations.","minimum":1,"title":"Demands","type":"integer"},"failures":{"description":"Failures among those demands (0 to demands).","minimum":0,"title":"Failures","type":"integer"},"label":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Optional name for the batch, e.g. a site, lot or test campaign.","title":"Label"}},"required":["demands","failures"],"title":"DemandBatch","type":"object"},"models__Param":{"properties":{"name":{"description":"SurPyval parameter name, e.g. alpha, beta, mu, sigma, failure_rate.","title":"Name","type":"string"},"value":{"title":"Value","type":"number"}},"required":["name","value"],"title":"Param","type":"object"},"rbd__AddCcfOp":{"additionalProperties":false,"properties":{"op":{"const":"add_ccf","type":"string"},"members":{"description":"2+ component block ids not already in a group.","items":{"type":"string"},"minItems":2,"type":"array"},"beta":{"description":"Beta factor: shared-cause fraction of each member's failures, 0 < beta < 1.","type":"number"},"basis":{"anyOf":[{"enum":["rate","probability"],"type":"string"},{"type":"null"}],"description":"What beta is a fraction of: 'rate' (default) splits each member's failure rate and holds over the whole life; 'probability' is the PRA basic-event split, for small failure probabilities only (a short mission or proof-test interval) — over a lifetime it overstates the group's reliability and gives no MTTF."},"mgl":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"description":"Groups of 3+: the multiple Greek letter model's letters after beta — [gamma] for 3 members, [gamma, delta] for 4, … — each 0 to 1 (gamma = the chance a shared failure takes at least three). Omit for the beta factor (a shared cause takes the whole group)."},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Group id (default ccf-1, ccf-2, …)."}},"required":["op","members","beta"],"title":"AddCcfOp","type":"object"},"rbd__AddNodeOp":{"additionalProperties":false,"properties":{"op":{"const":"add_node","type":"string"},"node":{"$ref":"#/components/schemas/rbd__RbdNode","description":"The new block (compact node, as rbd create). Its id must be new."},"between":{"anyOf":[{"items":{"type":"string"},"maxItems":2,"minItems":2,"type":"array"},{"type":"null"}],"description":"[source, target]: splice into that existing edge (source -> new -> target)."},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"In series right after this node (takes over its outgoing edges)."},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"In series right before this node (takes over its incoming edges)."},"parallel_to":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"In parallel with this block (copies its incoming and outgoing edges)."}},"required":["op","node"],"title":"AddNodeOp","type":"object"},"rbd__BlockCosts":{"additionalProperties":false,"properties":{"repair":{"anyOf":[{"type":"number"},{"$ref":"#/components/schemas/rbd__CostRange"},{"type":"null"}],"default":null,"description":"Per failure (labour); a number or {min, max} drawn uniformly.","title":"Repair"},"replace":{"anyOf":[{"type":"number"},{"$ref":"#/components/schemas/rbd__CostRange"},{"type":"null"}],"default":null,"description":"Per failure (parts); a number or {min, max}.","title":"Replace"},"downtime":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Per unit time THIS block is down.","title":"Downtime"},"acquisition":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Purchase price, once. rbd_analysis cheapest_design copies the blocks that have one.","title":"Acquisition"}},"title":"BlockCosts","type":"object"},"rbd__BlockModel":{"properties":{"distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution: weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic. Pair with params. Give this OR saved_model_id. 'mixture' = two (or more) failure modes in one population, e.g. infant mortality plus wear-out: give base_distribution_id and params numbered by mode, each mode's weight its share (the weights add to 1), e.g. weibull [alpha1, beta1, weight1, alpha2, beta2, weight2].","title":"Distribution Id"},"base_distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"distribution_id 'mixture' only: the distribution every mode follows (weibull, lognormal, …).","title":"Base Distribution Id"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__Param"},"type":"array"},{"type":"null"}],"default":null,"description":"By SurPyval name: weibull [alpha (scale), beta (shape)], exponential [failure_rate], normal/lognormal [mu, sigma], gamma [alpha, beta].","title":"Params"},"mean":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Instead of params: the model's mean in the diagram's unit — an MTBF for a life, an MTTR for a repair — with `given` for the shape or spread it leaves open. Turned into SurPyval params (stored as params) from SurPyval's own mean. exponential, weibull, lognormal, normal, gamma and loglogistic only.","title":"Mean"},"given":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"With mean: weibull {beta}, lognormal {sigma} (the log-spread), normal {sigma}, gamma {alpha}, loglogistic {beta} (above 1); exponential needs none.","title":"Given"},"saved_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved life model id (list kind models) instead of inline params: a parametric (or proportional-hazards) model — a saved mixture fit included — not a non-parametric one (Kaplan-Meier etc.), which RBD blocks don't take.","title":"Saved Model Id"},"placeholder":{"default":false,"description":"True ONLY for a guessed starting-point value the user must replace.","title":"Placeholder","type":"boolean"},"joint_unit":{"anyOf":[{"$ref":"#/components/schemas/rbd__JointUnit"},{"type":"null"}],"default":null,"description":"With a saved condition-based (joint) model: the unit this block is (non-repairable diagrams)."}},"title":"BlockModel","type":"object"},"rbd__CapacityLevel":{"additionalProperties":false,"description":"One level a block works at (#122).","properties":{"value":{"description":"The throughput at this level, in the diagram's capacity unit.","exclusiveMinimum":0,"title":"Value","type":"number"},"probability":{"description":"The share of its working time at this level.","exclusiveMinimum":0,"maximum":1,"title":"Probability","type":"number"}},"required":["value","probability"],"title":"CapacityLevel","type":"object"},"rbd__CostRange":{"properties":{"min":{"minimum":0,"title":"Min","type":"number"},"max":{"minimum":0,"title":"Max","type":"number"}},"required":["min","max"],"title":"CostRange","type":"object"},"rbd__CovariateSchedule":{"additionalProperties":false,"description":"One covariate's path over the diagram's time (#52).","properties":{"expression":{"anyOf":[{"maxLength":400,"type":"string"},{"type":"null"}],"default":null,"description":"Numeric covariate: its value as an expression in t (diagram time), changing in STEPS — t only through floor/ceil/'//' or a comparison. E.g. phases '60 if t < 1000 else (90 if t < 3000 else 75)', duty cycle '90 if t % 24 < 8 else 30', stepped ramp '60 + 5 * floor(t / 500)', geometric '60 * 1.1 ** floor(t / 1000)'. Names t, pi, e; functions sin cos tan exp log log2 sqrt floor ceil abs min max. Give this OR table.","title":"Expression"},"table":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__SchedulePhase"},"maxItems":50,"type":"array"},{"type":"null"}],"default":null,"description":"Phases instead: the value from each t on (first t = 0). Required for a categorical covariate.","title":"Table"},"period":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"With table: repeat the phases every period.","title":"Period"}},"title":"CovariateSchedule","type":"object"},"rbd__DiagramCosts":{"additionalProperties":false,"description":"A repairable diagram's own costs (#99, #219); 0 clears a field.","properties":{"downtime_rate":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost per unit time (diagram unit) the WHOLE system is down: lost production. rbd_analysis cheapest_design weighs extra copies against it (without it, copies only add cost).","title":"Downtime Rate"},"horizon":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"How long the system is owned (diagram unit), for the total cost of ownership; e.g. 87600 h = 10 years. rbd_analysis cheapest_design prices over it (its own horizon argument overrides it).","title":"Horizon"},"discount_rate":{"anyOf":[{"maximum":100,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Percent a year, e.g. 7 for 7% (not 0.07): the total cost of ownership is then a present value. Needs a calendar time unit (hours … years).","title":"Discount Rate"}},"title":"DiagramCosts","type":"object"},"rbd__EdgeOp":{"additionalProperties":false,"properties":{"op":{"enum":["add_edge","remove_edge"],"type":"string"},"source":{"type":"string"},"target":{"type":"string"}},"required":["op","source","target"],"title":"EdgeOp","type":"object"},"rbd__JointUnit":{"description":"One unit of a joint model: a running unit's id, or its values.","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A running unit of the model (list kind models, model_type joint).","title":"Id"},"age":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Or: its age now, since new.","title":"Age"},"readings":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"maxItems":2000,"type":"array"},{"type":"null"}],"default":null,"description":"Its readings, [[age, value]].","title":"Readings"},"covariates":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"Its covariates, {name: value}.","title":"Covariates"}},"title":"JointUnit","type":"object"},"rbd__MaintenanceGroup":{"additionalProperties":false,"properties":{"setup_cost":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Charged once per group stop (shared mobilisation).","title":"Setup Cost"},"system_down":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Every system outage is also a stop of the group.","title":"System Down"}},"title":"MaintenanceGroup","type":"object"},"rbd__MissionPhase":{"additionalProperties":false,"description":"One phase of a phased mission (#160), in order.","properties":{"name":{"description":"The phase's name, e.g. 'Take-off' (distinct).","minLength":1,"title":"Name","type":"string"},"duration":{"description":"How long it lasts (diagram unit).","minimum":0,"title":"Duration","type":"number"},"not_needed":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Block ids this phase doesn't need (they still age and can fail, and stay failed for later phases).","title":"Not Needed"},"votes":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"default":null,"description":"knode id -> working inputs it needs in this phase (instead of its n), e.g. both engines at take-off.","title":"Votes"}},"required":["name","duration"],"title":"MissionPhase","type":"object"},"rbd__NetworkTerminals":{"additionalProperties":false,"description":"An undirected network's two terminals (#160).","properties":{"source":{"default":"input","description":"First terminal: a node id (default the input node).","title":"Source","type":"string"},"target":{"default":"output","description":"Second terminal: a node id (default the output node).","title":"Target","type":"string"}},"title":"NetworkTerminals","type":"object"},"rbd__OutageColumns":{"additionalProperties":false,"properties":{"asset":{"description":"Column naming the asset/block of each outage (a block's label or node id).","title":"Asset","type":"string"},"start":{"description":"Column with when the outage started.","title":"Start","type":"string"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column with when it ended (blank cell = still down).","title":"End"},"duration":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Instead of end: a column with how long it lasted (in `unit`).","title":"Duration"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional column with the reason or failure mode.","title":"Reason"},"planned":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional column: yes/no (planned/unplanned, 1/0) for planned maintenance outages.","title":"Planned"}},"required":["asset","start"],"title":"OutageColumns","type":"object"},"rbd__Param":{"properties":{"name":{"description":"SurPyval parameter name, e.g. alpha, beta, mu, sigma, failure_rate.","title":"Name","type":"string"},"value":{"title":"Value","type":"number"}},"required":["name","value"],"title":"Param","type":"object"},"rbd__Preventive":{"additionalProperties":false,"properties":{"policy":{"default":"age","description":"age = replaced at this age (a failure restarts the clock); block = at every multiple of the interval; condition = inspected every interval (in no time) and replaced when its chance of failing before the next inspection exceeds threshold.","enum":["age","block","condition"],"title":"Policy","type":"string"},"interval":{"description":"Replacement interval (age/block) or inspection interval (condition).","exclusiveMinimum":0,"title":"Interval","type":"number"},"duration":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Time off-line per replacement; 0/omit = instant.","title":"Duration"},"cost":{"anyOf":[{"type":"number"},{"$ref":"#/components/schemas/rbd__CostRange"},{"type":"null"}],"default":null,"description":"Per replacement.","title":"Cost"},"threshold":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"condition only (required): the probability of failing before the next inspection above which it's replaced, e.g. 0.05.","title":"Threshold"},"inspection_cost":{"anyOf":[{"type":"number"},{"$ref":"#/components/schemas/rbd__CostRange"},{"type":"null"}],"default":null,"description":"condition only: per condition inspection.","title":"Inspection Cost"},"opportunity":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"age only, with maintenance_group: renewed early at a stop of its group once at least this old (0 to interval).","title":"Opportunity"}},"required":["interval"],"title":"Preventive","type":"object"},"rbd__Production":{"additionalProperties":false,"description":"The diagram's demand for the production availability (#122).","properties":{"demand":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"What the system is asked to deliver, in the blocks' capacity unit; 0 clears it.","title":"Demand"},"unit":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"The capacity unit, e.g. 'kW' or 'm3/h'.","title":"Unit"},"period":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Repairable: the time (diagram unit) production is counted over from new, e.g. 8760 h for a year — rbd_analysis analyze then gives the output lost over it. Non-repairable: the time the capacity is read at. 0 clears it.","title":"Period"}},"title":"Production","type":"object"},"rbd__ProofTest":{"additionalProperties":false,"properties":{"interval":{"description":"Proof-test interval.","exclusiveMinimum":0,"title":"Interval","type":"number"},"duration":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Time off-line per test; 0/omit = instant (exact values need instant tests and instant repair).","title":"Duration"},"cost":{"anyOf":[{"type":"number"},{"$ref":"#/components/schemas/rbd__CostRange"},{"type":"null"}],"default":null,"description":"Per test.","title":"Cost"},"offset":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Time of the first test, 0 to < interval: stagger redundant channels' tests (e.g. interval/2).","title":"Offset"},"coverage":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Proof-test coverage: the fraction of failures a test finds (default 1). Below 1 needs full_test.","title":"Coverage"},"full_test":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"With coverage < 1: the interval of the full test that finds every failure (a whole multiple of interval).","title":"Full Test"}},"required":["interval"],"title":"ProofTest","type":"object"},"rbd__RbdEdge":{"properties":{"source":{"title":"Source","type":"string"},"target":{"title":"Target","type":"string"}},"required":["source","target"],"title":"RbdEdge","type":"object"},"rbd__RbdNode":{"properties":{"id":{"description":"Unique node id. The diagram needs exactly one 'input' and one 'output' node.","title":"Id","type":"string"},"type":{"description":"component = one block; series/parallel = n identical blocks sharing one model; knode = k-of-n voting gate (n = required, k = branches feeding it); standby = spare(s) idle until the running unit fails (repairable: identical units, each repaired after it fails); subsystem = embed a saved RBD. Repairable diagrams take component, standby and knode (a vote can sit anywhere, e.g. two 2-of-3 stages in series).","enum":["input","output","component","series","parallel","knode","standby","subsystem"],"title":"Type","type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Label"},"model":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockModel"},{"type":"null"}],"default":null,"description":"Life model (component, series, parallel, standby)."},"repair":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockModel"},{"type":"null"}],"default":null,"description":"Repairable diagrams only: time-to-repair distribution (component, standby)."},"n":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"series/parallel: number of identical units; knode: number REQUIRED to work.","title":"N"},"k":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"knode: number of branches feeding the gate. standby: number of units RUNNING (default 1), e.g. k=2 with spares=1 for a 2-of-3 duty/standby train; warm spares need k=1 (no exact figures otherwise), and a spare's own model works with k up to 2.","title":"K"},"spares":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"standby: number of spares.","title":"Spares"},"cold":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"standby: true = cold (spares don't age while idle).","title":"Cold"},"dormancy":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"standby: how fast an idle spare ages relative to a running one — 0 cold, 1 hot, in between warm (e.g. 0.2 for a spare kept warm and pressurised). Overrides `cold`.","title":"Dormancy"},"subsystem_rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"subsystem: the saved RBD id to embed.","title":"Subsystem Rbd Id"},"instant_repair":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Repairable component: repaired in zero time (still fails and costs, never down); no repair model needed.","title":"Instant Repair"},"costs":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockCosts"},{"type":"null"}],"default":null,"description":"Repairable component or standby group: its costs."},"preventive":{"anyOf":[{"$ref":"#/components/schemas/rbd__Preventive"},{"type":"null"}],"default":null,"description":"Repairable component: scheduled (age/block) or condition-based replacement. Not with inspection."},"inspection":{"anyOf":[{"$ref":"#/components/schemas/rbd__ProofTest"},{"type":"null"}],"default":null,"description":"Repairable component: its failures are HIDDEN until a proof test finds them (any life model). Not with preventive."},"maintenance_group":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Repairable component: a maintenance group name — members share the group's set-up cost (rbd create/set maintenance_groups) and, with preventive.opportunity, are renewed early at its stops.","title":"Maintenance Group"},"crew_priority":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Repairable component or standby group: place in the repair-crew queue, higher first (default 0).","title":"Crew Priority"},"repair_one_at_a_time":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Repairable standby group: one repairer of its own, so its failed units are repaired one at a time (otherwise each failed unit is a job for the diagram's repair crews). No costs on such a group.","title":"Repair One At A Time"},"repair_quality":{"anyOf":[{"$ref":"#/components/schemas/rbd__RepairQuality"},{"type":"null"}],"default":null,"description":"Repairable component: how good each repair is — imperfect repair (Kijima I/II with q) and replacement at the N-th failure. Such a block has no exact long-run figures: rbd_analysis analyze simulates them (and says why). Not on standby groups, blocks replaced on condition or common-cause members' exact figures. Not yet with a mixture (two-failure-mode) life: that can't be simulated quickly, so it's refused."},"capacity":{"anyOf":[{"type":"number"},{"items":{"$ref":"#/components/schemas/rbd__CapacityLevel"},"type":"array"},{"type":"null"}],"default":null,"description":"Component or standby block: its throughput while it works (e.g. 250 for a 250 kW inverter), for the production availability rbd_analysis analyze reports; or, for a block that works at several levels, a list of {value, probability} adding up to 1 (e.g. a pump at full rate 80% of its up time and half rate 20%). A series chain carries the least of its blocks' capacities, a parallel group their sum; a block without one limits nothing. Set the demand with rbd create production (or rbd edit set production).","title":"Capacity"},"covariate_schedules":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd__CovariateSchedule"},"type":"object"},{"type":"null"}],"default":null,"description":"Non-repairable component/series/parallel block on a saved covariate (regression) model: covariates that change over time, by name, e.g. {\"load_pct\": {\"expression\": \"90 if t % 24 < 8 else 30\"}}. The block's reliability follows the model along that path (values clipped to the model's fitted range, with a warning); covariates left out stay at their defaults.","title":"Covariate Schedules"}},"required":["id","type"],"title":"RbdNode","type":"object"},"rbd__RemoveCcfOp":{"additionalProperties":false,"properties":{"op":{"const":"remove_ccf","type":"string"},"id":{"type":"string"}},"required":["op","id"],"title":"RemoveCcfOp","type":"object"},"rbd__RemoveNodeOp":{"additionalProperties":false,"properties":{"op":{"const":"remove_node","type":"string"},"id":{"type":"string"},"reconnect":{"default":"auto","description":"auto = rejoin neighbours the removal disconnects (a series gap closes; removing one of parallel blocks adds nothing). none = just drop it and its edges.","enum":["auto","none"],"type":"string"}},"required":["op","id"],"title":"RemoveNodeOp","type":"object"},"rbd__RepairQuality":{"additionalProperties":false,"properties":{"model":{"description":"perfect = every repair leaves it as good as new (the default); kijima1 / kijima2 = imperfect repair by Kijima's virtual age: a repair takes the age a unit gained since its last repair (I) or its whole age (II) down to q times it.","enum":["perfect","kijima1","kijima2"],"title":"Model","type":"string"},"q":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"kijima1/kijima2: the restoration factor, 0 as good as new to 1 as bad as old (minimal repair).","title":"Q"},"replace_after":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"kijima1/kijima2 with q > 0: replace the unit, as new, at its N-th failure since it was renewed (its repair cost is charged at every failure, its replacement cost at the replacement).","title":"Replace After"}},"required":["model"],"title":"RepairQuality","type":"object"},"rbd__SchedulePhase":{"properties":{"t":{"description":"When this phase starts (diagram time unit); the first is 0.","minimum":0,"title":"T","type":"number"},"value":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"The covariate's value (a categorical covariate's level) from t on.","title":"Value"}},"required":["t","value"],"title":"SchedulePhase","type":"object"},"rbd__SetOp":{"additionalProperties":false,"properties":{"op":{"const":"set","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Relabels the unit; parameters are not rescaled."},"repairable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"repair_crews":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"description":"Repair crews shared by all blocks; 0 = as many as needed."},"maintenance_groups":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd__MaintenanceGroup"},"type":"object"},{"type":"null"}],"description":"Replaces the maintenance groups' options ({} clears them)."},"safety_function":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"target_sil":{"anyOf":[{"maximum":4,"minimum":0,"type":"integer"},{"type":"null"}],"description":"0 clears it."},"costs":{"anyOf":[{"$ref":"#/components/schemas/rbd__DiagramCosts"},{"type":"null"}],"description":"Repairable: the diagram's own costs — downtime_rate, horizon, discount_rate; fields left out are kept, 0 clears one. A block's costs (repair, replace, downtime, acquisition) are update_node costs."},"production":{"anyOf":[{"$ref":"#/components/schemas/rbd__Production"},{"type":"null"}],"description":"The demand, capacity unit and period for the production availability; fields left out are kept, 0 or \"\" clears one. Blocks' capacities are update_node capacity."},"phases":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__MissionPhase"},"maxItems":50,"type":"array"},{"type":"null"}],"description":"Non-repairable: replaces the phased mission's phases ([] clears them)."},"network":{"anyOf":[{"type":"boolean"},{"$ref":"#/components/schemas/rbd__NetworkTerminals"},{"type":"null"}],"description":"true or {source, target}: read the diagram as an undirected network between those terminals (default input and output); false: back to a block diagram."}},"required":["op"],"title":"SetOp","type":"object"},"rbd__Stage":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Label"},"components":{"description":"Components in PARALLEL within this stage.","items":{"$ref":"#/components/schemas/rbd__StageComponent"},"minItems":1,"title":"Components","type":"array"},"k_of_n":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Components required (k of n), 1 to the stage's component count. Omit or 1 = any one suffices; = component count = all required.","title":"K Of N"},"common_cause_beta":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Stages with 2+ components: beta-factor common-cause coupling for this stage's redundant components, 0 ≤ beta < 1 (typically 0.01–0.2). Repairable diagrams follow it over time where the members' lives are exponential.","title":"Common Cause Beta"},"common_cause_basis":{"anyOf":[{"enum":["rate","probability"],"type":"string"},{"type":"null"}],"default":null,"description":"With common_cause_beta: what beta is a fraction of. 'rate' (default) splits each member's failure rate and holds over the whole life; 'probability' is the PRA basic-event split, only for small failure probabilities (a short mission or proof-test interval) — over a lifetime it overstates the group's reliability and rbd_analysis analyze gives no MTTF.","title":"Common Cause Basis"}},"required":["components"],"title":"Stage","type":"object"},"rbd__StageComponent":{"properties":{"label":{"title":"Label","type":"string"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution id (see params). Give this OR model_id.","title":"Distribution"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__Param"},"type":"array"},{"type":"null"}],"default":null,"title":"Params"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved plain life model id instead of inline params.","title":"Model Id"},"repair_distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Repairable RBDs only: time-to-repair distribution id.","title":"Repair Distribution"},"repair_params":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__Param"},"type":"array"},{"type":"null"}],"default":null,"title":"Repair Params"},"placeholder":{"default":false,"description":"True ONLY for guessed starting-point values.","title":"Placeholder","type":"boolean"},"costs":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockCosts"},{"type":"null"}],"default":null,"description":"Repairable RBDs only: the block's costs."},"preventive":{"anyOf":[{"$ref":"#/components/schemas/rbd__Preventive"},{"type":"null"}],"default":null,"description":"Repairable RBDs only: scheduled (age/block) or condition-based replacement. Not with inspection."},"inspection":{"anyOf":[{"$ref":"#/components/schemas/rbd__ProofTest"},{"type":"null"}],"default":null,"description":"Repairable RBDs only: failures HIDDEN until a proof test finds them (e.g. a safety function's channels). Not with preventive."}},"required":["label"],"title":"StageComponent","type":"object"},"rbd__UpdateNodeOp":{"additionalProperties":false,"properties":{"op":{"const":"update_node","type":"string"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"ids":{"anyOf":[{"items":{"type":"string"},"minItems":1,"type":"array"},{"type":"null"}],"description":"Apply the same change to several nodes."},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"model":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockModel"},{"type":"null"}]},"repair":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockModel"},{"type":"null"}]},"n":{"anyOf":[{"type":"integer"},{"type":"null"}]},"k":{"anyOf":[{"type":"integer"},{"type":"null"}]},"spares":{"anyOf":[{"type":"integer"},{"type":"null"}]},"cold":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"subsystem_rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"instant_repair":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"costs":{"anyOf":[{"$ref":"#/components/schemas/rbd__BlockCosts"},{"type":"null"}],"description":"Replaces the block's costs."},"preventive":{"anyOf":[{"$ref":"#/components/schemas/rbd__Preventive"},{"type":"null"}],"description":"Replaces the schedule (drops inspection)."},"inspection":{"anyOf":[{"$ref":"#/components/schemas/rbd__ProofTest"},{"type":"null"}],"description":"Replaces the proof tests (drops preventive)."},"maintenance_group":{"anyOf":[{"type":"string"},{"type":"null"}]},"crew_priority":{"anyOf":[{"type":"number"},{"type":"null"}]},"repair_one_at_a_time":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"repair_quality":{"anyOf":[{"$ref":"#/components/schemas/rbd__RepairQuality"},{"type":"null"}],"description":"Replaces the block's repair quality."},"capacity":{"anyOf":[{"type":"number"},{"items":{"$ref":"#/components/schemas/rbd__CapacityLevel"},"type":"array"},{"type":"null"}],"description":"Replaces the capacity."},"covariate_schedules":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd__CovariateSchedule"},"type":"object"},{"type":"null"}],"description":"Replaces the block's covariate schedules (#52; see rbd create's node)."},"clear":{"anyOf":[{"items":{"enum":["costs","preventive","inspection","maintenance_group","crew_priority","instant_repair","repair_one_at_a_time","repair_quality","capacity","covariate_schedules"],"type":"string"},"type":"array"},{"type":"null"}],"description":"Remove these block settings."}},"required":["op"],"title":"UpdateNodeOp","type":"object"},"rcm__RcmDecision":{"additionalProperties":false,"properties":{"outcome":{"description":"on_condition: monitor a condition and act before it fails; fixed_interval: scheduled replacement or restoration; rtf: run to failure (needs rtf_basis); failure_finding: a periodic check of a hidden function; redesign; accept: no scheduled maintenance.","enum":["on_condition","fixed_interval","rtf","failure_finding","redesign","accept"],"title":"Outcome","type":"string"},"rtf_basis":{"anyOf":[{"enum":["random","uneconomic"],"type":"string"},{"type":"null"}],"default":null,"description":"rtf only: random (the failures are random) or uneconomic (prevention doesn't pay).","title":"Rtf Basis"},"task":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"The task, e.g. 'Vibration analysis of the drive-end bearing'.","title":"Task"},"interval":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"How often the task is done, in interval_unit. An on_condition, fixed_interval or failure_finding decision with an interval becomes a scheduled task in Reliafy Maintenance.","title":"Interval"},"interval_unit":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"hours, days, weeks, months, years, cycles, km, … (with interval).","title":"Interval Unit"},"notes":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Why this decision, or anything else.","title":"Notes"},"evidence":{"anyOf":[{"$ref":"#/components/schemas/rcm__RcmEvidence"},{"type":"null"}],"default":null,"description":"Optional: the saved analysis that justifies the decision. Reliafy checks it on every read (supported / contradicted / …)."},"check":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Read-only: get kind rcm_study's evidence check. Ignored when writing.","title":"Check"}},"required":["outcome"],"title":"RcmDecision","type":"object"},"rcm__RcmEvidence":{"additionalProperties":false,"properties":{"type":{"description":"model: a saved life model (list kind models) — evidence for rtf with rtf_basis random; strategy_analysis: a saved optimal-replacement or failure-finding analysis — for fixed_interval, failure_finding or rtf uneconomic; degradation_model: for on_condition.","enum":["model","strategy_analysis","degradation_model"],"title":"Type","type":"string"},"id":{"description":"The linked item's id (the user's own or a sample).","maxLength":64,"minLength":1,"title":"Id","type":"string"}},"required":["type","id"],"title":"RcmEvidence","type":"object"},"rcm__RcmFailure":{"additionalProperties":false,"properties":{"id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Its id from get kind rcm_study, to change that node with rcm update (mode merge). Omit for a new one.","title":"Id"},"text":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"The functional failure, e.g. 'Fails to pump at all'. Required for a new one.","title":"Text"},"modes":{"description":"Its failure modes.","items":{"$ref":"#/components/schemas/rcm__RcmMode"},"title":"Modes","type":"array"}},"title":"RcmFailure","type":"object"},"rcm__RcmFunction":{"additionalProperties":false,"properties":{"id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Its id from get kind rcm_study, to change that node with rcm update (mode merge). Omit for a new one.","title":"Id"},"text":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"The function, e.g. 'Pump water at 50 l/s'. Required for a new one.","title":"Text"},"standard":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Optional performance standard.","title":"Standard"},"failures":{"description":"Its functional failures.","items":{"$ref":"#/components/schemas/rcm__RcmFailure"},"title":"Failures","type":"array"}},"title":"RcmFunction","type":"object"},"rcm__RcmMode":{"additionalProperties":false,"properties":{"id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Its id from get kind rcm_study, to change that node with rcm update (mode merge). Omit for a new one.","title":"Id"},"text":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"The failure mode (what causes the functional failure), e.g. 'Bearing seizes'. Required for a new mode.","title":"Text"},"effects":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"What happens when it occurs.","title":"Effects"},"consequence":{"anyOf":[{"enum":["safety","environmental","operational","non_operational","hidden"],"type":"string"},{"type":"null"}],"default":null,"description":"The consequence category (RCM): hidden for a failure not evident in normal operation.","title":"Consequence"},"notes":{"anyOf":[{"maxLength":2000,"type":"string"},{"type":"null"}],"default":null,"description":"Notes on the mode, e.g. FMEA scores ('Severity 8 · Occurrence 4').","title":"Notes"},"decision":{"anyOf":[{"$ref":"#/components/schemas/rcm__RcmDecision"},{"type":"null"}],"default":null,"description":"The maintenance decision. Omit if not decided yet."}},"title":"RcmMode","type":"object"},"sharing__ReportItem":{"properties":{"kind":{"description":"The item's kind, as for sharing create_link.","enum":["model","dataset","rbd","degradation_model","strategy_analysis","rcm_study","fleet","recurrent_model"],"title":"Kind","type":"string"},"id":{"description":"The id of one of the user's own items of that kind, or of a shared sample.","title":"Id","type":"string"},"note":{"anyOf":[{"maxLength":3000,"type":"string"},{"type":"null"}],"default":null,"description":"A short note shown above this item's section (plain text).","title":"Note"}},"required":["kind","id"],"title":"ReportItem","type":"object"}},"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API token (rlf_…) from Settings > API access, or a session."}}},"security":[{"bearer":[]}],"paths":{"/api/v1/guide":{"post":{"operationId":"guide","summary":"Short how-tos for Reliafy, one topic at a time, naming the tools and actions to use and the conventions to follow","description":"Short how-tos for Reliafy, one topic at a time, naming the tools and actions to use and the conventions to follow. Read the topic before a task you haven't done here yet. Topics: life_data (Censoring, fitting, saved models, bounds, requirements and comparing groups); units (Time units for data, models and diagrams); accelerated (Accelerated life tests: fit, extrapolate, bounds); test_planning (Planning tests: demonstration, sequential, life, accelerated and before/after comparisons); repairable (Recurrent-event (repairable-system) models); rbds (Building and editing reliability block diagrams: the structure rules); rbd_analysis (Analysing RBDs: figures, simulation, jobs and the other analyses); strategy (Replacement (also over a shut calendar), proof-test and overhaul intervals; shape uncertainty); fleets (Fleet failure forecasts and their email alerts (Pro)); uploads (Sending files: the upload link, its fallbacks, inspecting and importing); rcm (RCM / FMEA studies as structured JSON); sharing (Share links and reports: read-only pages anyone with the URL can open); workspace (Reading, tidying and deleting saved items; what changed); plans (Free, Pro and the limits; what to do when one stops a call).","tags":["guide"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"topic":{"anyOf":[{"enum":["life_data","units","accelerated","test_planning","repairable","rbds","rbd_analysis","strategy","fleets","uploads","rcm","sharing","workspace","plans"],"type":"string"},{"type":"null"}],"default":null,"description":"The how-to to read; leave it out for the list of topics.","title":"Topic"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"guide","x-reliafy-selector":null,"x-reliafy-action":null,"x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/model":{"post":{"operationId":"get.model","summary":"A saved model in full, life or recurrent","description":"A saved model in full, life or recurrent. Life: parameters with 95% CIs, goodness of fit, metrics and `life` (B1–B50 and MTTF with one-sided 90% lower bounds); regression models add `validation` (Harrell's C, Brier score, time-dependent AUC) and `diagnostics` (the proportional-hazards test with a plain reading; Cox PH: robust errors, ties, strata); by failure mode (competing_risks): each mode's share with 95% intervals and Gray's test. Recurrent: the growth verdict on β's 95% interval, ROCOF and MTBF with bounds, the demonstrated MTBF's lower bound, trend and goodness-of-fit tests, systems_vs_model, and where they apply covariate_effects, repair_effectiveness, repair_test, next_failure_by_system and by_cause.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"model","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/dataset":{"post":{"operationId":"get.dataset","summary":"A dataset's name, notes, columns with types, row_count and a page of rows (offset, limit); next_offset pages on","description":"A dataset's name, notes, columns with types, row_count and a page of rows (offset, limit); next_offset pages on. Summarise rather than read every row when you don't need them.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"First row to return (0-based).","title":"Offset"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Rows to return, at most 500.","title":"Limit"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"dataset","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/rbd":{"post":{"operationId":"get.rbd","summary":"A diagram's structure in the compact node form rbd create takes (nodes with their models, edges, unit), with the blocks still on placeholder models.","description":"A diagram's structure in the compact node form rbd create takes (nodes with their models, edges, unit), with the blocks still on placeholder models.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"rbd","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/rbd_run":{"post":{"operationId":"get.rbd_run","summary":"One availability simulation in full: its results with intervals, the inputs it ran on (and whether the diagram changed since), engine versions, the precision reached and what was quoted before it ran","description":"One availability simulation in full: its results with intervals, the inputs it ran on (and whether the diagram changed since), engine versions, the precision reached and what was quoted before it ran. To run it again: rbd_analysis analyze with recompute=true.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"},"include_curve":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the simulated availability over time A(t) with its confidence band (t, availability, lower, upper).","title":"Include Curve"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"rbd_run","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/job":{"post":{"operationId":"get.job","summary":"A queued calculation (an availability simulation, a what-to-improve or interval search, an ALT's bootstrap bounds): status queued (queue_position), running, done (the result, as the action that queued","description":"A queued calculation (an availability simulation, a what-to-improve or interval search, an ALT's bootstrap bounds): status queued (queue_position), running, done (the result, as the action that queued it returns it) or failed (message). Call every few seconds until done; kept for a week.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"job","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/rcm_study":{"post":{"operationId":"get.rcm_study","summary":"An RCM study's worksheet in the form rcm create takes, with every node's id (for rcm update) and each decision's evidence check (read-only)","description":"An RCM study's worksheet in the form rcm create takes, with every node's id (for rcm update) and each decision's evidence check (read-only). Over 300 failure modes: an outline; function_id gives one function in full.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"},"function_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Just this function's failures and modes — for a large study, which otherwise comes back as an outline.","title":"Function Id"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"rcm_study","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/get/upload":{"post":{"operationId":"get.upload","summary":"An uploaded file before importing it: a workbook's sheets with header rows, columns, row counts, sample rows and a guessed mapping (looks_like); a diagram file's diagrams and block counts; a CSV's col","description":"An uploaded file before importing it: a workbook's sheets with header rows, columns, row counts, sample rows and a guessed mapping (looks_like); a diagram file's diagrams and block counts; a CSV's columns. Only the user's own uploads.","tags":["get"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The item's id (a job's job_id, an upload's upload_id).","title":"Id"}},"required":["id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"upload","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/get/account":{"post":{"operationId":"get.account","summary":"The plan and what's left: on Free the tool calls used and left this month and when they reset (Pro: unlimited); storage per kind against the plan's limits; whether simulation is included; how to upgra","description":"The plan and what's left: on Free the tool calls used and left this month and when they reset (Pro: unlimited); storage per kind against the plan's limits; whether simulation is included; how to upgrade. Never counted, and works when the allowance is used up.","tags":["get"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"get","x-reliafy-selector":"kind","x-reliafy-action":"account","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/models":{"post":{"operationId":"list.models","summary":"Saved models: id, name, kind, distribution, fitted params, time unit (model_type: life or recurrent)","description":"Saved models: id, name, kind, distribution, fitted params, time unit (model_type: life or recurrent). Call before referring to a model by id.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_type":{"anyOf":[{"enum":["all","life","recurrent","joint"],"type":"string"},{"type":"null"}],"default":null,"description":"all (default); life = life distributions (for reliability_at, the calculators and RBD blocks); recurrent = repairable-system (event history) models; joint = condition-based risk models (readings and failures).","title":"Model Type"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"models","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/datasets":{"post":{"operationId":"list.datasets","summary":"Saved datasets with their columns and row counts.","description":"Saved datasets with their columns and row counts.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"datasets","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/rbds":{"post":{"operationId":"list.rbds","summary":"Saved reliability block diagrams: id, name, repairable or not, unit and block count.","description":"Saved reliability block diagrams: id, name, repairable or not, unit and block count.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"rbds","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/rbd_runs":{"post":{"operationId":"list.rbd_runs","summary":"Availability simulations, newest first, from the app or any connector: who ran each and from where, status, method, runtime, replications, window and the simulated availability with its interval","description":"Availability simulations, newest first, from the app or any connector: who ran each and from where, status, method, runtime, replications, window and the simulated availability with its interval. Kept 7 days on Free, 90 on Pro (kept_days, retention).","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only this diagram's runs (an RBD id from list kind rbds).","title":"Rbd Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many runs, newest first.","title":"Limit"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"rbd_runs","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/fleets":{"post":{"operationId":"list.fleets","summary":"Fleet forecasts: in-service items run against one saved model (model_kind life, regression, alt or recurrent)","description":"Fleet forecasts: in-service items run against one saved model (model_kind life, regression, alt or recurrent). Pro.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"fleets","x-reliafy-scope":"read","x-reliafy-pro-only":true,"x-reliafy-heavy":false}},"/api/v1/list/fleet_alerts":{"post":{"operationId":"list.fleet_alerts","summary":"A fleet's email alert rules, each with its current value, checked whenever usage arrives through the ingest API","description":"A fleet's email alert rules, each with its current value, checked whenever usage arrives through the ingest API. Pro.","tags":["list"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"fleet_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A fleet id from list kind fleets.","title":"Fleet Id"}},"required":["fleet_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"fleet_alerts","x-reliafy-scope":"read","x-reliafy-pro-only":true,"x-reliafy-heavy":false}},"/api/v1/list/rcm_studies":{"post":{"operationId":"list.rcm_studies","summary":"RCM studies: id, name, the system each covers, and their function, failure mode and decision counts.","description":"RCM studies: id, name, the system each covers, and their function, failure mode and decision counts.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"rcm_studies","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/share_links":{"post":{"operationId":"list.share_links","summary":"The user's live share links, newest first, optionally for one kind (item_kind) or item (item_id): URL, item, label, protected, expiry","description":"The user's live share links, newest first, optionally for one kind (item_kind) or item (item_id): URL, item, label, protected, expiry. Passphrases are never shown again.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"item_kind":{"anyOf":[{"enum":["model","dataset","rbd","degradation_model","strategy_analysis","rcm_study","fleet","recurrent_model","report"],"type":"string"},{"type":"null"}],"default":null,"description":"Only links to items of this kind.","title":"Item Kind"},"item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Only links to this item (with item_kind).","title":"Item Id"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"share_links","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/list/workspace_changes":{"post":{"operationId":"list.workspace_changes","summary":"What changed in the user's workspace over a period (days, or since a date or the last visit), computed from what Reliafy stores, never estimated: new and changed items, refits whose B10 or MTTF moved,","description":"What changed in the user's workspace over a period (days, or since a date or the last visit), computed from what Reliafy stores, never estimated: new and changed items, refits whose B10 or MTTF moved, fleet forecasts that moved and alerts that fired (Pro), RCM evidence changes, simulations that moved. Start from `sentence`; report not_compared as unknown.","tags":["list"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"since":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"'last_visit' (since the user last opened Reliafy) or a date, e.g. '2026-09-01'. Overrides days.","title":"Since"},"days":{"anyOf":[{"maximum":366,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Look back this many days (default 30).","title":"Days"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"list","x-reliafy-selector":"kind","x-reliafy-action":"workspace_changes","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/fit":{"post":{"operationId":"life_data_analysis.fit","summary":"Fit a life distribution (SurPyval) to inline times or a saved dataset and report it: parameters with 95% CIs, goodness of fit, metrics, and `censoring`, the failures and censored units the fit used (c","description":"Fit a life distribution (SurPyval) to inline times or a saved dataset and report it: parameters with 95% CIs, goodness of fit, metrics, and `censoring`, the failures and censored units the fit used (check them against what the user said). Regression fits add validation and diagnostics, non-parametric ones `life`, competing_risks each failure mode's share. A fit that didn't converge leads with fit_ok false: don't quote it. Saves nothing (models fit keeps it). guide topic life_data has the options.","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; plan_life_test, plan_accelerated_test: weibull or lognormal.","title":"Distribution"},"data":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline failure/suspension times, one per unit (the interval's lower bound when data_right is given). Give this OR dataset_id.","title":"Data"},"data_right":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Interval censoring: each row's upper bound, with `data` as the lower bound — e.g. the inspection that found it failed, with `data` the last one it passed. Interval rows take flag 2; other rows repeat their time here. Without `censored`, equal bounds read as failures and unequal ones as intervals.","title":"Data Right"},"censored":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Per time in data: 0 = failed, 1 = still running, -1 = left-censored, 2 = interval-censored (the upper bound in data_right); omit when every time is a failure. compare_groups: 0 and 1 only.","title":"Censored"},"counts":{"anyOf":[{"items":{"type":"integer"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Optional count per row of `data` (identical units sharing that time and flag).","title":"Counts"},"trunc_left":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Left truncation (delayed entry): the age at which a unit came under observation, e.g. units already in service when records began. One number for every row, or one per row (null = not truncated). The fit conditions on survival to that age instead of treating the unit as new.","title":"Trunc Left"},"trunc_right":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Right truncation: the age beyond which a unit couldn't have been observed (a later failure would never have been recorded). One number for every row, or one per row (null = not truncated).","title":"Trunc Right"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the flags use the opposite convention (1 = failed, 0 = running): the 0/1 flags are flipped.","title":"C Invert"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data (fit_per_demand: a row per batch).","title":"Dataset Id"},"time_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding the times (required with dataset_id).","title":"Time Column"},"time_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Interval censoring: the column holding each row's upper bound, with time_column as the lower bound. Interval rows take flag 2; other rows repeat their time in both columns. Works for plain distributions and for parametric regression models with covariates (not Cox PH).","title":"Time Right Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column of censoring flags: 0 = failed, 1 = still running, -1 = left-, 2 = interval-censored (compare_groups: 0 and 1 only).","title":"Censor Column"},"count_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding counts.","title":"Count Column"},"trunc_left_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's left-truncation age (delayed entry: the age it came under observation; blank = not truncated).","title":"Trunc Left Column"},"trunc_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's right-truncation age (blank = not truncated).","title":"Trunc Right Column"},"covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"fit: Dataset covariate columns — regression (proportional-hazards etc.) distributions only; reliability_at: Proportional-hazards models only: covariate values by name (see get kind model). Any not given use the fit's default (the training-data mean); the response says which.","title":"Covariates"},"method":{"anyOf":[{"enum":["MLE","MPS","MPP","MSE","MOM","attribute","mtbf"],"type":"string"},{"type":"null"}],"default":null,"description":"fit: Fit method (default MLE, maximum likelihood): MPP = probability-plot (median-rank) regression, MPS = maximum product spacing, MSE = least squares against the empirical CDF, MOM = method of moments. MOM takes no censoring or truncation, MSE no truncation, and interval-censored data needs MLE or MSE; plan_demonstration_test: 'attribute' (binomial pass/fail, the default) or 'mtbf' (constant failure rate, total test time, chi-squared); plan_sequential_test: 'mtbf' (failures against total test time) or 'attribute' (failures against units tested).","title":"Method"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"},"include_mixtures":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"With distribution='best' only: let two-component Weibull and LogNormal mixtures compete with the single distributions (two failure modes in one dataset, an S-curve on probability paper). The single distributions keep their usual AIC ranking; BIC decides only whether the best mixture beats the best single distribution (then it is listed first, else the mixtures follow the singles), and selection_summary says so in plain words. A winning mixture comes with mixture_summary, the two modes in plain words. Slower, so off by default.","title":"Include Mixtures"},"covariate_units":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional: the unit of each covariate, e.g. {\"temp_C\": \"°C\", \"load\": \"kN\"} — regression fits only. Shown with the coefficients (per unit of the covariate) and the covariate inputs, and kept with a saved model.","title":"Covariate Units"},"cox_options":{"anyOf":[{"$ref":"#/components/schemas/life_data_analysis__CoxOptions"},{"type":"null"}],"default":null,"description":"cox_ph only, with a dataset: the tie method, a column to stratify on and a column to cluster the robust standard errors by."},"id_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Covariates that change over time (a pump's load stepping between levels; regression models and a dataset only): the column naming each item. Then each row is one stretch of an item's life — time_column its start and time_right_column its stop, with censor_column 0 on the stretch that ended in a failure and 1 otherwise — or, with time_column alone, a timeline: each row's covariates take effect at its time and hold until the item's next row, whose last row is the failure (0) or removal (1). The result adds `tvc`: the layout, the items, rows and failures, and a plain reading per coefficient; life_data_analysis reliability_at's covariate_schedule then evaluates it along a schedule.","title":"Id Column"},"causes":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Competing risks (distribution='competing_risks'): the failure mode of each time in `data`, null for a unit still running — e.g. [\"bearing\", \"seal\", null]. The modes compete: each mode's cumulative incidence is the chance of failing from it with the others acting.","title":"Causes"},"groups":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"fit: Competing risks only: a group per time in `data` (site, supplier). Adds Gray's test per failure mode — does each mode's chance differ between the groups?; compare_groups: Only these groups, in this order (default: all, at most 12).","title":"Groups"},"cause_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the dataset column naming each failure's mode, blank for a unit still running; compare_groups: Optional dataset column naming each failure's mode: adds Gray's test per mode (competing risks).","title":"Cause Column"},"group_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: With dataset_id, a column of groups (site, batch, supplier, unit). Shared-frailty models (…_frailty): the column naming each row's group — the units that share a frailty. The fit reports frailty.theta (the spread between groups, with a 95% interval: one reaching 0 means the groups may not differ) and each group's frailty (above 1 = fails sooner than average). Competing risks (competing_risks…): the groups to compare each failure mode across with Gray's test; compare_groups: Dataset column to split by (supplier, site, design revision…); required with dataset_id.","title":"Group Column"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"fit","x-reliafy-scope":"read","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/life_data_analysis/fit_per_demand":{"post":{"operationId":"life_data_analysis.fit_per_demand","summary":"Per-demand (one-shot) reliability: a valve that must open, a standby start","description":"Per-demand (one-shot) reliability: a valve that must open, a standby start. From batches of demands and failures (inline, or a dataset with a row per batch): the failure probability per demand p and 1 - p, pooled, with exact (Clopper-Pearson) two-sided and one-sided bounds at confidence; zero failures is the success-run demonstration. Saves nothing (models fit with demand_batches keeps it).","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"batches":{"anyOf":[{"items":{"$ref":"#/components/schemas/life_data_analysis__DemandBatch"},"maxItems":500,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Per-demand (one-shot) data: one {demands, failures, label?} per batch of demands — several sites, lots of different sizes or test campaigns are pooled into one failure probability per demand, with exact bounds.","title":"Batches"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data (fit_per_demand: a row per batch).","title":"Dataset Id"},"demands_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column of demands per batch.","title":"Demands Column"},"failures_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column of failures per batch.","title":"Failures Column"},"batch_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional dataset column naming each batch.","title":"Batch Column"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"fit_per_demand","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/reliability_at":{"post":{"operationId":"life_data_analysis.reliability_at","summary":"A saved life model at given times: R(t), F(t), hazard, cumulative hazard and density; conditional_age adds the chance a unit that age survives a further t","description":"A saved life model at given times: R(t), F(t), hazard, cumulative hazard and density; conditional_age adds the chance a unit that age survives a further t. Parametric models are exact, non-parametric and mixtures interpolated (method says which). confidence adds two-sided bounds on R(t) and F(t) (null with bounds_note where a model has none). Regression models take covariates (or a covariate_schedule that changes over time) and add `life` at them: B-lives with lower bounds and the MTTF.","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a life model for reliability_at and check_life_requirement, an ALT model (models fit_alt) for alt_use_level, a joint model for predict_joint.","title":"Model Id"},"times":{"anyOf":[{"items":{"type":"number"},"maxItems":200,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Times to evaluate at, in the model's unit.","title":"Times"},"conditional_age":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Optional current age of a unit that is still working. Adds conditional_reliability = R(age + t) / R(age): the chance it survives a FURTHER t.","title":"Conditional Age"},"covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"fit: Dataset covariate columns — regression (proportional-hazards etc.) distributions only; reliability_at: Proportional-hazards models only: covariate values by name (see get kind model). Any not given use the fit's default (the training-data mean); the response says which.","title":"Covariates"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"covariate_schedule":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"maxItems":50,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Regression models only: covariates that change over time, as change-points [{\"t\": 0, \"values\": {\"load_pct\": 60}}, {\"t\": 4000, \"values\": {\"load_pct\": 90}}] — each row's values take effect at its time t (in the model's unit) and hold until the next; a covariate a row leaves out keeps its previous value. Evaluates along that path (SurPyval's sf_tvc) instead of at fixed covariates, and adds mean_life along it. Use instead of `covariates`.","title":"Covariate Schedule"}},"required":["model_id","times"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"reliability_at","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/check_life_requirement":{"post":{"operationId":"life_data_analysis.check_life_requirement","summary":"Does a saved life model meet a B-life requirement ('B10 >= 50,000 cycles at 90% confidence')? The verdict (meets / does_not_meet / unknown without bounds) turns on the B-life's one-sided lower bound, ","description":"Does a saved life model meet a B-life requirement ('B10 >= 50,000 cycles at 90% confidence')? The verdict (meets / does_not_meet / unknown without bounds) turns on the B-life's one-sided lower bound, never the estimate; relay its summary. Not met on the bound: plan_demonstration_test sizes a test to show it.","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a life model for reliability_at and check_life_requirement, an ALT model (models fit_alt) for alt_use_level, a joint model for predict_joint.","title":"Model Id"},"b_life":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"check_life_requirement: The B-life's percent failed: 10 for B10, 1 for B1, 0.1 for B0.1; plan_demonstration_test: Optional: a B-life requirement instead of `reliability` — the percent failed, e.g. 10 for 'B10 >= mission_time' (= reliability 0.9 over mission_time, which is then required).","title":"B Life"},"life":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The life required, in the model's unit: 'B10 >= life'.","title":"Life"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"}},"required":["model_id","b_life","life"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"check_life_requirement","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/compare_groups":{"post":{"operationId":"life_data_analysis.compare_groups","summary":"Is A better than B? Split life data by a column (or a group per time) and compare without fitting: the log-rank test (and Gehan-Wilcoxon, Tarone-Ware), each group's restricted mean life to tau with 95","description":"Is A better than B? Split life data by a column (or a group per time) and compare without fitting: the log-rank test (and Gehan-Wilcoxon, Tarone-Ware), each group's restricted mean life to tau with 95% CIs and the difference from the reference, Gray's test per failure mode, and a verdict to relay. Right-censored only (0 = failed, 1 = still running; c_invert flips).","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data (fit_per_demand: a row per batch).","title":"Dataset Id"},"time_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding the times (required with dataset_id).","title":"Time Column"},"group_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: With dataset_id, a column of groups (site, batch, supplier, unit). Shared-frailty models (…_frailty): the column naming each row's group — the units that share a frailty. The fit reports frailty.theta (the spread between groups, with a 95% interval: one reaching 0 means the groups may not differ) and each group's frailty (above 1 = fails sooner than average). Competing risks (competing_risks…): the groups to compare each failure mode across with Gray's test; compare_groups: Dataset column to split by (supplier, site, design revision…); required with dataset_id.","title":"Group Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column of censoring flags: 0 = failed, 1 = still running, -1 = left-, 2 = interval-censored (compare_groups: 0 and 1 only).","title":"Censor Column"},"count_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding counts.","title":"Count Column"},"cause_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the dataset column naming each failure's mode, blank for a unit still running; compare_groups: Optional dataset column naming each failure's mode: adds Gray's test per mode (competing risks).","title":"Cause Column"},"data":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline failure/suspension times, one per unit (the interval's lower bound when data_right is given). Give this OR dataset_id.","title":"Data"},"group":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline: the group label of each time in `data`.","title":"Group"},"censored":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"Per time in data: 0 = failed, 1 = still running, -1 = left-censored, 2 = interval-censored (the upper bound in data_right); omit when every time is a failure. compare_groups: 0 and 1 only.","title":"Censored"},"counts":{"anyOf":[{"items":{"type":"integer"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Optional count per row of `data` (identical units sharing that time and flag).","title":"Counts"},"cause":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Inline: each failure's mode (null for a unit still running), for Gray's test.","title":"Cause"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the flags use the opposite convention (1 = failed, 0 = running): the 0/1 flags are flipped.","title":"C Invert"},"groups":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"fit: Competing risks only: a group per time in `data` (site, supplier). Adds Gray's test per failure mode — does each mode's chance differ between the groups?; compare_groups: Only these groups, in this order (default: all, at most 12).","title":"Groups"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Group the RMST differences are measured from (default: the first).","title":"Reference"},"tau":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Horizon for the restricted mean survival time (default and most: the shortest group's longest time; a longer one is capped there).","title":"Tau"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"},"include_curves":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Return each group's Kaplan–Meier curve too.","title":"Include Curves"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"compare_groups","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/life_data_analysis/alt_use_level":{"post":{"operationId":"life_data_analysis.alt_use_level","summary":"Extrapolate a saved ALT model to its use stress: characteristic, mean and B-lives, the mission reliability, the acceleration factor against ref_stress, with bounds (wald default, lr, or bootstrap: Pro","description":"Extrapolate a saved ALT model to its use stress: characteristic, mean and B-lives, the mission reliability, the acceleration factor against ref_stress, with bounds (wald default, lr, or bootstrap: Pro, runs as a job). Quote the bounds with the values: it's an extrapolation, and a warning says when there are too few failures for any bound to hold.","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a life model for reliability_at and check_life_requirement, an ALT model (models fit_alt) for alt_use_level, a joint model for predict_joint.","title":"Model Id"},"use_stress":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"description":"alt_use_level: The use (field) stress level(s), in the same units and order as the fit — e.g. [313.15] for 40 °C with an Arrhenius model fitted in kelvin; plan_accelerated_test: The use stress, e.g. [323] (kelvin for the thermal models).","title":"Use Stress"},"ref_stress":{"anyOf":[{"items":{"type":"number"},"maxItems":2,"type":"array"},{"type":"null"}],"default":null,"description":"Optional test stress to report the acceleration factor against (life at use / life at this stress).","title":"Ref Stress"},"mission_time":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"alt_use_level: Optional mission length (model's unit): adds the reliability over it with its lower bound; plan_demonstration_test: The mission (time, cycles) the reliability is over, e.g. 1000. Optional: without it the plan is in missions.","title":"Mission Time"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"bounds_method":{"anyOf":[{"enum":["wald","lr","bootstrap"],"type":"string"},{"type":"null"}],"default":null,"description":"wald (Fisher matrix, instant; default), lr (likelihood ratio: needs no large-sample symmetry, a second or two) or bootstrap (200 parametric refits, BCa interval; best coverage when extrapolating with plenty of failures, but a paid feature that runs on the calculation service, and not available for interval- or left-censored data).","title":"Bounds Method"},"wait_seconds":{"anyOf":[{"maximum":60,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"bootstrap only: how long to wait for the job before returning its job_id (poll get kind job).","title":"Wait Seconds"}},"required":["model_id","use_stress"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"alt_use_level","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/life_data_analysis/plan_demonstration_test":{"post":{"operationId":"life_data_analysis.plan_demonstration_test","summary":"Plan a reliability demonstration test: units, test time per unit and failures allowed to show reliability R over a mission at confidence C (success run / binomial; with a known Weibull shape, test lon","description":"Plan a reliability demonstration test: units, test time per unit and failures allowed to show reliability R over a mission at confidence C (success run / binomial; with a known Weibull shape, test longer with fewer units; or an MTBF test). producer_risk with a good design keeps both risks. b_life takes a B-life requirement; shape_model_id takes β from a saved Weibull and warns when it's too poorly known: relay that warning. Returns the plan, both risks and a trade-off table.","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"reliability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reliability to demonstrate over one mission, e.g. 0.95. Needed unless method='mtbf'.","title":"Reliability"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"mission_time":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"alt_use_level: Optional mission length (model's unit): adds the reliability over it with its lower bound; plan_demonstration_test: The mission (time, cycles) the reliability is over, e.g. 1000. Optional: without it the plan is in missions.","title":"Mission Time"},"failures":{"anyOf":[{"maximum":100,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Failures the test may allow and still pass (0 = success run).","title":"Failures"},"test_multiple":{"anyOf":[{"exclusiveMinimum":0,"maximum":100,"type":"number"},{"type":"null"}],"default":null,"description":"Test each unit for this many missions (needs shape when not 1): test longer, fewer units.","title":"Test Multiple"},"shape":{"anyOf":[{"exclusiveMinimum":0,"maximum":20,"type":"number"},{"type":"null"}],"default":null,"description":"Weibull shape (beta) of the lifetime, assumed known — needed for test_multiple != 1 or units.","title":"Shape"},"units":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Units available: solve for the test time per unit instead of the unit count (needs shape).","title":"Units"},"method":{"anyOf":[{"enum":["MLE","MPS","MPP","MSE","MOM","attribute","mtbf"],"type":"string"},{"type":"null"}],"default":null,"description":"fit: Fit method (default MLE, maximum likelihood): MPP = probability-plot (median-rank) regression, MPS = maximum product spacing, MSE = least squares against the empirical CDF, MOM = method of moments. MOM takes no censoring or truncation, MSE no truncation, and interval-censored data needs MLE or MSE; plan_demonstration_test: 'attribute' (binomial pass/fail, the default) or 'mtbf' (constant failure rate, total test time, chi-squared); plan_sequential_test: 'mtbf' (failures against total test time) or 'attribute' (failures against units tested).","title":"Method"},"mtbf":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"MTBF to demonstrate (method='mtbf').","title":"Mtbf"},"design_reliability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Optional: a good design's true reliability, to report its chance of passing (needed with producer_risk).","title":"Design Reliability"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"},"design_mtbf":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"method='mtbf': a good design's true MTBF (needed with producer_risk).","title":"Design Mtbf"},"producer_risk":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Optional, e.g. 0.2: the most chance of FAILING the good design (design_reliability / design_mtbf). Plans the smallest test keeping BOTH risks (consumer's <= 1 - confidence, producer's <= this) and chooses the failures allowed itself (failures is ignored).","title":"Producer Risk"},"b_life":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"check_life_requirement: The B-life's percent failed: 10 for B10, 1 for B1, 0.1 for B0.1; plan_demonstration_test: Optional: a B-life requirement instead of `reliability` — the percent failed, e.g. 10 for 'B10 >= mission_time' (= reliability 0.9 over mission_time, which is then required).","title":"B Life"},"shape_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional: a saved Weibull model (list kind models) to take the shape β from, instead of `shape`. The plan then reports shape_sensitivity across β's 95% interval, with a warning when β is too poorly known for the plan.","title":"Shape Model Id"},"shape_bound":{"anyOf":[{"enum":["estimate","lower"],"type":"string"},{"type":"null"}],"default":null,"description":"With shape_model_id: plan with β's estimate, or its 95% lower bound (conservative when each unit runs longer than the mission).","title":"Shape Bound"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"plan_demonstration_test","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/plan_sequential_test":{"post":{"operationId":"life_data_analysis.plan_sequential_test","summary":"A truncated sequential test of an MTBF or a reliability against a good design: accept/reject lines, both risks as run, average length against the fixed-length test; with failures_seen, accept, reject ","description":"A truncated sequential test of an MTBF or a reliability against a good design: accept/reject lines, both risks as run, average length against the fixed-length test; with failures_seen, accept, reject or continue.","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"method":{"anyOf":[{"enum":["MLE","MPS","MPP","MSE","MOM","attribute","mtbf"],"type":"string"},{"type":"null"}],"default":null,"description":"fit: Fit method (default MLE, maximum likelihood): MPP = probability-plot (median-rank) regression, MPS = maximum product spacing, MSE = least squares against the empirical CDF, MOM = method of moments. MOM takes no censoring or truncation, MSE no truncation, and interval-censored data needs MLE or MSE; plan_demonstration_test: 'attribute' (binomial pass/fail, the default) or 'mtbf' (constant failure rate, total test time, chi-squared); plan_sequential_test: 'mtbf' (failures against total test time) or 'attribute' (failures against units tested).","title":"Method"},"mtbf":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"MTBF to demonstrate (method='mtbf').","title":"Mtbf"},"reliability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Reliability to demonstrate over one mission, e.g. 0.95. Needed unless method='mtbf'.","title":"Reliability"},"design_mtbf":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"method='mtbf': a good design's true MTBF (needed with producer_risk).","title":"Design Mtbf"},"design_reliability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Optional: a good design's true reliability, to report its chance of passing (needed with producer_risk).","title":"Design Reliability"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"producer_risk":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Optional, e.g. 0.2: the most chance of FAILING the good design (design_reliability / design_mtbf). Plans the smallest test keeping BOTH risks (consumer's <= 1 - confidence, producer's <= this) and chooses the failures allowed itself (failures is ignored).","title":"Producer Risk"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"},"failures_seen":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Failures so far, to ask what the test says now.","title":"Failures Seen"},"time_seen":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Total test time so far (method mtbf).","title":"Time Seen"},"units_seen":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Units tested so far (method attribute).","title":"Units Seen"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"plan_sequential_test","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/plan_life_test":{"post":{"operationId":"life_data_analysis.plan_life_test","summary":"How precisely a life test estimates a B-life or the mean from planning values, or the units or test length for a precision.","description":"How precisely a life test estimates a B-life or the mean from planning values, or the units or test length for a precision.","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/life_data_analysis__Param"},"maxItems":2,"minItems":2,"type":"array"},{"type":"null"}],"default":null,"description":"Planning values in SurPyval names: weibull [alpha, beta], lognormal [mu, sigma].","title":"Params"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; plan_life_test, plan_accelerated_test: weibull or lognormal.","title":"Distribution"},"solve_for":{"anyOf":[{"enum":["precision","units","length","sample_size","power","exposure","detectable"],"type":"string"},{"type":"null"}],"default":null,"description":"plan_life_test: precision (of units), units (for within_pct) or length (for units and within_pct); plan_comparison: logrank sample_size or power; rate_ratio exposure, detectable or power.","title":"Solve For"},"units":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Units available: solve for the test time per unit instead of the unit count (needs shape).","title":"Units"},"within_pct":{"anyOf":[{"exclusiveMinimum":0,"maximum":1000,"type":"number"},{"type":"null"}],"default":null,"description":"The precision wanted, as ± percent: 20 = the interval within a factor of 1.2.","title":"Within Pct"},"test_end":{"anyOf":[{"enum":["time","failures","all"],"type":"string"},{"type":"null"}],"default":null,"description":"When the test stops: at censor_time, when failure_fraction have failed, or when all have.","title":"Test End"},"censor_time":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"When the test stops (the test length).","title":"Censor Time"},"failure_fraction":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A chance, e.g. 0.8.","title":"Failure Fraction"},"quantity":{"anyOf":[{"enum":["b_life","mean"],"type":"string"},{"type":"null"}],"default":null,"description":"Estimate the B-life or the mean.","title":"Quantity"},"b_life":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"check_life_requirement: The B-life's percent failed: 10 for B10, 1 for B1, 0.1 for B0.1; plan_demonstration_test: Optional: a B-life requirement instead of `reliability` — the percent failed, e.g. 10 for 'B10 >= mission_time' (= reliability 0.9 over mission_time, which is then required).","title":"B Life"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"}},"required":["params"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"plan_life_test","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/plan_accelerated_test":{"post":{"operationId":"life_data_analysis.plan_accelerated_test","summary":"An accelerated life test plan from planning values: stresses, units at each, expected failures and the B-life's precision at the use stress (or the precision of your own test).","description":"An accelerated life test plan from planning values: stresses, units at each, expected failures and the B-life's precision at the use stress (or the precision of your own test).","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"life_params":{"anyOf":[{"items":{"$ref":"#/components/schemas/life_data_analysis__Param"},"maxItems":2,"minItems":2,"type":"array"},{"type":"null"}],"default":null,"description":"The life model's planning values: arrhenius and eyring [a, b], inverse_power [a, n].","title":"Life Params"},"shape":{"anyOf":[{"exclusiveMinimum":0,"maximum":20,"type":"number"},{"type":"null"}],"default":null,"description":"Weibull shape (beta) of the lifetime, assumed known — needed for test_multiple != 1 or units.","title":"Shape"},"use_stress":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"description":"alt_use_level: The use (field) stress level(s), in the same units and order as the fit — e.g. [313.15] for 40 °C with an Arrhenius model fitted in kelvin; plan_accelerated_test: The use stress, e.g. [323] (kelvin for the thermal models).","title":"Use Stress"},"censor_time":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"When the test stops (the test length).","title":"Censor Time"},"life_model":{"anyOf":[{"enum":["arrhenius","eyring","inverse_power"],"type":"string"},{"type":"null"}],"default":null,"description":"The life-stress model.","title":"Life Model"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; plan_life_test, plan_accelerated_test: weibull or lognormal.","title":"Distribution"},"high_stress":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The highest stress the test may use.","title":"High Stress"},"units":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Units available: solve for the test time per unit instead of the unit count (needs shape).","title":"Units"},"levels":{"anyOf":[{"maximum":6,"minimum":2,"type":"integer"},{"type":"null"}],"default":null,"description":"Stress levels: 2 the optimum plan, 3+ a compromise plan.","title":"Levels"},"stresses":{"anyOf":[{"items":{"type":"number"},"maxItems":10,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"A test of your own: its stresses (with units_at) instead of high_stress and units.","title":"Stresses"},"units_at":{"anyOf":[{"items":{"type":"integer"},"maxItems":10,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"title":"Units At"},"b_life":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"check_life_requirement: The B-life's percent failed: 10 for B10, 1 for B1, 0.1 for B0.1; plan_demonstration_test: Optional: a B-life requirement instead of `reliability` — the percent failed, e.g. 10 for 'B10 >= mission_time' (= reliability 0.9 over mission_time, which is then required).","title":"B Life"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"}},"required":["life_params","shape","use_stress","censor_time"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"plan_accelerated_test","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/plan_comparison":{"post":{"operationId":"life_data_analysis.plan_comparison","summary":"Did the change work? A log-rank test's failures, units and power, or a before/after failure-rate test's exposure, smallest detectable change and power.","description":"Did the change work? A log-rank test's failures, units and power, or a before/after failure-rate test's exposure, smallest detectable change and power.","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"enum":["logrank","rate_ratio"],"type":"string"},{"type":"null"}],"default":null,"description":"logrank: old and new units side by side; rate_ratio: one fleet's failure rate before and after a change.","title":"Kind"},"solve_for":{"anyOf":[{"enum":["precision","units","length","sample_size","power","exposure","detectable"],"type":"string"},{"type":"null"}],"default":null,"description":"plan_life_test: precision (of units), units (for within_pct) or length (for units and within_pct); plan_comparison: logrank sample_size or power; rate_ratio exposure, detectable or power.","title":"Solve For"},"hazard_ratio":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"New over old failure rate, e.g. 0.6.","title":"Hazard Ratio"},"event_probability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A chance, e.g. 0.8.","title":"Event Probability"},"units_per_group":{"anyOf":[{"minimum":2,"type":"integer"},{"type":"null"}],"default":null,"title":"Units Per Group"},"failures_before":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"title":"Failures Before"},"exposure_before":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Operating time the failures_before came in.","title":"Exposure Before"},"exposure_after":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"title":"Exposure After"},"rate_ratio":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The change to detect: rate after over before, e.g. 0.5.","title":"Rate Ratio"},"power":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"A chance, e.g. 0.8.","title":"Power"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Confidence level, e.g. 0.9 or 0.95 (each action's default is in its line). reliability_at: adds two-sided bounds on R(t) and F(t), null with bounds_note where the model has none.","title":"Confidence"},"one_sided":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"One Sided"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"}},"required":["kind","solve_for"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"plan_comparison","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/life_data_analysis/fit_joint":{"post":{"operationId":"life_data_analysis.fit_joint","summary":"Fit a condition-based risk (joint) model: how a reading drifts with age and how it raises the failure rate, from a lifetimes and a readings dataset; reports parameters with 95% CIs, hazard ratios and ","description":"Fit a condition-based risk (joint) model: how a reading drifts with age and how it raises the failure rate, from a lifetimes and a readings dataset; reports parameters with 95% CIs, hazard ratios and the riskiest running units. Pro; saves nothing (models fit_joint keeps it). guide topic life_data.","tags":["life_data_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"lifetimes_dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The lifetimes dataset (list kind datasets): one row per unit — its id, its age (since new) at failure or when last seen running, the censoring flag, and any covariates.","title":"Lifetimes Dataset Id"},"readings_dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The readings dataset: one row per reading — unit id, age (since new) and value.","title":"Readings Dataset Id"},"unit_id_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Unit Id Column"},"age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Age Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column of censoring flags: 0 = failed, 1 = still running, -1 = left-, 2 = interval-censored (compare_groups: 0 and 1 only).","title":"Censor Column"},"reading_age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Age Column"},"reading_value_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Value Column"},"reading_unit_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Unit Column"},"age_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Age Right Column"},"entry_age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Entry Age Column"},"hazard_covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Numeric lifetimes columns. hazard_covariates change the failure rate at a given reading; path_covariates change how the reading drifts. A covariate may be in both.","title":"Hazard Covariates"},"path_covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Numeric lifetimes columns. hazard_covariates change the failure rate at a given reading; path_covariates change how the reading drifts. A covariate may be in both.","title":"Path Covariates"},"path_model":{"anyOf":[{"enum":["linear","exponential","power","logarithmic","quadratic"],"type":"string"},{"type":"null"}],"default":null,"description":"The reading's path with age: linear (a + b t); exponential (a exp(b t)); power (a t^b); logarithmic (a + b log(t)); quadratic (a + b t + c t^2)","title":"Path Model"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The time unit, e.g. 'hours', 'cycles'.","title":"Unit"},"marker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What the readings are, e.g. 'vibration'.","title":"Marker"},"marker_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The readings' unit, e.g. 'mm/s'.","title":"Marker Unit"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the flags use the opposite convention (1 = failed, 0 = running): the 0/1 flags are flipped.","title":"C Invert"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"fit_joint","x-reliafy-scope":"read","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/life_data_analysis/predict_joint":{"post":{"operationId":"life_data_analysis.predict_joint","summary":"A unit's updating risk from a saved joint model: survival over the model's horizons with 95% bounds, and median remaining life ('not reached' when it never falls to a half — never a mean).","description":"A unit's updating risk from a saved joint model: survival over the model's horizons with 95% bounds, and median remaining life ('not reached' when it never falls to a half — never a mean).","tags":["life_data_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a life model for reliability_at and check_life_requirement, an ALT model (models fit_alt) for alt_use_level, a joint model for predict_joint.","title":"Model Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of the model's running units.","title":"Unit Id"},"age_now":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Instead of unit_id: the unit's age now, since new, at or after its last reading.","title":"Age Now"},"readings":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"maxItems":2000,"type":"array"},{"type":"null"}],"default":null,"description":"Instead of unit_id: the unit's readings so far, [[age, value], ...].","title":"Readings"},"unit_covariates":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"Instead of unit_id: the unit's covariates, {name: value}.","title":"Unit Covariates"}},"required":["model_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"life_data_analysis","x-reliafy-selector":"action","x-reliafy-action":"predict_joint","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/repairable_analysis/next_failure":{"post":{"operationId":"repairable_analysis.next_failure","summary":"A repairable system's next failure from a saved recurrent model at its age: the failure intensity and MTBF now, the mean and quantiles of the time to the next failure, and the chance of a failure with","description":"A repairable system's next failure from a saved recurrent model at its age: the failure intensity and MTBF now, the mean and quantiles of the time to the next failure, and the chance of a failure within each time ahead. Exact. An imperfect-repair model answers for a system that has run `age` since new.","tags":["repairable_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved recurrent model id (list kind models, model_type recurrent). growth_projection: one whose data has a failure-mode column (or inline x + modes instead).","title":"Model Id"},"age":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The system's current age (time since new, or since the start of the model's time scale), in the model's time unit.","title":"Age"},"within":{"anyOf":[{"items":{"type":"number"},"maxItems":50,"type":"array"},{"type":"null"}],"default":null,"description":"Times ahead to give the chance of at least one failure within (e.g. the time to the next service).","title":"Within"},"quantiles":{"anyOf":[{"items":{"type":"number"},"maxItems":20,"type":"array"},{"type":"null"}],"default":null,"description":"Quantiles of the time to the next failure, each in (0, 1); default 0.1, 0.5, 0.9.","title":"Quantiles"}},"required":["model_id","age"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"repairable_analysis","x-reliafy-selector":"action","x-reliafy-action":"next_failure","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/repairable_analysis/growth_projection":{"post":{"operationId":"repairable_analysis.growth_projection","summary":"Reliability growth projection (AMSAA-Crow, MIL-HDBK-189C): the MTBF a growth test reaches once its fixes are in","description":"Reliability growth projection (AMSAA-Crow, MIL-HDBK-189C): the MTBF a growth test reaches once its fixes are in. From a saved recurrent model whose data has a failure-mode column, or inline x + modes (Pro). BD modes with fix-effectiveness factors (fef, bd_modes), BC modes fixed during the test. Returns the demonstrated, projected and growth-potential MTBF, each mode before and after its fix, and h(T).","tags":["repairable_analysis"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved recurrent model id (list kind models, model_type recurrent). growth_projection: one whose data has a failure-mode column (or inline x + modes instead).","title":"Model Id"},"fef":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"The BD modes (fixed after the test) and each one's fix-effectiveness factor, the fraction of its failure intensity the fix removes, 0–1: e.g. {\"seal leak\": 0.8, \"connector\": 0.7}.","title":"Fef"},"bd_modes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"BD modes at the default fix-effectiveness factor, 0.7 (MIL-HDBK-189C's typical value); `fef` overrides any listed in both.","title":"Bd Modes"},"bc_modes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Modes fixed DURING the test (Crow's extended model: the demonstrated intensity is then the Crow-AMSAA fit's at T). Every mode not in fef/bd_modes/bc_modes is an A mode (not fixed).","title":"Bc Modes"},"test_end":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The time the test stopped, T — every system run from 0 to T (time-terminated). Needed when the data has no end-of-test rows (c = 1) or observation window.","title":"Test End"},"mode_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With model_id: the dataset column holding each failure's mode, when the model has none mapped.","title":"Mode Column"},"x":{"anyOf":[{"items":{"type":"number"},"maxItems":5000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline (Pro): failure times, one per failure, in system time from the test's start.","title":"X"},"modes":{"anyOf":[{"items":{"type":"string"},"maxItems":5000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline (Pro): the failure mode of each time in x.","title":"Modes"},"systems":{"anyOf":[{"items":{"type":"string"},"maxItems":5000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline (Pro): the system each failure belongs to, when several systems were tested side by side (one system by default).","title":"Systems"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline: the time unit (e.g. hours).","title":"Unit"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"repairable_analysis","x-reliafy-selector":"action","x-reliafy-action":"growth_projection","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/strategy/optimal_replacement":{"post":{"operationId":"strategy.optimal_replacement","summary":"The cost-optimal age-replacement interval for a component with a known life model; beneficial=false means run to failure is cheaper","description":"The cost-optimal age-replacement interval for a component with a known life model; beneficial=false means run to failure is cheaper. For a saved Weibull fitted to data, shape_uncertainty answers at each end of β's 95% interval: relay uncertainty_note when present.","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"planned_cost":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of a planned (preventive) replacement.","title":"Planned Cost"},"unplanned_cost":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of an unplanned (failure) replacement.","title":"Unplanned Cost"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a plain life model for optimal_replacement and failure_finding_interval (or distribution_id + params instead), a recurrent one for optimal_overhaul.","title":"Model Id"},"distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution id, e.g. weibull.","title":"Distribution Id"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__Param"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline params, e.g. [{name: alpha, value: 1200}, {name: beta, value: 2.1}].","title":"Params"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit for the answer, e.g. hours.","title":"Unit"},"include_curve":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the ~200-point cost-rate curve (for plotting). Off by default to keep the answer small.","title":"Include Curve"}},"required":["planned_cost","unplanned_cost"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"optimal_replacement","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/strategy/failure_finding_interval":{"post":{"operationId":"strategy.failure_finding_interval","summary":"The proof-test interval keeping a hidden protective function (relief valve, trip, standby unit) at a target availability","description":"The proof-test interval keeping a hidden protective function (relief valve, trip, standby unit) at a target availability. For a saved Weibull fitted to data, shape_uncertainty answers at each end of β's interval: relay uncertainty_note (the shorter interval is the safe side).","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"target_availability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Required availability of the hidden function, e.g. 0.99.","title":"Target Availability"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a plain life model for optimal_replacement and failure_finding_interval (or distribution_id + params instead), a recurrent one for optimal_overhaul.","title":"Model Id"},"distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution id, e.g. weibull.","title":"Distribution Id"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__Param"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline params, e.g. [{name: alpha, value: 1200}, {name: beta, value: 2.1}].","title":"Params"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit for the answer, e.g. hours.","title":"Unit"}},"required":["target_availability"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"failure_finding_interval","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/strategy/optimal_overhaul":{"post":{"operationId":"strategy.optimal_overhaul","summary":"The optimal overhaul interval of a repairable system (minimal repair between overhauls) from a saved minimal-repair recurrent model; only a deteriorating system (β > 1) has one","description":"The optimal overhaul interval of a repairable system (minimal repair between overhauls) from a saved minimal-repair recurrent model; only a deteriorating system (β > 1) has one. For a Crow-AMSAA fit, shape_uncertainty answers at each end of β's interval: relay uncertainty_note.","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a plain life model for optimal_replacement and failure_finding_interval (or distribution_id + params instead), a recurrent one for optimal_overhaul.","title":"Model Id"},"cost_repair":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of one minimal repair (fix a failure, 'as bad as old').","title":"Cost Repair"},"cost_overhaul":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of an overhaul that restores the system to 'as good as new'. Must exceed cost_repair.","title":"Cost Overhaul"},"t_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Optional upper limit of the interval search.","title":"T Max"},"include_curve":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the ~200-point cost-rate curve (for plotting). Off by default to keep the answer small.","title":"Include Curve"}},"required":["model_id","cost_repair","cost_overhaul"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"optimal_overhaul","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/strategy/fleet_forecast":{"post":{"operationId":"strategy.fleet_forecast","summary":"A fleet's live failure forecast: expected failures over the horizon with a P10-P90 range, per period and per item (the top 20 unless include_items; item_probabilities adds each item's chance by period","description":"A fleet's live failure forecast: expected failures over the horizon with a P10-P90 range, per period and per item (the top 20 unless include_items; item_probabilities adds each item's chance by period); regression and ALT fleets at each item's covariates or stress; recurrent fleets count every repeat failure. spares adds how many to hold for a lead time and service level. Pro.","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"fleet_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A fleet id from list kind fleets.","title":"Fleet Id"},"include_items":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Return every item's forecast (up to 500). By default only the 20 items with the most expected failures are listed.","title":"Include Items"},"item_probabilities":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"First-failures forecasts: add each listed item's chance of failing by the end of every period (probability_by_period), for 'which items are at risk, and when'.","title":"Item Probabilities"},"spares":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"How many replacement parts to hold, in the fleet's periods: {lead_time, service_level? (default 0.95), review?, per_failure?, stock?, unit_cost?, repairable? with turnaround?}. Default: the fleet's saved spares settings.","title":"Spares"}},"required":["fleet_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"fleet_forecast","x-reliafy-scope":"read","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/strategy/calendar_replacement":{"post":{"operationId":"strategy.calendar_replacement","summary":"The long-run best replacement rule over a calendar of shuts (today = time 0): the threshold age at each shut, the cost against running to failure and plain age replacement, and the next 12 months by d","description":"The long-run best replacement rule over a calendar of shuts (today = time 0): the threshold age at each shut, the cost against running to failure and plain age replacement, and the next 12 months by date.","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"shuts":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__CalendarShut"},"type":"array"},{"type":"null"}],"default":null,"description":"The shuts (opportunities to replace cheaply), each every N days/weeks/months/years from a start, or on dates.","title":"Shuts"},"failure_cost":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of a replacement at a failure.","title":"Failure Cost"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit for the answer, e.g. hours.","title":"Unit"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a plain life model for optimal_replacement and failure_finding_interval (or distribution_id + params instead), a recurrent one for optimal_overhaul.","title":"Model Id"},"distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution id, e.g. weibull.","title":"Distribution Id"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__Param"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline params, e.g. [{name: alpha, value: 1200}, {name: beta, value: 2.1}].","title":"Params"},"anytime_cost":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of a planned replacement between shuts; omit when only shuts allow one.","title":"Anytime Cost"},"today":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Today's date (YYYY-MM-DD), time 0; default the server's.","title":"Today"},"max_age":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Oldest age considered (model units).","title":"Max Age"},"method":{"anyOf":[{"enum":["dp","integration","sampling"],"type":"string"},{"type":"null"}],"default":null,"description":"dp (default) or integration: exact, free; sampling: Pro, long cycles.","title":"Method"},"include_schedule":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"List every shut in the next 12 months.","title":"Include Schedule"},"wait_seconds":{"anyOf":[{"maximum":60,"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"sampling: wait this long for the job.","title":"Wait Seconds"}},"required":["shuts","failure_cost"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"calendar_replacement","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/strategy/next_replacement":{"post":{"operationId":"strategy.next_replacement","summary":"For one unit in service on a shut calendar: replace it now, at the next shut, between shuts or run it to failure, each choice's cost and the age from which replacing now pays.","description":"For one unit in service on a shut calendar: replace it now, at the next shut, between shuts or run it to failure, each choice's cost and the age from which replacing now pays.","tags":["strategy"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"age":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The unit in service's age today, in the model's unit.","title":"Age"},"shuts":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__CalendarShut"},"type":"array"},{"type":"null"}],"default":null,"description":"The shuts (opportunities to replace cheaply), each every N days/weeks/months/years from a start, or on dates.","title":"Shuts"},"failure_cost":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of a replacement at a failure.","title":"Failure Cost"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit for the answer, e.g. hours.","title":"Unit"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved model id (list kind models): a plain life model for optimal_replacement and failure_finding_interval (or distribution_id + params instead), a recurrent one for optimal_overhaul.","title":"Model Id"},"distribution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Inline distribution id, e.g. weibull.","title":"Distribution Id"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/strategy__Param"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline params, e.g. [{name: alpha, value: 1200}, {name: beta, value: 2.1}].","title":"Params"},"anytime_cost":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of a planned replacement between shuts; omit when only shuts allow one.","title":"Anytime Cost"},"now_cost":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Cost of replacing it today (default the any-day cost, or a shut's falling today).","title":"Now Cost"},"today":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Today's date (YYYY-MM-DD), time 0; default the server's.","title":"Today"},"max_age":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Oldest age considered (model units).","title":"Max Age"}},"required":["age","shuts","failure_cost"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"strategy","x-reliafy-selector":"action","x-reliafy-action":"next_replacement","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd_analysis/analyze":{"post":{"operationId":"rbd_analysis.analyze","summary":"Analyse a saved diagram","description":"Analyse a saved diagram. Non-repairable: the reliability curve (~21 points; `times` for exact values), MTTF, B-lives, importance and cut sets; current_state for the remaining life from now, target_reliability for the design life, confidence for intervals from fitted blocks. Repairable, on every plan: exact or numerical long-run availability, mean up/down time and failure frequency, and in `exact` A(t), the mission availability and the window's expected failures, outages, downtime and cost, from new or from current_state over t_max; safety functions add PFDavg and SIL, priced diagrams costs, capacities the production availability, phases the mission, a network its terminals' reliability. The Monte-Carlo simulation (spread, criticality; from now the next failure) is Pro and runs only where a figure needs it unless simulate=true; without it, relay simulation's message and offer export_python. With simulate=false a simulation-only diagram returns available=false, needs_simulation=true, code 'needs_simulation' and the reason: call again with simulate=true (Pro) or offer export_python. A long run returns a job_id (get kind job). summary_only: headline figures only. guide topic rbd_analysis has more.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"times":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"description":"analyze: Non-repairable: times (diagram unit) to report system reliability at, each evaluated exactly, in reliability_at. They don't change `curve`, which is always ~21 points over an automatic axis (sized to the system; t_max sets its end): to read the curve at given times, pass them here; sensitivity: measure='uncertainty': also the availability at these times from new, and the mean availability over [0, t] for each, with their intervals, all from one run (Pro, a compute job).","title":"Times"},"t_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"analyze: Non-repairable: end of the time axis (default sized to the system; with current_state, to its remaining life). Repairable: the window and simulated horizon (default long enough to settle; with current_state, sized to the blocks' remaining life); quote_simulation: The window, as rbd_analysis analyze's t_max (default: the automatic one); compare: The window both are compared over, from new (diagram unit); default the longer of their automatic windows.","title":"T Max"},"conditional_age":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Non-repairable: condition on the system having already survived to this age.","title":"Conditional Age"},"recompute":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Repairable: re-run the simulation even when a saved result matches (paid feature).","title":"Recompute"},"simulate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"analyze: Repairable: the Monte-Carlo simulation (Pro), for distributions, P(no outage), percentiles and criticality. Omitted: only where a figure needs it — when every figure from new is exact or numerical, none runs (a matching saved one is still served) and simulation.on_request says so. true = run it; false = the exact figures only. Ignored without entitlement: the exact figures come anyway; sensitivity: Where RePyability has no exact route (e.g. limited repair crews for wear-out lives), simulate the effects (Pro; a minute or two). False: say so instead.","title":"Simulate"},"current_state":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd_analysis__BlockState"},"type":"object"},{"type":"null"}],"default":null,"description":"analyze: Blocks' states now, keyed by node id; blocks left out are new. Repairable: {down: true, since: <time into the repair>} or {age: <time since new>}; the figures then run from now over t_max (e.g. the next 720 hours); with the simulation, next_failure gives the time to the next system failure from now (its mean is mean_residual_life) and the blocks that cause it. Never replaces the saved from-new result. Non-repairable: {failed: true} or {age: <time it has run>} on component blocks; the reliability curve, MTTF, B-lives and design life are then the remaining life from now (mean_residual_life: exact); quote_simulation: Blocks' states now, as rbd_analysis analyze's current_state.","title":"Current State"},"compute_exact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Repairable diagrams over 30 blocks: compute the exact figures over time anyway (from several seconds to a minute or so).","title":"Compute Exact"},"target_reliability":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Non-repairable: the design life at this reliability, e.g. 0.9 — the time the system reliability falls to it (from now with current_state).","title":"Target Reliability"},"confidence":{"anyOf":[{"exclusiveMaximum":1,"minimum":0.5,"type":"number"},{"type":"null"}],"default":null,"description":"Non-repairable: also give confidence intervals at this level (e.g. 0.9) on the MTTF, B-lives and design life, from the parameter uncertainty of blocks that use saved fitted models; with `times` (up to 8) also on the reliability at each, and with b_lives on each of those B-lives — all from one run of draws (confidence.targets).","title":"Confidence"},"b_lives":{"anyOf":[{"items":{"type":"number"},"maxItems":8,"type":"array"},{"type":"null"}],"default":null,"description":"Non-repairable, with confidence: the B-lives to give intervals on, as percent failed (e.g. [1, 10, 50] for B1, B10, B50), each with its point value.","title":"B Lives"},"include_curves":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Non-repairable with common-cause groups: also return ccf.curve_without, the system reliability without the groups at the times of `curve`. Off by default to keep the answer small.","title":"Include Curves"},"discount_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"analyze: Repairable with costs: price costs.total_cost as a present value at this percent a year (7 = 7%; 0 = undiscounted) instead of the diagram's own discount rate. Nothing is saved or re-run; cheapest_design: Percent a year (7 = 7%; 0 = undiscounted): the totals are present values and the design with the lowest is chosen. Default the diagram's own discount rate.","title":"Discount Rate"},"summary_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Only the headline figures: availability (or reliability_at), MTTF or mean up/down time, PFDavg and SIL, B-lives, the top blocks by importance, costs' totals and the warnings — no curves, full importance tables or how each figure was computed. For a quick answer, or a big repairable diagram.","title":"Summary Only"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"analyze","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/quote_simulation":{"post":{"operationId":"rbd_analysis.quote_simulation","summary":"How long a repairable diagram's availability simulation should take, before anything runs (estimate, median_s, p90_s), and how many jobs are queued ahead","description":"How long a repairable diagram's availability simulation should take, before anything runs (estimate, median_s, p90_s), and how many jobs are queued ahead. Nothing is run or charged.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"t_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"analyze: Non-repairable: end of the time axis (default sized to the system; with current_state, to its remaining life). Repairable: the window and simulated horizon (default long enough to settle; with current_state, sized to the blocks' remaining life); quote_simulation: The window, as rbd_analysis analyze's t_max (default: the automatic one); compare: The window both are compared over, from new (diagram unit); default the longer of their automatic windows.","title":"T Max"},"current_state":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd_analysis__BlockState"},"type":"object"},{"type":"null"}],"default":null,"description":"analyze: Blocks' states now, keyed by node id; blocks left out are new. Repairable: {down: true, since: <time into the repair>} or {age: <time since new>}; the figures then run from now over t_max (e.g. the next 720 hours); with the simulation, next_failure gives the time to the next system failure from now (its mean is mean_residual_life) and the blocks that cause it. Never replaces the saved from-new result. Non-repairable: {failed: true} or {age: <time it has run>} on component blocks; the reliability curve, MTTF, B-lives and design life are then the remaining life from now (mean_residual_life: exact); quote_simulation: Blocks' states now, as rbd_analysis analyze's current_state.","title":"Current State"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"quote_simulation","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd_analysis/sensitivity":{"post":{"operationId":"rbd_analysis.sensitivity","summary":"What to improve first in a repairable diagram: every lever (each block's mean life, mean repair time and intervals, its coverage, one more crew) moved a step (default 10%) the way that helps, ranked b","description":"What to improve first in a repairable diagram: every lever (each block's mean life, mean repair time and intervals, its coverage, one more crew) moved a step (default 10%) the way that helps, ranked by the gain in availability (or cost), in plain words; with costs_to_change and order='benefit_per_cost', by benefit per cost. Quote `top` with its basis (exact or numerical: free; simulation: Pro, with an interval). measure gives over_time, shares, joint, rate or uncertainty, each with a plain answer first. May return a job_id.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"window":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Rank by the mean availability over [0, window) from new (diagram unit) instead of the long run (availability only; up to 60 blocks). Slower: it runs as a job.","title":"Window"},"step":{"anyOf":[{"maximum":0.9,"minimum":0.01,"type":"number"},{"type":"null"}],"default":null,"description":"How far each lever moves, as a fraction: 0.1 (default) = a 10% longer mean life, a 10% shorter mean repair time or test interval; counts (repair crews, standby units) always move by one.","title":"Step"},"rank_by":{"anyOf":[{"enum":["availability","cost"],"type":"string"},{"type":"null"}],"default":null,"description":"What the step should improve and the levers are ranked by: availability (default), or the running cost per unit time (priced diagrams).","title":"Rank By"},"costs_to_change":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"The cost of making each lever's stated change, by lever id (from a previous answer's levers[].id): each gets its benefit per unit of cost; order='benefit_per_cost' ranks by it.","title":"Costs To Change"},"order":{"anyOf":[{"enum":["benefit","benefit_per_cost"],"type":"string"},{"type":"null"}],"default":null,"description":"benefit (default): rank by the step's benefit alone, whether or not a lever has a cost. benefit_per_cost: the levers in costs_to_change first, by benefit per unit spent, then the rest by benefit.","title":"Order"},"simulate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"analyze: Repairable: the Monte-Carlo simulation (Pro), for distributions, P(no outage), percentiles and criticality. Omitted: only where a figure needs it — when every figure from new is exact or numerical, none runs (a matching saved one is still served) and simulation.on_request says so. true = run it; false = the exact figures only. Ignored without entitlement: the exact figures come anyway; sensitivity: Where RePyability has no exact route (e.g. limited repair crews for wear-out lives), simulate the effects (Pro; a minute or two). False: say so instead.","title":"Simulate"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"How many ranked levers to return.","title":"Limit"},"lever_limits":{"anyOf":[{"additionalProperties":{"additionalProperties":{"type":"number"},"type":"object"},"type":"object"},{"type":"null"}],"default":null,"description":"measure='levers': how far each lever may go, by lever id (from levers[].id), as {min, max} in the values shown (shown_value: a mean repair time in the diagram's unit, a coverage as a fraction), e.g. {\"motor|repairability.mu\": {\"min\": 4}} = the motor's mean repair time can't go below 4. A step stops at the limit (limited: 'yours'), as it stops at a lever's own range (limited: 'range', e.g. a coverage of 1).","title":"Lever Limits"},"measure":{"anyOf":[{"enum":["levers","over_time","shares","joint","rate","uncertainty"],"type":"string"},{"type":"null"}],"default":null,"description":"levers (default): the ranked steps. over_time: which blocks matter most, and when (each block's Birnbaum importance from new over `window`, or the analysis horizon). shares: where an all-round improvement pays off (each group's share of the gain from improving every lever by the same fraction; group_by). joint: which pairs are complements (improve together) or substitutes. rate: what's moving availability now (each block's part in dA/dt over time) and who causes the system's failures (Barlow-Proschan shares). uncertainty: whose parameter uncertainty widens the answer — the long-run availability's interval over draws of the blocks' saved fitted models and each input's share of its variance.","title":"Measure"},"group_by":{"anyOf":[{"enum":["block","kind"],"type":"string"},{"type":"null"}],"default":null,"description":"measure='shares': by block, or by kind of lever (lives, repair times, proof tests, ...).","title":"Group By"},"uncertainty_method":{"anyOf":[{"enum":["delta","sobol"],"type":"string"},{"type":"null"}],"default":null,"description":"measure='uncertainty': delta (default; free, quick: the delta method) or sobol (first-order and total Sobol indices from draws; Pro, a compute job).","title":"Uncertainty Method"},"times":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"description":"analyze: Non-repairable: times (diagram unit) to report system reliability at, each evaluated exactly, in reliability_at. They don't change `curve`, which is always ~21 points over an automatic axis (sized to the system; t_max sets its end): to read the curve at given times, pass them here; sensitivity: measure='uncertainty': also the availability at these times from new, and the mean availability over [0, t] for each, with their intervals, all from one run (Pro, a compute job).","title":"Times"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"sensitivity","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/optimise_intervals":{"post":{"operationId":"rbd_analysis.optimise_intervals","summary":"Choose a repairable diagram's age-replacement or proof-test intervals together: the lowest cost, the cheapest meeting min_availability (safety function: max_pfd or target_sil), or the most available w","description":"Choose a repairable diagram's age-replacement or proof-test intervals together: the lowest cost, the cheapest meeting min_availability (safety function: max_pfd or target_sil), or the most available within max_cost_rate. Each block's interval now and in the plan, the plan's cost rate, availability (PFDavg, SIL) beside the diagram as drawn, and edit_rbd_ops to apply it with rbd edit. A refusal gives the ops that add what's missing. With limited crews: assume_unlimited_crews (and simulate_with_crews, Pro). May return a job_id.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"schedule":{"anyOf":[{"enum":["replacement","proof_test"],"type":"string"},{"type":"null"}],"default":null,"description":"replacement: the age-replacement intervals of blocks under age replacement; proof_test: the proof-test intervals of blocks with hidden failures. Default: whichever the diagram has.","title":"Schedule"},"blocks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"optimise_intervals: Block ids whose intervals to choose; default every block with that schedule; cheapest_design: Component block ids that may be given copies one at a time; default every block with a purchase price (outside the trains). [] with trains: copy the trains alone.","title":"Blocks"},"min_availability":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"optimise_intervals: The cheapest intervals keeping the long-run availability at least this; cheapest_design: Only designs at least this available in the long run, e.g. 0.9995.","title":"Min Availability"},"max_pfd":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Safety function: the cheapest intervals keeping PFDavg at most this, e.g. 1e-3.","title":"Max Pfd"},"target_sil":{"anyOf":[{"maximum":4,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Safety function: the cheapest intervals reaching this SIL (PFDavg below the band's top).","title":"Target Sil"},"max_cost_rate":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The most available intervals costing at most this per unit time.","title":"Max Cost Rate"},"allowed_intervals":{"anyOf":[{"items":{"type":"number"},"maxItems":8,"type":"array"},{"type":"null"}],"default":null,"description":"proof_test: the intervals every block chooses from (diagram unit). Default a calendar: 1, 3, 6, 12, 24, 36 and 48 months in the diagram's unit, plus each block's own interval.","title":"Allowed Intervals"},"stagger_tests":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"proof_test: choose the first tests' times too (even shares of the interval): testing redundant channels apart finds a common-cause failure sooner. The best plan with all tests together comes back beside it.","title":"Stagger Tests"},"assume_unlimited_crews":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Needed when the diagram has fewer repair crews than repair jobs: choose the intervals as if every repair started at once (the exact values can't include waiting for a crew).","title":"Assume Unlimited Crews"},"simulate_with_crews":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"With limited crews: also simulate the diagram with the plan on it with its own crews, to show what the waiting costs in availability (and PFDavg). Pro, as rbd_analysis analyze's simulation.","title":"Simulate With Crews"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"optimise_intervals","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/cheapest_design":{"post":{"operationId":"rbd_analysis.cheapest_design","summary":"The redundancy that owns a repairable diagram at the lowest total cost: active copies of priced blocks (and of whole trains) weighed against the downtime they save, optionally keeping min_availability","description":"The redundancy that owns a repairable diagram at the lowest total cost: active copies of priced blocks (and of whole trains) weighed against the downtime they save, optionally keeping min_availability; the design as drawn and the cheapest side by side, the copies and the saving, over several horizons (by_horizon). Needs block costs.acquisition prices, costs.horizon and costs.downtime_rate (rbd edit update_node / set; a refusal gives the op). Nothing is saved: add the copies with rbd edit. Pro.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"horizon":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"How long the system is owned (diagram unit); default the diagram's own horizon.","title":"Horizon"},"min_availability":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"optimise_intervals: The cheapest intervals keeping the long-run availability at least this; cheapest_design: Only designs at least this available in the long run, e.g. 0.9995.","title":"Min Availability"},"blocks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"optimise_intervals: Block ids whose intervals to choose; default every block with that schedule; cheapest_design: Component block ids that may be given copies one at a time; default every block with a purchase price (outside the trains). [] with trains: copy the trains alone.","title":"Blocks"},"discount_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"analyze: Repairable with costs: price costs.total_cost as a present value at this percent a year (7 = 7%; 0 = undiscounted) instead of the diagram's own discount rate. Nothing is saved or re-run; cheapest_design: Percent a year (7 = 7%; 0 = undiscounted): the totals are present values and the design with the lowest is chosen. Default the diagram's own discount rate.","title":"Discount Rate"},"trains":{"anyOf":[{"additionalProperties":{"items":{"type":"string"},"type":"array"},"maxProperties":6,"type":"object"},{"type":"null"}],"default":null,"description":"Trains copied whole, {name: [block ids]}: each a chain of blocks in series (a pump with its valve and motor) whose last block feeds one node. A copy is another path alongside the train into that node, so copies of a train into a 2-out-of-3 vote make it 2-out-of-4 (\"should we add a fourth pump train?\"). Name one of identical trains; at least one of its blocks needs a purchase price.","title":"Trains"},"horizons":{"anyOf":[{"items":{"type":"number"},"maxItems":6,"type":"array"},{"type":"null"}],"default":null,"description":"Other ownership horizons to price the choice over (diagram unit), e.g. [43800, 175200] for 5 and 20 years in hours; default 5, 10 and 20 years in a calendar unit. by_horizon gives the cheapest design at each, and for ever (the net present cost) when discounted.","title":"Horizons"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"cheapest_design","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/compare":{"post":{"operationId":"rbd_analysis.compare","summary":"Is design B (other_rbd_id) better than A? The difference in mean availability over a window from new (exact where both have exact values, else paired simulations with an interval), both long-run avail","description":"Is design B (other_rbd_id) better than A? The difference in mean availability over a window from new (exact where both have exact values, else paired simulations with an interval), both long-run availabilities and, when priced, the difference in what owning each costs. Typically B is A cloned with one change. Pro.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"other_rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Design B: another repairable RBD id — typically a copy of A with one change (rbd clone, then rbd edit).","title":"Other Rbd Id"},"t_max":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"analyze: Non-repairable: end of the time axis (default sized to the system; with current_state, to its remaining life). Repairable: the window and simulated horizon (default long enough to settle; with current_state, sized to the blocks' remaining life); quote_simulation: The window, as rbd_analysis analyze's t_max (default: the automatic one); compare: The window both are compared over, from new (diagram unit); default the longer of their automatic windows.","title":"T Max"}},"required":["rbd_id","other_rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"compare","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/fault_tree":{"post":{"operationId":"rbd_analysis.fault_tree","summary":"The diagram as a fault tree: the top event probability (F(t) at t, or a repairable diagram's long-run unavailability), minimal cut sets ranked by probability with share_alone (they overlap: the shares","description":"The diagram as a fault tree: the top event probability (F(t) at t, or a repairable diagram's long-run unavailability), minimal cut sets ranked by probability with share_alone (they overlap: the shares don't add up to 1), basic events by criticality with Birnbaum, Fussell-Vesely, RAW and RRW, and each common-cause group's shared cause. Exact and free.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"t":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"fault_tree: Non-repairable diagrams: the time (diagram unit) the tree is evaluated at; default the calculator's design point, where the system reliability is about 90%. Ignored for a repairable diagram (steady state); allocate_targets: Non-repairable: the mission time (diagram unit) the target reliability is for. Required there.","title":"T"},"max_cut_sets":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Cut sets returned, most likely first.","title":"Max Cut Sets"},"max_events":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Basic events returned with their importance, most critical first.","title":"Max Events"},"include_gates":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the gates (AND / OR / VOTE with their inputs). Default: just the top event, cut sets, events and common causes.","title":"Include Gates"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"fault_tree","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/allocate_targets":{"post":{"operationId":"rbd_analysis.allocate_targets","summary":"What each block needs for the system to meet a target (a reliability at t, or a repairable diagram's availability with the MTTF / MTTR that give it), against what it has now, by method","description":"What each block needs for the system to meet a target (a reliability at t, or a repairable diagram's availability with the MTTF / MTTR that give it), against what it has now, by method. An unreachable target returns reached=false with the reachable range. Exact and free.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"target":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"The system target: a reliability at t for a non-repairable diagram (e.g. 0.95), a long-run availability for a repairable one (e.g. 0.995).","title":"Target"},"method":{"anyOf":[{"enum":["equal","simple","minimum_effort","improvement","cost_based","availability","mttf_mttr"],"type":"string"},{"type":"null"}],"default":null,"description":"Non-repairable: equal (every block the same reliability; a first cut), simple (the smallest change from 50/50 by the diagram's structure alone, weighted; no component data), minimum_effort (series systems only: raise the weakest blocks to one common level, the least total effort), improvement (cut every free block's unreliability by one factor, keeping their ratios; with fixed blocks) or cost_based (the cheapest way by Mettas's cost function, from each block's max and feasibility; any structure — the default). Repairable: availability (each block's availability, and the MTTF or MTTR that gives it; the default) or mttf_mttr (the cheapest MTTF and MTTR pair per block).","title":"Method"},"t":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"fault_tree: Non-repairable diagrams: the time (diagram unit) the tree is evaluated at; default the calculator's design point, where the system reliability is about 90%. Ignored for a repairable diagram (steady state); allocate_targets: Non-repairable: the mission time (diagram unit) the target reliability is for. Required there.","title":"T"},"availability_method":{"anyOf":[{"enum":["cost_based","improvement","minimum_effort","equal"],"type":"string"},{"type":"null"}],"default":null,"description":"method=availability: how to apportion it (default cost_based).","title":"Availability Method"},"levers":{"anyOf":[{"enum":["both","mttf","mttr"],"type":"string"},{"type":"null"}],"default":null,"description":"method=mttf_mttr: change both (default), only the MTTFs (reliability) or only the MTTRs (maintainability).","title":"Levers"},"fixed":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Block ids that keep what they have now (improvement, cost_based, availability, mttf_mttr).","title":"Fixed"},"weights":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"simple or improvement (and availability with improvement): a weight per block id, default 1; a larger weight changes a block more, 0 leaves it.","title":"Weights"},"maximum":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"cost_based (and availability with cost_based): the most each block's reliability (or availability) can reach, per block id; default approaching 1.","title":"Maximum"},"feasibility":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"cost_based: how easily each block improves, in [0, 1), default 0.5; higher is easier (cheaper).","title":"Feasibility"},"max_mttf":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"mttf_mttr: the longest MTTF each block can reach (diagram unit).","title":"Max Mttf"},"min_mttr":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"mttf_mttr: the shortest MTTR each block can reach (diagram unit).","title":"Min Mttr"},"mttf_feasibility":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"mttf_mttr: how easily each block's MTTF rises, in [0, 1), default 0.5.","title":"Mttf Feasibility"},"mttr_feasibility":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"default":null,"description":"mttf_mttr: how easily each block's MTTR falls, in [0, 1), default 0.5.","title":"Mttr Feasibility"}},"required":["rbd_id","target"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"allocate_targets","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/system_history":{"post":{"operationId":"rbd_analysis.system_history","summary":"A diagram's observed history from its outage log (the latest unless log_id): the availability, outages, failures vs planned, downtime and observed MTBF over the window, the longest system outages with","description":"A diagram's observed history from its outage log (the latest unless log_id): the availability, outages, failures vs planned, downtime and observed MTBF over the window, the longest system outages with the block that caused each, and the blocks ranked by share of downtime.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"log_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An outage log id (from rbd upload_outage_log). Default: the diagram's latest log.","title":"Log Id"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"system_history","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rbd_analysis/export_python":{"post":{"operationId":"rbd_analysis.export_python","summary":"A standalone Python script (SurPyval + RePyability) that rebuilds and analyses the diagram offline, with the command to run it: also how to run its simulation for free.","description":"A standalone Python script (SurPyval + RePyability) that rebuilds and analyses the diagram offline, with the command to run it: also how to run its simulation for free.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"export_python","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd_analysis/export_json":{"post":{"operationId":"rbd_analysis.export_json","summary":"The diagram in RePyability's JSON (rbd_from_json loads it; uploads import_rbd takes it back without loss), with notes on what only the file's reliafy part holds","description":"The diagram in RePyability's JSON (rbd_from_json loads it; uploads import_rbd takes it back without loss), with notes on what only the file's reliafy part holds. Blocks on a fitted proportional-hazards, non-parametric or load-sharing model can't be exported: use export_python.","tags":["rbd_analysis"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd_analysis","x-reliafy-selector":"action","x-reliafy-action":"export_json","x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/models/fit":{"post":{"operationId":"models.fit","summary":"Fit exactly as life_data_analysis fit does and save the model (inline data is saved as a dataset too); returns its id and url","description":"Fit exactly as life_data_analysis fit does and save the model (inline data is saved as a dataset too); returns its id and url. With demand_batches (only name and demand_confidence beside it) it saves a per-demand (one-shot) model instead.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; save: Distribution id: weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, gumbel_lev, logistic, rayleigh (SurPyval class names such as 'Weibull' work too); fit_alt: The life distribution at each stress (its scale follows the life-stress relationship).","title":"Distribution"},"data":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline failure/suspension times, one per unit (the interval's lower bound when data_right is given). Give this OR dataset_id.","title":"Data"},"data_right":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Interval censoring: each row's upper bound, with `data` as the lower bound — e.g. the inspection that found it failed, with `data` the last one it passed. Interval rows take flag 2; other rows repeat their time here. Without `censored`, equal bounds read as failures and unequal ones as intervals.","title":"Data Right"},"censored":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"fit, fit_alt: Censoring flag per time in `data`: 0 = FAILED at that time, 1 = still running (right-censored / suspended), -1 = left-censored (found failed at that time, having failed at some unknown earlier time), 2 = interval-censored (failed somewhere between data and data_right). Omit when every time is a failure; fit_recurrent: Inline: 0 = a failure at that time, 1 = the system's end of observation (still running then). Omit when every row is a failure; then give observed_to.","title":"Censored"},"counts":{"anyOf":[{"items":{"type":"integer"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Optional count per row of `data` (identical units sharing that time and flag).","title":"Counts"},"trunc_left":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Left truncation (delayed entry): the age at which a unit came under observation, e.g. units already in service when records began. One number for every row, or one per row (null = not truncated). The fit conditions on survival to that age instead of treating the unit as new.","title":"Trunc Left"},"trunc_right":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Right truncation: the age beyond which a unit couldn't have been observed (a later failure would never have been recorded). One number for every row, or one per row (null = not truncated).","title":"Trunc Right"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the censoring flags use the opposite convention (1 = failed, 0 = running); Reliafy flips the 0/1 flags before fitting (-1 and 2 are left as is).","title":"C Invert"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data; save: the dataset the parameters were fitted to, kept as a reference.","title":"Dataset Id"},"time_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding the times (required with dataset_id).","title":"Time Column"},"time_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Interval censoring: the column holding each row's upper bound, with time_column as the lower bound. Interval rows take flag 2; other rows repeat their time in both columns. Works for plain distributions and for parametric regression models with covariates (not Cox PH).","title":"Time Right Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, fit_alt, fit_joint: Dataset column holding the censoring flags (0 = failed, 1 = running, -1 = left-censored, 2 = interval-censored); fit_recurrent: With dataset_id: 0 = failure, 1 = end of observation.","title":"Censor Column"},"count_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding counts.","title":"Count Column"},"trunc_left_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's left-truncation age (delayed entry: the age it came under observation; blank = not truncated).","title":"Trunc Left Column"},"trunc_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's right-truncation age (blank = not truncated).","title":"Trunc Right Column"},"covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"additionalProperties":{"items":{"anyOf":[{"type":"number"},{"type":"string"}]},"type":"array"},"type":"object"},{"type":"null"}],"default":null,"description":"fit: Dataset covariate columns — regression (proportional-hazards etc.) distributions only; fit_recurrent: Inline, for pi_nhpp: {name: one value per row}, constant within a system — numbers, or text levels (e.g. site), compared with the level most systems have.","title":"Covariates"},"method":{"anyOf":[{"enum":["MLE","MPS","MPP","MSE","MOM"],"type":"string"},{"type":"null"}],"default":null,"description":"Fit method (default MLE, maximum likelihood): MPP = probability-plot (median-rank) regression, MPS = maximum product spacing, MSE = least squares against the empirical CDF, MOM = method of moments. MOM takes no censoring or truncation, MSE no truncation, and interval-censored data needs MLE or MSE.","title":"Method"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit of the data, e.g. 'hours', 'cycles', 'km'.","title":"Unit"},"include_mixtures":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"With distribution='best' only: let two-component Weibull and LogNormal mixtures compete with the single distributions (two failure modes in one dataset, an S-curve on probability paper). The single distributions keep their usual AIC ranking; BIC decides only whether the best mixture beats the best single distribution (then it is listed first, else the mixtures follow the singles), and selection_summary says so in plain words. A winning mixture comes with mixture_summary, the two modes in plain words. Slower, so off by default.","title":"Include Mixtures"},"covariate_units":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional: the unit of each covariate, e.g. {\"temp_C\": \"°C\", \"load\": \"kN\"} — regression fits only. Shown with the coefficients (per unit of the covariate) and the covariate inputs, and kept with a saved model.","title":"Covariate Units"},"cox_options":{"anyOf":[{"$ref":"#/components/schemas/models__CoxOptions"},{"type":"null"}],"default":null,"description":"cox_ph only, with a dataset: the tie method, a column to stratify on and a column to cluster the robust standard errors by."},"id_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Covariates that change over time (a pump's load stepping between levels; regression models and a dataset only): the column naming each item. Then each row is one stretch of an item's life — time_column its start and time_right_column its stop, with censor_column 0 on the stretch that ended in a failure and 1 otherwise — or, with time_column alone, a timeline: each row's covariates take effect at its time and hold until the item's next row, whose last row is the failure (0) or removal (1). The result adds `tvc`: the layout, the items, rows and failures, and a plain reading per coefficient; life_data_analysis reliability_at's covariate_schedule then evaluates it along a schedule.","title":"Id Column"},"causes":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the failure mode of each time in `data`, null for a unit still running — e.g. [\"bearing\", \"seal\", null]. The modes compete: each mode's cumulative incidence is the chance of failing from it with the others acting; fit_recurrent: Inline: each failure's cause or failure mode (null on end-of-observation rows): adds the MCF and a Crow-AMSAA fit per cause.","title":"Causes"},"groups":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Competing risks only: a group per time in `data` (site, supplier). Adds Gray's test per failure mode — does each mode's chance differ between the groups?","title":"Groups"},"cause_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the dataset column naming each failure's mode, blank for a unit still running; fit_recurrent: With dataset_id: each failure's cause.","title":"Cause Column"},"group_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With dataset_id, a column of groups (site, batch, supplier, unit). Shared-frailty models (…_frailty): the column naming each row's group — the units that share a frailty. The fit reports frailty.theta (the spread between groups, with a 95% interval: one reaching 0 means the groups may not differ) and each group's frailty (above 1 = fails sooner than average). Competing risks (competing_risks…): the groups to compare each failure mode across with Gray's test.","title":"Group Column"},"demand_batches":{"anyOf":[{"items":{"$ref":"#/components/schemas/models__DemandBatch"},"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Save a per-demand (one-shot) model instead of a life distribution: one {demands, failures, label?} per batch, as life_data_analysis fit_per_demand takes them. Give only name (and demand_confidence) with it.","title":"Demand Batches"},"demand_confidence":{"anyOf":[{"exclusiveMaximum":1,"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Confidence of a per-demand model's exact bounds (default 0.95).","title":"Demand Confidence"}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"fit","x-reliafy-scope":"write","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/models/save":{"post":{"operationId":"models.save","summary":"Save a life model from a distribution and parameters fitted elsewhere (e.g","description":"Save a life model from a distribution and parameters fitted elsewhere (e.g. locally with SurPyval: surpyval.Weibull.fit(x=times, c=censored), then its params), by SurPyval names, in the unit they were fitted in. It works wherever a fitted model does, but without its data it has no confidence bounds.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; save: Distribution id: weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, gumbel_lev, logistic, rayleigh (SurPyval class names such as 'Weibull' work too); fit_alt: The life distribution at each stress (its scale follows the life-stress relationship).","title":"Distribution"},"params":{"anyOf":[{"items":{"$ref":"#/components/schemas/models__Param"},"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Every fitted parameter by SurPyval name: weibull [alpha (scale), beta (shape)], exponential [failure_rate], normal/lognormal [mu, sigma], gamma [alpha, beta], expo_weibull [alpha, beta, mu]. Optional extras from a SurPyval fit: gamma (offset / failure-free life), p (limited failure population), f0 (zero-inflation).","title":"Params"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit of the data, e.g. 'hours', 'cycles', 'km'.","title":"Unit"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data; save: the dataset the parameters were fitted to, kept as a reference.","title":"Dataset Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"save: Optional notes kept with the model, e.g. how it was fitted (method, censoring, SurPyval version); update: New notes, replacing any there are; \"\" clears them. Omit to keep them.","title":"Notes"}},"required":["name","distribution","params"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"save","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/models/fit_alt":{"post":{"operationId":"models.fit_alt","summary":"Fit and save an accelerated life test model: failure times at several stress levels and a life-stress relationship, inline (data + stresses) or from a dataset (time_column + stress_columns), with the ","description":"Fit and save an accelerated life test model: failure times at several stress levels and a life-stress relationship, inline (data + stresses) or from a dataset (time_column + stress_columns), with the usual censoring flags (inspection data: flag 2 with data_right) and delayed entry. Thermal models need kelvin. Reports the coefficients with 95% CIs, the life at each tested level and which bound methods life_data_analysis alt_use_level offers for it.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"life_model":{"anyOf":[{"enum":["arrhenius","eyring","inverse_power","linear","dual_exponential","power_exponential","dual_power"],"type":"string"},{"type":"null"}],"default":null,"description":"The life-stress relationship: arrhenius (1 stress) — Thermal acceleration — life = b·exp(a / stress). Use absolute temperature (K). The classic model for chemical/thermal ageing.; eyring (1 stress) — Thermal model derived from reaction-rate theory — a physically grounded alternative to Arrhenius.; inverse_power (1 stress) — Life = 1/(a·stress^n). The standard model for voltage, load or pressure acceleration.; linear (1 stress) — Life = a + b·stress. A simple straight-line relationship.; dual_exponential (2 stresses) — Two stresses combined exponentially — e.g. temperature and humidity (the Peck-style model).; power_exponential (2 stresses) — Temperature (exponential) with a second non-thermal stress (power) — e.g. temperature and voltage.; dual_power (2 stresses) — Two stresses combined by a power law.","title":"Life Model"},"distribution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: A distribution id — weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, logistic, … — or 'best' to fit every plain (unbounded) distribution and keep the lowest-AIC one. Bounded: beta (data in 0–1), beta4, uniform. Counts to failure (1, 2, …): discrete_weibull, geometric, …, discretized_lognormal, discretized_gamma, discretized_loglogistic. Flexible spline: royston_parmar. Regression ids need covariates and a dataset: weibull_ph, weibull_aft, …, cox_ph, and the semi-parametric additive_hazards (Lin-Ying), proportional_odds and buckley_james; shared frailty (weibull_frailty, exponential_frailty, lognormal_frailty, gamma_frailty, cox_frailty) also needs group_column. competing_risks fits life data by failure mode (with causes / cause_column); competing_risks_cox and competing_risks_fine_gray add covariates per mode; save: Distribution id: weibull, exponential, normal, lognormal, gamma, loglogistic, expo_weibull, gumbel, gumbel_lev, logistic, rayleigh (SurPyval class names such as 'Weibull' work too); fit_alt: The life distribution at each stress (its scale follows the life-stress relationship).","title":"Distribution"},"data":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline failure/suspension times, one per unit (the interval's lower bound when data_right is given). Give this OR dataset_id.","title":"Data"},"data_right":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Interval censoring: each row's upper bound, with `data` as the lower bound — e.g. the inspection that found it failed, with `data` the last one it passed. Interval rows take flag 2; other rows repeat their time here. Without `censored`, equal bounds read as failures and unequal ones as intervals.","title":"Data Right"},"stresses":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline data: each row's stress level(s), one list per time in `data` — [T] for a single-stress model, [T, V] for a two-stress one (e.g. temperature in kelvin and voltage).","title":"Stresses"},"censored":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"fit, fit_alt: Censoring flag per time in `data`: 0 = FAILED at that time, 1 = still running (right-censored / suspended), -1 = left-censored (found failed at that time, having failed at some unknown earlier time), 2 = interval-censored (failed somewhere between data and data_right). Omit when every time is a failure; fit_recurrent: Inline: 0 = a failure at that time, 1 = the system's end of observation (still running then). Omit when every row is a failure; then give observed_to.","title":"Censored"},"counts":{"anyOf":[{"items":{"type":"integer"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Optional count per row of `data` (identical units sharing that time and flag).","title":"Counts"},"trunc_left":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Left truncation (delayed entry): the age at which a unit came under observation, e.g. units already in service when records began. One number for every row, or one per row (null = not truncated). The fit conditions on survival to that age instead of treating the unit as new.","title":"Trunc Left"},"trunc_right":{"anyOf":[{"type":"number"},{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"Right truncation: the age beyond which a unit couldn't have been observed (a later failure would never have been recorded). One number for every row, or one per row (null = not truncated).","title":"Trunc Right"},"stress_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline data: a label per stress, e.g. ['Temperature (K)'].","title":"Stress Names"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the censoring flags use the opposite convention (1 = failed, 0 = running); Reliafy flips the 0/1 flags before fitting (-1 and 2 are left as is).","title":"C Invert"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data; save: the dataset the parameters were fitted to, kept as a reference.","title":"Dataset Id"},"time_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding the times (required with dataset_id).","title":"Time Column"},"time_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Interval censoring: the column holding each row's upper bound, with time_column as the lower bound. Interval rows take flag 2; other rows repeat their time in both columns. Works for plain distributions and for parametric regression models with covariates (not Cox PH).","title":"Time Right Column"},"stress_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"With dataset_id: the stress column(s), in the life-stress relationship's order (one, or two for the dual models).","title":"Stress Columns"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, fit_alt, fit_joint: Dataset column holding the censoring flags (0 = failed, 1 = running, -1 = left-censored, 2 = interval-censored); fit_recurrent: With dataset_id: 0 = failure, 1 = end of observation.","title":"Censor Column"},"count_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding counts.","title":"Count Column"},"trunc_left_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's left-truncation age (delayed entry: the age it came under observation; blank = not truncated).","title":"Trunc Left Column"},"trunc_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Column holding each row's right-truncation age (blank = not truncated).","title":"Trunc Right Column"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit of the data, e.g. 'hours', 'cycles', 'km'.","title":"Unit"},"stress_units":{"anyOf":[{"items":{"type":"string"},"maxItems":2,"type":"array"},{"type":"null"}],"default":null,"description":"Optional: the unit of each stress, in order — e.g. ['K'] or ['K', 'V'] (blank for none). Shown with the stresses and use levels; a thermal model given °C or °F is warned about (it needs kelvin).","title":"Stress Units"}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"fit_alt","x-reliafy-scope":"write","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/models/fit_recurrent":{"post":{"operationId":"models.fit_recurrent","summary":"Fit a recurrent-event (repairable-system) model to failure histories, many failures per system, and save it (save=false: report only)","description":"Fit a recurrent-event (repairable-system) model to failure histories, many failures per system, and save it (save=false: report only). Inline times + systems or a dataset. Reports the growth verdict from β's 95% interval, ROCOF and MTBF with bounds; pi_nhpp each covariate's effect; imperfect repair the repair effectiveness, its test and each system's next failure; causes each cause's growth.","tags":["models"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model":{"anyOf":[{"enum":["crow_amsaa","duane","hpp","cox_lewis","pi_nhpp","grp_i","grp_ii","ara","ari","g1"],"type":"string"},{"type":"null"}],"default":null,"description":"Minimal repair (each repair leaves the system as bad as old): crow_amsaa (power law, the reliability-growth model), duane, hpp (constant rate), cox_lewis (log-linear). Covariates on the repair rate: pi_nhpp (proportional intensity; needs covariates). Imperfect repair (each repair restores part of the age; Weibull time to failure): grp_i / grp_ii (generalized renewal, Kijima I / II), ara, ari, g1.","title":"Model"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"save":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Save the model (default). false: fit and report only, nothing stored.","title":"Save"},"times":{"anyOf":[{"items":{"type":"number"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline: event times, one row per failure (or end-of-observation row), each in its system's own time from new (or from the start of its records).","title":"Times"},"systems":{"anyOf":[{"items":{"type":"string"},"maxItems":20000,"type":"array"},{"type":"null"}],"default":null,"description":"Inline: the system each row belongs to (one system if omitted).","title":"Systems"},"censored":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"description":"fit, fit_alt: Censoring flag per time in `data`: 0 = FAILED at that time, 1 = still running (right-censored / suspended), -1 = left-censored (found failed at that time, having failed at some unknown earlier time), 2 = interval-censored (failed somewhere between data and data_right). Omit when every time is a failure; fit_recurrent: Inline: 0 = a failure at that time, 1 = the system's end of observation (still running then). Omit when every row is a failure; then give observed_to.","title":"Censored"},"observed_to":{"anyOf":[{"type":"number"},{"items":{"type":"number"},"type":"array"},{"type":"null"}],"default":null,"description":"Inline: each system's end of observation, one number for all or one per row. Without it (or c = 1 rows) a system is taken as watched only to its last failure.","title":"Observed To"},"causes":{"anyOf":[{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the failure mode of each time in `data`, null for a unit still running — e.g. [\"bearing\", \"seal\", null]. The modes compete: each mode's cumulative incidence is the chance of failing from it with the others acting; fit_recurrent: Inline: each failure's cause or failure mode (null on end-of-observation rows): adds the MCF and a Crow-AMSAA fit per cause.","title":"Causes"},"covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"additionalProperties":{"items":{"anyOf":[{"type":"number"},{"type":"string"}]},"type":"array"},"type":"object"},{"type":"null"}],"default":null,"description":"fit: Dataset covariate columns — regression (proportional-hazards etc.) distributions only; fit_recurrent: Inline, for pi_nhpp: {name: one value per row}, constant within a system — numbers, or text levels (e.g. site), compared with the level most systems have.","title":"Covariates"},"windows":{"anyOf":[{"additionalProperties":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"object"},{"type":"null"}],"default":null,"description":"Observation gaps (minimal-repair models only): {system: [[start, end], ...]}, the periods each system was watched; a system not listed is watched from 0 to its end of observation. Rows are then failures only, each inside one of its system's windows.","title":"Windows"},"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A saved dataset (list kind datasets) instead of inline data; save: the dataset the parameters were fitted to, kept as a reference.","title":"Dataset Id"},"system_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With dataset_id: the system id column.","title":"System Column"},"time_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Dataset column holding the times (required with dataset_id).","title":"Time Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, fit_alt, fit_joint: Dataset column holding the censoring flags (0 = failed, 1 = running, -1 = left-censored, 2 = interval-censored); fit_recurrent: With dataset_id: 0 = failure, 1 = end of observation.","title":"Censor Column"},"observed_to_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With dataset_id: each system's end of observation.","title":"Observed To Column"},"cause_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit: Competing risks (distribution='competing_risks'): the dataset column naming each failure's mode, blank for a unit still running; fit_recurrent: With dataset_id: each failure's cause.","title":"Cause Column"},"covariate_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"With dataset_id, for pi_nhpp: covariate columns (numbers or text levels).","title":"Covariate Columns"},"window_start_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With dataset_id: each row's observation-window start (with window_end_column; a row with a window and no time is a window with no failures).","title":"Window Start Column"},"window_end_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With dataset_id: each row's window end.","title":"Window End Column"},"baseline":{"anyOf":[{"enum":["crow_amsaa","duane","cox_lewis"],"type":"string"},{"type":"null"}],"default":null,"description":"pi_nhpp and ari: the baseline failure-rate model (default crow_amsaa).","title":"Baseline"},"memory":{"anyOf":[{"type":"integer"},{"const":"all","type":"string"},{"type":"null"}],"default":null,"description":"ara and ari: how many past repairs each repair acts on (default 2 for ara, 1 for ari), or 'all'.","title":"Memory"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit of the data, e.g. 'hours', 'cycles', 'km'.","title":"Unit"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"fit_recurrent","x-reliafy-scope":"write","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/models/fit_joint":{"post":{"operationId":"models.fit_joint","summary":"Fit and save a condition-based risk (joint) model, as life_data_analysis fit_joint does, for life_data_analysis predict_joint and RBD blocks","description":"Fit and save a condition-based risk (joint) model, as life_data_analysis fit_joint does, for life_data_analysis predict_joint and RBD blocks. Pro.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"lifetimes_dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The lifetimes dataset (list kind datasets): one row per unit — its id, its age (since new) at failure or when last seen running, the censoring flag, and any covariates.","title":"Lifetimes Dataset Id"},"readings_dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The readings dataset: one row per reading — unit id, age (since new) and value.","title":"Readings Dataset Id"},"unit_id_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Unit Id Column"},"age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Age Column"},"censor_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, fit_alt, fit_joint: Dataset column holding the censoring flags (0 = failed, 1 = running, -1 = left-censored, 2 = interval-censored); fit_recurrent: With dataset_id: 0 = failure, 1 = end of observation.","title":"Censor Column"},"reading_age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Age Column"},"reading_value_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Value Column"},"reading_unit_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Reading Unit Column"},"age_right_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Age Right Column"},"entry_age_column":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A column name of the dataset it belongs to.","title":"Entry Age Column"},"hazard_covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Numeric lifetimes columns. hazard_covariates change the failure rate at a given reading; path_covariates change how the reading drifts. A covariate may be in both.","title":"Hazard Covariates"},"path_covariates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Numeric lifetimes columns. hazard_covariates change the failure rate at a given reading; path_covariates change how the reading drifts. A covariate may be in both.","title":"Path Covariates"},"path_model":{"anyOf":[{"enum":["linear","exponential","power","logarithmic","quadratic"],"type":"string"},{"type":"null"}],"default":null,"description":"The reading's path with age: linear (a + b t); exponential (a exp(b t)); power (a t^b); logarithmic (a + b log(t)); quadratic (a + b t + c t^2)","title":"Path Model"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Time unit of the data, e.g. 'hours', 'cycles', 'km'.","title":"Unit"},"marker":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What the readings are, e.g. 'vibration'.","title":"Marker"},"marker_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The readings' unit, e.g. 'mm/s'.","title":"Marker Unit"},"c_invert":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the censoring flags use the opposite convention (1 = failed, 0 = running); Reliafy flips the 0/1 flags before fitting (-1 and 2 are left as is).","title":"C Invert"}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"fit_joint","x-reliafy-scope":"write","x-reliafy-pro-only":true,"x-reliafy-heavy":true}},"/api/v1/models/update":{"post":{"operationId":"models.update","summary":"Rename one of the user's own models (life or recurrent) or set its notes; never the fit or data, never a sample.","description":"Rename one of the user's own models (life or recurrent) or set its notes; never the fit or data, never a sample.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of the user's own model ids (list kind models): update a life or recurrent one, delete any kind (life, recurrent, ALT, degradation).","title":"Model Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"fit, save, fit_joint: Name for the saved model; fit_alt: Name for the saved ALT model; fit_recurrent: Name for the saved model (required unless save=false); update: A new name (omit to keep it).","title":"Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"save: Optional notes kept with the model, e.g. how it was fitted (method, censoring, SurPyval version); update: New notes, replacing any there are; \"\" clears them. Omit to keep them.","title":"Notes"}},"required":["model_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"update","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/models/delete":{"post":{"operationId":"models.delete","summary":"Permanently delete one of the user's own models (life, recurrent, ALT or degradation)","description":"Permanently delete one of the user's own models (life, recurrent, ALT or degradation). Never a sample, nor a model a fleet runs on (named in the refusal). Lists the diagrams that used it. Only on the user's explicit request, confirmed by name.","tags":["models"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of the user's own model ids (list kind models): update a life or recurrent one, delete any kind (life, recurrent, ALT, degradation).","title":"Model Id"}},"required":["model_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"models","x-reliafy-selector":"action","x-reliafy-action":"delete","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/datasets/upload":{"post":{"operationId":"datasets.upload","summary":"Save a dataset from CSV text (csv) or a file sent with uploads create (upload_id; an .xlsx needs sheet); returns its id, columns and a preview","description":"Save a dataset from CSV text (csv) or a file sent with uploads create (upload_id; an .xlsx needs sheet); returns its id, columns and a preview. Censoring columns: 0 = failed, 1 = still running.","tags":["datasets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"upload: A short name for the dataset; update: A new name (omit to keep it).","title":"Name"},"csv":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"The CSV text, header row first. Tab- or semicolon-separated pastes are accepted too. For a file, use upload_id instead.","title":"Csv"},"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Instead of csv: a file sent through uploads create (CSV/TSV, or an .xlsx workbook with sheet).","title":"Upload Id"},"sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With an .xlsx upload_id: the sheet to read (needed when the workbook has several; get kind upload lists them).","title":"Sheet"},"no_header":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True if the first row is data, not column names; omit to guess.","title":"No Header"}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"datasets","x-reliafy-selector":"action","x-reliafy-action":"upload","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/datasets/update":{"post":{"operationId":"datasets.update","summary":"Rename one of the user's own datasets or set its notes; never the data, never a sample.","description":"Rename one of the user's own datasets or set its notes; never the data, never a sample.","tags":["datasets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of the user's own dataset ids (list kind datasets).","title":"Dataset Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"upload: A short name for the dataset; update: A new name (omit to keep it).","title":"Name"},"notes":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"New notes, replacing any there are; \"\" clears them. Omit to keep them.","title":"Notes"}},"required":["dataset_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"datasets","x-reliafy-selector":"action","x-reliafy-action":"update","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/datasets/delete":{"post":{"operationId":"datasets.delete","summary":"Permanently delete one of the user's own datasets","description":"Permanently delete one of the user's own datasets. Not a sample, nor one models were fitted to (the refusal names them). Only on the user's explicit request, confirmed by name.","tags":["datasets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"dataset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"One of the user's own dataset ids (list kind datasets).","title":"Dataset Id"}},"required":["dataset_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"datasets","x-reliafy-selector":"action","x-reliafy-action":"delete","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd/create":{"post":{"operationId":"rbd.create","summary":"Build, validate and save a diagram: the graph form (nodes + edges, one input and one output node) or the simple stages form (stages in series, components in parallel within each)","description":"Build, validate and save a diagram: the graph form (nodes + edges, one input and one output node) or the simple stages form (stages in series, components in parallel within each). Redundancy must be modelled as redundancy, and guessed models marked placeholder=true (guide topic rbds). Repairable diagrams need a repair model on every block. Returns the node ids and structure_summary, the diagram in one line: check it against what the user described.","tags":["rbd"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: A short name for the diagram; clone: Name for the copy (default: “<name> (copy)”); upload_outage_log: A name for the log.","title":"Name"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The diagram's time unit ('Hours', 'Days', 'Cycles', …); every model's parameters are read in it. A known unit is stored as the app spells it ('hrs' → 'Hours'); others as typed; upload_outage_log: The unit numeric times and durations are in (hours, days, …). Default: the diagram's unit. Dates and times (ISO or day/month/year) are converted to the diagram's unit.","title":"Unit"},"repairable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True = a repairable system analysed for AVAILABILITY (uptime); every block then also needs a repair model. False = reliability over time.","title":"Repairable"},"nodes":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__RbdNode"},"type":"array"},{"type":"null"}],"default":null,"description":"Graph form: the blocks. Use with edges.","title":"Nodes"},"edges":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__RbdEdge"},"type":"array"},{"type":"null"}],"default":null,"description":"Graph form: connections, input -> … -> output.","title":"Edges"},"stages":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__Stage"},"type":"array"},{"type":"null"}],"default":null,"description":"Simple form instead of nodes/edges: stages in SERIES (left to right), each holding one or more components in PARALLEL, with optional k_of_n voting.","title":"Stages"},"include_graph":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the full compact graph (default: the node ids, types and labels).","title":"Include Graph"},"repair_crews":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Repairable only: how many repair crews share ALL the blocks' repairs (omit = as many as needed). With fewer crews than repair jobs, a failed block can wait; order by each block's crew_priority.","title":"Repair Crews"},"maintenance_groups":{"anyOf":[{"additionalProperties":{"$ref":"#/components/schemas/rbd__MaintenanceGroup"},"type":"object"},{"type":"null"}],"default":null,"description":"Repairable only: options per maintenance group named by blocks' maintenance_group, e.g. {\"north pumps\": {\"setup_cost\": 2000}}.","title":"Maintenance Groups"},"safety_function":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Repairable only: the diagram is a (low-demand) safety function — rbd_analysis analyze reports its PFDavg, with common cause, and its SIL band.","title":"Safety Function"},"target_sil":{"anyOf":[{"maximum":4,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"With safety_function: the SIL it must meet.","title":"Target Sil"},"costs":{"anyOf":[{"$ref":"#/components/schemas/rbd__DiagramCosts"},{"type":"null"}],"default":null,"description":"Repairable only: the diagram's own costs — downtime_rate (lost production per unit time the whole system is down), horizon (how long it is owned) and discount_rate (% a year). Blocks carry their own costs (repair, replace, downtime, acquisition). rbd_analysis cheapest_design needs block acquisition prices, a horizon and a downtime_rate; rbd edit's set costs changes these later."},"production":{"anyOf":[{"$ref":"#/components/schemas/rbd__Production"},{"type":"null"}],"default":null,"description":"The demand the blocks' capacities serve (graph-form nodes' capacity), its unit and a period: rbd_analysis analyze then reports the production availability — the share of the demand delivered — and the output lost over the period."},"phases":{"anyOf":[{"items":{"$ref":"#/components/schemas/rbd__MissionPhase"},"maxItems":50,"type":"array"},{"type":"null"}],"default":null,"description":"Non-repairable only: a phased mission — the phases in order, each with a duration, the blocks it doesn't need and per-phase knode counts. rbd_analysis analyze then adds phased_mission (mission reliability, each phase's failure probability, the riskiest phase).","title":"Phases"},"network":{"anyOf":[{"$ref":"#/components/schemas/rbd__NetworkTerminals"},{"type":"null"}],"default":null,"description":"Graph form, non-repairable: read the diagram as an UNDIRECTED network — blocks are nodes that fail, edges are links that work both ways and never fail; rbd_analysis analyze gives the two terminals' connection reliability (exact) and each block's Birnbaum importance. No knodes, repeats or common-cause groups."}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd","x-reliafy-selector":"action","x-reliafy-action":"create","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd/clone":{"post":{"operationId":"rbd.clone","summary":"Copy a diagram (a shared sample or the user's own) to a new one in the user's workspace, to edit (samples are read-only)","description":"Copy a diagram (a shared sample or the user's own) to a new one in the user's workspace, to edit (samples are read-only). The diagram only: not saved results or share links.","tags":["rbd"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: A short name for the diagram; clone: Name for the copy (default: “<name> (copy)”); upload_outage_log: A name for the log.","title":"Name"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd","x-reliafy-selector":"action","x-reliafy-action":"clone","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd/edit":{"post":{"operationId":"rbd.edit","summary":"Change a saved diagram with a batch of ops, all or nothing (a failed op is named: ops[i])","description":"Change a saved diagram with a batch of ops, all or nothing (a failed op is named: ops[i]). Ops (field op): add_node {node, between | after | before | parallel_to}; remove_node {id, reconnect}; update_node {id | ids, fields to change, clear}; add_edge / remove_edge {source, target}; set {name, unit, repairable, repair_crews, maintenance_groups, safety_function, target_sil, costs, production, phases, network}; add_ccf {members, beta, basis, mgl, id} / remove_ccf {id}. dry_run checks without saving; if_updated_at refuses if it changed since. Returns a line per op, structure_summary and the warnings this edit added.","tags":["rbd"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"ops":{"anyOf":[{"items":{"discriminator":{"mapping":{"add_ccf":"#/components/schemas/rbd__AddCcfOp","add_edge":"#/components/schemas/rbd__EdgeOp","add_node":"#/components/schemas/rbd__AddNodeOp","remove_ccf":"#/components/schemas/rbd__RemoveCcfOp","remove_edge":"#/components/schemas/rbd__EdgeOp","remove_node":"#/components/schemas/rbd__RemoveNodeOp","set":"#/components/schemas/rbd__SetOp","update_node":"#/components/schemas/rbd__UpdateNodeOp"},"propertyName":"op"},"oneOf":[{"$ref":"#/components/schemas/rbd__AddNodeOp"},{"$ref":"#/components/schemas/rbd__RemoveNodeOp"},{"$ref":"#/components/schemas/rbd__UpdateNodeOp"},{"$ref":"#/components/schemas/rbd__EdgeOp"},{"$ref":"#/components/schemas/rbd__SetOp"},{"$ref":"#/components/schemas/rbd__AddCcfOp"},{"$ref":"#/components/schemas/rbd__RemoveCcfOp"}]},"maxItems":100,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"Applied in order, all or nothing.","title":"Ops"},"if_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The updated_at you last saw: refuse if the diagram changed since (e.g. edited in the app).","title":"If Updated At"},"dry_run":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Validate and report without saving.","title":"Dry Run"},"include_graph":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Also return the full compact graph (default: the node ids, types and labels).","title":"Include Graph"}},"required":["rbd_id","ops"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd","x-reliafy-selector":"action","x-reliafy-action":"edit","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd/delete":{"post":{"operationId":"rbd.delete","summary":"Permanently delete one of the user's own diagrams (with any saved result)","description":"Permanently delete one of the user's own diagrams (with any saved result). Lists diagrams that embed it as a sub-system. Only on the user's explicit request, confirmed by name.","tags":["rbd"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd","x-reliafy-selector":"action","x-reliafy-action":"delete","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rbd/upload_outage_log":{"post":{"operationId":"rbd.upload_outage_log","summary":"Save a real outage log (asset, start, end; blank end = still down) against one of the user's diagrams, as CSV text or an uploaded file, and return the system's observed history from it (as rbd_analysi","description":"Save a real outage log (asset, start, end; blank end = still down) against one of the user's diagrams, as CSV text or an uploaded file, and return the system's observed history from it (as rbd_analysis system_history). Assets that match no block are listed and left out (asset_map maps them).","tags":["rbd"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The diagram's id (list kind rbds).","title":"Rbd Id"},"csv":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"The outage log as CSV text, header row first (tab- or semicolon-separated also accepted): one row per outage with the asset, its start and its end (blank = still down). For a file, use upload_id.","title":"Csv"},"columns":{"anyOf":[{"$ref":"#/components/schemas/rbd__OutageColumns"},{"type":"null"}],"default":null,"description":"Which column holds what. Omit to detect from the headers (asset/equipment, start/down, end/restored, duration, reason, planned)."},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The diagram's time unit ('Hours', 'Days', 'Cycles', …); every model's parameters are read in it. A known unit is stored as the app spells it ('hrs' → 'Hours'); others as typed; upload_outage_log: The unit numeric times and durations are in (hours, days, …). Default: the diagram's unit. Dates and times (ISO or day/month/year) are converted to the diagram's unit.","title":"Unit"},"window_start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"When observation began (a date-time for a dated log, else a number). Default: the first outage start.","title":"Window Start"},"window_end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"When observation ended (e.g. now). Default: the last record. Open outages run to it.","title":"Window End"},"date_order":{"anyOf":[{"enum":["auto","dmy","mdy"],"type":"string"},{"type":"null"}],"default":null,"description":"How to read numeric dates like 03/04/2024: dmy (day first), mdy, or auto (detected; ambiguous -> dmy).","title":"Date Order"},"asset_map":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Map asset names in the log to node ids where they don't match a block's label or id exactly (get kind rbd lists the nodes). Several assets may map to one standby, parallel/series count or load-sharing block: each is one of its units, and the block is down only while too few units are up. Pick a unit with 'node#2' (an asset that replaced another shares its unit), or 'node#all' for an asset that stands for the whole block.","title":"Asset Map"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: A short name for the diagram; clone: Name for the copy (default: “<name> (copy)”); upload_outage_log: A name for the log.","title":"Name"},"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Instead of csv: a file sent through uploads create (CSV/TSV, or an .xlsx workbook with sheet).","title":"Upload Id"},"sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"With an .xlsx upload_id: the sheet holding the log (needed when the workbook has several).","title":"Sheet"}},"required":["rbd_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rbd","x-reliafy-selector":"action","x-reliafy-action":"upload_outage_log","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/uploads/create":{"post":{"operationId":"uploads.create","summary":"A single-use link (15 minutes) to send a file without pasting it: run the returned curl PUT from a shell that can read the file, then import with upload_id","description":"A single-use link (15 minutes) to send a file without pasting it: run the returned curl PUT from a shell that can read the file, then import with upload_id. If the PUT can't connect, retry once on url_fallback; if that fails too, follow the response's fallback (guide topic uploads).","tags":["uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"purpose":{"anyOf":[{"enum":["rbd_import","excel","dataset","outage_log"],"type":"string"},{"type":"null"}],"default":null,"description":"What the file is for: rbd_import (a BlockSim .rsgz / .rsr, Open-PSA XML, Galileo .dft or RePyability .json diagram file, then uploads import_rbd); excel (an .xlsx workbook — a data sheet, an RCM/FMEA worksheet or Reliafy's RBD template — then uploads import_excel); dataset (CSV or .xlsx life data, then datasets upload); outage_log (CSV or .xlsx, then rbd upload_outage_log).","title":"Purpose"},"filename":{"anyOf":[{"maxLength":255,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"The file's name with its extension, e.g. pump-skid.rsgz or fmea.xlsx.","title":"Filename"},"size_bytes":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"The file's size if known — refused here at once if it's over the limit.","title":"Size Bytes"}},"required":["purpose","filename"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"uploads","x-reliafy-selector":"action","x-reliafy-action":"create","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/uploads/send_part":{"post":{"operationId":"uploads.send_part","summary":"Send a file into an upload through this connection, in base64 parts, when the PUT (and url_fallback) can't get through","description":"Send a file into an upload through this connection, in base64 parts, when the PUT (and url_fallback) can't get through. Parts 0, 1, 2… one call at a time (about 48 KB of the file each), last=true with sha256 on the final one; then import as usual. For files up to a few hundred KB; not counted against the Free allowance.","tags":["uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An upload_id from uploads create (import_rbd: or content instead).","title":"Upload Id"},"part_index":{"anyOf":[{"exclusiveMaximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"This part's position in the file: 0 for the first, then 1, 2, … in order.","title":"Part Index"},"data_base64":{"anyOf":[{"maxLength":1417524,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"This part's raw bytes, base64-encoded: at most 1 MB of the file per part, but keep parts to about 48 KB of the file (64 KB of base64) so each call is quick to write and check.","title":"Data Base64"},"last":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True on the final part: the parts are checked, put together and the upload is ready to import.","title":"Last"},"sha256":{"anyOf":[{"pattern":"^[0-9a-fA-F]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"With last=true: the whole file's SHA-256 (hex). Recommended: a part copied wrongly is caught here rather than imported.","title":"Sha256"}},"required":["upload_id","part_index","data_base64","last"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"uploads","x-reliafy-selector":"action","x-reliafy-action":"send_part","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/uploads/import_rbd":{"post":{"operationId":"uploads.import_rbd","summary":"Import diagrams from a BlockSim, Open-PSA, Galileo, RePyability JSON or Reliafy Excel template file (upload_id), or small pasted text (content, at most 200 KB), saving each as an RBD (all or nothing a","description":"Import diagrams from a BlockSim, Open-PSA, Galileo, RePyability JSON or Reliafy Excel template file (upload_id), or small pasted text (content, at most 200 KB), saving each as an RBD (all or nothing against the plan's limit). Returns per diagram its id, unit (unit_warning when the file states none), structure, import notes to relay, needs_model and its nodes. save=false previews with edges and cut sets.","tags":["uploads"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An upload_id from uploads create (import_rbd: or content instead).","title":"Upload Id"},"content":{"anyOf":[{"type":"string"},{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"Instead of upload_id, for SMALL text files only (Open-PSA XML, Galileo DFT text or JSON, RePyability JSON), at most 200 KB. Anything else or larger: uploads create.","title":"Content"},"format":{"anyOf":[{"enum":["blocksim","openpsa","galileo","excel","repyability"],"type":"string"},{"type":"null"}],"default":null,"description":"Parse as this format. Omit to detect it from the content.","title":"Format"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"import_rbd: A name for the diagram (a prefix when the file holds several). Default: the file's own names; import_excel: A name for the new dataset, study or diagram. Default: from the file and sheet.","title":"Name"},"save":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"False = preview what would be imported, saving nothing.","title":"Save"},"only":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Import just these diagrams, by name (a BlockSim project can hold many; preview with save=false or get kind upload).","title":"Only"},"time_unit":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"What the file's rates and times are per ('Hours', 'Cycles', …), used only when the file doesn't state a unit itself (Galileo never does). Ask the user rather than guess; parameters are never rescaled.","title":"Time Unit"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"uploads","x-reliafy-selector":"action","x-reliafy-action":"import_rbd","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/uploads/import_excel":{"post":{"operationId":"uploads.import_excel","summary":"Import an uploaded .xlsx: a sheet as a dataset, an FMEA / RCM worksheet into a new or existing RCM study (study_id), or Reliafy's RBD template as a diagram (with rbd_id a new copy of it, or with repla","description":"Import an uploaded .xlsx: a sheet as a dataset, an FMEA / RCM worksheet into a new or existing RCM study (study_id), or Reliafy's RBD template as a diagram (with rbd_id a new copy of it, or with replace=true over it). Look first with get kind upload. Formulas are read as last saved, never evaluated.","tags":["uploads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"upload_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"An upload_id from uploads create (import_rbd: or content instead).","title":"Upload Id"},"target":{"anyOf":[{"enum":["dataset","rcm","rbd_template"],"type":"string"},{"type":"null"}],"default":null,"description":"dataset: one sheet saved as a dataset; rcm: an FMEA / RCM worksheet (one row per failure mode) into an RCM study; rbd_template: Reliafy's Excel RBD template (Blocks + Connections sheets) saved as an RBD.","title":"Target"},"sheet":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The sheet to read. Needed when the workbook has several sheets with data (get kind upload lists them).","title":"Sheet"},"mapping":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"dataset: optional {dataset column: sheet column} to keep (and rename) only those columns. rcm: {field: column} with fields function, standard, failure, mode (required), effects, consequence, outcome, task, interval, interval_unit, notes — omit to use the guess from the headers; or {mapping, consequence_map, outcome_map, extra_columns}. rbd_template: omit for the template layout; else {field: column} for the blocks sheet (with sheet) or {blocks: {sheet, header_row, mapping}, connections: {sheet, mapping: {from, to}}}.","title":"Mapping"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"import_rbd: A name for the diagram (a prefix when the file holds several). Default: the file's own names; import_excel: A name for the new dataset, study or diagram. Default: from the file and sheet.","title":"Name"},"rbd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"rbd_template only: an existing diagram of the user's. The import is saved as a new copy of it (“<name> (copy)”, or name), leaving it unchanged — unless replace=true, which overwrites its contents. The result's action says which (copied / replaced) and id is the diagram saved.","title":"Rbd Id"},"replace":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"rbd_template with rbd_id only: overwrite that diagram instead of saving a copy. Only when the user asked to replace it.","title":"Replace"},"study_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"rcm only: append the imported functions to this existing study of the user's instead of creating one.","title":"Study Id"},"header_row":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"The sheet row holding the column names (1-based; 0 = no header row). Default: guessed.","title":"Header Row"}},"required":["upload_id","target"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"uploads","x-reliafy-selector":"action","x-reliafy-action":"import_excel","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":true}},"/api/v1/rcm/create":{"post":{"operationId":"rcm.create","summary":"Save an RCM study (an FMEA / RCM worksheet) from JSON: functions › failures › modes, each mode with effects, consequence, notes and a decision","description":"Save an RCM study (an FMEA / RCM worksheet) from JSON: functions › failures › modes, each mode with effects, consequence, notes and a decision. Every node needs text. Returns the study_id, counts, evidence statuses and warnings (e.g. a fixed-interval decision without an interval won't become a task).","tags":["rcm"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The study's name; update: A new name.","title":"Name"},"functions":{"anyOf":[{"items":{"$ref":"#/components/schemas/rcm__RcmFunction"},"type":"array"},{"type":"null"}],"default":null,"description":"The worksheet: functions › failures (functional failures) › modes (failure modes), each mode with effects, consequence, notes and a decision {outcome, rtf_basis, task, interval, interval_unit, notes, evidence}. update, mode merge: a node with an id (get kind rcm_study) changes that node; one without is added.","title":"Functions"},"system":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The asset or system it covers, e.g. 'Cooling water pump P-101'. maintenance_positions' from_rcm names the new position after it (else after the study); update: A new system / asset.","title":"System"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: Optional description; update: A new description.","title":"Description"}},"required":["name"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rcm","x-reliafy-selector":"action","x-reliafy-action":"create","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/rcm/update":{"post":{"operationId":"rcm.update","summary":"Change one of the user's RCM studies: merge (add nodes without an id, change those with one), replace the whole worksheet, or set name, system or description","description":"Change one of the user's RCM studies: merge (add nodes without an id, change those with one), replace the whole worksheet, or set name, system or description. Read the ids with get kind rcm_study first.","tags":["rcm"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"study_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"One of the user's RCM study ids.","title":"Study Id"},"functions":{"anyOf":[{"items":{"$ref":"#/components/schemas/rcm__RcmFunction"},"type":"array"},{"type":"null"}],"default":null,"description":"The worksheet: functions › failures (functional failures) › modes (failure modes), each mode with effects, consequence, notes and a decision {outcome, rtf_basis, task, interval, interval_unit, notes, evidence}. update, mode merge: a node with an id (get kind rcm_study) changes that node; one without is added.","title":"Functions"},"mode":{"anyOf":[{"enum":["merge","replace"],"type":"string"},{"type":"null"}],"default":null,"description":"merge: add the functions / failures / modes without an id and change the ones with an id (the fields given replace theirs; everything else is kept). replace: functions becomes the whole worksheet — anything left out is removed (keep ids from get kind rcm_study so Maintenance positions stay linked).","title":"Mode"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The study's name; update: A new name.","title":"Name"},"system":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: The asset or system it covers, e.g. 'Cooling water pump P-101'. maintenance_positions' from_rcm names the new position after it (else after the study); update: A new system / asset.","title":"System"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"create: Optional description; update: A new description.","title":"Description"}},"required":["study_id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"rcm","x-reliafy-selector":"action","x-reliafy-action":"update","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/sharing/create_link":{"post":{"operationId":"sharing.create_link","summary":"Publish a read-only page of one of the user's own items that anyone with the URL can open, no account needed; each call makes a new link","description":"Publish a read-only page of one of the user's own items that anyone with the URL can open, no account needed; each call makes a new link. password=true returns a generated passphrase once: tell the user to send it and the link separately. Confirm with the user before sharing.","tags":["sharing"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"kind":{"anyOf":[{"enum":["model","dataset","rbd","degradation_model","strategy_analysis","rcm_study","fleet","recurrent_model","report"],"type":"string"},{"type":"null"}],"default":null,"description":"What to share: model (a fitted life model), dataset, rbd, degradation_model, strategy_analysis, rcm_study, fleet, recurrent_model (a repairable-system model) or report (made with sharing create_report).","title":"Kind"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The id of one of the user's own items of that kind (e.g. from list kind models or list kind rbds). Shared samples can't be shared.","title":"Id"},"password":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Protect the link with a passphrase Reliafy generates, returned once, in this response.","title":"Password"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Days until the link stops working (1–365). Omit for a link that lasts until revoked.","title":"Expires In Days"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who or what the link is for, e.g. 'for the client'. Shown only to the user.","title":"Label"}},"required":["kind","id"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"sharing","x-reliafy-selector":"action","x-reliafy-action":"create_link","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/sharing/create_report":{"post":{"operationId":"sharing.create_report","summary":"Several of the user's items on one print-ready share page: a title, author line, introduction and a note per item, each item as its share page shows it","description":"Several of the user's items on one print-ready share page: a title, author line, introduction and a note per item, each item as its share page shows it. Same password, expiry and revoke as create_link. Write notes from the items' results, quoting their figures as returned. Confirm first.","tags":["sharing"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"title":{"anyOf":[{"maxLength":160,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"The report's title.","title":"Title"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/sharing__ReportItem"},"maxItems":12,"minItems":1,"type":"array"},{"type":"null"}],"default":null,"description":"The sections, in order: one item each, with an optional note.","title":"Items"},"author":{"anyOf":[{"maxLength":160,"type":"string"},{"type":"null"}],"default":null,"description":"The author and/or organisation line under the title, e.g. 'Jane Doe, Acme Mining'.","title":"Author"},"introduction":{"anyOf":[{"maxLength":5000,"type":"string"},{"type":"null"}],"default":null,"description":"An introduction shown under the header (plain text).","title":"Introduction"},"password":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Protect the link with a passphrase Reliafy generates, returned once, in this response.","title":"Password"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Days until the link stops working (1–365). Omit for a link that lasts until revoked.","title":"Expires In Days"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who or what the link is for, e.g. 'for the client'. Shown only to the user.","title":"Label"}},"required":["title","items"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"sharing","x-reliafy-selector":"action","x-reliafy-action":"create_report","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/sharing/revoke_link":{"post":{"operationId":"sharing.revoke_link","summary":"Revoke a share link (by token or URL): it stops working at once","description":"Revoke a share link (by token or URL): it stops working at once. Can't be undone.","tags":["sharing"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The link's token (list kind share_links), or its full URL.","title":"Token"}},"required":["token"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"sharing","x-reliafy-selector":"action","x-reliafy-action":"revoke_link","x-reliafy-scope":"write","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/fleet/create_alert":{"post":{"operationId":"fleet.create_alert","summary":"Save an email alert on one of the user's fleets: kind above (expected failures over the horizon cross threshold), change (they move by percent) or within (x failures now expected within y_periods)","description":"Save an email alert on one of the user's fleets: kind above (expected failures over the horizon cross threshold), change (they move by percent) or within (x failures now expected within y_periods). Emails once per crossing; at most 10 per fleet. Pro.","tags":["fleet"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"fleet_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A fleet id from list kind fleets (one of the user's own fleets).","title":"Fleet Id"},"kind":{"anyOf":[{"enum":["above","change","within"],"type":"string"},{"type":"null"}],"default":null,"description":"'above' = email once each time expected failures over the horizon cross above `threshold`; 'change' = email when they move by `percent` % or more from the last alert (or today); 'within' = email once each time `x` or more failures become expected within the next `y_periods` periods.","title":"Kind"},"threshold":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"For 'above': expected failures over the fleet's horizon.","title":"Threshold"},"percent":{"anyOf":[{"exclusiveMinimum":0,"maximum":1000,"type":"number"},{"type":"null"}],"default":null,"description":"For 'change': percent, e.g. 25.","title":"Percent"},"x":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"For 'within': failures, may be fractional (0.5).","title":"X"},"y_periods":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"For 'within': periods in the fleet's period_label (e.g. months), at most its horizon; fractional allowed.","title":"Y Periods"}},"required":["fleet_id","kind"]}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"fleet","x-reliafy-selector":"action","x-reliafy-action":"create_alert","x-reliafy-scope":"write","x-reliafy-pro-only":true,"x-reliafy-heavy":false}},"/api/v1/upgrade_link":{"post":{"operationId":"upgrade_link","summary":"A link the user opens to subscribe to Reliafy Pro on Stripe's checkout page","description":"A link the user opens to subscribe to Reliafy Pro on Stripe's checkout page. Nothing is\n    charged until they complete it, so give them the link and let them decide; never say the upgrade has\n    happened. Works without Pro and when a limit is used up; a user on another paid plan gets the billing page.","tags":["upgrade_link"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"plan":{"const":"pro","default":"pro","description":"pro = Reliafy Pro (US$19/month: everything, including use from AI agents over MCP, fitting and simulation). The only plan on offer.","title":"Plan","type":"string"}}}}}},"responses":{"200":{"description":"The tool's result (as over MCP).","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-tool":"upgrade_link","x-reliafy-selector":null,"x-reliafy-action":null,"x-reliafy-scope":"read","x-reliafy-pro-only":false,"x-reliafy-heavy":false}},"/api/v1/maintenance/photos":{"post":{"operationId":"maintenance_photos.add","tags":["rest_only"],"summary":"Add a photo (JPEG, PNG, WebP or HEIC: the body, or multipart field 'file') to a position, item, location or work order. Cleaned and stripped of EXIF; at most 20 MB.","description":"Add a photo (JPEG, PNG, WebP or HEIC: the body, or multipart field 'file') to a position, item, location or work order. Cleaned and stripped of EXIF; at most 20 MB. Reliafy Maintenance users only.","parameters":[{"name":"target_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"caption","in":"query","required":false,"schema":{"type":"string","maxLength":200}}],"requestBody":{"required":true,"content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}},"required":["file"]}}}},"responses":{"200":{"description":"The photo, and any location it carried (offered, never stored)."},"401":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-rest-only":true,"x-reliafy-scope":"write"}},"/api/uploads/{upload_id}":{"put":{"operationId":"uploads.put","tags":["rest_only"],"summary":"Send a file's bytes to the single-use link from uploads create (the raw body; the link's t query parameter is the credential), then import it with its upload_id.","security":[],"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"t","in":"query","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Received: import it with its upload_id."},"404":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Refused: see detail.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-reliafy-rest-only":true}}}}