Create training data
Create training data. Supports multiple types: text, url, file, video, qa. Processing happens automatically in the background.
Create training data. Supports multiple types: text, url, file, video, qa. Processing happens automatically in the background.
POST https://api.weav.com/v1/training-data
Requires a token with the external-api:write ability.
Body
typestringrequiredOne of: text, url, file, video, qa.
contentstringRequired for type='text'
urlstringRequired for type='url'
Format: url.
filefileRequired for type='file' (multipart/form-data)
Format: binary.
video_urlstringRequired for type='video'
Format: url.
questionstringRequired for type='qa'
answerstringRequired for type='qa'
titlestring | nullMaximum length: 255.
descriptionstring | nullagent_idsarray<string> | nullArray of agent UUIDs to attach this training data to
Request
curl --request POST \
--url 'https://api.weav.com/v1/training-data' \
--header "Authorization: Bearer ${WEAV_API_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"type": "text",
"content": "Your text content here",
"url": "https://example.com",
"video_url": "https://youtube.com/watch?v=...",
"question": "What is your return policy?",
"answer": "Our return policy allows returns within 30 days."
}'
const body = {
"type": "text",
"content": "Your text content here",
"url": "https://example.com",
"video_url": "https://youtube.com/watch?v=...",
"question": "What is your return policy?",
"answer": "Our return policy allows returns within 30 days."
};
const response = await fetch("https://api.weav.com/v1/training-data", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WEAV_API_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(body)
});
console.log(await response.json());
import os
import requests
headers = {"Authorization": f"Bearer {os.environ['WEAV_API_TOKEN']}"}
body = {"type": "text", "content": "Your text content here", "url": "https://example.com", "video_url": "https://youtube.com/watch?v=...", "question": "What is your return policy?", "answer": "Our return policy allows returns within 30 days."}
response = requests.post("https://api.weav.com/v1/training-data", headers=headers, json=body)
print(response.json())
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('POST', 'https://api.weav.com/v1/training-data', [
'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
'json' => array (
'type' => 'text',
'content' => 'Your text content here',
'url' => 'https://example.com',
'video_url' => 'https://youtube.com/watch?v=...',
'question' => 'What is your return policy?',
'answer' => 'Our return policy allows returns within 30 days.',
),
]);
echo $response->getBody();
Response
{
"id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
"type": "text",
"source": "string",
"title": "string",
"description": "string",
"slug": "string",
"is_processed": false,
"status": "queued",
"training_folder_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z"
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
{
"error": "Error message",
"code": "ERROR_CODE",
"errors": {}
}
401Unauthorized
Response fields
idstringFormat: uuid.
typestringOne of: text, url, file, video, qa.
sourcestringtitlestring | nulldescriptionstring | nullslugstring | nullis_processedbooleanstatusstring | nullOne of: queued, processing, completed, failed.
training_folder_idstring | nullFormat: uuid.
created_atstring | nullFormat: date-time.
updated_atstring | nullFormat: date-time.
