eChat MCP server

The eChat MCP (Model Context Protocol) server lets an AI assistant — Claude, Cursor, ChatGPT or any MCP client — set up, train, configure and evaluate your eChat agents for you: create an agent, write its instructions and product context, change its model and escalation settings, add Q&A and documents, crawl websites, import past conversations, review what they produced, run evaluations and compare the results.

It is a thin layer over the eChat REST API: every tool is a REST route, listed below with its route and the permission it needs. It cannot send messages to an agent — visitor conversations go through the REST messages API or the widget.

Connect

The server speaks Streamable HTTP at:

https://api.echat.ewebinar.com/mcp

There is nothing to install. Point your client at the URL and sign in when it asks.

Signing in (recommended)

The server answers an unauthenticated request with the OAuth metadata your client needs, so the URL is the whole configuration. Your client registers itself with eWebinar, sends you to eWebinar to sign in, and you choose what to allow:

Permission What it allows
Read See agents, training, chat logs, analytics and eval results (always granted)
Configure and train Create and configure agents and manage their training; some training actions spend credits
Run evaluations Create eval suites and run evaluations, which spend credits
Delete Delete agents, training, chat logs and eval data

The assistant then acts as you, on the eChat account of the eWebinar team you signed in with. Sign in to eChat once first (from eWebinar or the eChat dashboard) so that account exists.

Client Configuration
Claude Code claude mcp add --transport http echat https://api.echat.ewebinar.com/mcp
Cursor {"mcpServers":{"echat":{"type":"http","url":"https://api.echat.ewebinar.com/mcp"}}} in .cursor/mcp.json
Claude Desktop {"mcpServers":{"echat":{"command":"npx","args":["-y","mcp-remote","https://api.echat.ewebinar.com/mcp"]}}}
Anything else The URL above; the server advertises OAuth and the client performs it

Connecting with an API key

Where nobody can answer a browser prompt, send an eChat API key (Account settings → API keys, Pro plan and above) as a bearer token:

Authorization: Bearer fc_…

A key acts for the whole account and holds every permission, but it has no person behind it, so the tools that act through someone's own eWebinar connection — listing eWebinars, linking an agent to one, importing saved replies, building eval suites from eWebinar chats — and deleting an agent are unavailable.

What to expect

Tool reference

Agents

list_agents

List the account's agents (newest first) with training status, how many training items wait for review, and conversation counts. Start here to find an agent id.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents

Argument Type Required Description
cursor string Continuation token. Omit on the first request, then pass the nextCursor of the previous page.
limit integer Page size, 1-200. Defaults to 50.

create_agent

Create an agent. Give it a name, instructions (goal), product context and optionally a persona and settings; train it afterwards with the knowledge tools. Returns the new agent, including its id.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents

Argument Type Required Description
name string yes Agent name shown in eChat.
goal string | null Instructions: how the agent should behave and respond.
website_url string | null Website the agent represents.
domain_context object Product context. Merged key by key into the stored context.
persona object The agent's persona: the name and avatar visitors see.
welcome_message string | null First message a new visitor sees in the standalone widget.
settings object Settings to change. Omitted keys stay as they are; null resets a key to its default. widget and conversationLifecycle merge key by key; every other key is replaced.
is_active boolean Create the agent paused with false. Default true.

get_agent

Read one agent: name, instructions (goal), product context, persona, welcome message and stored settings.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

update_agent

Change an agent's name, instructions (goal), website, product context (company name, product summary), persona (name, avatar), welcome message, or pause/resume it (is_active). Use update_agent_settings for model, language, grounding, escalation and widget settings.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PATCH /agents/:agentId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
name string Agent name shown in eChat.
goal string | null Instructions: how the agent should behave and respond. null clears them.
website_url string | null Website the agent represents. null clears it.
is_active boolean false pauses the agent; true resumes it.
domain_context object Product context. Merged key by key into the stored context.
persona object The agent's persona: the name and avatar visitors see.
welcome_message string | null First message a new visitor sees in the standalone widget. null removes it.

