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

# Estimate training cost

> Send the prepared `inputSetId`. Returns either a maximum charge and fingerprint for starting a run, or issues that block training. Returns 409 while inputs are still being prepared or after they expire.



## OpenAPI

````yaml /api-reference/openapi.json post /trainings/{trainingId}/cost-estimate
openapi: 3.1.0
info:
  description: >-
    Manage projects, datasets, labeling pipelines, and model training. **Beta:**
    endpoints, request and response shapes, and error contracts can change
    without notice or a backward-compatibility promise.
  title: Toloka Platform API
  version: 2.0.0
servers:
  - url: https://platform.toloka.ai/api/v2-beta
security:
  - apiKeyAuth: []
  - scopedTokenAuth: []
tags:
  - description: The authenticated API key owner.
    name: Account
  - description: A project is the container for pipelines, datasets, and files.
    name: Projects
  - description: Rows and typed fields. Field schemas are immutable once created.
    name: Datasets
  - description: Append rows to a dataset from a file.
    name: Dataset uploads
  - description: Read a dataset out as a file.
    name: Dataset exports
  - description: A pipeline is a graph of nodes that processes each dataset item.
    name: Pipelines
  - description: The nodes, connections, fields, and version of a pipeline graph.
    name: Pipeline graph
  - description: Execute a pipeline over a dataset and inspect each item.
    name: Runs
  - description: Per-node checks that a pipeline must pass before deployment.
    name: Checks
  - description: Named credentials available to pipeline code.
    name: Secrets
  - description: Project files available to pipeline code and labeling interfaces.
    name: Files
  - description: >-
      Global, read-only catalog of the models a synthetic generation node can
      use, with their budget bounds.
    name: Generation models
  - description: >-
      Global, read-only catalog of the expert audience: the values a node
      `audience` filter can use.
    name: Audience
  - description: >-
      Project lists of experts a node can take its workforce from with
      `audienceMode: service`. Available only to teams with the audience service
      enabled.
    name: Expert lists
  - description: >-
      Experts banned in a project: they cannot be invited and are removed from
      the work they are in. Available only to teams with expert bans enabled.
    name: Expert ban list
  - description: Global, read-only base model catalog.
    name: Base models
  - description: Project-owned mutable model-training drafts.
    name: Trainings
  - description: Project-owned Models and immutable Model Versions.
    name: Models
  - name: Batch inference
paths:
  /trainings/{trainingId}/cost-estimate:
    post:
      tags:
        - Trainings
      summary: Estimate training cost
      description: >-
        Send the prepared `inputSetId`. Returns either a maximum charge and
        fingerprint for starting a run, or issues that block training. Returns
        409 while inputs are still being prepared or after they expire.
      operationId: estimateTrainingCost
      parameters:
        - in: path
          name: trainingId
          required: true
          schema:
            $ref: '#/components/schemas/TrainingId'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                inputSetId:
                  $ref: '#/components/schemas/TrainingCostEstimateInputSetId'
              required:
                - inputSetId
              type: object
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrainingCostEstimate'
          description: Training Cost Estimate
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '409':
          description: Expired Input Set or inputs still running
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
        '429':
          description: Rate limit exceeded
          headers:
            RateLimit-Limit:
              $ref: '#/components/headers/RateLimit-Limit'
            RateLimit-Policy:
              $ref: '#/components/headers/RateLimit-Policy'
            RateLimit-Remaining:
              $ref: '#/components/headers/RateLimit-Remaining'
            RateLimit-Reset:
              $ref: '#/components/headers/RateLimit-Reset'
            X-Request-Id:
              $ref: '#/components/headers/X-Request-Id'
      x-codeSamples:
        - label: TypeScript SDK
          lang: typescript
          source: |
            import { createClient } from "@toloka-platform/sdk";

            const client = createClient({
              baseUrl: "https://platform.toloka.ai",
              apiKey: process.env.TOLOKA_API_KEY!,
            });

            const estimate = await client.trainings.estimateCost({
              trainingId: "trg.019a0000-0000-7000-8000-000000000001",
              inputSetId: "tei.019a0000-0000-7000-8000-000000000001"
            });
            console.log(estimate);
