curl --request POST \
--url https://{host}/api/contexts/{slug}/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connector_id": "<string>",
"folder": "<string>",
"files": [
"<string>"
],
"item_type": "folder",
"path": "<string>"
}
'import requests
url = "https://{host}/api/contexts/{slug}/import"
payload = {
"connector_id": "<string>",
"folder": "<string>",
"files": ["<string>"],
"item_type": "folder",
"path": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connector_id: '<string>',
folder: '<string>',
files: ['<string>'],
item_type: 'folder',
path: '<string>'
})
};
fetch('https://{host}/api/contexts/{slug}/import', 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://{host}/api/contexts/{slug}/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connector_id' => '<string>',
'folder' => '<string>',
'files' => [
'<string>'
],
'item_type' => 'folder',
'path' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{host}/api/contexts/{slug}/import"
payload := strings.NewReader("{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/api/contexts/{slug}/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/contexts/{slug}/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"state": "<string>",
"exploring": true,
"profiling": true,
"importing": true
}{
"message": "<string>",
"code": "<string>"
}Import source documents from a project connector
Pull source documents from a linked project connector (Box, …) into the context. Supply either folder or files. Stages the source only — curate explicitly before querying.
curl --request POST \
--url https://{host}/api/contexts/{slug}/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connector_id": "<string>",
"folder": "<string>",
"files": [
"<string>"
],
"item_type": "folder",
"path": "<string>"
}
'import requests
url = "https://{host}/api/contexts/{slug}/import"
payload = {
"connector_id": "<string>",
"folder": "<string>",
"files": ["<string>"],
"item_type": "folder",
"path": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
connector_id: '<string>',
folder: '<string>',
files: ['<string>'],
item_type: 'folder',
path: '<string>'
})
};
fetch('https://{host}/api/contexts/{slug}/import', 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://{host}/api/contexts/{slug}/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connector_id' => '<string>',
'folder' => '<string>',
'files' => [
'<string>'
],
'item_type' => 'folder',
'path' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{host}/api/contexts/{slug}/import"
payload := strings.NewReader("{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/api/contexts/{slug}/import")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/contexts/{slug}/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"connector_id\": \"<string>\",\n \"folder\": \"<string>\",\n \"files\": [\n \"<string>\"\n ],\n \"item_type\": \"folder\",\n \"path\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"task_id": "<string>",
"state": "<string>",
"exploring": true,
"profiling": true,
"importing": true
}{
"message": "<string>",
"code": "<string>"
}Authorizations
Session token from POST /auth/login, sent as Authorization: Bearer <token>.
Headers
Date-based contract version, echoed back on the same header. Omit for the default (2026-07); send unstable for the in-development surface. An unrecognized value is rejected with 400 unsupported_api_version.
Path Parameters
Context slug or UUID.
Body
Which connector items to pull, and where to land them.
The linked connector to import from.
Connector folder id to import
Connector file ids to import
A connector file id.
Whether folder or files selects the sources.
Subdirectory under the source tree (default uploads)
Response
Import accepted (state: importing)
What every context-workflow trigger returns. The work is asynchronous: poll GET /tasks/{task_id}. The per-workflow booleans duplicate state and appear only where a workflow's contract names one.
The enqueued task. Poll it at GET /tasks/{id}.
The forward-looking status the trigger put the context into.
Duplicates state; present only for explore
Duplicates state; present only for profile
Duplicates state; present only for the import/curate triggers
Was this page helpful?