delete_agent

Delete an agent and unlink it from any eWebinar it moderates. Its conversations and training go with it. Confirm with the user first.

Permission: Delete agents, training, chat logs and eval data · destructive · needs a signed-in person

REST: DELETE /agents/:agentId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

Agent settings

get_agent_settings

Read an agent's settings: model, language, grounding strictness, transcript answer mode, escalation, conversation lifecycle, widget and linked eWebinars. effective shows the values in use after defaults.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/settings

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

update_agent_settings

Change an agent's settings: model, language, grounding strictness, transcript answer mode, role, escalation (how people get involved), conversation lifecycle toggles, widget appearance, and which eWebinars it moderates (ewebinarIds). Send only what changes. Settings apply immediately to live conversations.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PATCH /agents/:agentId/settings

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
language en | es | fr | de | it | pt | nl | pl | ru | ja | ko | zh | ar | hi | tr | sv | da | no | fi | null ISO 639-1 language the agent answers in. Default en.
chatModel claude-opus-4-8 | gpt-5.6-sol | gpt-5.6-terra | gpt-5.6-luna | claude-opus-4-6 | claude-sonnet-4-6 | null Model that writes the agent's answers. Each answer costs the model's credit multiplier in message credits: claude-opus-4-8 (Claude 4.8 Opus, 6x), gpt-5.6-sol (GPT-5.6 Sol, 10x), gpt-5.6-terra (GPT-5.6 Terra, 3x), gpt-5.6-luna (GPT-5.6 Luna, 1x), claude-opus-4-6 (Claude 4.6 Opus, 5x), claude-sonnet-4-6 (Claude 4.6 Sonnet, 3x). Default gpt-5.6-terra.
groundingMode creative | balanced | conservative | null How strictly answers are checked against training. creative: never verified. balanced (default): one verification pass that removes contradicted claims. conservative (Strict in the editor): also checks each claim against retrieved evidence and drops what it cannot confirm.
transcriptAnswerMode covered_so_far | answer_anytime | null eWebinar agents only. covered_so_far (default): answer only from the part of the webinar the viewer has already watched. answer_anytime: answer from the whole transcript.
useCase sales | customer_success | support | null Role the agent's instructions start from (Role in the editor). Changing it does not rewrite existing instructions; set the agent's goal for that.
chatType webinar | landing_page | null webinar: an eWebinar AI moderator. landing_page: a standalone website chatbot.
videoType ewebinar | null Video platform for webinar agents. ewebinar is the only supported value.
ewebinarIds string[] | null eWebinars this agent moderates (ids from list_ewebinar_webinars). Replaces the list: added webinars are linked to the agent in eWebinar and removed ones unlinked. Needs a signed-in person, not an API key.
escalation object | object | object | object | object | null How the agent involves people. On an eWebinar turn every hand-off mode (email, integration, or unset) behaves as ewebinar_moderator. Replaced as a whole when set.
conversationLifecycle object | null When conversations are escalated or resolved. Merged key by key; null resets a key to its default.
widget object | null Standalone website widget appearance and visitor collection. Merged key by key; null resets a key.

Q&A

list_qa_pairs

List an agent's Q&A pairs. Filter by status (published, proposed, proposed_update, needs_answer, not_needed), by the conversation source or Q&A import they came from, or by text. Use status=proposed,proposed_update to see the review queue.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
status string Comma-separated statuses to include: published, proposed, proposed_update, needs_answer, not_needed. Default all.
sourceId string Only proposals from this conversation source (from list_conversation_sources).
importId string Only pairs created by this Q&A import.
search string Match against titles, questions and answers.
sortBy confidence confidence: proposals first, most confident first. Default: oldest first.
excludeChatProposals boolean Leave out proposals from imported conversations.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

create_qa_pair

