---
title: "Adopt models from the libraries already on this machine"
method: POST
path: "/v1/models/foreign-libraries/adopt"
tags: ["Models"]
---

# Adopt models from the libraries already on this machine

`POST /v1/models/foreign-libraries/adopt`

## Request

- Base URL: `http://localhost:9998`
- URL: `http://localhost:9998/v1/models/foreign-libraries/adopt`
- Auth: HTTP bearer

Adopts the set the detect route reported, as one plan spanning every library rather than one plan per library. Adoption hardlinks by default, so no disk is spent twice. A split GGUF is adopted whole or skipped by name, never half adopted. Re-running is safe: "already adopted" is re-derived from the inode, not from a stored flag.

## Request body

- object
  - `allowCopy` boolean: Permit copying when a model cannot be hardlinked, which happens across volumes and spends the user's disk. Left false, such models are reported in `skipped`.

## Response `200`

What landed, what did not, and why

- object
  - `adopted` object[], required
    - `name` string, required
    - `filename` string, required: Stored basename actually used, which may carry a disambiguator when another record already claimed it.
    - `rung` string, required: How the bytes are held: `adopted` (hardlinked, shared with the foreign library) or `owned` (our own copy). Tolerate unknown values.
  - `alreadyAdopted` string[], required: Models already present, re-derived from the inode
  - `failed` object[], required
    - `name` string, required
    - `reason` string, required
  - `skipped` object[], required: Skips still naming which library each came from, so "we lost your model" stays answerable per library.
    - `provider` string, required: ollama | lmstudio | jan | huggingface-cache; tolerate unknown values.
    - `name` string, required
    - `reason` string, required
  - `embeddingOnly` string[], required: Embedding models, reported rather than silently included
  - `hostTuning` object[], required: OLLAMA_* host tuning, each mapped or dropped with its reason
    - `variable` string, required
    - `value` string, required
    - `mappedTo` string
    - `droppedReason` string

## Other responses

- `503`: Model config store not ready

---

[API](https://skmtc.dev/modelpiper/apis/toolpiper-api.md) · [All operations](https://skmtc.dev/modelpiper/apis/toolpiper-api/llms.txt) · [OpenAPI document](https://skmtc.dev/modelpiper/apis/toolpiper-api/revisions/6722bf56385c?raw)
