{"openapi":"3.1.0","info":{"title":"Quorant API","version":"1.0.0","description":"Statistics computed by code, not guessed by a model. One key gives your app or AI agent the same analyses as the Quorant connector: plain-language analysis (/analyze), a number checker for AI-written text (/verify), an experiment stats engine (/experiments/scorecard) and 40+ tools for surveys, market research, study design, experiments, quality, meta-analysis, clinical statistics, customer analytics and forecasting. Nothing you send is stored. Errors follow RFC 9457 (application/problem+json).","contact":{"email":"contact@quorant.io","url":"https://www.quorant.io/api"},"termsOfService":"https://www.quorant.io/#terms"},"servers":[{"url":"https://www.quorant.io/api/v1"}],"security":[{"bearer":[]}],"tags":[{"name":"Featured","description":"Start here"},{"name":"Tools","description":"Every Quorant tool; the body is the same as the connector tool input."},{"name":"Account"}],"paths":{"/analyze":{"post":{"operationId":"analyze_run","summary":"Ask a question in plain language; Quorant picks the analysis, runs it and returns a decision-ready answer.","description":"Ask in plain words, no statistics knowledge needed: give a question (Korean or English) and, optionally, a table and/or numbers. Quorant picks the fitting method among its tools (group comparison, A/B test, poll margin, sample size, forecast, seasonality, customer segments, RFM, retention, lifetime value, key drivers, NPS, open-ended coding, banner tables, pricing, brand map, control chart, capability, diagnostic accuracy, ROC, agreement, meta-analysis, marketing mix, CUPED, survey data quality or a data summary), maps the columns, runs it and returns one decision-ready answer: route, answer, key_numbers, next_steps, reliability, assumptions, alternatives and the full result. When information is missing it returns needs (questions to ask the user). action \"plan\" only shows the chosen route and arguments. Free; nothing is stored.","tags":["Featured"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","description":"What you want to find out, in your own words"},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"numbers":{"type":"object","description":"Numbers without a table, e.g. { variants: [{ name, visitors, conversions }] }, { n, results: [{ name, share }] }, { target_moe, population }, { lsl, usl }, { sensitivity, specificity, prevalence }, { tp, fp, fn, tn }, { studies: [...] }, { values: [...], horizon }, { margin, discount_rate }"},"goal":{"type":"string","enum":["compare","drivers","forecast","segment","trend","quality","pricing","survey","experiment","customers","summary","sample_size","meta","diagnostic","agreement","marketing_mix"],"description":"Optional nudge when the question is vague"},"outcome":{"type":"string","description":"Optional: the column to explain, compare or forecast"},"group":{"type":"string","description":"Optional: the grouping column"},"date":{"type":"string","description":"Optional: the date column"},"id":{"type":"string","description":"Optional: the ID / customer column"},"codeframe":{"description":"Optional, for open-ended answers: { code: [keywords] }","anyOf":[{"type":"object"},{"type":"array","items":{"type":"object"}}]},"lang":{"type":"string","enum":["ko","en"]}},"required":["question"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/analyze/plan":{"post":{"operationId":"analyze_plan","summary":"Dry run of /analyze: which analysis would run and how the columns map, without running it.","description":"Ask in plain words, no statistics knowledge needed: give a question (Korean or English) and, optionally, a table and/or numbers. Quorant picks the fitting method among its tools (group comparison, A/B test, poll margin, sample size, forecast, seasonality, customer segments, RFM, retention, lifetime value, key drivers, NPS, open-ended coding, banner tables, pricing, brand map, control chart, capability, diagnostic accuracy, ROC, agreement, meta-analysis, marketing mix, CUPED, survey data quality or a data summary), maps the columns, runs it and returns one decision-ready answer: route, answer, key_numbers, next_steps, reliability, assumptions, alternatives and the full result. When information is missing it returns needs (questions to ask the user). action \"plan\" only shows the chosen route and arguments. Free; nothing is stored.","tags":["Featured"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"question":{"type":"string","description":"What you want to find out, in your own words"},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"numbers":{"type":"object","description":"Numbers without a table, e.g. { variants: [{ name, visitors, conversions }] }, { n, results: [{ name, share }] }, { target_moe, population }, { lsl, usl }, { sensitivity, specificity, prevalence }, { tp, fp, fn, tn }, { studies: [...] }, { values: [...], horizon }, { margin, discount_rate }"},"goal":{"type":"string","enum":["compare","drivers","forecast","segment","trend","quality","pricing","survey","experiment","customers","summary","sample_size","meta","diagnostic","agreement","marketing_mix"],"description":"Optional nudge when the question is vague"},"outcome":{"type":"string","description":"Optional: the column to explain, compare or forecast"},"group":{"type":"string","description":"Optional: the grouping column"},"date":{"type":"string","description":"Optional: the date column"},"id":{"type":"string","description":"Optional: the ID / customer column"},"codeframe":{"description":"Optional, for open-ended answers: { code: [keywords] }","anyOf":[{"type":"object"},{"type":"array","items":{"type":"object"}}]},"lang":{"type":"string","enum":["ko","en"]}},"required":["question"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/verify":{"post":{"operationId":"verify_check","summary":"Number Guard: check every number in a text (for example an AI-written report) against your data or results.","description":"Number check for reports and AI-written answers: extracts every number in the text and checks it deterministically — p-values recomputed from reported t/F/χ²/r/z, GRIM for integer data, arithmetic inside the text (relative change vs percentage points, ratios, doubled/halved, totals, shares over 100%, increase/decrease words), and support from a source: numeric values anywhere in facts (e.g. a previous tool result or your metrics) or values derived from a data table (n, column statistics, category counts and shares, group means and shares, correlations of two named columns). Rounding-aware. Returns each number with status verified / consistent / inconsistent / unsupported / skipped, evidence, the expected value, a score and the text with ⟦!wrong⟧ and ⟦?unsupported⟧ marks. Use it before sending a report or answer that contains numbers. Free; nothing is stored.","tags":["Featured"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The text to check (≤ 50,000 characters)"},"facts":{"description":"Source numbers as any JSON (object or array): e.g. a previous Quorant result, a metrics dictionary, a table as rows","anyOf":[{"type":"object"},{"type":"array"}]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"tolerance":{"type":"number","description":"Relative tolerance besides rounding (default 0.005 = 0.5%)"},"strict":{"type":"boolean","description":"true: numbers without a source also fail the check"},"integer_data":{"type":"boolean","description":"Means in the text come from integer data (Likert items, counts): run GRIM"},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/experiments/scorecard":{"post":{"operationId":"experiment_scorecard","summary":"Stats engine for experiments: many metrics × variants, adjusted p-values, guardrails and a ship / hold decision.","description":"Online-experiment statistics used by experimentation platforms. action \"cuped\": CUPED variance reduction using a pre-experiment covariate, with adjusted lift, CI, p and a sample-ratio-mismatch check (needs data). \"sequential\": always-valid p-values and CIs by the mixture SPRT, so a running test can be checked at every look without inflating false positives (counts or means per look). \"bayesian\": Bayesian A/B/n test — probability each variant is best, expected loss, lift vs control with credible intervals, a ship / keep-testing decision by the expected-loss rule and Thompson-sampling traffic shares (conversions or means). \"scorecard\": stats engine for many metrics × variants from summary statistics — differences, relative lifts with CIs, Benjamini–Hochberg adjustment, guardrails with tolerance, sample-ratio check and a ship / hold / keep-running decision. Free; nothing is stored.","tags":["Featured"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"metric":{"type":"string","description":"cuped: outcome column"},"covariate":{"type":"string","description":"cuped: same metric before the experiment"},"group":{"type":"string","description":"cuped: variant column"},"control":{"type":"string","description":"cuped: control label; bayesian: control variant name (default the first)"},"planned_share":{"type":"number","description":"cuped: planned treatment share (default 0.5)"},"looks":{"type":"array","items":{"type":"object"},"description":"sequential: per look { control_n, treatment_n, control_conversions, treatment_conversions } or means and sds"},"mde":{"type":"number","description":"sequential: smallest effect of interest (sets τ)"},"tau":{"type":"number","description":"sequential: mixing SD"},"alpha":{"type":"number","description":"Significance level"},"variants":{"type":"array","items":{"type":"object"},"description":"bayesian: [{ name, visitors, conversions }] or [{ name, n, mean, sd }] (2–10)"},"prior_alpha":{"type":"number","description":"bayesian: Beta prior α (default 1)"},"prior_beta":{"type":"number","description":"bayesian: Beta prior β (default 1)"},"loss_threshold":{"type":"number","description":"bayesian: expected-loss threshold, relative to control (default 0.01)"},"min_share":{"type":"number","description":"bayesian: minimum traffic share per variant in the Thompson allocation"},"draws":{"type":"number","description":"bayesian: Monte Carlo draws (default 100000)"},"min_sample":{"type":"number","description":"bayesian: minimum visitors (or n) per variant before a ship decision (default 1000 for conversions, 100 for means)"},"seed":{"type":"number","description":"bayesian: random seed"},"metrics":{"type":"array","items":{"type":"object"},"description":"scorecard: [{ name, variants: [{ name, visitors, conversions } or { name, n, mean, sd }], primary, guardrail, tolerance, higher_is_better }]"},"correction":{"type":"string","enum":["bh","bonferroni","none"],"description":"scorecard: multiple-comparison adjustment (default bh)"},"planned_split":{"type":"array","items":{"type":"number"},"description":"scorecard: planned traffic weights per variant for the sample-ratio check"},"lang":{"type":"string","enum":["ko","en"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/methods":{"post":{"operationId":"methods","summary":"Search Quorant methods","description":"Search Quorant's catalog of about 190 statistical and AI analysis methods by keyword, category, type or complexity level. Unlimited. Call with no arguments to list categories.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string","description":"Keywords, e.g. \"panel regression\", \"survival\", \"mediation\", \"SEM\", or a method id like Q21003"},"category":{"type":"string","description":"Filter by category name (partial match), e.g. \"Regression\""},"type":{"type":"string","description":"Filter by tag","enum":["hypothesis","ml","survey","policy","forecasting","survival","text","clustering","spatial","decision"]},"max_level":{"type":"integer","minimum":1,"maximum":6,"description":"Only methods at or below this complexity level (1 = simplest, cheapest)"},"limit":{"type":"integer","minimum":1,"maximum":60,"description":"How many to return (default 15)"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/method":{"post":{"operationId":"method","summary":"Quorant method details","description":"Details for one method by id (e.g. Q21003): category, complexity level, credits, review price, and whether it is computed with a substitute. Unlimited.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Method id, e.g. Q21003"}},"required":["id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/check_data":{"post":{"operationId":"check_data","summary":"Check data against the Quorant checklist","description":"Check data against Quorant's upload checklist (personal-data columns, header and shape, missing-value codes, column names, duplicates, outcome column). Give the CSV text, rows from a spreadsheet connector (data_rows), or a shared link to a Google Sheet / Drive / Dropbox / OneDrive / GitHub file (data_url). Nothing is stored. Unlimited.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The file content as text (CSV or TSV, header row first). Up to about 1 MB."},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"file_name":{"type":"string","description":"File name, e.g. survey.csv"},"outcome_variable":{"type":"string","description":"Optional: the outcome / dependent variable column name"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/stat_check":{"post":{"operationId":"stat_check","summary":"Check the statistics in a manuscript","description":"Audit the statistics in a manuscript or results section passed as text (read PDFs/Word files first): recompute every APA-style p-value from its t, F, r, χ² or z and degrees of freedom (allowing for rounding), flag inconsistent ones and those that change significance at .05, spot likely typos, check partial η² and d against the statistic, GRIM/GRIMMER checks for means of integer data, a reporting checklist score, a p-curve right-skew test and a shareable scorecard. English and Korean text. Free; the text is not stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The manuscript or results text (up to about 1 million characters)"},"integer_data":{"type":"boolean","description":"true if the means are of integer data (Likert items, counts): GRIM/GRIMMER on \"M = …, SD = …\" with a nearby n"},"means":{"type":"array","maxItems":200,"description":"Optional explicit means to GRIM-test","items":{"type":"object","properties":{"mean":{"type":"string","description":"Mean exactly as reported, e.g. \"3.47\""},"sd":{"type":"string","description":"SD as reported (optional)"},"n":{"type":"integer","minimum":1},"items":{"type":"integer","minimum":1}},"required":["mean","n"],"additionalProperties":false}},"only_problems":{"type":"boolean","description":"Return only results with an issue"},"lang":{"type":"string","description":"Language of the scorecard","enum":["en","ko"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/power":{"post":{"operationId":"power","summary":"Power analysis and sample size","description":"Power analysis and sample size: a priori (n for a target power), post hoc (power for a given n) or sensitivity (smallest detectable effect) for t_independent, t_paired, t_one_sample, anova_oneway, anova_rm_within, regression, correlation (exact), chi_square, proportions and mediation (Fritz & MacKinnon table). Exact noncentral distributions; effect size from a number, Cohen's small/medium/large, means and SDs, odds ratio, η², R² or two proportions. Returns a methods-section sentence in English and Korean, a power curve and n for small/medium/large effects. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"design":{"type":"string","description":"Test design","enum":["t_independent","t_paired","t_one_sample","anova_oneway","anova_rm_within","regression","correlation","chi_square","proportions","mediation"]},"effect_size":{"type":"number","description":"d (t tests), f (ANOVA), f² (regression), r (correlation), w (chi-square), h (proportions)"},"effect_label":{"type":"string","description":"Cohen's convention instead of a number","enum":["small","medium","large"]},"mean1":{"type":"number"},"mean2":{"type":"number"},"sd1":{"type":"number"},"sd2":{"type":"number"},"odds_ratio":{"type":"number"},"eta_squared":{"type":"number"},"r_squared":{"type":"number"},"p1":{"type":"number"},"p2":{"type":"number"},"n":{"type":"integer","minimum":2,"description":"Given n (per group for t_independent and proportions, total otherwise)"},"power":{"type":"number"},"alpha":{"type":"number"},"tails":{"type":"integer","enum":[1,2]},"allocation_ratio":{"type":"number"},"groups":{"type":"integer","minimum":2},"measurements":{"type":"integer","minimum":2},"correlation_among_measures":{"type":"number"},"nonsphericity_epsilon":{"type":"number"},"predictors":{"type":"integer","minimum":1},"tested_predictors":{"type":"integer","minimum":1},"df":{"type":"integer","minimum":1},"a_path":{"type":"string","description":"mediation: standardized a path (e.g. \"0.3\") or S/H/M/L"},"b_path":{"type":"string","description":"mediation: standardized b path or S/H/M/L"},"attrition":{"type":"number"},"observed":{"type":"boolean"},"lang":{"type":"string","description":"Language of the main methods sentence","enum":["en","ko"]}},"required":["design"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/table1":{"post":{"operationId":"table1","summary":"Make a Table 1","description":"Make a \"Table 1\" from CSV text, spreadsheet rows (data_rows) or a shared link (data_url): overall and by group, mean (SD) or median [Q1, Q3] for skewed variables, n (%) for categorical ones, group tests (Welch t / ANOVA / Mann–Whitney / Kruskal–Wallis / χ² / Fisher), standardized mean differences and missing counts. Skips identifier and personal-data columns. Returns markdown and CSV. Free; the data is not stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"group":{"type":"string","description":"Grouping column; omit for an overall table"},"variables":{"type":"array","items":{"type":"string"},"maxItems":100},"categorical":{"type":"array","items":{"type":"string"}},"continuous":{"type":"array","items":{"type":"string"}},"nonnormal":{"type":"array","items":{"type":"string"}},"missing_codes":{"type":"array","items":{"type":"string"},"description":"Values meaning \"missing\", e.g. [\"999\", \"-1\"]"},"decimals":{"type":"integer","minimum":0,"maximum":4},"p_values":{"type":"boolean"},"smd":{"type":"boolean"},"overall":{"type":"boolean"},"lang":{"type":"string","description":"Labels in English or Korean","enum":["en","ko"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/codebook":{"post":{"operationId":"codebook","summary":"Make a codebook","description":"Make a codebook (data dictionary) from CSV text, spreadsheet rows or a shared link: type, n, missing, distinct values, range or levels, and flags (personal data, missing codes like 999, numbers mixed with text, constant columns, skew). Returns markdown and CSV with an empty label column. Free; the data is not stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"lang":{"type":"string","description":"Labels in English or Korean","enum":["en","ko"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/choose_test":{"post":{"operationId":"choose_test","summary":"Which statistical test fits?","description":"Decide which statistical test or model fits a design (goal, outcome type, groups, paired/repeated, n, normality, covariates, clustering). Returns the method with its Quorant id, the decision path, assumptions to check, alternatives, post hoc tests, the effect size to report and the matching quorant_power design. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"goal":{"type":"string","description":"What the analysis should do","enum":["compare_groups","relationship","predict","reliability","factor_structure","mediation","moderation","causal_effect","time_to_event","change_over_time"]},"outcome_type":{"type":"string","description":"Outcome type","enum":["continuous","ordinal","binary","nominal","count","time_to_event"]},"predictor_type":{"type":"string","description":"relationship: type of the other variable","enum":["continuous","ordinal","binary","nominal"]},"groups":{"type":"integer","minimum":2},"design":{"type":"string","description":"Design","enum":["independent","paired","repeated","mixed"]},"measurements":{"type":"integer","minimum":2},"n":{"type":"integer","minimum":2},"n_per_group":{"type":"integer","minimum":2},"normal":{"type":"boolean"},"equal_variances":{"type":"boolean"},"covariates":{"type":"boolean"},"controls":{"type":"boolean"},"clustered":{"type":"boolean"},"predictors":{"type":"integer","minimum":1},"outcomes":{"type":"integer","minimum":1},"factors":{"type":"integer","minimum":1},"theory":{"type":"boolean"},"latent":{"type":"boolean"},"causal_design":{"type":"string","description":"causal_effect design","enum":["observational","before_after_with_control","cutoff","single_series"]},"lang":{"type":"string","description":"Language","enum":["en","ko"]}},"required":["goal"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/apa":{"post":{"operationId":"apa","summary":"Format a result in APA style","description":"Format a test result in APA 7 style (t, F, χ², r, z, U, W, H) with p computed from the statistic when not given (and a warning when a given p does not match), effect sizes and a CI, plus result sentences in English and Korean. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"test":{"type":"string","description":"Test statistic","enum":["t","z","F","chi2","r","U","W","H"]},"statistic":{"type":"number"},"df":{"type":"number"},"df1":{"type":"number"},"df2":{"type":"number"},"n":{"type":"integer"},"p":{"type":"number"},"effect_sizes":{"type":"object","properties":{"d":{"type":"number"},"g":{"type":"number"},"eta2":{"type":"number"},"eta2p":{"type":"number"},"omega2":{"type":"number"},"r":{"type":"number"},"R2":{"type":"number"},"beta":{"type":"number"},"V":{"type":"number"},"OR":{"type":"number"},"phi":{"type":"number"}},"additionalProperties":false},"ci":{"type":"object","properties":{"level":{"type":"number"},"bounds":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"leading_zero":{"type":"boolean"}},"additionalProperties":false},"what":{"type":"string","description":"What was tested, for the sentence"},"alpha":{"type":"number"}},"required":["test","statistic"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/poll":{"post":{"operationId":"poll","summary":"Read an opinion poll","description":"Read an opinion poll like a statistician: margin of error, whether the lead is real (both the news-style \"outside the margin\" rule and the correct test for a gap within one poll), the chance the leader is really ahead, whether a change since the last poll is real, and whether a stated margin matches the sample size. Or, with target_moe, how many respondents a survey needs. Plain-language verdict in Korean or English and an optional shareable card (SVG). Free, offline.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"n":{"type":"integer","minimum":10,"description":"Number of respondents"},"results":{"type":"array","maxItems":12,"description":"Shares from ONE question, in percent","items":{"type":"object","properties":{"name":{"type":"string"},"share":{"type":"number","description":"Percent, e.g. 42 for 42%"}},"required":["name","share"],"additionalProperties":false}},"confidence":{"type":"number","description":"Confidence level in percent (default 95)"},"stated_moe":{"type":"number","description":"Margin of error the report states, in percentage points (e.g. 3.1)"},"design_effect":{"type":"number","description":"Design effect for weighted/quota samples (default 1)"},"population":{"type":"integer","description":"Population size if small (finite population correction)"},"previous":{"type":"object","description":"An earlier poll to compare: {n, results}","properties":{"n":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"share":{"type":"number"}},"required":["name","share"]}}}},"target_moe":{"type":"number","description":"Sample-size mode: desired margin in percentage points (e.g. 3)"},"expected_share":{"type":"number","description":"Sample-size mode: expected share in percent (default 50, the most conservative)"},"response_rate":{"type":"number","description":"Sample-size mode: expected response rate in percent, to get the number of invitations"},"title":{"type":"string","description":"Card title"},"include_card":{"type":"boolean","description":"Also return the shareable card as SVG markup (to show or save)"},"lang":{"type":"string","enum":["ko","en"],"description":"Language (default ko)"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/test_result":{"post":{"operationId":"test_result","summary":"What does my test result mean?","description":"Explain what a medical or screening test result really means (Bayes): from sensitivity, specificity and prevalence (or the pre-test chance), the chance the result is right, told with natural frequencies (\"of 1,000 people…\"), likelihood ratios, repeated tests, and an optional \"100 people\" picture card (SVG). Educational, not medical advice. Free, offline.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sensitivity":{"type":"number","description":"Percent of people with the condition who test positive, e.g. 90"},"specificity":{"type":"number","description":"Percent of people without it who test negative, e.g. 95"},"prevalence":{"type":"number","description":"Percent who have it in a group like the person (or their pre-test chance), e.g. 1 for 1%"},"result":{"type":"string","enum":["positive","negative"],"description":"Default positive"},"tests":{"type":"integer","minimum":1,"maximum":5,"description":"Number of independent positive (or negative) results in a row"},"title":{"type":"string"},"include_card":{"type":"boolean","description":"Also return the shareable card as SVG markup (to show or save)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["sensitivity","specificity","prevalence"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/ab_test":{"post":{"operationId":"ab_test","summary":"Judge an A/B test","description":"Judge an A/B test (thumbnails, ads, landing pages, emails, buttons): conversion rates, difference and relative lift with confidence intervals, p-value (z or Fisher), the probability that the variant beats the control (Bayesian), the sample needed to detect a chosen lift and how many more visitors that is, a sample-ratio-mismatch alarm and a plain verdict (win / lose / too early / no difference), plus an optional card (SVG). Free, offline.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"variants":{"type":"array","minItems":2,"maxItems":6,"description":"The first is the control","items":{"type":"object","properties":{"name":{"type":"string"},"visitors":{"type":"integer","minimum":1},"conversions":{"type":"integer","minimum":0}},"required":["visitors","conversions"],"additionalProperties":false}},"mde_relative":{"type":"number","description":"Smallest relative lift worth detecting, in percent (default 10)"},"alpha":{"type":"number","description":"Significance level (default 0.05)"},"expected_split":{"type":"array","items":{"type":"number"},"description":"Planned traffic split, e.g. [50, 50]"},"title":{"type":"string"},"include_card":{"type":"boolean","description":"Also return the shareable card as SVG markup (to show or save)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["variants"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/fact_check":{"post":{"operationId":"fact_check","summary":"Fact-check the numbers in a text","description":"Fact-check how numbers are used in a news article, post, ad or press release: percent vs percentage points, relative risk without a baseline, correlation sold as cause, averages of skewed money values, \"up to\" claims, opt-in polls, missing sample size or margin, a stated margin that does not fit the sample size, counts without rates, tiny samples, absolute claims. Each flag quotes the sentence and says what to ask. Rule-based, Korean and English. Free, offline.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The article or post text"},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/survey_check":{"post":{"operationId":"survey_check","summary":"Check survey questions","description":"Check survey questions before sending them: leading or loaded wording, double-barreled questions, absolutes, double negatives, vague frequencies, sensitive topics, long questions, jargon, and answer options (unbalanced scales, no \"don't know\", overlapping or missing ranges). One question per line, options on the lines below. Korean and English. Free, offline.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The questions (and options), one per line"},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/insights":{"post":{"operationId":"insights","summary":"My data at a glance","description":"My data at a glance: plain-language findings from a spreadsheet (household budget, sales, fitness, any CSV) — trend over time, highest and lowest periods, biggest jump, top categories and their share, variables that move together, unusual values, empty columns — and a self-contained HTML report with charts. Personal-data columns are left out. Give CSV text, spreadsheet rows (data_rows) or a shared link (data_url); the data is not stored. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"include_html":{"type":"boolean","description":"Also return the HTML report (to show as a page)"},"metric":{"type":"string","description":"Main numeric column (default: guessed, e.g. amount/sales)"},"time_column":{"type":"string","description":"Date column (default: guessed)"},"category":{"type":"string","description":"Category column (default: guessed)"},"aggregate":{"type":"string","enum":["sum","mean"],"description":"Sum or average per period/category (default: sum for amounts and counts)"},"grain":{"type":"string","enum":["month"],"description":"Group daily dates by month"},"title":{"type":"string","description":"Report title"},"lang":{"type":"string","enum":["ko","en"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/analysis_plan":{"post":{"operationId":"analysis_plan","summary":"Write an analysis plan","description":"Write a statistical analysis plan (SAP) before data collection or analysis, as a consultant would: for each hypothesis the test (same rules as quorant_choose_test), assumptions and fallbacks, effect size to report and an exact power analysis; then the overall sample size (adjusted for multiple hypotheses and attrition), multiplicity correction, missing-data plan, sensitivity analyses, software and data management. Also returns the short texts IRB/ethics forms, grant proposals and preregistrations (OSF/AsPredicted) ask for. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Study title"},"objective":{"type":"string","description":"Aim of the study (one or two sentences)"},"design_summary":{"type":"string","description":"Design: cross-sectional/longitudinal, experimental/observational, sampling"},"hypotheses":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"object","properties":{"id":{"type":"string","description":"e.g. H1"},"text":{"type":"string","description":"The hypothesis in words"},"goal":{"type":"string","enum":["compare_groups","relationship","predict","reliability","factor_structure","mediation","moderation","causal_effect","time_to_event","change_over_time"]},"outcome_type":{"type":"string","enum":["continuous","ordinal","binary","nominal","count","time_to_event"]},"outcome":{"type":"string","description":"Outcome variable"},"predictor":{"type":"string","description":"Predictor / grouping variable"},"groups":{"type":"integer","minimum":2},"design":{"type":"string","enum":["independent","paired","repeated","mixed"]},"measurements":{"type":"integer","minimum":2},"predictors":{"type":"integer","minimum":1},"effect_size":{"type":"number","description":"Expected effect (d, f, f², r, w or h for that design); omit to use the medium benchmark"},"a_path":{"type":["number","string"]},"b_path":{"type":["number","string"]},"covariates":{"type":"array","items":{"type":"string"}},"clustered":{"type":"boolean"},"exploratory":{"type":"boolean"}}}},"purpose":{"type":"string","enum":["thesis","journal","grant","irb","preregistration","report"]},"alpha":{"type":"number"},"power":{"type":"number"},"attrition":{"type":"number","description":"Expected dropout share, e.g. 0.1"},"correction":{"type":"string","enum":["holm","bonferroni","fdr","none"]},"missing_plan":{"type":"string","description":"Your own missing-data plan (replaces the default text)"},"software":{"type":"string","description":"Software you will use"},"sensitivity":{"type":"array","items":{"type":"string"}},"lang":{"type":"string","enum":["ko","en"]}},"required":["hypotheses"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/reviewer_response":{"post":{"operationId":"reviewer_response","summary":"Plan a response to reviewers","description":"Journal reviewer or thesis committee comments → a point-by-point plan: splits the decision letter into numbered comments per reviewer, tags the statistical issue each raises (sample size, missing data, assumptions, multiple comparisons, effect sizes, common method bias, reliability/validity, endogeneity, multicollinearity, mediation/moderation, controls, robustness, nesting, spatial/serial dependence, model fit, method choice, reporting, sampling, data availability), says whether it needs an explanation, a reporting fix or a new analysis (with the Quorant method that runs it) and drafts a reply with [placeholders] for your numbers, plus a full response letter. Read the letter from Gmail/Drive/PDF first and pass the text. Free; the text is not stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The reviewer / committee comments"},"kind":{"type":"string","enum":["journal","committee"]},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/explain_output":{"post":{"operationId":"explain_output","summary":"Explain my statistical output","description":"Explain statistical output pasted from SPSS, R, Stata or jamovi/JASP (t tests incl. the Levene row, ANOVA, correlations, chi-square, linear/logistic regression, Cronbach's alpha) in plain words: what each result means, effect sizes, an APA sentence, a recomputation check, and the mistakes people make reading that table (Sig. .000, B vs β, adjusted R²). Falls back to checking APA statistics written in text. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The output text (copy the whole table with its header)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/defense_prep":{"post":{"operationId":"defense_prep","summary":"Prepare for the defense","description":"Thesis defense / committee preparation for the methods used: the questions committees ask (why this method, sample size, missing data, assumptions, practical significance, causality, generalisation, multiple testing, plus method-specific ones for t-test/ANOVA, regression, logistic, SEM/CFA, mediation, moderation, multilevel, panel/causal designs, survival, factor analysis, machine learning, time series/spatial), why they ask, an answer outline with [placeholders], what to have ready, and a slide outline. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"methods":{"type":"array","items":{"type":"string"},"description":"Method names, e.g. [\"hierarchical regression\", \"moderated mediation\"]"},"description":{"type":"string","description":"Or a short description of the analysis"},"kind":{"type":"string","enum":["thesis","journal"]},"max_questions":{"type":"integer","minimum":4,"maximum":40},"lang":{"type":"string","enum":["ko","en"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/crosstab":{"post":{"operationId":"crosstab","summary":"Make banner tables","description":"Banner tables (교차표) as survey firms deliver them: every question down the side, Total and each level of the banner variables (e.g. gender, age group, region) across the top, column percentages with bases, significance letters (column-proportion z-tests; Welch t-tests for numeric questions), chi-square per banner, optional weights and Bonferroni. Give CSV text, spreadsheet rows (data_rows) or a shared link (data_url). Personal-data columns are skipped. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"banner":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Column(s) to break results by"},"rows":{"type":"array","items":{"type":"string"},"description":"Questions to tabulate (default: all other columns)"},"weight":{"type":"string","description":"Weight column"},"alpha":{"type":"number"},"bonferroni":{"type":"boolean"},"min_base":{"type":"integer"},"decimals":{"type":"integer","minimum":0,"maximum":3},"lang":{"type":"string","enum":["ko","en"]}},"required":["banner"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/disclosure":{"post":{"operationId":"disclosure","summary":"Draft disclosure statements","description":"Draft the statements journals and universities require: acknowledgement of statistical support, generative-AI use disclosure, data and code availability, the analyst's role, a CRediT contribution line, and Quorant's integrity rules (no ghost-writing, no p-hacking). Korean or English; fill the [placeholders]. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kinds":{"type":"array","items":{"type":"string","enum":["acknowledgement","ai_use","data_availability","analyst_role","contribution","integrity"]}},"analyst":{"type":"string","description":"Who provided statistical support (default Quorant)"},"services":{"type":"array","items":{"type":"string","enum":["diagnosis","analysis","review","power","tables","stat_check","consultation"]}},"ai_tools":{"type":"array","items":{"type":"string"}},"ai_uses":{"type":"array","items":{"type":"string"}},"repository":{"type":"string","description":"Data/code repository or DOI"},"restricted":{"type":"boolean"},"restriction_reason":{"type":"string","description":"Why the data cannot be shared"},"lang":{"type":"string","enum":["ko","en"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/survey":{"post":{"operationId":"survey","summary":"Survey weighting and estimates","description":"Survey statistics as survey research firms and statistical agencies run them. action \"weight\": rake the sample to population margins (targets) by iterative proportional fitting with trimming; returns the weight column (csv), design effect, effective n and margin of error. \"estimate\": weighted proportions/means with design-based SEs (Taylor linearisation; optional strata and cluster/PSU), CIs and design effects, by group. \"nps\": Net Promoter Score with SE, CI and group/wave comparisons (from a 0–10 column or counts in groups). \"quality\": respondent data-quality flags — speeders (duration), straight-liners (grids), duplicates, high item non-response, out-of-range values. \"suppress\": disclosure control for a frequency table (threshold + secondary suppression). \"code_open_ends\": code open-ended answers with a keyword codeframe (multi-code, nets, exclusions, uncoded examples, 0/1 code columns as csv), or without a codeframe draft one from frequent words and phrases. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["weight","estimate","nps","quality","suppress","code_open_ends"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"targets":{"type":"object","description":"weight: { variable: { level: share, percentage or count } }"},"base_weight":{"type":"string","description":"weight: existing design weight column"},"trim_min":{"type":"number","description":"weight: lower trim, multiple of the mean weight (default 0.3)"},"trim":{"type":"boolean","description":"weight: false turns trimming off"},"max_iter":{"type":"number","description":"weight: maximum raking iterations (default 100)"},"tolerance":{"type":"number","description":"weight: convergence tolerance on margins (default 1e-6)"},"trim_max":{"type":"number","description":"weight: upper trim (default 3)"},"weight_name":{"type":"string","description":"weight: name of the new column"},"scale_to":{"type":"string","enum":["sample","population"]},"population":{"type":"number","description":"weight: population total when scale_to = population"},"weight":{"type":"string","description":"estimate / nps: weight column"},"variables":{"type":"array","items":{"type":"string"},"description":"estimate: columns to estimate"},"by":{"type":"string","description":"estimate / nps: group column"},"strata":{"type":"string","description":"estimate: strata column"},"cluster":{"type":"string","description":"estimate: cluster (PSU) column"},"max_levels":{"type":"number","description":"estimate: numeric columns with more distinct values than this are treated as means (default 10)"},"score":{"type":"string","description":"nps: 0–10 recommendation column"},"groups":{"type":"array","items":{"type":"object"},"description":"nps without data: [{ name, promoters, passives, detractors }]"},"id":{"type":"string","description":"quality: respondent ID column"},"duration":{"type":"string","description":"quality: completion time column"},"speed_ratio":{"type":"number","description":"quality: speeder cut-off as share of the median (default 0.5)"},"grids":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"quality: grids, each a list of columns"},"max_missing":{"type":"number","description":"quality: share of blank items that flags a respondent (default 0.5)"},"ranges":{"type":"object","description":"quality: { column: [min, max] }"},"table":{"type":"array","items":{"type":"array","items":{"type":"number"}},"description":"suppress: counts table (rows of numbers, no totals)"},"threshold":{"type":"number","description":"suppress: smallest publishable count (default 5)"},"symbol":{"type":"string","description":"suppress: symbol for hidden cells (default x)"},"text":{"type":"string","description":"code_open_ends: open-ended answer column"},"codeframe":{"description":"code_open_ends: { code: [keywords] } or [{ code, keywords, exclude, net }]; keywords ending in * match word prefixes; omit to draft a codeframe","anyOf":[{"type":"object"},{"type":"array","items":{"type":"object"}}]},"max_terms":{"type":"number","description":"code_open_ends draft: number of frequent words to list (default 40)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/market_research":{"post":{"operationId":"market_research","summary":"Market research analytics","description":"Market-research analytics used by research agencies. action \"drivers\": key driver analysis — Shapley R² decomposition and Johnson relative weights with bootstrap CIs and an importance × performance quadrant. \"maxdiff\": best–worst scaling from one row per task (respondent, shown \"A;B;C;D\", best, worst) — counts and aggregate logit utilities, shares of preference. \"turf\": reach and frequency of item portfolios (exhaustive or greedy). \"van_westendorp\": price sensitivity meter — PMC, OPP, IPP, PME and the acceptable range from four price questions. \"gabor_granger\": demand and revenue curves and the revenue-maximising price (price columns or aggregated points). \"conjoint_simulator\": shares of preference for product scenarios from conjoint part-worths, sensitivity and willingness to pay. \"correspondence\": correspondence analysis of a brand × attribute (or any two-way) table — perceptual-map coordinates, inertia by dimension, quality and contributions (summary table, table param, or respondent data with row_var/column_var). Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["drivers","maxdiff","turf","van_westendorp","gabor_granger","conjoint_simulator","correspondence"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"outcome":{"type":"string","description":"drivers: overall outcome (e.g. satisfaction)"},"drivers":{"type":"array","items":{"type":"string"},"description":"drivers: driver columns (2–15)"},"bootstrap":{"type":"number","description":"drivers: bootstrap resamples (default 200)"},"respondent":{"type":"string","description":"maxdiff: respondent column"},"shown":{"type":"string","description":"maxdiff: column with the items shown (default \"shown\")"},"best":{"type":"string","description":"maxdiff: best choice column"},"worst":{"type":"string","description":"maxdiff: worst choice column"},"items":{"type":"array","items":{"type":"string"},"description":"turf: item columns"},"threshold":{"type":"number","description":"turf: value at or above which an item counts as accepted (e.g. 4 on a 5-point scale)"},"size":{"type":"number","description":"turf: largest portfolio size (default 3)"},"weight":{"type":"string","description":"turf / correspondence: weight column"},"id":{"type":"string","description":"turf: ID column to leave out of the items"},"too_cheap":{"type":"string","description":"van_westendorp: \"too cheap\" price column"},"cheap":{"type":"string","description":"van_westendorp: \"cheap / bargain\" column"},"expensive":{"type":"string","description":"van_westendorp: \"getting expensive\" column"},"too_expensive":{"type":"string","description":"van_westendorp: \"too expensive\" column"},"keep_inconsistent":{"type":"boolean","description":"van_westendorp: keep answers that are not in increasing order"},"price_columns":{"type":"array","items":{"type":"string"},"description":"gabor_granger: columns, one per price"},"buy_threshold":{"type":"number","description":"gabor_granger: intent score that counts as buying (e.g. 4)"},"points":{"type":"array","items":{"type":"object"},"description":"gabor_granger without data: [{ price, buyers, n }]"},"part_worths":{"type":"object","description":"conjoint_simulator: { attribute: { level: utility } }"},"products":{"type":"array","items":{"type":"object"},"description":"conjoint_simulator: [{ name, attribute: level, … }]"},"price_attribute":{"type":"string","description":"conjoint_simulator: the price attribute (levels are prices)"},"price_coefficient":{"type":"number","description":"conjoint_simulator: utility per currency unit if price is continuous"},"none_utility":{"type":"number","description":"conjoint_simulator: utility of \"none\""},"scale":{"type":"number","description":"conjoint_simulator: logit scale (default 1)"},"table":{"type":"array","items":{"type":"array","items":{"type":"number"}},"description":"correspondence without data: rows of counts"},"row_labels":{"type":"array","items":{"type":"string"},"description":"correspondence: row labels (e.g. brands)"},"column_labels":{"type":"array","items":{"type":"string"},"description":"correspondence: column labels (e.g. attributes)"},"row_var":{"type":"string","description":"correspondence with respondent data: row variable"},"column_var":{"type":"string","description":"correspondence with respondent data: column variable"},"dimensions":{"type":"number","description":"correspondence: dimensions to report (default 2)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/study_design":{"post":{"operationId":"study_design","summary":"Study and sampling design","description":"Design calculations used by clinical research organisations, evaluation firms and audit statisticians. action \"trial_size\": superiority / non-inferiority / equivalence sample size for means or proportions, or log-rank events and patients for survival; cluster designs and dropout; protocol sentence. \"group_sequential\": Lan–DeMets alpha spending (O'Brien–Fleming- or Pocock-type) boundaries for interim analyses and the sample-size inflation factor. \"mdes\": minimum detectable effect for individual or cluster-randomised designs with covariates (or clusters needed for a target MDES). \"allocation\": proportional / Neyman / cost-optimal stratified allocation with weights. \"audit_sampling\": attribute sampling size and evaluation, monetary-unit sampling size and upper misstatement limit. Free.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["trial_size","group_sequential","mdes","allocation","audit_sampling"]},"hypothesis":{"type":"string","enum":["superiority","non_inferiority","equivalence"]},"endpoint":{"type":"string","enum":["means","proportions","survival"]},"alpha":{"type":"number","description":"Significance level"},"power":{"type":"number","description":"Power"},"sd":{"type":"number","description":"trial_size means: common SD"},"difference":{"type":"number","description":"trial_size means: expected difference"},"margin":{"type":"number","description":"trial_size: non-inferiority / equivalence margin"},"p_control":{"type":"number","description":"trial_size proportions: control proportion"},"p_treatment":{"type":"number","description":"trial_size proportions: treatment proportion"},"higher_is_better":{"type":"boolean"},"hazard_ratio":{"type":"number","description":"trial_size survival: expected hazard ratio"},"margin_hr":{"type":"number","description":"trial_size survival NI: margin on the HR (> 1)"},"event_probability":{"type":"number","description":"trial_size survival: share with the event during follow-up"},"allocation_ratio":{"type":"number","description":"n2/n1 (default 1)"},"dropout":{"type":"number","description":"Expected dropout share"},"cluster_size":{"type":"number","description":"Cluster size (trial_size, mdes)"},"icc":{"type":"number","description":"Intra-cluster correlation"},"looks":{"type":"number","description":"group_sequential: number of analyses incl. final"},"information":{"type":"array","items":{"type":"number"},"description":"group_sequential: information fractions ending at 1"},"spending":{"type":"string","enum":["obf","pocock","power"]},"rho":{"type":"number","description":"group_sequential: exponent of the power-family spending function (default 3)"},"sides":{"type":"integer","enum":[1,2]},"fixed_n":{"type":"number","description":"group_sequential: fixed-design sample size to inflate"},"clusters":{"type":"number","description":"mdes: number of clusters"},"n":{"type":"number","description":"mdes: individual design n; allocation: total sample"},"r2_individual":{"type":"number","description":"mdes: R² of individual covariates"},"r2_cluster":{"type":"number","description":"mdes: R² of cluster covariates"},"treatment_share":{"type":"number","description":"mdes: share treated"},"target_mdes":{"type":"number","description":"mdes: solve for clusters / n at this MDES"},"cluster_covariates":{"type":"number","description":"mdes: number of cluster-level covariates"},"covariates":{"type":"number","description":"mdes: number of individual covariates (individual design)"},"tails":{"type":"integer","enum":[1,2]},"strata":{"type":"array","items":{"type":"object"},"description":"allocation: [{ name, population, sd or p, cost }]"},"method":{"type":"string","enum":["proportional","neyman","optimal"]},"mode":{"type":"string","enum":["attribute","mus"]},"confidence":{"type":"number","description":"audit_sampling: confidence (default 0.95)"},"tolerable_rate":{"type":"number","description":"audit_sampling attribute: tolerable deviation rate"},"expected_rate":{"type":"number","description":"audit_sampling attribute: expected rate"},"sample_size":{"type":"number","description":"audit_sampling: sample size to evaluate"},"deviations":{"type":"number","description":"audit_sampling attribute: deviations found"},"book_value":{"type":"number","description":"audit_sampling mus: population book value"},"tolerable_misstatement":{"type":"number","description":"audit_sampling mus"},"expected_misstatement":{"type":"number","description":"audit_sampling mus"},"expansion_factor":{"type":"number","description":"audit_sampling mus: expansion factor for expected misstatement (default by confidence)"},"errors":{"type":"array","items":{"type":"object"},"description":"audit_sampling mus evaluation: [{ book, audit }]"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/experiment":{"post":{"operationId":"experiment","summary":"Experiment statistics","description":"Online-experiment statistics used by experimentation platforms. action \"cuped\": CUPED variance reduction using a pre-experiment covariate, with adjusted lift, CI, p and a sample-ratio-mismatch check (needs data). \"sequential\": always-valid p-values and CIs by the mixture SPRT, so a running test can be checked at every look without inflating false positives (counts or means per look). \"bayesian\": Bayesian A/B/n test — probability each variant is best, expected loss, lift vs control with credible intervals, a ship / keep-testing decision by the expected-loss rule and Thompson-sampling traffic shares (conversions or means). \"scorecard\": stats engine for many metrics × variants from summary statistics — differences, relative lifts with CIs, Benjamini–Hochberg adjustment, guardrails with tolerance, sample-ratio check and a ship / hold / keep-running decision. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["cuped","sequential","bayesian","scorecard"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"metric":{"type":"string","description":"cuped: outcome column"},"covariate":{"type":"string","description":"cuped: same metric before the experiment"},"group":{"type":"string","description":"cuped: variant column"},"control":{"type":"string","description":"cuped: control label; bayesian: control variant name (default the first)"},"planned_share":{"type":"number","description":"cuped: planned treatment share (default 0.5)"},"looks":{"type":"array","items":{"type":"object"},"description":"sequential: per look { control_n, treatment_n, control_conversions, treatment_conversions } or means and sds"},"mde":{"type":"number","description":"sequential: smallest effect of interest (sets τ)"},"tau":{"type":"number","description":"sequential: mixing SD"},"alpha":{"type":"number","description":"Significance level"},"variants":{"type":"array","items":{"type":"object"},"description":"bayesian: [{ name, visitors, conversions }] or [{ name, n, mean, sd }] (2–10)"},"prior_alpha":{"type":"number","description":"bayesian: Beta prior α (default 1)"},"prior_beta":{"type":"number","description":"bayesian: Beta prior β (default 1)"},"loss_threshold":{"type":"number","description":"bayesian: expected-loss threshold, relative to control (default 0.01)"},"min_share":{"type":"number","description":"bayesian: minimum traffic share per variant in the Thompson allocation"},"draws":{"type":"number","description":"bayesian: Monte Carlo draws (default 100000)"},"min_sample":{"type":"number","description":"bayesian: minimum visitors (or n) per variant before a ship decision (default 1000 for conversions, 100 for means)"},"seed":{"type":"number","description":"bayesian: random seed"},"metrics":{"type":"array","items":{"type":"object"},"description":"scorecard: [{ name, variants: [{ name, visitors, conversions } or { name, n, mean, sd }], primary, guardrail, tolerance, higher_is_better }]"},"correction":{"type":"string","enum":["bh","bonferroni","none"],"description":"scorecard: multiple-comparison adjustment (default bh)"},"planned_split":{"type":"array","items":{"type":"number"},"description":"scorecard: planned traffic weights per variant for the sample-ratio check"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/marketing_mix":{"post":{"operationId":"marketing_mix","summary":"Marketing mix model","description":"Marketing mix model: weekly sales and media spend → geometric adstock and Hill saturation per channel, ridge regression with trend, seasonality and controls, channel contributions, ROI, marginal ROI, a holdout check and a budget re-allocation hint. Give CSV, rows or a link. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"outcome":{"type":"string","description":"Sales / conversions column"},"channels":{"type":"array","items":{"type":"string"},"description":"Media spend columns"},"controls":{"type":"array","items":{"type":"string"},"description":"Control columns (price, promotion, holidays)"},"season_period":{"type":"number","description":"Periods per year (default 52)"},"ridge":{"type":"number","description":"Ridge strength (default 0.01)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["outcome","channels"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/uplift":{"post":{"operationId":"uplift","summary":"Uplift model","description":"Uplift (who responds to the treatment) model from a randomised campaign or experiment: cross-fitted T-learner (logistic for 0/1 outcomes), uplift by decile, Qini curve and coefficient, share predicted to respond negatively. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"treatment":{"type":"string","description":"0/1 treatment column"},"outcome":{"type":"string","description":"Outcome column"},"features":{"type":"array","items":{"type":"string"},"description":"Numeric feature columns"},"lang":{"type":"string","enum":["ko","en"]}},"required":["treatment","outcome","features"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/small_area":{"post":{"operationId":"small_area","summary":"Small-area estimates","description":"Small-area estimation (as statistical agencies do it): Fay–Herriot area-level EBLUP from direct survey estimates, their sampling variances and area covariates — REML model variance, shrinkage, Prasad–Rao MSE and CVs. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"area":{"type":"string","description":"Area column"},"estimate":{"type":"string","description":"Direct estimate column"},"variance":{"type":"string","description":"Sampling variance column"},"covariates":{"type":"array","items":{"type":"string"},"description":"Area-level covariates"},"lang":{"type":"string","enum":["ko","en"]}},"required":["area","estimate","variance"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/analyze":{"post":{"operationId":"analyze","summary":"Ask Quorant (plain-language analysis)","description":"Ask in plain words, no statistics knowledge needed: give a question (Korean or English) and, optionally, a table and/or numbers. Quorant picks the fitting method among its tools (group comparison, A/B test, poll margin, sample size, forecast, seasonality, customer segments, RFM, retention, lifetime value, key drivers, NPS, open-ended coding, banner tables, pricing, brand map, control chart, capability, diagnostic accuracy, ROC, agreement, meta-analysis, marketing mix, CUPED, survey data quality or a data summary), maps the columns, runs it and returns one decision-ready answer: route, answer, key_numbers, next_steps, reliability, assumptions, alternatives and the full result. When information is missing it returns needs (questions to ask the user). action \"plan\" only shows the chosen route and arguments. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["run","plan"]},"question":{"type":"string","description":"What you want to find out, in your own words"},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"numbers":{"type":"object","description":"Numbers without a table, e.g. { variants: [{ name, visitors, conversions }] }, { n, results: [{ name, share }] }, { target_moe, population }, { lsl, usl }, { sensitivity, specificity, prevalence }, { tp, fp, fn, tn }, { studies: [...] }, { values: [...], horizon }, { margin, discount_rate }"},"goal":{"type":"string","enum":["compare","drivers","forecast","segment","trend","quality","pricing","survey","experiment","customers","summary","sample_size","meta","diagnostic","agreement","marketing_mix"],"description":"Optional nudge when the question is vague"},"outcome":{"type":"string","description":"Optional: the column to explain, compare or forecast"},"group":{"type":"string","description":"Optional: the grouping column"},"date":{"type":"string","description":"Optional: the date column"},"id":{"type":"string","description":"Optional: the ID / customer column"},"codeframe":{"description":"Optional, for open-ended answers: { code: [keywords] }","anyOf":[{"type":"object"},{"type":"array","items":{"type":"object"}}]},"lang":{"type":"string","enum":["ko","en"]}},"required":["question"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/verify":{"post":{"operationId":"verify","summary":"Check the numbers in a text","description":"Number check for reports and AI-written answers: extracts every number in the text and checks it deterministically — p-values recomputed from reported t/F/χ²/r/z, GRIM for integer data, arithmetic inside the text (relative change vs percentage points, ratios, doubled/halved, totals, shares over 100%, increase/decrease words), and support from a source: numeric values anywhere in facts (e.g. a previous tool result or your metrics) or values derived from a data table (n, column statistics, category counts and shares, group means and shares, correlations of two named columns). Rounding-aware. Returns each number with status verified / consistent / inconsistent / unsupported / skipped, evidence, the expected value, a score and the text with ⟦!wrong⟧ and ⟦?unsupported⟧ marks. Use it before sending a report or answer that contains numbers. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["check"]},"text":{"type":"string","description":"The text to check (≤ 50,000 characters)"},"facts":{"description":"Source numbers as any JSON (object or array): e.g. a previous Quorant result, a metrics dictionary, a table as rows","anyOf":[{"type":"object"},{"type":"array"}]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"tolerance":{"type":"number","description":"Relative tolerance besides rounding (default 0.005 = 0.5%)"},"strict":{"type":"boolean","description":"true: numbers without a source also fail the check"},"integer_data":{"type":"boolean","description":"Means in the text come from integer data (Likert items, counts): run GRIM"},"lang":{"type":"string","enum":["ko","en"]}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/quality":{"post":{"operationId":"quality","summary":"Quality engineering and SPC","description":"Quality engineering and statistical process control. action \"control_chart\": Shewhart charts — I-MR, X̄-R, X̄-S, p, np, c, u — with limits, phase I/II and Western Electric/Nelson run-rule signals. \"capability\": Cp, Cpk, Pp, Ppk, Cpm, expected and observed PPM with CIs and an Anderson–Darling normality test. \"gage_rr\": crossed gauge R&R by two-way ANOVA — variance components, %study variation, %tolerance, distinct categories. \"acceptance_sampling\": single-sampling attribute plan (n, c) from AQL/LTPD and the two risks, or evaluate a plan; OC curve, AOQL, ATI. \"doe_design\": full factorial, 2^(k−p) fractional (resolution, defining relation, aliases) or Plackett–Burman designs with replicates, centre points, blocks and a randomised run sheet (csv). \"doe_analyze\": effects of a two-level experiment (OLS or Lenth's method when unreplicated), curvature, half-normal plot. \"reliability\": Weibull life analysis with censoring — β, η, B10 life, MTTF, reliability at a time. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["control_chart","capability","gage_rr","acceptance_sampling","doe_design","doe_analyze","reliability"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"chart":{"type":"string","enum":["imr","xbar_r","xbar_s","p","np","c","u"]},"value":{"type":"string","description":"control_chart / capability: measurement column"},"subgroup":{"type":"string","description":"control_chart / capability: subgroup (sample) label column"},"subgroup_size":{"type":"number","description":"control_chart / capability: consecutive rows per subgroup"},"defects":{"type":"string","description":"control_chart p/np/c/u: column with defectives or defect counts"},"size_column":{"type":"string","description":"control_chart p/np/u: column with each sample size"},"sample_size":{"type":"number","description":"control_chart: constant sample size; acceptance_sampling: sample size of a plan to evaluate"},"phase1":{"type":"number","description":"control_chart: number of initial points used to set the limits"},"lsl":{"type":"number","description":"capability / gage_rr: lower specification limit"},"usl":{"type":"number","description":"capability / gage_rr: upper specification limit"},"target":{"type":"number","description":"capability: target (for Cpm)"},"within_method":{"type":"string","enum":["pooled","rbar"],"description":"capability with subgroups: within-SD estimator (default pooled)"},"part":{"type":"string","description":"gage_rr: part column"},"operator":{"type":"string","description":"gage_rr: operator / appraiser column"},"measurement":{"type":"string","description":"gage_rr: measurement column"},"tolerance":{"type":"number","description":"gage_rr: tolerance width (or give lsl and usl)"},"study_var":{"type":"number","description":"gage_rr: study-variation multiplier (default 6)"},"alpha_pool":{"type":"number","description":"gage_rr: pool the interaction when its p exceeds this (default 0.25)"},"aql":{"type":"number","description":"acceptance_sampling: acceptable quality level (proportion, or % if ≥ 1)"},"ltpd":{"type":"number","description":"acceptance_sampling: lot tolerance percent defective (proportion, or % if ≥ 1)"},"producer_risk":{"type":"number","description":"acceptance_sampling: α (default 0.05)"},"consumer_risk":{"type":"number","description":"acceptance_sampling: β (default 0.10)"},"lot_size":{"type":"number","description":"acceptance_sampling: lot size (finite-lot model, AOQ and ATI)"},"acceptance_number":{"type":"number","description":"acceptance_sampling: c of a plan to evaluate"},"rate_unit":{"type":"string","enum":["percent","proportion"],"description":"acceptance_sampling: unit of aql/ltpd (otherwise values ≥ 1 are percent)"},"factors":{"type":"array","items":{"type":"object"},"description":"doe_design: [{ name, levels: [low, high] (or more levels for a full factorial) }]"},"k":{"type":"number","description":"doe_design: number of factors when factors is omitted"},"type":{"type":"string","enum":["full","fractional","plackett_burman"]},"runs":{"type":"number","description":"doe_design fractional: number of runs (power of two)"},"resolution":{"type":"number","description":"doe_design fractional: minimum resolution (default 4)"},"replicates":{"type":"number","description":"doe_design: replicates (default 1)"},"center_points":{"type":"number","description":"doe_design: centre points"},"blocks":{"type":"number","description":"doe_design: 2, 4 or 8 blocks (two-level full factorials)"},"block_replicates":{"type":"boolean","description":"doe_design: put each replicate in its own block"},"randomize":{"type":"boolean","description":"doe_design: randomise the run order (default true)"},"seed":{"type":"number","description":"doe_design: random seed"},"response":{"type":"string","description":"doe_analyze: response column"},"factor_columns":{"type":"array","items":{"type":"string"},"description":"doe_analyze: factor columns (default: all other columns)"},"interactions":{"type":"boolean","description":"doe_analyze: include two-factor interactions (default true)"},"block":{"type":"string","description":"doe_analyze: block column (default: a column named block)"},"time":{"type":"string","description":"reliability: time-to-failure (or censoring) column"},"status":{"type":"string","description":"reliability: 1 = failure, 0 = censored"},"failure_value":{"type":"string","description":"reliability: the status value that means failure, if not 1"},"at_time":{"type":"number","description":"reliability: time at which to report reliability"},"b_life":{"type":"number","description":"reliability: percent for the B-life (default 10)"},"confidence":{"type":"number","description":"reliability: confidence level (default 0.95)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/meta_analysis":{"post":{"operationId":"meta_analysis","summary":"Meta-analysis","description":"Meta-analysis for systematic reviews. action \"pool\": per-study effect sizes from means/SDs (Hedges g or mean difference), 2×2 counts (odds ratio, risk ratio, risk difference), correlations (Fisher z) or a generic effect with SE/CI; fixed effect (inverse variance, Mantel–Haenszel for counts) and random effects (DerSimonian–Laird, REML or Paule–Mandel; optional Hartung–Knapp), Q, I² with CI, τ² with Q-profile CI, prediction interval, forest-plot rows, subgroup test and leave-one-out. \"bias\": Egger test, Begg rank correlation, trim-and-fill and funnel-plot data. \"effect_size\": convert reported t, F, p, χ², 2×2, odds ratio or r into d / g / r / log OR with SE. Give studies or a table with one row per study. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["pool","bias","effect_size"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"studies":{"type":"array","items":{"type":"object"},"description":"pool / bias without a table: one object per study — { name, subgroup?, m1, sd1, n1, m2, sd2, n2 } or { events1, n1, events2, n2 } or { r, n } or { effect, se } / { effect, ci_lower, ci_upper }"},"measure":{"type":"string","enum":["smd","md","or","rr","rd","cor","generic"],"description":"pool / bias: effect measure (default from the inputs)"},"log_scale":{"type":"boolean","description":"generic effects that are ratios (OR, RR, HR): pool on the log scale"},"method":{"type":"string","enum":["DL","REML","PM"],"description":"pool: τ² estimator (default DL)"},"fixed_method":{"type":"string","enum":["mh","iv"],"description":"pool: fixed-effect method for 2×2 data (default mh)"},"hartung_knapp":{"type":"boolean","description":"pool: Hartung–Knapp–Sidik–Jonkman CI"},"hk_adhoc":{"type":"boolean","description":"pool: ad-hoc max(1, q) correction for Hartung–Knapp"},"alpha":{"type":"number","description":"Significance level (default 0.05)"},"side":{"type":"string","enum":["left","right"],"description":"bias: side of the missing studies for trim-and-fill (default automatic)"},"trim_estimator":{"type":"string","enum":["random","fixed"],"description":"bias: model used while trimming (default random, with the chosen τ² estimator)"},"from":{"type":"string","enum":["means","t","paired_t","f","p","chi2","two_by_two","or","r","d"],"description":"effect_size: what was reported"},"m1":{"type":"number","description":"effect_size: mean of group 1"},"sd1":{"type":"number","description":"effect_size: SD of group 1"},"n1":{"type":"number","description":"effect_size: size of group 1"},"m2":{"type":"number","description":"effect_size: mean of group 2"},"sd2":{"type":"number","description":"effect_size: SD of group 2"},"n2":{"type":"number","description":"effect_size: size of group 2"},"n":{"type":"number","description":"effect_size: total n (chi2, r) or pairs (paired_t)"},"t":{"type":"number","description":"effect_size: t statistic"},"f":{"type":"number","description":"effect_size: F with 1 numerator df"},"df1":{"type":"number","description":"effect_size: numerator df of F (must be 1)"},"p":{"type":"number","description":"effect_size: exact two-sided p"},"sign":{"type":"integer","enum":[1,-1],"description":"effect_size: direction for F, p or chi2 (1 = group 1 higher)"},"chi2":{"type":"number","description":"effect_size: chi-square with 1 df"},"events1":{"type":"number","description":"effect_size: events in group 1"},"events2":{"type":"number","description":"effect_size: events in group 2"},"or":{"type":"number","description":"effect_size: odds ratio"},"se":{"type":"number","description":"effect_size: SE of the log odds ratio"},"ci_lower":{"type":"number","description":"effect_size: lower CI of the odds ratio"},"ci_upper":{"type":"number","description":"effect_size: upper CI of the odds ratio"},"r":{"type":"number","description":"effect_size: correlation (r) or pre–post correlation (paired_t)"},"d":{"type":"number","description":"effect_size: Cohen's d"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/clinical":{"post":{"operationId":"clinical","summary":"Clinical statistics","description":"Biomedical statistics calculators. action \"diagnostic\": sensitivity, specificity, accuracy (exact CIs), predictive values at the sample or a stated prevalence, likelihood ratios and diagnostic odds ratio (from tp/fp/fn/tn or test and reference columns). \"roc\": ROC AUC with DeLong CI, Youden-optimal cut-off, cut-off table and a paired comparison of two scores. \"agreement\": Cohen's or weighted kappa, Fleiss' kappa, intraclass correlations (all six forms with CIs) and Bland–Altman limits of agreement. \"risk\": risk ratio, odds ratio, risk difference, number needed to treat (NNTB/NNTH), chi-square and Fisher exact p from a 2×2 table. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["diagnostic","roc","agreement","risk"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"tp":{"type":"number","description":"diagnostic: true positives"},"fp":{"type":"number","description":"diagnostic: false positives"},"fn":{"type":"number","description":"diagnostic: false negatives"},"tn":{"type":"number","description":"diagnostic: true negatives"},"test":{"type":"string","description":"diagnostic: index test column"},"reference":{"type":"string","description":"diagnostic / roc: reference-standard (true status) column"},"test_positive":{"type":"string","description":"diagnostic: label of a positive test"},"reference_positive":{"type":"string","description":"diagnostic: label of a positive reference"},"prevalence":{"type":"number","description":"diagnostic: prevalence in the target population (0–1) for predictive values"},"score":{"type":"string","description":"roc: marker or predicted probability column"},"score2":{"type":"string","description":"roc: second score to compare (paired DeLong)"},"positive":{"type":"string","description":"roc: label of a positive case"},"direction":{"type":"string","enum":["higher","lower"],"description":"roc: whether higher (default) or lower scores mean positive"},"raters":{"type":"array","items":{"type":"string"},"description":"agreement: two or more columns, one per rater or method"},"type":{"type":"string","enum":["kappa","weighted_kappa","fleiss","icc","bland_altman","icc_bland_altman"],"description":"agreement: statistic (default chosen from the data)"},"weights":{"type":"string","enum":["linear","quadratic"],"description":"agreement weighted_kappa: weights (default linear)"},"levels":{"type":"array","items":{"type":"string"},"description":"agreement weighted_kappa with text categories: their order from lowest to highest"},"icc_model":{"type":"string","enum":["agreement","consistency","oneway"],"description":"agreement icc: headline form (default two-way random, absolute agreement)"},"icc_unit":{"type":"string","enum":["single","average"],"description":"agreement icc: single (default) or average measures"},"exposed_events":{"type":"number","description":"risk: events in the exposed / treatment group"},"exposed_n":{"type":"number","description":"risk: size of the exposed group"},"unexposed_events":{"type":"number","description":"risk: events in the unexposed / control group"},"unexposed_n":{"type":"number","description":"risk: size of the unexposed group"},"event_is_good":{"type":"boolean","description":"risk: the event is a good outcome (for NNTB/NNTH)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/customer_analytics":{"post":{"operationId":"customer_analytics","summary":"Customer analytics","description":"Customer analytics for CRM, e-commerce and retail teams. action \"segments\": k-means segmentation of a customer table on standardised numeric variables (k-means++ seeding, k chosen by silhouette and Calinski–Harabasz unless given), segment sizes, profiles with index vs total, distinguishing variables and a segment column (csv). \"rfm\": recency / frequency / monetary quintile scores from a transaction log (customer, date, amount) with the usual segment grid (Champions, Loyal, At risk, Hibernating …), revenue share per segment and a per-customer csv. \"cohort\": acquisition cohorts by first purchase (month or week) with retention and revenue-retention matrices and the average curve. \"clv\": customer lifetime value from a transaction log — BG/NBD purchase model (P(alive), expected purchases) and Gamma–Gamma spend model, with margin and discounting; per-customer csv. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["segments","rfm","cohort","clv"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"variables":{"type":"array","items":{"type":"string"},"description":"segments: numeric columns to segment on (default: all numeric columns)"},"id":{"type":"string","description":"segments: ID column kept in the output"},"k":{"type":"number","description":"segments: number of segments (default: chosen from k_range)"},"k_range":{"type":"array","items":{"type":"number"},"description":"segments: [min, max] k to try (default [2, 8])"},"seed":{"type":"number","description":"segments: random seed (default fixed)"},"customer":{"type":"string","description":"rfm / cohort / clv: customer ID column"},"date":{"type":"string","description":"rfm / cohort / clv: transaction date column"},"amount":{"type":"string","description":"rfm / clv: amount column (cohort: optional, adds revenue retention)"},"as_of":{"type":"string","description":"rfm / clv: analysis date (default: rfm the day after the last transaction, clv the last transaction day)"},"period":{"type":"string","enum":["month","week"],"description":"cohort: cohort period (default month)"},"time_unit":{"type":"string","enum":["day","week","month"],"description":"clv: time unit (default week)"},"horizon":{"type":"number","description":"clv: prediction horizon in time units (default one year)"},"margin":{"type":"number","description":"clv: profit margin share 0–1 (default 1 = revenue)"},"discount_rate":{"type":"number","description":"clv: annual discount rate 0–1 (default 0)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/forecast":{"post":{"operationId":"forecast","summary":"Forecasting","description":"Demand and KPI forecasting for planning teams. action \"forecast\": from a date + value series (daily, weekly, monthly, quarterly or yearly; or a values array), fits exponential smoothing models — simple, Holt trend, damped trend, additive and multiplicative Holt–Winters — picks one by AICc, and returns forecasts with 80% and 95% prediction intervals, model parameters, an optional holdout accuracy check against the seasonal naive benchmark (MAE, RMSE, MAPE, MASE) and anomalies (periods far from the fitted pattern). \"decompose\": classical additive or multiplicative decomposition into trend, seasonal indices and remainder with the strength of trend and seasonality. Free; nothing is stored.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["forecast","decompose"]},"data_csv":{"type":"string","description":"The data as CSV/TSV text with a header row"},"data_rows":{"type":"array","maxItems":200001,"items":{"type":["array","object"]},"description":"Rows read with another connector (Google Sheets, Excel, Airtable, Notion database, a database): arrays with the header row first, or a list of objects. Use instead of data_csv."},"data_url":{"type":"string","description":"A shared link to the data instead of pasting it: Google Sheets (any tab link), Google Drive, Dropbox, OneDrive/SharePoint, GitHub, Box or any https CSV/XLSX file. The link must be viewable by anyone with it. Read up to 10 MB."},"sheet":{"type":["string","integer"],"description":"For an Excel link: the sheet name or 0-based index (default: the first sheet)"},"date":{"type":"string","description":"Date column (default: detected)"},"value":{"type":"string","description":"Value column (default: first numeric column)"},"values":{"type":"array","items":{"type":"number"},"description":"Series values in time order, when no data is given"},"start":{"type":"string","description":"values: date of the first value"},"frequency":{"type":"string","enum":["day","bday","week","month","quarter","year","none"],"description":"Frequency (default: detected from the dates)"},"aggregate":{"type":"string","enum":["sum","mean"],"description":"How to combine several rows in one period (default sum)"},"season_period":{"type":"number","description":"Seasonal period (default: day 7, week 52, month 12, quarter 4)"},"horizon":{"type":"number","description":"forecast: periods to forecast (default one season)"},"holdout":{"type":"number","description":"forecast: last periods held out to check accuracy"},"models":{"type":"array","items":{"type":"string"},"description":"forecast: limit to these ETS codes, e.g. [\"A,A,N\",\"A,Ad,A\"]"},"type":{"type":"string","enum":["auto","additive","multiplicative"],"description":"decompose: type (default auto)"},"lang":{"type":"string","enum":["ko","en"]}},"required":["action"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/tools/export":{"post":{"operationId":"export","summary":"Export a Quorant result to another app","description":"Send a Quorant result to the user's other apps: turns a diagnosis report (request_id) or the JSON any Quorant tool returned (result) into a ready payload for another connector — Notion (page content + database properties), Google Docs (markdown/plain text), Google Sheets (values per tab), Slack (mrkdwn), email (subject + body for Gmail/Outlook), CSV (for Drive/OneDrive/Dropbox) or markdown. Then call the other app's connector with it. Nothing is stored or sent by this tool.","tags":["Tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","enum":["notion","google_docs","google_sheets","slack","email","csv","markdown"],"description":"Where the result is going"},"request_id":{"type":"string","description":"A diagnosis request_id (from quorant_diagnose / quorant_requests)"},"result":{"description":"The JSON a Quorant tool returned (object or JSON text). Give this or request_id."},"title":{"type":"string","description":"Page / document / message title"},"lang":{"type":"string","enum":["ko","en"]}},"required":["target"],"additionalProperties":false}}}},"responses":{"200":{"description":"Result (JSON). Every result has plain-language text (plain or answer) next to the numbers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"422":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/batch":{"post":{"operationId":"batch","summary":"Run up to 20 calls in one request (each counts toward your quota).","tags":["Featured"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["calls"],"properties":{"calls":{"type":"array","maxItems":20,"items":{"type":"object","required":["path","body"],"properties":{"path":{"type":"string","description":"For example \"analyze\" or \"tools/survey\""},"body":{"type":"object"}}}}}}}}},"responses":{"200":{"description":"{ results: [{ path, status, body }] }"},"400":{"$ref":"#/components/responses/Problem"},"401":{"$ref":"#/components/responses/Problem"},"429":{"$ref":"#/components/responses/Problem"}}}},"/usage":{"get":{"operationId":"usage","summary":"Calls used today and this month, and your limits.","tags":["Account"],"responses":{"200":{"description":"Usage"},"401":{"$ref":"#/components/responses/Problem"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"API key from your Quorant account (qk_live_…). X-API-Key also works."}},"responses":{"Problem":{"description":"Error (RFC 9457)","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"}}}}}}}}}