---
title: "Create an interactive training job"
method: POST
path: "/v1/training/jobs/create-model"
tags: ["training"]
---

# Create an interactive training job

`POST /v1/training/jobs/create-model`

## Request

- Base URL: `https://api.fastino.ai`
- URL: `https://api.fastino.ai/v1/training/jobs/create-model`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
- TypeScript: <https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/docs/v1/training/jobs/create-model/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a LoRA training job on a decoder base model that you train step by step (Tinker's `create_model`), or restore one from a training-state checkpoint. Encoder (GLiNER) models train from a dataset with `POST /v1/training/jobs`. Read the result at GET /v1/training/jobs/{job_id}/futures/{future_id}.

## Headers

- `Idempotency-Key` string, nullable: Client-generated key (a UUID is ideal; it must be URL-safe to look it up) that makes the call safe to send again after a lost response. A repeat with the same key and body from the same caller returns the first call's answer (the same job and future) without running or billing it again, or a 409 while the first call still runs; the same key with another route, job, body or caller is a 422. Look a key up with GET /v1/training/operations/{idempotency_key}.

## Request body

- CreateModelBody: ``POST /v1/training/jobs/create-model``: a LoRA job on a base model, or one restored from a saved state.
  - `base_model` string, nullable: A decoder served for training (`GET /v1/base-models?supports_training=true`).
  - `from_checkpoint` string, nullable: A training-state checkpoint (`tinker://<job_id>/weights/<name>`) to start from; the job takes its base model and LoRA settings.
  - `load_optimizer` boolean: With `from_checkpoint`, also restore the optimizer state.
  - `lora_config` LoraConfig: LoRA settings of a new training run.
    - `rank` integer
    - `seed` integer, nullable
    - `train_attn` boolean
    - `train_mlp` boolean
    - `train_unembed` boolean
  - `optimizer_config` OptimizerConfig: Optimizer family chosen at creation (only ``adamw`` is served).
    - `type` string
  - `project_id` string, nullable
  - `user_metadata` object, nullable: String keys and values, as on `save-weights`.

## Response `200`

Successful Response

- CreateModelAccepted: A new interactive job: it trains once its ``create`` future (and ``load``, from a checkpoint) completes.
  - `base_model` string, required
  - `future_id` string, required: The job's `create` future.
  - `job_id` string, required
  - `load_future_id` string, nullable: With `from_checkpoint`: the future that loads it.
  - `type` 'interactive'

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-17** `81465e18c1d2`: 1 info
  - added the new optional `header` request parameter `Idempotency-Key`
- **2026-10-15** `ef285860f952`: 1 breaking, 1 info
  - removed `#/components/schemas/JsonObject-Input` from the `user_metadata` request property `anyOf` list
  - added `subschema #1` to the `user_metadata` request property `anyOf` list
- **2026-10-15** `eef86c1497c1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/changes/v1/training/jobs/create-model/post.md)

---

[API](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api.md) - [All operations](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/revisions/81465e18c1d2?raw)
