{"base":"/api/patient-model","authentication":"Research session cookie or owner-issued pm_ bearer token. Never send personal inputs to public MCP/A2A.","endpoints":{"datasets":"GET/POST /api/patient-model/datasets; GET/DELETE /api/patient-model/datasets/{id}","files":"GET/POST /api/patient-model/files; POST /api/patient-model/files/{id} actions part, complete, download, process, delete","runs":"GET/POST /api/patient-model/runs; GET/DELETE /api/patient-model/runs/{id}; POST /api/patient-model/runs/{id} replays frozen inputs","keys":"GET/POST/DELETE /api/patient-model/keys (session only)","references":"GET /api/v1/twin/patient-model/references"},"formats":{"structured":"JSON contract or CSV time,analyte,value,unit,assay,qualifier,detectionLimit,context,referenceRange (optional columns may be omitted)","genome":"Single-sample plain VCF/gVCF, GRCh37 or GRCh38 declared; resumable QC processing. Other files may be privately archived.","archive":"Multipart upload for large files. Raw-read alignment, variant calling, HLA inference and clinical pathogenicity interpretation are not performed."},"limits":{"jsonBytes":8388608,"measurementsPerDataset":20000,"clinicalFileBytes":8388608,"vcfChunkBytes":4194304,"fileBytes":107374182400},"datasetSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"origin":{"type":"string","enum":["personal","synthetic","reference"]},"source":{"type":"string","minLength":1,"maxLength":500},"measurements":{"minItems":1,"maxItems":20000,"type":"array","items":{"type":"object","properties":{"time":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"analyte":{"type":"string","enum":["glucose","c_peptide","insulin_bolus","basal_rate","carbohydrate","hba1c","egfr","autoantibody","other"]},"value":{"type":"number","minimum":0},"unit":{"type":"string","minLength":1,"maxLength":40},"assay":{"type":"string","minLength":1,"maxLength":120},"qualifier":{"default":"exact","type":"string","enum":["exact","below_detection"]},"detectionLimit":{"type":"number","exclusiveMinimum":0},"referenceRange":{"type":"string","maxLength":100},"context":{"type":"string","maxLength":300}},"required":["time","analyte","value","unit","assay"],"additionalProperties":false}},"inputsComplete":{"default":false,"type":"boolean"},"coverage":{"type":"object","properties":{"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["start","end"],"additionalProperties":false}},"required":["name","origin","source","measurements"],"additionalProperties":false},"runSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"datasetId":{"type":"string","minLength":1,"maxLength":80},"genomeDatasetId":{"type":"string","minLength":1,"maxLength":80},"mode":{"default":"coupled","type":"string","enum":["coupled","secretion"]},"trainingFraction":{"default":0.7,"type":"number","minimum":0.5,"maximum":0.85},"insulinTimeHours":{"default":3,"type":"number","minimum":0.5,"maximum":8},"mealTimeHours":{"default":1,"type":"number","minimum":0.25,"maximum":6},"scenarios":{"default":[],"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"durationHours":{"type":"number","minimum":1,"maximum":72},"nativeCapacity":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":20},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"graftCapacity":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":20},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"autoimmunityPerDay":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":5},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"allorejectionPerDay":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":5},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"innateLossPerDay":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":5},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"localProtection":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":1},"provenance":{"type":"string","enum":["measured","reference-derived","assumed"]},"source":{"type":"string","minLength":3,"maxLength":500}},"required":["value","provenance","source"],"additionalProperties":false},"systemicImmunosuppression":{"type":"boolean","const":false},"events":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"hour":{"type":"number","minimum":0,"maximum":72},"type":{"type":"string","enum":["bolus","meal","basal"]},"amount":{"type":"number","minimum":0,"maximum":300}},"required":["hour","type","amount"],"additionalProperties":false}}},"required":["name","durationHours","nativeCapacity","graftCapacity","autoimmunityPerDay","allorejectionPerDay","innateLossPerDay","localProtection","systemicImmunosuppression","events"],"additionalProperties":false}}},"required":["datasetId"],"additionalProperties":false},"method":{"version":"t1d-coupled-research-1.0.0","equations":["dI/dt = basal + bolus impulses - I/tauI","dM/dt = meal impulses - M/tauM","dG/dt = drift + kG*(trainingMedian-G) - sensitivity*I + mealGain*M","dN/dt = -autoimmunity*N/24","dB/dt = -(autoimmunity+allorejection+innateLoss)*(1-localProtection)*B/24","dJ/dt = ((N-Nbaseline)+B)*G/(G+90) - J/tauI; scenario dG/dt also includes -sensitivity*J"],"units":{"G":"mg/dL","I":"effective exogenous U","M":"effective carbohydrate g","N":"native functional capacity U/h","B":"graft functional capacity U/h","J":"counterfactual endogenous U difference","rates":"per day","time":"hours","cPeptide":"nmol/L, not a cell count or U/h conversion"},"interpretation":"Reduced research model. Native baseline secretion is absorbed in fitted glucose drift; scenarios add only changes from declared native baseline to avoid double counting. Glucose responsiveness G/(G+90), compartment time constants, immune rates and graft capacities are assumptions unless source-qualified. Local protection is a hypothesis multiplier, not a measured treatment effect.","fitting":"Bounded coordinate-descent least squares on chronological training intervals, weak ridge regularization; no held-out values enter fitting. Declared complete external-input coverage required. Irregular intervals up to one hour, longer gaps excluded and reported.","governance":"Unranked hypotheses; no automatic promotion. Agent Council alone ratifies public research conclusions. Private outputs never auto-publish."},"syntheticExample":{"name":"Synthetic dynamics fixture","origin":"synthetic","source":"Deterministic mathematical fixture, not a person or clinical evidence","inputsComplete":true,"coverage":{"start":"2026-01-01T00:00:00Z","end":"2026-01-01T12:00:00Z"},"measurements":[{"time":"2026-01-01T00:00:00Z","analyte":"glucose","value":160,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T00:15:00Z","analyte":"glucose","value":155.2026648777594,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T00:30:00Z","analyte":"glucose","value":150.78890349343683,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T00:45:00Z","analyte":"glucose","value":146.72804698428428,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T01:00:00Z","analyte":"glucose","value":142.99187863442737,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T01:15:00Z","analyte":"glucose","value":139.55443781202663,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T01:30:00Z","analyte":"glucose","value":136.391839582758,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T01:45:00Z","analyte":"glucose","value":133.4821087462028,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T02:00:00Z","analyte":"glucose","value":130.80502714195552,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T02:15:00Z","analyte":"glucose","value":128.3419931644609,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T02:30:00Z","analyte":"glucose","value":126.0758925104247,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T02:45:00Z","analyte":"glucose","value":123.99097926069084,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T03:00:00Z","analyte":"glucose","value":122.07276647028654,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T03:15:00Z","analyte":"glucose","value":120.30792550640453,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T03:30:00Z","analyte":"glucose","value":118.68419343487587,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T03:45:00Z","analyte":"glucose","value":117.1902878116114,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T04:00:00Z","analyte":"glucose","value":115.8158282869436,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T04:15:00Z","analyte":"glucose","value":114.55126447813892,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T04:30:00Z","analyte":"glucose","value":113.38780960890578,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T04:45:00Z","analyte":"glucose","value":112.31737945479456,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T05:00:00Z","analyte":"glucose","value":111.3325361702537,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T05:15:00Z","analyte":"glucose","value":110.4264366070267,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T05:30:00Z","analyte":"glucose","value":109.59278476478164,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T05:45:00Z","analyte":"glucose","value":108.82578804357861,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T06:00:00Z","analyte":"glucose","value":108.12011699419676,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T06:15:00Z","analyte":"glucose","value":107.47086828664737,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T06:30:00Z","analyte":"glucose","value":106.87353063956127,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T06:45:00Z","analyte":"glucose","value":106.32395347371187,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T07:00:00Z","analyte":"glucose","value":105.8183180718643,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T07:15:00Z","analyte":"glucose","value":105.3531110445556,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T07:30:00Z","analyte":"glucose","value":104.92509991743393,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T07:45:00Z","analyte":"glucose","value":104.53131067052642,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T08:00:00Z","analyte":"glucose","value":104.16900707336809,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T08:15:00Z","analyte":"glucose","value":103.83567167240246,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T08:30:00Z","analyte":"glucose","value":103.5289882985458,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T08:45:00Z","analyte":"glucose","value":103.2468259733693,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T09:00:00Z","analyte":"glucose","value":102.98722410207183,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T09:15:00Z","analyte":"glucose","value":102.74837885035728,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T09:30:00Z","analyte":"glucose","value":102.52863061055659,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T09:45:00Z","analyte":"glucose","value":102.32645246990332,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T10:00:00Z","analyte":"glucose","value":102.14043960083514,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T10:15:00Z","analyte":"glucose","value":101.9692994995998,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T10:30:00Z","analyte":"glucose","value":101.81184300533911,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T10:45:00Z","analyte":"glucose","value":101.66697603724745,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T11:00:00Z","analyte":"glucose","value":101.53369199239044,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T11:15:00Z","analyte":"glucose","value":101.41106475136054,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T11:30:00Z","analyte":"glucose","value":101.29824224316958,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T11:45:00Z","analyte":"glucose","value":101.19444052466402,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"},{"time":"2026-01-01T12:00:00Z","analyte":"glucose","value":101.09893833332406,"unit":"mg/dL","assay":"synthetic","qualifier":"exact"}]}}