Add a published Q&A pair: one answer and the questions it answers. The agent uses it right away. Prefer one pair per distinct intent.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
questions string[] yes Ways a visitor might ask this question. One pair answers all of them, so list only questions this exact answer fully answers.
answer string yes The answer the agent should give (markdown).
title string Display title. Defaults to the first question.

list_unanswered_questions

List questions visitors asked that neither the agent's training nor the imported conversations answered (status needs_answer). Answer one with answer_unanswered_question.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa/unanswered

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

answer_unanswered_question

Write the answer to an unanswered question and publish it as a Q&A pair.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/answer

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
documentId string yes Id of the unanswered question (a needs_answer Q&A pair).
answer string yes The answer to publish.

dismiss_unanswered_question

Dismiss (delete) an unanswered question that does not need an answer.

Permission: Delete agents, training, chat logs and eval data

REST: POST /agents/:agentId/qa/dismiss-unanswered

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
documentId string yes Id of the unanswered question to dismiss.

get_qa_pair

Read one Q&A pair: questions, answer, status, and review details for proposals.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa/:qaId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

update_qa_pair

Change a Q&A pair's questions, answer or title. To accept a proposal as-is or with edits, use approve_qa_pair instead.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PUT /agents/:agentId/qa/:qaId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).
questions string[] Ways a visitor might ask this question. One pair answers all of them, so list only questions this exact answer fully answers.
answer string New answer.
title string New display title.

delete_qa_pair

Delete a Q&A pair.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/qa/:qaId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

approve_qa_pair

Approve a proposed Q&A pair (status proposed or proposed_update) so the agent starts using it. Optionally pass an edited answer or questions.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/:qaId/approve

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).
answer string Publish this answer instead of the proposed one.
questions string[] Ways a visitor might ask this question. One pair answers all of them, so list only questions this exact answer fully answers.

reject_qa_pair

Reject a proposed Q&A pair or a proposed update.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/:qaId/reject

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

restore_qa_pair

Move a not_needed pair (one the import judged the agent already covers) back into the review queue.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/:qaId/restore

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

get_qa_answer_suggestion

Check the result of suggest_qa_answer for an unanswered question without starting new work or spending credits.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa/:qaId/suggest-answer

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

suggest_qa_answer

Draft an answer to an unanswered question from the agent's existing training (spends one message credit). Returns a draft to review, or reports that training already answers it. Publish a draft with answer_unanswered_question.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/:qaId/suggest-answer

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
qaId string yes Q&A pair id (from list_qa_pairs).

bulk_approve_qa_pairs

Approve several proposed Q&A pairs at once, by id or every pending proposal from one conversation source. Review them first.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/bulk-approve

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
ids string[] Q&A pair ids to approve.
sourceId string Approve every pending proposal from this conversation source (used when ids is empty).

bulk_reject_qa_pairs

Reject several proposed Q&A pairs at once, by id or every matching proposal from one conversation source.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/bulk-reject

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
ids string[] Q&A pair ids to reject.
sourceId string Reject every matching proposal from this conversation source (used when ids is empty).
statuses proposed | proposed_update | needs_answer[] With sourceId: which review statuses to reject. Default all three.

delete_not_needed_qa_pairs

Permanently delete the not_needed pairs a conversation source produced. Pending and published pairs are kept.

Permission: Delete agents, training, chat logs and eval data

REST: POST /agents/:agentId/qa/bulk-delete-not-needed

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
sourceId string yes Conversation source whose not_needed pairs to delete.

delete_all_published_qa_pairs

Delete EVERY published Q&A pair on the agent. Irreversible; only use when the user explicitly asks to clear all Q&A.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: POST /agents/:agentId/qa/bulk-delete

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

create_qa_import_upload_url

Get a presigned URL to upload a Q&A file (CSV, XLSX or JSON). PUT the file bytes to uploadUrl (for example with curl -T), then call create_qa_import with the returned s3Key. For small files, create_qa_import can take the content directly instead.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/imports/upload-url

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
fileName string yes File name including extension: .csv, .xlsx or .json.
mimeType string The file's MIME type.

