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

# Get a training job

> Get a training job's status, configuration, metrics, and artifact readiness.

`GET /v1/training-jobs/{job_id}`

Returns one training job visible to the caller's team.

## Request

<ParamField header="X-API-Key" type="string" required>
  Your Fastino API key.
</ParamField>

<ParamField path="job_id" type="string" required>
  Training-job UUID.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl https://api.fastino.ai/v1/training-jobs/YOUR_TRAINING_JOB_ID \
    -H "X-API-Key: $FASTINO_API_KEY"
  ```
</RequestExample>

## Response

<ResponseField name="id" type="string">
  Training-job UUID.
</ResponseField>

<ResponseField name="status" type="string">
  Persisted lifecycle status.
</ResponseField>

<ResponseField name="normalized_status" type="string | null">
  Stable status for client compatibility.
</ResponseField>

<ResponseField name="is_terminal_status" type="boolean | null">
  Whether polling can stop.
</ResponseField>

<ResponseField name="progress_percent" type="integer | null">
  Current completion percentage from `0` through `100`.
</ResponseField>

<ResponseField name="current_epoch" type="integer | null">
  Current 1-indexed epoch.
</ResponseField>

<ResponseField name="error_message" type="string | null">
  Failure details when available.
</ResponseField>

<ResponseField name="metrics" type="object | null">
  Available training metrics. Common keys are `final_training_loss`, `final_validation_loss`, and `best_validation_loss`. Evaluation metrics are separate and are not guaranteed.
</ResponseField>

<ResponseField name="artifact_ready" type="boolean | null">
  Whether an artifact location is available.
</ResponseField>

<ResponseField name="is_deployable" type="boolean | null">
  Authoritative deployment-readiness decision.
</ResponseField>

<ResponseField name="deployability_reason" type="string | null">
  Why the job is not deployable.
</ResponseField>

The record also returns the submitted training configuration, timestamps, dataset references, provider details, labels, and artifact metadata.

<ResponseExample>
  ```json Response theme={null}
  {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "status": "running",
    "normalized_status": "running",
    "is_terminal_status": false,
    "progress_percent": 40,
    "current_epoch": 2,
    "metrics": {
      "final_training_loss": 0.12,
      "final_validation_loss": 0.18,
      "best_validation_loss": 0.15
    },
    "artifact_ready": false,
    "is_deployable": false,
    "deployability_reason": "job_incomplete"
  }
  ```
</ResponseExample>

An unknown or inaccessible job returns `404`. An invalid path value returns `422`.
