# tinker_cookbook.checkpoint_utils.save_checkpoint ### [**tinker_cookbook.checkpoint_utils.save_checkpoint**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L480)(*training_client*, *name*, *log_path*, *loop_state*, *kind*, *ttl_seconds*, *store*) Save model checkpoint (synchronous wrapper around save_checkpoint_async). **Parameters:** - [**training_client**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L481) (*tinker.[TrainingClient](https://tinker-docs.thinkingmachines.ai/tinker/api-reference/trainingclient/index.md)*) – Training client to save from. - [**name**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L482) (*str*) – Name for the checkpoint (used in the tinker:// path). - [**log_path**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L483) (*str*) – Directory containing `checkpoints.jsonl`. - [**loop_state**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L484) (*dict[str, Any]*) – Training loop state dict (may include `batch`, `epoch`, etc.). - [**kind**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L485) (*Literal['state', 'sampler', 'both']*) – Which checkpoint types to save (`"state"`, `"sampler"`, or `"both"`). - [**ttl_seconds**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L486) (*int | None*) – Server-side retention. `None` keeps the checkpoint indefinitely. - [**store**](https://github.com/thinking-machines-lab/tinker-cookbook/blob/main/tinker_cookbook/checkpoint_utils.py#L487) (*[TrainingRunStore](https://tinker-docs.thinkingmachines.ai/cookbook/api-reference/stores/trainingrunstore/index.md) | None*) – If provided, write the checkpoint record via Storage protocol. **Returns:** Dict mapping `"state_path"` and/or `"sampler_path"` to tinker:// paths. ```python save_checkpoint( training_client=training_client, name="step-100", log_path="./logs", loop_state={"epoch": 0, "batch": 100}, ) ```