create_qa_import

Import Q&A pairs from a file's content or an uploaded file. Pass content (JSON array of {title?, questions, answer}, or CSV with question/answer columns) or an s3Key. Duplicate questions are skipped. Check progress with get_qa_import.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/imports

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
content string File content pasted directly (JSON or CSV text). Preferred JSON: an array of { title?, questions: string[], answer }.
s3Key string Key from create_qa_import_upload_url, after uploading.
fileName string File name with extension (.json, .csv, .xlsx); decides how content is parsed. Default pasted.json.
name string Name shown on the import card.

list_qa_imports

List an agent's recent Q&A imports and their status.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa/imports

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

get_qa_import

Read one Q&A import's status and counts.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/qa/imports/:importId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
importId string yes Q&A import id (from list_qa_imports).

retry_qa_import

Run a failed Q&A import again.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/qa/imports/:importId/retry

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
importId string yes Q&A import id (from list_qa_imports).

delete_qa_import

Delete a Q&A import record. The Q&A pairs it created are kept.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/qa/imports/:importId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
importId string yes Q&A import id (from list_qa_imports).

preview_ewebinar_saved_replies_import

Preview importing the team's eWebinar saved replies as proposed Q&A for an eWebinar-linked agent.

Permission: Read agents, training, chat logs, analytics and eval results · read-only · needs a signed-in person

REST: GET /agents/:agentId/qa/ewebinar-saved-replies

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

import_ewebinar_saved_replies

Import the team's eWebinar saved replies as proposed Q&A pairs to review. Only for agents linked to eWebinar.

Permission: Create and configure agents and manage their training (some training actions spend credits) · needs a signed-in person

REST: POST /agents/:agentId/qa/imports/ewebinar-saved-replies

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

Training sources

get_training_counts

Count an agent's training sources (websites, documents, quick docs) by status.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/counts

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

get_training_attention

Count what needs a person: paused website pages, Q&A proposals waiting for review, and unanswered questions.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/attention

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

list_knowledge_documents

List the indexed documents the agent retrieves answers from (pages, files, quick docs, Q&A, transcripts), optionally for one source.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/knowledge-documents

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
sourceId string Only documents produced by this source.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-500. Default 100.

list_quick_docs

List an agent's quick docs (typed markdown notes it trains on).

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/snippets

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

create_quick_doc

Add a quick doc: a markdown note the agent trains on (policies, pricing, facts that are not on a website). Indexed in the background.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/snippets

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
title string Title.
content string yes Markdown content the agent should know.

get_quick_doc

Read one quick doc and its indexing status.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/snippets/:quickDocId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
quickDocId string yes Quick doc id.

update_quick_doc

Change a quick doc's title or content; it is re-indexed.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PUT /agents/:agentId/snippets/:quickDocId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
quickDocId string yes Quick doc id.
title string New title.
content string New markdown content.

delete_quick_doc

Delete a quick doc from the agent's training.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/snippets/:quickDocId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
quickDocId string yes Quick doc id.

list_documents

List files uploaded to an agent's training and their processing status.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/documents

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

create_document_upload_url

Get a presigned URL to upload a document for training. PUT the file bytes to uploadUrl (for example with curl -T), then call register_uploaded_document with the s3Key.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/documents/upload-url

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
fileName string yes File name including extension (PDF, DOCX, TXT, MD, CSV, XLSX and similar; legacy .doc is not supported).
mimeType string The file's MIME type; sent as the upload's Content-Type.

register_uploaded_document

Start processing a document uploaded with create_document_upload_url. Check it with get_document.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/documents

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
s3Key string yes Key from create_document_upload_url, after uploading.
fileName string File name to show. Defaults to the key's file name.
mimeType string The file's MIME type.

get_document

Read one document: processing status and the content extracted from it.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/documents/:documentId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
documentId string yes Document id.

