Progress of a feature refinement — the current state, elapsed time, a recent activity trail, and the baseline vs current top performances, which together show how refinement is improving the model.
The run's lifecycle state. It advances PENDING → SETUP_* → MEASURE_INITIAL_THRESHOLD* → BASELINE_RUN_* → REFINING_LOOP_* → CREATING_RESULT → REFINEMENT_COMPLETED. The terminal states are REFINEMENT_COMPLETED (success), ERROR and TIMEOUT (failures), and CANCELLED; once terminal, the state no longer changes and elapsedSeconds is frozen. Poll until the state is terminal.
Units of processing work completed so far, out of progressTotal. It increases by one as each unit finishes and never decreases; it is null (or 0) until the work has begun, and equals progressTotal once the run completes. Pair it with progressTotal for a determinate progress ratio. The unit is an internal measure with no standalone meaning and may change, so rely only on the ratio of the two and never on the raw numbers.
Total units of processing work for the run — the denominator for progressCompleted. Fixed for the life of the run once it is known; null while it is not yet known, in which case treat progress as indeterminate.
True once a cancel has been requested for this run, and it stays set — it is NOT cleared when the run reaches its terminal CANCELLED state, so a cancelled run keeps cancelRequested=true. It is therefore safe to rely on after a restart, rather than remembering the request locally. Treat it as meaningful only while the state is non-terminal; once terminal, state is authoritative. Omitted (null) when no cancel was ever requested.
Top model performances on the feature set as it currently stands. Equals the baseline at the start and improves as the run progresses.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"MathFi.ai","colors":{"primary":"#0D5E4F","light":"#4ADE80","dark":"#0D5E4F"},"logo":{"light":"https://mintcdn.com/mathficast/obGjwhvkcHRG-84d/logo/light.svg?fit=max\u0026auto=format\u0026n=obGjwhvkcHRG-84d\u0026q=85\u0026s=0d58083744fd1f821588093372fdf5bf","dark":"https://mintcdn.com/mathficast/obGjwhvkcHRG-84d/logo/dark.svg?fit=max\u0026auto=format\u0026n=obGjwhvkcHRG-84d\u0026q=85\u0026s=19477dd054446b9035d2b5a62c2f9053","href":"https://mathfi.ai"},"favicon":"https://mintcdn.com/mathficast/obGjwhvkcHRG-84d/favicon.svg?fit=max\u0026auto=format\u0026n=obGjwhvkcHRG-84d\u0026q=85\u0026s=cda0bc0ee08c401c35cb53e3635d4ffa","api":{"examples":{"languages":["curl","python"]}},"navbar":{},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"mathficast","hasAudioNarration":false,"actualSubdomain":"mathficast","customDomains":["docs.mathfi.ai"],"gitSource":{"type":"github","owner":"mathfi-ai","repo":"mathfi-ai-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad385e785ceb1c912c842c7","collectionId":"7643eed5-d1ae-4c8a-855f-a54304d6c976","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad385e785ceb1c912c842c7"},"entitlements":{},"buildId":"6ad385e785ceb1c912c842c7","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API Reference","count":33},{"language":"default","tag":"Model Crucible","count":20},{"language":"default","tag":"Documentation","count":11},{"language":"default","tag":"Feature Refinery","count":8},{"language":"default","tag":"Training","count":7},{"language":"default","tag":"Getting started","count":7},{"language":"default","tag":"Predictions","count":6},{"language":"default","tag":"Datasets","count":5},{"language":"default","tag":"Guides","count":3},{"language":"default","tag":"Use cases","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/feature-refinery/get-feature-refinement-progress","slug":"/api-reference/feature-refinery/get-feature-refinement-progress","pageMetadata":{"title":"Feature refinement progress","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery/{featureRefinementKey}/progress","description":null,"href":"/api-reference/feature-refinery/get-feature-refinement-progress"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Feature refinement progress","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery/{featureRefinementKey}/progress","description":null,"href":"/api-reference/feature-refinery/get-feature-refinement-progress"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Feature Refinery"],"summary":"Feature refinement progress","operationId":"getFeatureRefinementProgress","parameters":["44ddd4bd-b351-47dc-9436-6a0173abb2fb"],"responses":{"200":"31a713e0-8c0a-4cfd-b44d-c082624ee5ce","404":"200f72f2-9080-456b-9fd9-1a9b713f7e9f","500":"59713f1d-8db3-4091-832e-45dd1eb57934"},"method":"get","type":"path","servers":["0215795f-7d3c-442e-bfcb-454b8d8c6f91"],"security":["2c19ac19-2b76-4d55-b5ab-dc0439ed3ca2"],"path":"/api/v1/feature-refinery/{featureRefinementKey}/progress","baseUrlOptions":["https://{tenant}-api.mathfi.ai"],"title":"Feature refinement progress","description":"","codeSamples":[],"requestExampleLanguages":["bash","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"44ddd4bd-b351-47dc-9436-6a0173abb2fb":{"name":"featureRefinementKey","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}}},"responses":{"31a713e0-8c0a-4cfd-b44d-c082624ee5ce":{"description":"Progress","content":{"application/json":{"schema":{"description":"Progress of a feature refinement — the current state, elapsed time, a recent activity trail, and the baseline vs current top performances, which together show how refinement is improving the model.","type":"object","properties":{"featureRefinementKey":{"type":"string","format":"uuid","uniqueKey":"featureRefinementKey","typeLabel":"string\u003cuuid>"},"state":{"type":"string","description":"The run's lifecycle state. It advances PENDING → SETUP_* → MEASURE_INITIAL_THRESHOLD* → BASELINE_RUN_* → REFINING_LOOP_* → CREATING_RESULT → REFINEMENT_COMPLETED. The terminal states are REFINEMENT_COMPLETED (success), ERROR and TIMEOUT (failures), and CANCELLED; once terminal, the state no longer changes and elapsedSeconds is frozen. Poll until the state is terminal.","uniqueKey":"state","typeLabel":"string"},"createdOn":{"type":"string","description":"When the refinement was created, ISO-8601 UTC. Present from creation, so a run's age is available while it is still pending.","uniqueKey":"createdOn","typeLabel":"string"},"elapsedSeconds":{"type":"integer","format":"int64","description":"Seconds the run has been processing — counted from when it started, not from creation. 0 while pending.","uniqueKey":"elapsedSeconds","typeLabel":"integer\u003cint64>"},"progressCompleted":{"oneOf":[{"type":"integer","description":"Units of processing work completed so far, out of progressTotal. It increases by one as each unit finishes and never decreases; it is null (or 0) until the work has begun, and equals progressTotal once the run completes. Pair it with progressTotal for a determinate progress ratio. The unit is an internal measure with no standalone meaning and may change, so rely only on the ratio of the two and never on the raw numbers.","uniqueKey":"progressCompleted.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Units of processing work completed so far, out of progressTotal. It increases by one as each unit finishes and never decreases; it is null (or 0) until the work has begun, and equals progressTotal once the run completes. Pair it with progressTotal for a determinate progress ratio. The unit is an internal measure with no standalone meaning and may change, so rely only on the ratio of the two and never on the raw numbers.","uniqueKey":"progressCompleted.oneOf.1","typeLabel":"null"}],"uniqueKey":"progressCompleted","typeLabel":"integer | null"},"progressTotal":{"oneOf":[{"type":"integer","description":"Total units of processing work for the run — the denominator for progressCompleted. Fixed for the life of the run once it is known; null while it is not yet known, in which case treat progress as indeterminate.","uniqueKey":"progressTotal.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Total units of processing work for the run — the denominator for progressCompleted. Fixed for the life of the run once it is known; null while it is not yet known, in which case treat progress as indeterminate.","uniqueKey":"progressTotal.oneOf.1","typeLabel":"null"}],"uniqueKey":"progressTotal","typeLabel":"integer | null"},"cancelRequested":{"oneOf":[{"type":"boolean","description":"True once a cancel has been requested for this run, and it stays set — it is NOT cleared when the run reaches its terminal CANCELLED state, so a cancelled run keeps cancelRequested=true. It is therefore safe to rely on after a restart, rather than remembering the request locally. Treat it as meaningful only while the state is non-terminal; once terminal, state is authoritative. Omitted (null) when no cancel was ever requested.","uniqueKey":"cancelRequested.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True once a cancel has been requested for this run, and it stays set — it is NOT cleared when the run reaches its terminal CANCELLED state, so a cancelled run keeps cancelRequested=true. It is therefore safe to rely on after a restart, rather than remembering the request locally. Treat it as meaningful only while the state is non-terminal; once terminal, state is authoritative. Omitted (null) when no cancel was ever requested.","uniqueKey":"cancelRequested.oneOf.1","typeLabel":"null"}],"uniqueKey":"cancelRequested","typeLabel":"boolean | null"},"errorReason":{"oneOf":[{"type":"string","description":"Why the run stopped — present only when state is ERROR or TIMEOUT, null otherwise. Taken from the failure entry on the activity trail.","uniqueKey":"errorReason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Why the run stopped — present only when state is ERROR or TIMEOUT, null otherwise. Taken from the failure entry on the activity trail.","uniqueKey":"errorReason.oneOf.1","typeLabel":"null"}],"uniqueKey":"errorReason","typeLabel":"string | null"},"recentActivities":{"type":"array","items":{"description":"One lifecycle entry on the public progress trail — the state and when it was reached. No free-text detail: the failure summary is on the progress errorReason field, and the full per-entry detail is kept on the ops-token view.","type":"object","properties":{"timestamp":{"type":"string","description":"ISO-8601 UTC instant (e.g. 2026-07-28T00:33:38.028Z).","uniqueKey":"recentActivities.items.[INDEX].timestamp","typeLabel":"string"},"state":{"type":"string","uniqueKey":"recentActivities.items.[INDEX].state","typeLabel":"string"}},"uniqueKey":"recentActivities.items.[INDEX]","typeLabel":"object"},"uniqueKey":"recentActivities","typeLabel":"object[]"},"baselineTopPerformances":{"description":"Top model performances before refining, using all columns. Empty until the baseline is computed.","type":"array","items":{"description":"One model's performance on the blind test set. Top-performance results are the best distinct results, ranked by fewest false decisions.","type":"object","properties":{"falseDecisions":{"type":"integer","description":"Number of wrong predictions on the test set (fewer is better).","uniqueKey":"baselineTopPerformances.items.[INDEX].falseDecisions","typeLabel":"integer"},"accuracy":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].accuracy.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].accuracy.oneOf.1","typeLabel":"null"}],"uniqueKey":"baselineTopPerformances.items.[INDEX].accuracy","typeLabel":"number\u003cdouble> | null"},"f1Score":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].f1Score.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].f1Score.oneOf.1","typeLabel":"null"}],"uniqueKey":"baselineTopPerformances.items.[INDEX].f1Score","typeLabel":"number\u003cdouble> | null"},"precision":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].precision.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"baselineTopPerformances.items.[INDEX].precision.oneOf.1","typeLabel":"null"}],"uniqueKey":"baselineTopPerformances.items.[INDEX].precision","typeLabel":"number\u003cdouble> | null"},"recall":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined rather than zero — e.g. a test set slice with no positive cases leaves recall undefined, which is not the same as a model that recalled none of them. Treat an undefined metric as absent, never as 0.","uniqueKey":"baselineTopPerformances.items.[INDEX].recall.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined rather than zero — e.g. a test set slice with no positive cases leaves recall undefined, which is not the same as a model that recalled none of them. Treat an undefined metric as absent, never as 0.","uniqueKey":"baselineTopPerformances.items.[INDEX].recall.oneOf.1","typeLabel":"null"}],"uniqueKey":"baselineTopPerformances.items.[INDEX].recall","typeLabel":"number\u003cdouble> | null"},"best":{"type":"boolean","description":"True for the single best row in its table (the one with the fewest false decisions).","uniqueKey":"baselineTopPerformances.items.[INDEX].best","typeLabel":"boolean"}},"uniqueKey":"baselineTopPerformances.items.[INDEX]","typeLabel":"object"},"uniqueKey":"baselineTopPerformances","typeLabel":"object[]"},"currentTopPerformances":{"description":"Top model performances on the feature set as it currently stands. Equals the baseline at the start and improves as the run progresses.","type":"array","items":{"description":"One model's performance on the blind test set. Top-performance results are the best distinct results, ranked by fewest false decisions.","type":"object","properties":{"falseDecisions":{"type":"integer","description":"Number of wrong predictions on the test set (fewer is better).","uniqueKey":"currentTopPerformances.items.[INDEX].falseDecisions","typeLabel":"integer"},"accuracy":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].accuracy.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].accuracy.oneOf.1","typeLabel":"null"}],"uniqueKey":"currentTopPerformances.items.[INDEX].accuracy","typeLabel":"number\u003cdouble> | null"},"f1Score":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].f1Score.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].f1Score.oneOf.1","typeLabel":"null"}],"uniqueKey":"currentTopPerformances.items.[INDEX].f1Score","typeLabel":"number\u003cdouble> | null"},"precision":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].precision.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined for this model (see recall).","uniqueKey":"currentTopPerformances.items.[INDEX].precision.oneOf.1","typeLabel":"null"}],"uniqueKey":"currentTopPerformances.items.[INDEX].precision","typeLabel":"number\u003cdouble> | null"},"recall":{"oneOf":[{"type":"number","format":"double","description":"Null when the metric is undefined rather than zero — e.g. a test set slice with no positive cases leaves recall undefined, which is not the same as a model that recalled none of them. Treat an undefined metric as absent, never as 0.","uniqueKey":"currentTopPerformances.items.[INDEX].recall.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"Null when the metric is undefined rather than zero — e.g. a test set slice with no positive cases leaves recall undefined, which is not the same as a model that recalled none of them. Treat an undefined metric as absent, never as 0.","uniqueKey":"currentTopPerformances.items.[INDEX].recall.oneOf.1","typeLabel":"null"}],"uniqueKey":"currentTopPerformances.items.[INDEX].recall","typeLabel":"number\u003cdouble> | null"},"best":{"type":"boolean","description":"True for the single best row in its table (the one with the fewest false decisions).","uniqueKey":"currentTopPerformances.items.[INDEX].best","typeLabel":"boolean"}},"uniqueKey":"currentTopPerformances.items.[INDEX]","typeLabel":"object"},"uniqueKey":"currentTopPerformances","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"featureRefinementKey":"3c90c3cc-0d44-4b50-8888-8dd25736052a","state":"\u003cstring>","createdOn":"\u003cstring>","elapsedSeconds":123,"progressCompleted":123,"progressTotal":123,"cancelRequested":true,"errorReason":"\u003cstring>","recentActivities":[{"timestamp":"\u003cstring>","state":"\u003cstring>"}],"baselineTopPerformances":[{"falseDecisions":123,"accuracy":123,"f1Score":123,"precision":123,"recall":123,"best":true}],"currentTopPerformances":[{"falseDecisions":123,"accuracy":123,"f1Score":123,"precision":123,"recall":123,"best":true}]}}},"exampleType":"generated"}},"exampleType":"generated"},"200f72f2-9080-456b-9fd9-1a9b713f7e9f":{"description":"Unknown feature refinement key","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"59713f1d-8db3-4091-832e-45dd1eb57934":{"description":"Internal server error","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}}},"security":{"2c19ac19-2b76-4d55-b5ab-dc0439ed3ca2":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"0215795f-7d3c-442e-bfcb-454b8d8c6f91":{"url":"https://{tenant}-api.mathfi.ai","description":"Your tenant's API. Each customer has their own, so the host varies. Replace {tenant} with the name issued when your tenant was created.","variables":{"tenant":{"default":"your-tenant","description":"The tenant name issued to you."}}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"mathficast","siteName":"MathFi.ai","title":"Feature refinement progress - MathFi.ai","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-17T07:06:02.425Z","originalFileLocation":"api-reference/feature-refinery/get-feature-refinement-progress.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"MathFi.ai\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Feature refinement progress - MathFi.ai\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"MathFi.ai\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://mathficast.mintlify.app/_mintlify/api/og/v2?division=Feature+Refinery\u0026amp;title=Feature+refinement+progress\u0026amp;theme=cbd1a49d9809485b2cbd71fb\u0026amp;signature=1fa645ce6c3de4711346591c56c5a1c2fbf34ad32daefad6e561d323849b62bf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Feature refinement progress - MathFi.ai\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://mathficast.mintlify.app/_mintlify/api/og/v2?division=Feature+Refinery\u0026amp;title=Feature+refinement+progress\u0026amp;theme=cbd1a49d9809485b2cbd71fb\u0026amp;signature=1fa645ce6c3de4711346591c56c5a1c2fbf34ad32daefad6e561d323849b62bf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/mathficast/DPpupBGAr--8eP5g/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"MathFi.ai\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0D5E4F\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/feature-refinery/get-feature-refinement-progress.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.mathfi.ai/#organization\",\"name\":\"MathFi.ai\",\"url\":\"https://docs.mathfi.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/mathficast/obGjwhvkcHRG-84d/logo/light.svg?fit=max\u0026auto=format\u0026n=obGjwhvkcHRG-84d\u0026q=85\u0026s=0d58083744fd1f821588093372fdf5bf\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.mathfi.ai#website\",\"name\":\"MathFi.ai\",\"url\":\"https://docs.mathfi.ai\",\"publisher\":{\"@id\":\"https://docs.mathfi.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress#webpage\",\"url\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress\",\"name\":\"Feature refinement progress\",\"dateModified\":\"2026-10-17T07:06:02.425Z\",\"isPartOf\":{\"@id\":\"https://docs.mathfi.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Feature Refinery\",\"item\":\"https://docs.mathfi.ai/api-reference/feature-refinery/create-feature-refinement\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature refinement progress\",\"item\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress#apireference\",\"headline\":\"Feature refinement progress\",\"name\":\"Feature refinement progress\",\"url\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress\",\"mainEntityOfPage\":{\"@id\":\"https://docs.mathfi.ai/api-reference/feature-refinery/get-feature-refinement-progress#webpage\"},\"dateModified\":\"2026-10-17T07:06:02.425Z\",\"publisher\":{\"@id\":\"https://docs.mathfi.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.mathfi.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"MathFi.ai\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"MathFi.ai","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Getting started","pages":[{"title":"API overview","icon":"code","href":"/developers/api-overview"},{"title":"Authentication","icon":"key","href":"/developers/authentication"},{"title":"API recipes","icon":"terminal","href":"/developers/api-recipes"},{"title":"Build a CLI or agent","icon":"robot","href":"/developers/agents"}]},{"group":"Authentication","pages":[{"title":"Log in and obtain a bearer token","openapi":"api-reference/openapi.yaml POST /api/login","href":"/api-reference/authentication/login"}]},{"group":"Feature Refinery","pages":[{"title":"Create a feature refinement","openapi":"api-reference/openapi.yaml POST /api/v1/feature-refinery","href":"/api-reference/feature-refinery/create-feature-refinement"},{"title":"Start the run once inputs are uploaded","openapi":"api-reference/openapi.yaml POST /api/v1/feature-refinery/{featureRefinementKey}/start","description":"Begin the run once the inputs are uploaded, then poll `/progress` for state and the top-performance\nmetrics as refinement proceeds.\n\nValidates that both the train and labelled-test CSVs have been uploaded first. If either is missing,\nor the training file has more columns than the run accepts, it returns 400 and does NOT start.\n\nThe size of the data is not validated here. The train file needs at least 25 labelled rows for the\nleast common target value, counted after the split. A run below that starts, then fails while\npreparing the data, so a 200 from this call is not confirmation that the data can be trained on.\n","href":"/api-reference/feature-refinery/start-feature-refinement"},{"title":"Feature refinement progress","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery/{featureRefinementKey}/progress","href":"/api-reference/feature-refinery/get-feature-refinement-progress"},{"title":"Feature refinement result — columnStatus + refined download links","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery/{featureRefinementKey}/result","description":"The finished run's outcome: each original column's KEEP/REMOVE decision plus short-lived signed download URLs for the reduced train + prediction CSVs (the columns the loop eliminated are dropped). The download URLs are populated once the state is REFINEMENT_COMPLETED, and null before then.","href":"/api-reference/feature-refinery/get-feature-refinement-result"},{"title":"Run detail","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery/{featureRefinementKey}","href":"/api-reference/feature-refinery/get-feature-refinement"},{"title":"List the caller's feature refinements","openapi":"api-reference/openapi.yaml GET /api/v1/feature-refinery","href":"/api-reference/feature-refinery/list-feature-refinements"},{"title":"Cancel a run","openapi":"api-reference/openapi.yaml POST /api/v1/feature-refinery/{featureRefinementKey}/cancel","href":"/api-reference/feature-refinery/cancel-feature-refinement"},{"title":"Non-destructive delete of a run","openapi":"api-reference/openapi.yaml DELETE /api/v1/feature-refinery/{featureRefinementKey}","href":"/api-reference/feature-refinery/delete-feature-refinement"}]},{"group":"Model Crucible","pages":[{"group":"Datasets","pages":[{"title":"Create a dataset","openapi":"api-reference/openapi.yaml POST /api/v1/datasets","href":"/api-reference/datasets/create-dataset"},{"title":"Clean the dataset","openapi":"api-reference/openapi.yaml POST /api/v1/datasets/{datasetKey}/clean","href":"/api-reference/datasets/clean-dataset"},{"title":"Retrieve dataset details","openapi":"api-reference/openapi.yaml GET /api/v1/datasets/{datasetKey}","href":"/api-reference/datasets/get-dataset-by-key"},{"title":"List all datasets","openapi":"api-reference/openapi.yaml GET /api/v1/datasets","href":"/api-reference/datasets/list-datasets"},{"title":"Non-destructive delete of a dataset","openapi":"api-reference/openapi.yaml DELETE /api/v1/datasets/{datasetKey}","href":"/api-reference/datasets/delete-dataset"}]},{"group":"Training","pages":[{"title":"Start a training run on a dataset","openapi":"api-reference/openapi.yaml POST /api/v1/training/datasets/{datasetKey}","href":"/api-reference/training/create-training"},{"title":"Get training job progress","openapi":"api-reference/openapi.yaml GET /api/v1/training/{trainingJobKey}/progress","href":"/api-reference/training/get-training-progress"},{"title":"Get training job detail","openapi":"api-reference/openapi.yaml GET /api/v1/training/{trainingJobKey}","href":"/api-reference/training/get-training-detail"},{"title":"Choose which model predictions run against","openapi":"api-reference/openapi.yaml POST /api/v1/training/{trainingJobKey}/champion","href":"/api-reference/training/select-champion"},{"title":"Cancel a training job","openapi":"api-reference/openapi.yaml PATCH /api/v1/training/{trainingJobKey}/cancel","href":"/api-reference/training/cancel-training-job"},{"title":"List training jobs","openapi":"api-reference/openapi.yaml GET /api/v1/training","href":"/api-reference/training/list-training-by-user"},{"title":"List training jobs by dataset","openapi":"api-reference/openapi.yaml GET /api/v1/training/datasets/{datasetKey}","href":"/api-reference/training/list-training-by-dataset"}]},{"group":"Models","pages":[{"title":"Get model detail","openapi":"api-reference/openapi.yaml GET /api/v1/models/{modelKey}","href":"/api-reference/models/get-model-detail"},{"title":"List models by dataset","openapi":"api-reference/openapi.yaml GET /api/v1/models/datasets/{datasetKey}","href":"/api-reference/models/list-models-by-dataset"}]},{"group":"Predictions","pages":[{"title":"Create a prediction","openapi":"api-reference/openapi.yaml POST /api/v1/predictions","href":"/api-reference/predictions/create-prediction-model-payload"},{"title":"Create a prediction","openapi":"api-reference/openapi.yaml POST /api/v1/predictions/models/{modelKey}","href":"/api-reference/predictions/create-prediction"},{"title":"Get prediction progress","openapi":"api-reference/openapi.yaml GET /api/v1/predictions/{predictionKey}/progress","href":"/api-reference/predictions/get-prediction-progress"},{"title":"Get prediction detail","openapi":"api-reference/openapi.yaml GET /api/v1/predictions/{predictionKey}","href":"/api-reference/predictions/get-prediction-detail"},{"title":"List predictions by model","openapi":"api-reference/openapi.yaml GET /api/v1/predictions/models/{modelKey}","href":"/api-reference/predictions/list-predictions-by-model"},{"title":"List predictions by dataset","openapi":"api-reference/openapi.yaml GET /api/v1/predictions/datasets/{datasetKey}","href":"/api-reference/predictions/list-predictions-by-dataset"}]}]}]},{"tab":"Help","pages":[{"title":"Help","href":"/help/faq"}]}]},"basePath":"","title":"Feature refinement progress - MathFi.ai","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}