components:
  schemas:
    TrainingId:
      description: Training draft ID with prefix `trg.`.
      pattern: >-
        ^trg\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      type: string
    TrainingCostEstimateInputSetId:
      description: The immutable input set used to calculate a Training Cost Estimate.
      pattern: >-
        ^tei\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
      type: string
    TrainingCostEstimate:
      description: >-
        A validation result and conservative maximum price for one Training
        draft.
      oneOf:
        - additionalProperties: false
          properties:
            calculatedAt:
              description: Time the estimate was calculated, as an ISO 8601 timestamp.
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
            capabilityVersion:
              description: Version of the model capability rules used for this estimate.
              minLength: 1
              type: string
            cutoff:
              description: >-
                Dataset cutoff used to select the inputs, as an ISO 8601
                timestamp.
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
            inputSetId:
              $ref: '#/components/schemas/TrainingCostEstimateInputSetId'
            inputs:
              $ref: '#/components/schemas/TrainingCostEstimateInputs'
            issues:
              description: Issues preventing a ready cost estimate.
              items:
                $ref: '#/components/schemas/TrainingCostEstimateIssue'
              minItems: 1
              type: array
            pricingVersion:
              description: Version of the pricing rules used for this estimate.
              minLength: 1
              type: string
            status:
              const: blocked
              description: >-
                Estimate status; `blocked` means the reported issues must be
                resolved before starting a run.
              type: string
            trainingId:
              $ref: '#/components/schemas/TrainingId'
          required:
            - trainingId
            - inputSetId
            - cutoff
            - inputs
            - capabilityVersion
            - pricingVersion
            - calculatedAt
            - status
            - issues
          type: object
        - properties:
            budget:
              $ref: '#/components/schemas/TrainingResourceBudget'
            calculatedAt:
              description: Time the estimate was calculated, as an ISO 8601 timestamp.
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
            capabilityVersion:
              description: Version of the model capability rules used for this estimate.
              minLength: 1
              type: string
            currency:
              const: USD
              description: Currency used for the estimate; always `USD`.
              type: string
            cutoff:
              description: >-
                Dataset cutoff used to select the inputs, as an ISO 8601
                timestamp.
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
            fingerprint:
              description: >-
                SHA-256 fingerprint of this estimate, as 64 lowercase
                hexadecimal characters; send it when starting the run.
              pattern: ^[0-9a-f]{64}$
              type: string
            inputSetId:
              $ref: '#/components/schemas/TrainingCostEstimateInputSetId'
            inputs:
              $ref: '#/components/schemas/TrainingCostEstimateInputs'
            issues:
              description: Blocking issues; always empty for a ready estimate.
              items:
                $ref: '#/components/schemas/TrainingCostEstimateIssue'
              maxItems: 0
              minItems: 0
              type: array
            maximumCharge:
              description: Maximum charge in US dollars as a decimal string.
              type: string
            pricingVersion:
              description: Version of the pricing rules used for this estimate.
              minLength: 1
              type: string
            status:
              const: ready
              description: >-
                Estimate status; `ready` means the inputs passed validation and
                a maximum charge is available.
              type: string
            trainingId:
              $ref: '#/components/schemas/TrainingId'
          required:
            - trainingId
            - inputSetId
            - cutoff
            - inputs
            - capabilityVersion
            - pricingVersion
            - calculatedAt
            - status
            - issues
            - budget
            - maximumCharge
            - currency
            - fingerprint
          type: object
    TrainingCostEstimateInputs:
      additionalProperties: false
      description: Prepared inputs and their validation reports.
      properties:
        training:
          additionalProperties: false
          description: Frozen training selection and its validation result.
          properties:
            datasetExportId:
              description: Export ID with prefix `dex.` for the frozen selection.
              pattern: >-
                ^dex\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
              type: string
            datasetId:
              description: Dataset ID with prefix `ds.` containing these examples.
              pattern: >-
                ^ds\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
              type: string
            failure:
              $ref: '#/components/schemas/TrainingInputExportFailure'
            heldOutRows:
              description: >-
                Number of rows excluded by split roles; absent when that count
                has not been calculated.
              maximum: 9007199254740991
              minimum: 0
              type: integer
            report:
              anyOf:
                - $ref: '#/components/schemas/TrainingInputReport'
                - type: 'null'
              description: >-
                Validation report for these examples, or null when the export
                failed or produced no report.
          required:
            - datasetId
            - datasetExportId
            - report
            - failure
          type: object
        validation:
          anyOf:
            - additionalProperties: false
              properties:
                datasetExportId:
                  description: Export ID with prefix `dex.` for the frozen selection.
                  pattern: >-
                    ^dex\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  type: string
                datasetId:
                  description: Dataset ID with prefix `ds.` containing these examples.
                  pattern: >-
                    ^ds\.[0-9a-f]{8}-[0-9a-f]{4}-[7][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
                  type: string
                failure:
                  $ref: '#/components/schemas/TrainingInputExportFailure'
                heldOutRows:
                  description: >-
                    Number of rows excluded by split roles; absent when that
                    count has not been calculated.
                  maximum: 9007199254740991
                  minimum: 0
                  type: integer
                report:
                  anyOf:
                    - $ref: '#/components/schemas/TrainingInputReport'
                    - type: 'null'
                  description: >-
                    Validation report for these examples, or null when the
                    export failed or produced no report.
              required:
                - datasetId
                - datasetExportId
                - report
                - failure
              type: object
            - type: 'null'
          description: >-
            Frozen validation selection and its validation result, or null when
            no validation input is selected.
      required:
        - training
        - validation
      type: object
    TrainingCostEstimateIssue:
      additionalProperties: false
      properties:
        code:
          description: >-
            Reason the estimate is blocked: unsupported source or duration,
            failed export, invalid or empty examples, exceeded row or token
            limits, or a mismatched token estimator.
          enum:
            - unsupported_source
            - export_failed
            - invalid_examples
            - empty_selection
            - row_limit_exceeded
            - token_limit_exceeded
            - estimator_mismatch
            - unsupported_duration
          type: string
        message:
          description: Explanation of the issue preventing a ready estimate.
          maxLength: 500
          minLength: 1
          type: string
        purpose:
          anyOf:
            - enum:
                - training
                - validation
              type: string
            - type: 'null'
          description: >-
            Affected input: `training` or `validation`, or null when the issue
            applies to the whole estimate.
      required:
        - code
        - message
        - purpose
      type: object
    TrainingResourceBudget:
      additionalProperties: false
      description: Estimated and maximum training resource usage.
      properties:
        estimatedGpuSeconds:
          description: Estimated total GPU time, in seconds summed across all GPUs.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        estimatedWallSeconds:
          description: Estimated elapsed training time, in seconds.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        gpuCount:
          description: Number of GPUs used for the estimate.
          exclusiveMinimum: 0
          maximum: 9007199254740991
          type: integer
        maximumGpuSeconds:
          description: >-
            Maximum GPU time used to bound the charge, in seconds summed across
            all GPUs.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        maximumWallSeconds:
          description: Conservative maximum elapsed training time, in seconds.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        methodWorkUnits:
          description: >-
            Token-based work estimate, including epochs and the method-specific
            training and validation workload.
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - methodWorkUnits
        - estimatedGpuSeconds
        - estimatedWallSeconds
        - maximumWallSeconds
        - maximumGpuSeconds
        - gpuCount
      type: object
    TrainingInputExportFailure:
      anyOf:
        - properties:
            code:
              description: >-
                Failure category: `empty_selection` when no rows match,
                `size_limit_exceeded` when the export is too large, or
                `assembly_failed` when preparation fails.
              enum:
                - empty_selection
                - size_limit_exceeded
                - assembly_failed
              type: string
            message:
              description: Explanation of why the export failed.
              maxLength: 500
              minLength: 1
              type: string
            timestamp:
              description: Time the export failed, as an ISO 8601 timestamp.
              format: date-time
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
              type: string
          required:
            - timestamp
            - code
            - message
          type: object
        - type: 'null'
      description: Export failure details, or null when the export did not fail.
    TrainingInputReport:
      additionalProperties: false
      properties:
        errors:
          description: Sample of validation errors, up to 50 entries.
          items:
            additionalProperties: false
            properties:
              itemIndex:
                description: Index of the dataset item with a validation error.
                maximum: 9007199254740991
                minimum: 0
                type: integer
              reason:
                description: Reason the example failed validation.
                type: string
            required:
              - itemIndex
              - reason
            type: object
          maxItems: 50
          type: array
        invalidCount:
          description: Number of examples rejected during validation.
          maximum: 9007199254740991
          minimum: 0
          type: integer
        tokens:
          additionalProperties: false
          description: Token-count statistics for the valid examples.
          properties:
            estimatorVersion:
              anyOf:
                - enum:
                    - utf16-code-units-div-4-v1
                    - script-weighted-v1
                  type: string
                - type: 'null'
              default: null
              description: Version of the token estimator used, or null when unavailable.
            max:
              description: Largest token count among valid examples.
              maximum: 9007199254740991
              minimum: 0
              type: integer
            p50:
              description: Median number of tokens per valid example.
              maximum: 9007199254740991
              minimum: 0
              type: integer
            p95:
              description: 95th percentile of tokens per valid example.
              maximum: 9007199254740991
              minimum: 0
              type: integer
            total:
              anyOf:
                - maximum: 9007199254740991
                  minimum: 0
                  type: integer
                - type: 'null'
              default: null
              description: Total tokens across valid examples, or null when unavailable.
          required:
            - p50
            - p95
            - max
          type: object
        validCount:
          description: Number of valid training examples in the selection.
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - validCount
        - invalidCount
        - errors
        - tokens
      type: object
  headers:
    RateLimit-Limit:
      description: The maximum number of requests allowed in the current window.
      schema:
        type: integer
    RateLimit-Policy:
      description: The rate limit policy (e.g., "60;w=60").
      schema:
        type: string
    RateLimit-Remaining:
      description: The number of requests remaining in the current window.
      schema:
        type: integer
    RateLimit-Reset:
      description: The number of seconds until the current window resets.
      schema:
        type: integer
    X-Request-Id:
      description: >-
        The request id: the X-Request-Id you sent when it is 1-128 characters of
        letters, digits, ".", "_" or "-", otherwise a generated UUID. Present on
        every response, including errors; quote it when reporting a problem.
      schema:
        type: string
  securitySchemes:
    apiKeyAuth:
      description: >-
        Enter `ApiKey <your-api-key>` in Authorization, including the `ApiKey `
        prefix. In cURL and Python samples, `<api-key>` means this full value.
        The TypeScript SDK adds the prefix for you.
      in: header
      name: Authorization
      type: apiKey
    scopedTokenAuth:
      description: >-
        Enter the project-scoped token as `pst_...` in X-Scoped-Token, without
        an `ApiKey ` prefix. Create a token with POST
        /projects/{projectId}/tokens.
      in: header
      name: X-Scoped-Token
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.