delete_document

Delete an uploaded document and its indexed content.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/sources/documents/:documentId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
documentId string yes Document id.

scan_website

Preview a website before adding it: lists the URLs a crawl would find, grouped by path, so you can pick include and exclude paths. Adds nothing.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/scan

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
url string yes Website or sitemap URL to scan.
mode crawl | sitemap | single_url crawl (default) follows links; sitemap reads a sitemap; single_url is one page.

list_website_sources

List the websites an agent trains on and their crawl status.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/websites

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

create_website_source

Train the agent on a website: crawl from a URL, read a sitemap, or index a single page. Crawling runs in the background; check it with get_website_source.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/websites

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
url string yes Start URL (or sitemap URL in sitemap mode).
mode crawl | sitemap | single_url yes crawl follows links from the URL; sitemap reads a sitemap; single_url indexes one page.
name string Name shown in eChat.
includePaths string[] Only crawl URLs under these path prefixes, e.g. ["/docs"].
excludePaths string[] Skip URLs under these path prefixes.
maxPages integer Page limit for the crawl. Default 20.
slowScrape boolean Crawl more slowly for sites that block fast crawlers or render with JavaScript.
recrawlInterval weekly | biweekly | monthly | null Re-crawl on this schedule to pick up changes. null or omitted: never.
discoveredUrls string[] URLs from scan_website to crawl, instead of discovering them again.

get_website_source

Read a website source: crawl settings, status, the latest crawl and a preview of its pages.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/websites/:websiteId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.

update_website_source

Change a website source's crawl settings (paths, page limit, schedule). Pass recrawl=true to re-crawl with them now.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PUT /agents/:agentId/sources/websites/:websiteId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.
name string Name shown in eChat.
includePaths string[] Replace the include path prefixes.
excludePaths string[] Replace the exclude path prefixes.
maxPages integer New page limit.
slowScrape boolean Crawl slowly.
recrawlInterval weekly | biweekly | monthly | null Re-crawl schedule; null turns it off.
recrawl boolean Re-crawl now with the new settings.

recrawl_website_source

Re-crawl a website source to pick up changes.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/websites/:websiteId/recrawl

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.
force boolean Re-crawl even when a recent crawl found no changes.
fresh boolean Discard cached pages and fetch everything again.

retry_failed_website_pages

Retry the pages of a website source that failed to crawl.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/websites/:websiteId/retry-failed

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.

stop_website_crawl

Stop a website crawl in progress. Pages already indexed are kept.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/websites/:websiteId/stop

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.

delete_website_source

Delete a website source and everything indexed from it.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/sources/websites/:websiteId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.

list_website_urls

List the URLs a website source found and whether each was indexed.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/websites/:websiteId/urls

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
websiteId string yes Website source id.
search string Only URLs containing this text.
includeBlocked boolean Include URLs excluded by the source's paths or robots rules.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-500. Default 50.

list_conversation_sources

List an agent's imported conversation sources (eWebinar chat archives and uploaded exports) with their progress and how many Q&A they produced.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/chats

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

create_conversation_upload_url

Get a presigned URL to upload a support or sales conversation export (CSV, JSON or NDJSON). PUT the file to uploadUrl, then call import_conversations_from_file with the s3Key.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/upload-url

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
fileName string yes File name including extension (CSV, JSON or NDJSON conversation export).
mimeType string The file's MIME type; sent as the upload's Content-Type.

import_conversations_from_file

Import an uploaded conversation export: past answers become proposed Q&A to review. Spends message credits at provider cost. Track it with get_conversation_import_progress.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
s3Key string yes Key from create_conversation_upload_url, after uploading.
name string Name shown in eChat.
maxAgeDays integer How many days back to import. eWebinar imports are capped at 365 days in production.

import_ewebinar_conversations

