Get Settings Migration
Returns the progress of the migration that Update Knowledge Base Settings started when it answered 202. Poll it until run_state is succeeded, failed, or canceled.
Once it has succeeded, read the new settings and their revision with Get Knowledge Base Settings.
For the update-and-poll flow, see Change Models or Retrieval Settings.
curl --request GET \
--url https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"candidate_publication_fingerprint": "projection-set-sha256:9ce0b7c3b431e0f6550f3f16020732e205ce28e1a5f86426e0cf79e7499563b8",
"changed_kind": "embedding",
"checkpoint": "candidate-built",
"completed_at": null,
"created_at": "2026-10-20T03:10:00Z",
"error_code": null,
"evaluation_summary": null,
"id": "a7c3e9f1-2b4d-4c6e-8f0a-1b3d5f7a9c2e",
"knowledge_space_id": "0a9d3c2e-5b6f-4e1a-8c7d-2f3e4a5b6c7d",
"rebuild_scope": "full-vector-space",
"run_state": "running",
"updated_at": "2026-10-20T03:14:12Z"
}Authorizations
Every request authenticates with an API key: Authorization: Bearer {API_KEY}. App endpoints take an app API key; knowledge endpoints take a knowledge base API key (Get Started).
Keep keys server-side; never embed them in client code. Requests with a missing or invalid key fail with HTTP 401 (unauthorized).
Path Parameters
Knowledge base ID: the last segment of the Service API endpoint shown in the knowledge base's API Access dialog (…/knowledge-fs/spaces/<knowledge base ID>), and the segment after /datasets/new/ in the address bar.
Migration ID: migration.id from the 202 response of Update Knowledge Base Settings. No other operation returns it.
Response
The migration.
Internal. Not needed to follow the migration.
What the change touched: embedding or retrieval.
Last step reached: queued, candidate-built, evaluated, or activated.
When the migration ended (succeeded, failed, or canceled), ISO 8601. null while it runs.
When the migration started, ISO 8601.
Code of the last failure, for example PROFILE_MIGRATION_ATTEMPTS_EXHAUSTED or VECTOR_SPACE_QUOTA_EXCEEDED. null when none.
Flat map of evaluation results recorded for the rebuilt index. null when none was recorded.
Migration ID. Pass it to Get Settings Migration.
Internal ID of the knowledge base. Not the knowledge base ID in the path.
What the migration rebuilds:
full-vector-space: an embedding model change re-embeds every document.full-page-index-summary-outline: a reasoning model change rebuilds the page index, summaries, and outlines.clone-publication: any other retrieval change reuses the current index.
Progress of the migration:
queued,running: in progress.succeeded: the new settings are in effect.failed: stopped.error_codesays why. Check the models in Get Knowledge Base Settings before trying the change again.canceled: a newer change of the same kind replaced this migration before it finished. Follow the newer one.
When the migration last changed, ISO 8601.
Was this page helpful?
curl --request GET \
--url https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/settings/migrations/{migration_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"candidate_publication_fingerprint": "projection-set-sha256:9ce0b7c3b431e0f6550f3f16020732e205ce28e1a5f86426e0cf79e7499563b8",
"changed_kind": "embedding",
"checkpoint": "candidate-built",
"completed_at": null,
"created_at": "2026-10-20T03:10:00Z",
"error_code": null,
"evaluation_summary": null,
"id": "a7c3e9f1-2b4d-4c6e-8f0a-1b3d5f7a9c2e",
"knowledge_space_id": "0a9d3c2e-5b6f-4e1a-8c7d-2f3e4a5b6c7d",
"rebuild_scope": "full-vector-space",
"run_state": "running",
"updated_at": "2026-10-20T03:14:12Z"
}