Bulk Create Sources from S3 Folder
curl --request POST \
--url https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/ \
--header 'Content-Type: application/json' \
--cookie sessionid= \
--data '
{
"s3_folder_url": "<string>",
"force_reupload_existing": false,
"parent_topic_path": [
"<string>"
]
}
'import requests
url = "https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/"
payload = {
"s3_folder_url": "<string>",
"force_reupload_existing": False,
"parent_topic_path": ["<string>"]
}
headers = {
"cookie": "sessionid=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: 'sessionid=', 'Content-Type': 'application/json'},
body: JSON.stringify({
s3_folder_url: '<string>',
force_reupload_existing: false,
parent_topic_path: ['<string>']
})
};
fetch('https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/', 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-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/",
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([
's3_folder_url' => '<string>',
'force_reupload_existing' => false,
'parent_topic_path' => [
'<string>'
]
]),
CURLOPT_COOKIE => "sessionid=",
CURLOPT_HTTPHEADER => [
"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://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/"
payload := strings.NewReader("{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "sessionid=")
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://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/")
.header("cookie", "sessionid=")
.header("Content-Type", "application/json")
.body("{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'sessionid='
request["Content-Type"] = 'application/json'
request.body = "{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Sources - Bulk Ingest
Bulk Create Sources from S3 Folder
Discover supported files under an S3 folder, map topic paths from folder hierarchy, and run bulk S3 ingestion.
In addition to standard source files (pdf, html, md, csv, etc.),
this endpoint also discovers structured JSON files for KBA and Forum
ingestion. Files whose name ends with _kba.json are ingested as
KBA sources, and files ending with _forum.json are ingested as
Forum sources. Other .json files are ignored.
POST
/
sources
/
bulk-ingest-s3-folder
/
Bulk Create Sources from S3 Folder
curl --request POST \
--url https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/ \
--header 'Content-Type: application/json' \
--cookie sessionid= \
--data '
{
"s3_folder_url": "<string>",
"force_reupload_existing": false,
"parent_topic_path": [
"<string>"
]
}
'import requests
url = "https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/"
payload = {
"s3_folder_url": "<string>",
"force_reupload_existing": False,
"parent_topic_path": ["<string>"]
}
headers = {
"cookie": "sessionid=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {cookie: 'sessionid=', 'Content-Type': 'application/json'},
body: JSON.stringify({
s3_folder_url: '<string>',
force_reupload_existing: false,
parent_topic_path: ['<string>']
})
};
fetch('https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/', 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-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/",
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([
's3_folder_url' => '<string>',
'force_reupload_existing' => false,
'parent_topic_path' => [
'<string>'
]
]),
CURLOPT_COOKIE => "sessionid=",
CURLOPT_HTTPHEADER => [
"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://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/"
payload := strings.NewReader("{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "sessionid=")
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://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/")
.header("cookie", "sessionid=")
.header("Content-Type", "application/json")
.body("{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-prod.voltai.ai/source/api/sources/bulk-ingest-s3-folder/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["cookie"] = 'sessionid='
request["Content-Type"] = 'application/json'
request.body = "{\n \"s3_folder_url\": \"<string>\",\n \"force_reupload_existing\": false,\n \"parent_topic_path\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"message": "<string>",
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Authorizations
cookieAuthApiKeyAuth
Query Parameters
Organization name (required for multi-tenant API keys)
Body
application/json
S3 folder URL (example: s3://my-bucket/docs/)
Minimum string length:
1When true, re-upload and re-parse even if source already exists.
Optional parent topic root-to-leaf path. This path is prefixed to each discovered file topic path.
Minimum string length:
1