Import past chats from a linked eWebinar's archive so the agent learns from how moderators answered. Produces proposed Q&A to review. Spends message credits at provider cost; set maxCredits to cap it. One source per eWebinar.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/ewebinar

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
ewebinarId string The linked eWebinar whose archived chats to import. Default: the agent's linked eWebinars.
name string Name shown in eChat.
maxAgeDays integer How many days back to import. eWebinar imports are capped at 365 days in production.
maxCredits integer Stop once the import has spent this many credits (newest conversations are imported first).
from string Start of the window (last chat activity). Default: maxAgeDays ago.
to string End of the window. Default: now.

get_conversation_source

Read one conversation source: status, counts and import window.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/chats/:conversationSourceId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

get_conversation_import_progress

Check how far a conversation import has got.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/chats/:conversationSourceId/progress

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

update_conversation_source

Change how far back a conversation source imports (maxAgeDays) or its credit budget. After widening the window, call resume_conversation_import to import the older conversations.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: PATCH /agents/:agentId/sources/chats/:conversationSourceId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.
maxAgeDays integer yes How many days back to import. eWebinar imports are capped at 365 days in production.
maxCredits integer New credit budget (eWebinar imports only).

retry_conversation_import

Retry a failed conversation import.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/:conversationSourceId/retry

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

stop_conversation_import

Stop a running conversation import. Q&A already extracted is kept.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/:conversationSourceId/stop

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

resume_conversation_import

Resume a conversation import: process batches left over when its credit budget ran out, or the older conversations after widening its window. Spends credits.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/:conversationSourceId/resume

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

continue_conversation_import

Continue a stopped conversation import from where it left off. Spends credits.

Permission: Create and configure agents and manage their training (some training actions spend credits)

REST: POST /agents/:agentId/sources/chats/:conversationSourceId/continue

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

reimport_conversation_source

Start a conversation source over: its extracted results are wiped and the conversations imported again. Spends credits again. Confirm with the user first.

Permission: Create and configure agents and manage their training (some training actions spend credits) · destructive

REST: POST /agents/:agentId/sources/chats/:conversationSourceId/renormalize

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

list_conversation_source_unanswered

List the unanswered questions one conversation source produced.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/sources/chats/:conversationSourceId/unanswered

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

delete_conversation_source

Delete a conversation source and its pending proposals. Q&A already approved from it stays.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/sources/chats/:conversationSourceId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationSourceId string yes Conversation source id.

Chat logs

list_conversations

List an agent's conversations (chat logs), most recently active first, with the latest visitor message and reply. Use has_messages_only=true for what the Chat logs page shows.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/visitors

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
from string Only conversations started at or after this time.
to string Only conversations started at or before this time.
has_messages_only boolean Only conversations with at least one message (what Chat logs shows).
chat_opened_only boolean Only visitors who opened the chat.
ewebinar_conversation_id string Find the conversation for this eWebinar conversation id.
is_test boolean true for conversations from the editor's test mode instead of real visitors.
count_only boolean Return only totalCount.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-200. Default 50.

get_conversation

Read one conversation's visitor details, state and eWebinar.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/visitors/:conversationId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationId string yes Conversation (visitor) id, from list_conversations.
is_test boolean true for conversations from the editor's test mode instead of real visitors.

list_conversation_messages

Read a conversation's transcript. Returns the newest page (oldest message first); pass nextCursor as cursor to read further back.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/visitors/:conversationId/messages

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationId string yes Conversation (visitor) id, from list_conversations.
is_test boolean true for conversations from the editor's test mode instead of real visitors.
cursor string The oldest message already loaded; returns the page before it.
limit integer Page size. Default 50.

delete_conversation

Delete a conversation with its messages and images. Irreversible.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /agents/:agentId/visitors/:conversationId

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
conversationId string yes Conversation (visitor) id, from list_conversations.

Analytics

get_agent_stats

Read an agent's daily analytics (conversations, messages and related counts) for a date range.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /agents/:agentId/stats

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
from string First day (YYYY-MM-DD, UTC). Pass with to.
to string Last day (YYYY-MM-DD, UTC). Pass with from.

