> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mathfi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a prediction

> Creates a new prediction using the specified model and blind CSV file



## OpenAPI

````yaml api-reference/openapi.yaml POST /api/v1/predictions
openapi: 3.0.1
info:
  title: MathFi.ai API
  description: >
    The MathFi.ai REST API runs the two products end to end.


    **Feature Refinery** takes your labelled data and works out which columns

    actually carry the signal. It returns a reduced train and test pair, a

    per-column keep/remove decision, and the performance target the refined data

    reached.


    **Model Crucible** takes a dataset, trains every algorithm family against it

    at once, ranks the results on held-out data by fewest wrong decisions, and

    keeps the best three as versions of one model. You pick which one
    predictions

    run against.


    Everything is asynchronous: you create a thing, upload to a signed URL,
    start

    it, then poll until the state is terminal. Nothing streams and nothing
    blocks.
  contact:
    name: MathFi.ai
    url: https://mathfi.ai
    email: support@mathfi.ai
  license:
    name: MathFi.ai
    url: https://mathfi.ai
  version: 1.0.0
servers:
  - 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.
security:
  - BearerAuth: []
tags:
  - name: Authentication
    description: Exchange credentials for a bearer token
  - name: Feature Refinery
    description: Reduce a dataset to the columns that earn their place
  - name: Datasets
    description: >-
      Prepare labelled data for training, from uploads or from a finished
      refinement
  - name: Training
    description: Run the Crucible against a dataset and choose the champion model
  - name: Models
    description: Trained models and their versions
  - name: Predictions
    description: Score unlabelled data against a champion model
paths:
  /api/v1/predictions:
    post:
      tags:
        - Predictions
      summary: Create a prediction
      description: Creates a new prediction using the specified model and blind CSV file
      operationId: createPredictionModelPayload
      parameters:
        - name: modelKey
          in: query
          required: true
          schema:
            type: string
            format: uuid
          description: The key of the model to use for the prediction
        - name: applyColumnStatusFilter
          in: query
          required: false
          schema:
            type: boolean
            default: false
          description: >-
            Remove from the uploaded file the columns the refinement decided
            were not worth keeping, so you do not have to work out which ones
            those were. Only available where the model's dataset came from a
            refinement; on any other dataset this is a 400.

            The file's columns must be in the dataset's own order — the filter
            goes by position, not by name. A file you have already stripped
            yourself passes through untouched; one that matches neither the full
            nor the stripped column count is refused rather than mangled.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              additionalProperties: false
              required:
                - _file
              properties:
                _file:
                  description: >-
                    The CSV, sent as a multipart part named exactly `_file`. The
                    underscore is not a typo: it is the name every caller sends
                    and the only name the server binds.
                  type: string
                  format: binary
            encoding:
              _file:
                contentType: text/csv
      responses:
        '201':
          description: Prediction created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PredictionCreationOutput'
        '400':
          description: >-
            Invalid prediction submission, or the uploaded file's columns cannot
            be matched to the dataset's.
        '500':
          description: Internal server error
components:
  schemas:
    PredictionCreationOutput:
      required:
        - predictionCreationProgressUrl
        - predictionKey
        - status
      type: object
      properties:
        predictionKey:
          pattern: >-
            ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[4][0-9a-fA-F]{3}-[89aAbB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
          type: string
          format: uuid
        status:
          $ref: '#/components/schemas/PredictionStatus'
        predictionCreationProgressUrl:
          type: string
    PredictionStatus:
      title: PredictionStatus
      x-displayName: PredictionStatus
      type: string
      description: >+
        Status of prediction processing: 


        * `PENDING` - The prediction has been successfully created and is
        pending execution

        * `RUNNING` - The prediction is currently being processed. When this
        status is returned, an url for progress check is returned too

        * `COMPLETED` - The prediction has been successfully completed. An url
        to download the result as CSV is provided in the response

        * `FAILED` - The prediction execution has failed

        * `TIMEOUT` - The prediction execution has timed out

      enum:
        - PENDING
        - RUNNING
        - COMPLETED
        - FAILED
        - TIMEOUT
      x-enumDescriptions:
        - Waiting to start
        - Actively processing
        - Finished successfully
        - Finished with error
        - Exceeded time limit
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````