Skip to content

Estimate training price

Viewing v2— current version

POST
/v2/workspaces/{workspace_id}/training-runs/estimate
curl --request POST \
--url https://api.app.layer.ai/api/v2/workspaces/:workspace_id/training-runs/estimate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"reference_set_id": "<uuid>",
"base_model_id": "<string>",
"training_framework": "fal"
}'

Unchanged from v1. This endpoint’s documented request and response schemas are identical in v1 and v2 — change the /v1 prefix to /v2. Schema equality is not a promise about behaviour, so keep your usual smoke tests.

Estimate the Creative Units cost of training a LoRA for a reference set.

workspace_id
required
Workspace Id

Id of the workspace that owns the resource.

string format: uuid

Id of the workspace that owns the resource.

Media typeapplication/json
EstimateTrainingPriceRequest
object
reference_set_id
required
Reference Set Id

The reference set to price training for.

string format: uuid
base_model_id
Any of:
string
training_framework
Any of:
string
Allowed values: fal ai-toolkit

Successful Response

Media typeapplication/json
EstimateTrainingPriceResponse
object
estimated_price_creative_units
required
Estimated Price Creative Units

Estimated Creative Units to train this reference set.

number
base_model_id
required
Base Model Id

The base model the estimate was computed for.

string
workspace_balance_creative_units
required
Workspace Balance Creative Units

Usable Creative Units balance (total minus reserved by in-progress work).

number
estimated_remaining_balance_creative_units
required
Estimated Remaining Balance Creative Units

Usable balance after subtracting the estimated price. Can be negative.

number
has_sufficient_creative_units
required
Has Sufficient Creative Units

Whether the workspace has enough available Creative Units to cover the estimate.

boolean
Examplegenerated
{
"estimated_price_creative_units": 1,
"base_model_id": "example",
"workspace_balance_creative_units": 1,
"estimated_remaining_balance_creative_units": 1,
"has_sufficient_creative_units": true
}

Unauthenticated — missing or invalid Bearer token.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Forbidden — insufficient permissions.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Resource not found.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Invalid input parameters.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Rate limited — too many concurrent requests.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}

Internal server error.

Media typeapplication/problem+json
object
type
required
string
title
required
string
status
required
integer
detail
required
string
Example
{
"type": "https://api.layer.ai/errors/ERROR_CODE",
"title": "Error Title",
"status": 400,
"detail": "Human-readable description."
}