Evaluations

list_eval_suites

List an agent's evaluation sets (eval suites) with each one's latest and first run scores, so you can see whether changes are helping.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).

list_ewebinar_eval_conversations

List past eWebinar chats that could make up an eval suite for an eWebinar-linked agent, preferring conversations the agent was not trained on. Use the ids with create_ewebinar_eval_suite.

Permission: Read agents, training, chat logs, analytics and eval results · read-only · needs a signed-in person

REST: GET /eval/suites/ewebinar-conversations

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
ewebinarId string One linked eWebinar. Default: all the agent's linked eWebinars.
from string Start of the window.
to string End of the window.
maxAgeDays integer Window length in days, when from is omitted.
minTurns integer Minimum reference replies. Default 2.
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-500. Default 200.

create_ewebinar_eval_suite

Create an eval suite for an eWebinar-linked agent from its archived webinar chats (a sample, or the conversations you pick). Free to create; run it with start_eval_run.

Permission: Create eval suites and run evaluations (runs spend credits) · needs a signed-in person

REST: POST /eval/suites/ewebinar-suggested

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
selectedConversationIds string[] eWebinar conversation ids to use (from list_ewebinar_eval_conversations). Default: a sample.
ewebinarIds string[] Linked eWebinars to draw from. Default: all of them.
from string Start of the window.
to string End of the window.
maxAgeDays integer Window length in days, when from is omitted.
minTurns integer Skip conversations with fewer reference replies than this. Default 2.
sampleLimit integer Conversations to sample into the suite. Default 50.

create_eval_suite_upload_url

Get a presigned URL to upload a conversation export for an eval suite. PUT the file to uploadUrl, then call create_eval_suite with the s3Key.

Permission: Create eval suites and run evaluations (runs spend credits)

REST: POST /eval/suites/upload-url

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
fileName string yes Conversation export file name (CSV, JSON or NDJSON).
mimeType string The file's MIME type.

create_eval_suite

Create an eval suite from an uploaded conversation export (s3Key) or an existing conversation source (chatSourceId). Free to create; poll get_eval_suite until status is ready, then run it with start_eval_run.

Permission: Create eval suites and run evaluations (runs spend credits)

REST: POST /eval/suites

Argument Type Required Description
agentId string yes Agent id (a UUID from list_agents / GET /agents).
name string Suite name. Default Eval Suite.
s3Key string Uploaded conversation export (from create_eval_suite_upload_url).
chatSourceId string Or: sample from an existing conversation source (from list_conversation_sources).
referenceSource human_agent | ai_agent human_agent (default): compare with people's replies. ai_agent: compare with an earlier AI moderator's replies.
mode support | sales Judging perspective. Default support.
dateFrom string For an uploaded file, only conversations on or after this date. Not applied to a conversation source (chatSourceId).
dateTo string Stored with the suite; not applied when building it.
manualSelection boolean Pick conversations yourself (suite waits in selecting status) instead of sampling.
minTurns integer Skip conversations with fewer reference replies than this. Default 2.
sampleLimit integer Conversations to sample into the suite. Default 50.

get_eval_suite

Read an eval suite: its status and the conversations in it.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites/:suiteId

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).

preview_eval_suite_conversations

For a suite waiting for a manual pick (status selecting): list candidate conversations with short summaries. Choose with select_eval_suite_conversations.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites/:suiteId/conversation-previews

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).
limit integer Previews to return, 1-150. Default 75.

select_eval_suite_conversations

Choose which conversations a manual-selection eval suite contains. Only once, while the suite is waiting for a pick (status selecting): the choice cannot be changed afterwards, so confirm it with the user. To evaluate other conversations, create a new suite.

Permission: Create eval suites and run evaluations (runs spend credits)

REST: POST /eval/suites/:suiteId/select-conversations

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).
selectedConversationIds string[] yes Conversation ids from preview_eval_suite_conversations.

