Weav

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

typestringrequired

One of: text, url, file, video, qa.

contentstring

Required for type='text'

urlstring

Required for type='url'

Format: url.

filefile

Required for type='file' (multipart/form-data)

Format: binary.

video_urlstring

Required for type='video'

Format: url.

questionstring

Required for type='qa'

answerstring

Required for type='qa'

titlestring | null

Maximum length: 255.

descriptionstring | null
agent_idsarray<string> | null

Array of agent UUIDs to attach this training data to

Request

cURL
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."
}'
JavaScript
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());
Python
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())
PHP
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

201 Created
{
    "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"
}
400 Bad Request
{
    "error": "Error message",
    "code": "ERROR_CODE",
    "errors": {}
}
422 Unprocessable Content
{
    "error": "Error message",
    "code": "ERROR_CODE",
    "errors": {}
}
500 Internal Server Error
{
    "error": "Error message",
    "code": "ERROR_CODE",
    "errors": {}
}
  • 401 Unauthorized

Response fields

idstring

Format: uuid.

typestring

One of: text, url, file, video, qa.

sourcestring
titlestring | null
descriptionstring | null
slugstring | null
is_processedboolean
statusstring | null

One of: queued, processing, completed, failed.

training_folder_idstring | null

Format: uuid.

created_atstring | null

Format: date-time.

updated_atstring | null

Format: date-time.