delete_eval_suite

Delete an eval suite with all its runs and results.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /eval/suites/:suiteId

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).

list_eval_cases

Page through the conversations (cases) in an eval suite.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites/:suiteId/cases

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).
cursor string Pass the previous page's nextCursor.
limit integer Page size, 1-500. Default 100.

get_eval_case

Read one conversation in an eval suite with all its messages.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites/:suiteId/cases/:caseId

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).
caseId string yes Case id (from list_eval_cases).

list_eval_runs

List an eval suite's runs with status and aggregate scores.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/suites/:suiteId/runs

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).

start_eval_run

Run an eval suite: the agent (as configured now) answers every conversation in the suite and a judge scores each reply. Spends message credits (replies plus judging) — confirm with the user for large suites. Runs in the background; poll get_eval_run.

Permission: Create eval suites and run evaluations (runs spend credits)

REST: POST /eval/suites/:suiteId/runs

Argument Type Required Description
suiteId string yes Eval suite id (from list_eval_suites).
name string Run name. Default Run N.
config object Run settings. Omit to evaluate the agent exactly as configured.

get_eval_run

Read an eval run: status, aggregate scores (scores_summary) and each conversation's result with the agent's replies and the judge's scores.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/runs/:runId

Argument Type Required Description
runId string yes Eval run id (from list_eval_runs).

stop_eval_run

Stop a pending or running eval. Conversations already scored keep their results; no more credits are spent.

Permission: Create eval suites and run evaluations (runs spend credits)

REST: POST /eval/runs/:runId/stop

Argument Type Required Description
runId string yes Eval run id (from list_eval_runs).

delete_eval_run

Delete an eval run and its results.

Permission: Delete agents, training, chat logs and eval data · destructive

REST: DELETE /eval/runs/:runId

Argument Type Required Description
runId string yes Eval run id (from list_eval_runs).

compare_eval_runs

Compare two runs of the same eval suite: per-conversation score changes and both runs' replies, to see what a change to the agent improved or broke.

Permission: Read agents, training, chat logs, analytics and eval results · read-only

REST: GET /eval/runs/:runId/diff/:otherRunId

Argument Type Required Description
runId string yes The baseline run.
otherRunId string yes The run to compare against the baseline (same suite).

Account

get_account_usage

Read the account's plan, message credit balance, training storage and agent slots. Check it before large conversation imports or eval runs, which spend credits.

Permission: Read agents, training, chat logs, analytics and eval results · read-only · needs a signed-in person

REST: GET /billing/subscription/summary

No arguments.

eWebinar

list_ewebinar_webinars

List the webinars on the user's eWebinar team, with which chatbot (if any) moderates each. Use an ewebinarId in update_agent_settings.ewebinarIds to make an agent their AI moderator.

Permission: Read agents, training, chat logs, analytics and eval results · read-only · needs a signed-in person

REST: GET /account/integrations/ewebinar/webinars

No arguments.

get_ewebinar_webinar

Read one webinar on the user's eWebinar team.

Permission: Read agents, training, chat logs, analytics and eval results · read-only · needs a signed-in person

REST: GET /account/integrations/ewebinar/webinars/:ewebinarId

Argument Type Required Description
ewebinarId string yes eWebinar id (the webinar set id from list_ewebinar_webinars).

sync_ewebinar_transcript

Get the webinar transcript an eWebinar-linked agent answers from, loading it into the agent's training if it is missing. Pass refresh=true after the webinar's video or transcript changed.

Permission: Create and configure agents and manage their training (some training actions spend credits) · needs a signed-in person

REST: GET /account/integrations/ewebinar/webinars/:ewebinarId/transcript

Argument Type Required Description
ewebinarId string yes eWebinar id (the webinar set id from list_ewebinar_webinars).
agentId string The agent linked to this eWebinar. Default: the most recently updated linked agent.
refresh boolean Fetch the transcript from eWebinar again even when the agent already has it.