Browse the reference
Developers
API reference
Every endpoint a workspace API key can call, the webhook events ASDK sends and the objects they carry. Generated from the API contract, so it always matches the API.
- Base URL
- https://api.asdk.com
- Version
- 0.1.0 · OpenAPI 3.1.0 · OpenAPI description (JSON)
Overview
Coming soon API access
The public API and the MCP server are coming soon. Server-side answers, knowledge search and the MCP server are part of API access, included from the Business plan and during the trial. Webhooks are in early access and included from the Starter plan. Reads with an API key work on every plan.
Send a workspace API key as a bearer token. Create keys in the dashboard under Settings → API; a key acts on its own workspace only. Keys with the read scope call the read endpoints; keys with the write scope also call the endpoints marked “Write scope”. Errors are RFC 9457 problem details with a stable type, such as insufficient-scope or rate-limited (retry after the Retry-After header).
curl https://api.asdk.com/v1/workspaces/$WORKSPACE_ID/sites \
-H "Authorization: Bearer $ASDK_API_KEY"Guides: authentication and scopes, webhooks, MCP server, rate limits.
Workspaces
Workspaces and their settings.
Get a workspace
GET/v1/workspaces/{id}· Read
Any member, or an API key of this workspace.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
Responses
200The workspace. (Workspace)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id} \
-H "Authorization: Bearer $ASDK_API_KEY"Whether ASDK suspended the workspace
GET/v1/workspaces/{id}/suspension· Read
Any member (and the workspace's API keys). A suspended workspace's
widgets are unavailable and its dashboard is read-only: writes answer
403 (response WorkspaceSuspended). The dashboard shows a banner from this.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
Responses
200The workspace's suspension. (WorkspaceSuspension)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/suspension \
-H "Authorization: Bearer $ASDK_API_KEY"Sites
The websites a workspace's agents work on.
List the workspace's sites
GET/v1/workspaces/{id}/sites· Read
Every site with a summary of its knowledge, and the plan's site and page limits.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
Responses
200Sites, oldest first. (SiteList)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/sites \
-H "Authorization: Bearer $ASDK_API_KEY"A site
GET/v1/sites/{siteId}· Read
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
Responses
200The site. (Site)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sites/{siteId} \
-H "Authorization: Bearer $ASDK_API_KEY"Knowledge
Knowledge sources, their documents and Q&A pairs.
List a site's knowledge sources
GET/v1/sites/{siteId}/sources· Read
Sources, oldest first, including the site's Q&A source once it has pairs. Text snippet bodies are left out; read one source for its body.
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
Responses
200The sources. (SourceList)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sites/{siteId}/sources \
-H "Authorization: Bearer $ASDK_API_KEY"A knowledge source
GET/v1/sources/{sourceId}· Read
Status and progress of the last or running sync; poll every few seconds while syncing.
Parameters
| Field | Type | Description |
|---|---|---|
sourceIdpath · required | string (≤ 64 chars) | Knowledge source id (src_…). |
Responses
200The source. (Source)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sources/{sourceId} \
-H "Authorization: Bearer $ASDK_API_KEY"Sync a source now
POST/v1/sources/{sourceId}/sync· Write scope
Reads the source again; unchanged pages are not embedded again. A request during a sync runs another sync after it.
Parameters
| Field | Type | Description |
|---|---|---|
sourceIdpath · required | string (≤ 64 chars) | Knowledge source id (src_…). |
Responses
202The sync is queued. (Source)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").409Conflicts with the plan or the resource (types "limit-reached", "site-exists", "not-supported").defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/sources/{sourceId}/sync \
-H "Authorization: Bearer $ASDK_API_KEY"List a source's documents
GET/v1/sources/{sourceId}/documents· Read
Ordered by URL, a page at a time; q searches URL and title.
Parameters
| Field | Type | Description |
|---|---|---|
sourceIdpath · required | string (≤ 64 chars) | Knowledge source id (src_…). |
qquery · optional | string (≤ 200 chars) | Case-insensitive text search. |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–200) | Items per page (default 50). |
statusquery · optional | "pending" | "indexed" | "skipped" | "excluded" | "error" |
Responses
200A page of documents. (DocumentList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sources/{sourceId}/documents \
-H "Authorization: Bearer $ASDK_API_KEY"List a site's Q&A pairs
GET/v1/sites/{siteId}/qa· Read
Newest first, a page at a time; q searches questions and answers.
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
qquery · optional | string (≤ 200 chars) | Case-insensitive text search. |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–200) | Items per page (default 50). |
Responses
200A page of Q&A pairs. (QaPairList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sites/{siteId}/qa \
-H "Authorization: Bearer $ASDK_API_KEY"Add a Q&A pair
POST/v1/sites/{siteId}/qa· Write scope
Each pair is embedded as its own vector (kind qa), which the answer engine prefers on ties.
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
Request body (QaPairInput)
| Field | Type | Description |
|---|---|---|
questionrequired | string (≤ 1,000 chars) | |
answerrequired | string (≤ 8,000 chars) |
Responses
201The new pair, being embedded. (QaPair)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").409Conflicts with the plan or the resource (types "limit-reached", "site-exists", "not-supported").defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/sites/{siteId}/qa \
-H "Authorization: Bearer $ASDK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question":"…","answer":"…"}'Answers
Server-side answers from a site's knowledge (API keys with the write scope).
Answer a question from a site's knowledge
POST/v1/sites/{siteId}/ask· Write scope
Answers a question server-side exactly as the site's chat widget
would: the same knowledge base, the same grounding and citations.
grounded is false when the knowledge base did not cover the
question (the question is then recorded as a knowledge gap).
Needs a person (any member) or an API key with the write scope,
and API access in the workspace's plan ("not-in-plan" otherwise).
While the catalog lists API access as coming soon, every workspace
gets 403 "coming-soon".
Every answer counts toward the plan's monthly answers; past the hard
cap (110 % of the limit) the request answers 429 with type
"answer-limit-reached" until the next month. Conversations are not
stored.
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
Request body (AskRequest)
| Field | Type | Description |
|---|---|---|
questionrequired | string (≤ 2,000 chars) | The question, as a visitor would ask it. |
localeoptional | string (≤ 35 chars) | BCP 47 language for short questions whose language cannot be told (e.g. |
Responses
200The answer. (AskAnswer)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").429Too many requests (type "rate-limited"); retry after the Retry-After header.503The feature is not configured on this server (type "unavailable").504The answer took too long (type "timeout"); try again.defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/sites/{siteId}/ask \
-H "Authorization: Bearer $ASDK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question":"…"}'Conversations
Conversations of the widget, read and reviewed in the dashboard.
List conversations
GET/v1/workspaces/{id}/conversations· Read
Any member or an API key. Conversations with at least one message,
latest activity first, a page at a time. q searches message texts
and the lead's email and name.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
agentquery · optional | "chat" | "sales" | "search" | "forms" | "voice" | |
unansweredquery · optional | boolean | Only conversations with an answer that was not grounded in the site's content. |
withLeadquery · optional | boolean | Only conversations where the visitor left contact details. |
unreviewedquery · optional | boolean | Only conversations nobody marked reviewed. |
previewsquery · optional | "include" | "exclude" | "only" | Conversations and leads from the dashboard's preview — include (default), exclude or only. |
qquery · optional | string (≤ 200 chars) | Case-insensitive text search. |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–200) | Items per page (default 50). |
Responses
200A page of conversations. (ConversationList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/conversations \
-H "Authorization: Bearer $ASDK_API_KEY"A conversation
GET/v1/workspaces/{id}/conversations/{conversationId}· Read
Any member or an API key. Every message with its sources and the visitor's rating, the visitor, and the leads left in it.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
conversationIdpath · required | string (≤ 64 chars) | Conversation id (conv_…). |
Responses
200The conversation. (ConversationDetail)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/conversations/{conversationId} \
-H "Authorization: Bearer $ASDK_API_KEY"Leads
Contact details visitors left, their status and CSV export.
List leads
GET/v1/workspaces/{id}/leads· Read
Any member or an API key. Newest first, a page at a time, with the
number of leads per status under the same filters. q searches
email, name, company and note.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
statusquery · optional | "new" | "contacted" | "archived" | |
previewsquery · optional | "include" | "exclude" | "only" | Conversations and leads from the dashboard's preview — include (default), exclude or only. |
qquery · optional | string (≤ 200 chars) | Case-insensitive text search. |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–200) | Items per page (default 50). |
Responses
200A page of leads. (LeadList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/leads \
-H "Authorization: Bearer $ASDK_API_KEY"Export leads as CSV
GET/v1/workspaces/{id}/leads/export· Read
Any member or an API key. The leads matching the filters, newest first, at most 50,000: UTF-8 with a byte order mark, RFC 4180 quoting, and every cell that starts with =, +, -, @, a tab or a carriage return prefixed with an apostrophe so spreadsheets never run it as a formula.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
statusquery · optional | "new" | "contacted" | "archived" | |
previewsquery · optional | "include" | "exclude" | "only" | Conversations and leads from the dashboard's preview — include (default), exclude or only. |
qquery · optional | string (≤ 200 chars) | Case-insensitive text search. |
Responses
200The CSV file. (string)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/leads/export \
-H "Authorization: Bearer $ASDK_API_KEY"A lead
GET/v1/workspaces/{id}/leads/{leadId}· Read
Any member or an API key. The lead with the conversation it was left in.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
leadIdpath · required | string (≤ 64 chars) | Lead id (lead_…). |
Responses
200The lead. (LeadDetail)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/leads/{leadId} \
-H "Authorization: Bearer $ASDK_API_KEY"Change a lead's status
PATCH/v1/workspaces/{id}/leads/{leadId}· Write scope
Any member.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
leadIdpath · required | string (≤ 64 chars) | Lead id (lead_…). |
Request body (LeadUpdate)
| Field | Type | Description |
|---|---|---|
statusrequired | "new" | "contacted" | "archived" |
Responses
200The lead after the change. (LeadDetail)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl -X PATCH https://api.asdk.com/v1/workspaces/{id}/leads/{leadId} \
-H "Authorization: Bearer $ASDK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"new"}'Insights
Overview numbers, knowledge gaps and what visitors ask.
Overview of the workspace
GET/v1/workspaces/{id}/overview· Read
Any member or an API key. Conversations, answers, grounded rate,
leads and ratings of the last days days (whole days in the
workspace's time zone, today included) per day and per site, the
same numbers for the period before, the pages chats start on, and
the number of open knowledge gaps.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
daysquery · optional | 7 | 30 | 90 | The period in days, today included (default 30). |
Responses
200The overview. (Overview)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/overview \
-H "Authorization: Bearer $ASDK_API_KEY"What visitors ask
GET/v1/workspaces/{id}/insights· Read
Any member or an API key. The questions visitors ask most (grouped
by normalized text), the pages answers cite and the answers visitors
rated down, over the last days days. These lists need a plan with
the catalog feature insights-report; without it entitled is
false, the lists are empty and minPlan names the plan to upgrade
to. Knowledge gaps are in every plan (/gaps).
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
daysquery · optional | 7 | 30 | 90 | The period in days, today included (default 30). |
Responses
200The insights. (Insights)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/insights \
-H "Authorization: Bearer $ASDK_API_KEY"List open knowledge gaps
GET/v1/workspaces/{id}/gaps· Read
Any member or an API key. Questions the knowledge base could not answer, most asked first, a page at a time.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
siteIdquery · optional | string (≤ 64 chars) | Only this site of the workspace (site_…); all sites when absent. |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–200) | Items per page (default 50). |
Responses
200A page of open gaps. (KnowledgeGapList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/gaps \
-H "Authorization: Bearer $ASDK_API_KEY"Search analytics
The Search agent of a site — its settings and what visitors search for.
What visitors search for
GET/v1/sites/{siteId}/search/analytics· Read
Any member, or a workspace API key. Searches visitors settled on in
the last days days (UTC, today included): totals with the
click-through rate (clicked searches among those with results),
every day of the period, the top searches, and the searches that
found nothing useful — no result or only weak ones, and no answer —
that were not answered since.
Parameters
| Field | Type | Description |
|---|---|---|
siteIdpath · required | string (≤ 64 chars) | Site id (site_…). |
daysquery · optional | integer (1–365) | Length of the period in days (default 30). |
limitquery · optional | integer (1–50) | Rows per query list (default 20). |
Responses
200The analytics. (SearchAnalytics)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/sites/{siteId}/search/analytics \
-H "Authorization: Bearer $ASDK_API_KEY"Webhooks
Workspace webhooks — signed events for leads, conversations, knowledge gaps and source syncs.
List webhook endpoints
GET/v1/workspaces/{id}/webhooks· Read
Owners, admins and API keys. The workspace's endpoints, the events
they can subscribe to, and whether the plan includes webhooks
(entitled; without them endpoints are kept but receive nothing).
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
Responses
200The endpoints. (WebhookEndpointList)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/webhooks \
-H "Authorization: Bearer $ASDK_API_KEY"Add a webhook endpoint
POST/v1/workspaces/{id}/webhooks· Write scope
Owners, admins and API keys with the write scope (Zapier- and
Make-style subscriptions). The answer carries the signing secret,
shown this once. At most 10 endpoints per workspace
(limit-reached); the plan must include webhooks (not-in-plan).
The address must be public https.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
Request body (WebhookEndpointInput)
| Field | Type | Description |
|---|---|---|
urlrequired | string (≤ 2,048 chars) | A public https address. |
descriptionoptional | string (≤ 120 chars) | |
eventsrequired | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" |
Responses
201The endpoint and its secret. (CreatedWebhookEndpoint)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").409Conflicts with the current state (types "already-member", "last-owner", "limit-reached", "refresh-conflict").defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/workspaces/{id}/webhooks \
-H "Authorization: Bearer $ASDK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"…","events":["lead.created"]}'Change a webhook endpoint
PATCH/v1/workspaces/{id}/webhooks/{webhookId}· Write scope
Owners, admins and API keys with the write scope. Switching an
endpoint on (enabled: true) also clears a stop after repeated
failures.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
webhookIdpath · required | string (≤ 64 chars) | Webhook endpoint id (whk_…). |
Request body (WebhookEndpointPatch)
| Field | Type | Description |
|---|---|---|
urloptional | string (≤ 2,048 chars) | |
descriptionoptional | string (≤ 120 chars) | |
eventsoptional | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" | |
enabledoptional | boolean |
Responses
200The endpoint after the change. (WebhookEndpoint)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl -X PATCH https://api.asdk.com/v1/workspaces/{id}/webhooks/{webhookId} \
-H "Authorization: Bearer $ASDK_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"…","description":"…","events":["lead.created"],"enabled":true}'Remove a webhook endpoint
DELETE/v1/workspaces/{id}/webhooks/{webhookId}· Write scope
Owners, admins and API keys with the write scope. Its delivery log goes with it.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
webhookIdpath · required | string (≤ 64 chars) | Webhook endpoint id (whk_…). |
Responses
204Removed.401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl -X DELETE https://api.asdk.com/v1/workspaces/{id}/webhooks/{webhookId} \
-H "Authorization: Bearer $ASDK_API_KEY"Send a test event
POST/v1/workspaces/{id}/webhooks/{webhookId}/test· Write scope
Owners, admins and API keys with the write scope. Sends a signed
test event now (one attempt, also to a switched-off endpoint) and
answers with the logged delivery: the status the endpoint answered,
the start of its answer and how long it took. The plan must include
webhooks (not-in-plan).
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
webhookIdpath · required | string (≤ 64 chars) | Webhook endpoint id (whk_…). |
Responses
200The delivery of the test event. (WebhookDelivery)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").429Too many requests (type "rate-limited"); retry after the Retry-After header.defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/workspaces/{id}/webhooks/{webhookId}/test \
-H "Authorization: Bearer $ASDK_API_KEY"An endpoint's delivery log
GET/v1/workspaces/{id}/webhooks/{webhookId}/deliveries· Read
Owners, admins and API keys. Newest first, a page at a time, kept 30 days, with each delivery's payload.
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
webhookIdpath · required | string (≤ 64 chars) | Webhook endpoint id (whk_…). |
cursorquery · optional | string (≤ 4,096 chars) | The |
limitquery · optional | integer (1–100) | Deliveries per page (default 25). |
Responses
200A page of deliveries. (WebhookDeliveryList)400Invalid input (type "validation";fieldnames the input).401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").defaultAn error, as RFC 9457 problem details.
curl https://api.asdk.com/v1/workspaces/{id}/webhooks/{webhookId}/deliveries \
-H "Authorization: Bearer $ASDK_API_KEY"Send a delivery's event again
POST/v1/workspaces/{id}/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver· Write scope
Owners, admins and API keys with the write scope. One attempt now, logged as a new delivery of the same event (same body, new signature). The plan must include webhooks (not-in-plan).
Parameters
| Field | Type | Description |
|---|---|---|
idpath · required | string (≤ 64 chars) | Workspace id (wsp_…). |
webhookIdpath · required | string (≤ 64 chars) | Webhook endpoint id (whk_…). |
deliveryIdpath · required | string (≤ 64 chars) | Delivery id (whd_…). |
Responses
200The new delivery. (WebhookDelivery)401Missing, expired or revoked credentials (types "unauthorized", "token-expired", "invalid-token").403Authenticated but not allowed (types "forbidden", "origin-not-allowed", "api-key-not-accepted", "email-mismatch"; P36 "insufficient-scope", "not-in-plan", "coming-soon").404Not found, or not visible to the caller (type "not-found").429Too many requests (type "rate-limited"); retry after the Retry-After header.defaultAn error, as RFC 9457 problem details.
curl -X POST https://api.asdk.com/v1/workspaces/{id}/webhooks/{webhookId}/deliveries/{deliveryId}/redeliver \
-H "Authorization: Bearer $ASDK_API_KEY"Webhook events
ASDK POSTs these events as JSON to the endpoints a workspace adds (Settings → Webhooks, or the webhooks endpoints above). Each delivery is signed; see verifying webhooks for code in JavaScript, Python and Go. Any 2xx answer is a delivery; 408, 429 and 5xx are retried after 30 seconds, 2 and 10 minutes, 1 and 6 hours.
lead.created
A visitor left their contact details
Sent for every new lead (chat, forms, WebMCP). lead.preview marks leads from the dashboard's preview.
Payload: LeadWebhookEvent
Headers
| Field | Type | Description |
|---|---|---|
X-ASDK-Signatureheader · required | string |
|
X-ASDK-Eventheader · required | string | The event type (also |
X-ASDK-Deliveryheader · required | string | The delivery id, the same on every retry (use it to drop duplicates). |
lead.updated
A lead's details, status or qualification changed
data.changes names the changed fields (email, name, company, phone, note, status, qualifiedAt) and data.previous their earlier values. Score-only changes are not sent.
Payload: LeadWebhookEvent
Headers
| Field | Type | Description |
|---|---|---|
X-ASDK-Signatureheader · required | string |
|
X-ASDK-Eventheader · required | string | The event type (also |
X-ASDK-Deliveryheader · required | string | The delivery id, the same on every retry (use it to drop duplicates). |
conversation.closed
A conversation went quiet
Sent when a conversation had no new message for 30 minutes, with its transcript (the latest 100 messages). A visitor who returns and goes quiet again closes it again.
Payload: ConversationClosedWebhookEvent
Headers
| Field | Type | Description |
|---|---|---|
X-ASDK-Signatureheader · required | string |
|
X-ASDK-Eventheader · required | string | The event type (also |
X-ASDK-Deliveryheader · required | string | The delivery id, the same on every retry (use it to drop duplicates). |
knowledge_gap.created
Visitors asked something the knowledge base could not answer
Sent the first time a question goes unanswered (repeats count up the same gap).
Payload: KnowledgeGapWebhookEvent
Headers
| Field | Type | Description |
|---|---|---|
X-ASDK-Signatureheader · required | string |
|
X-ASDK-Eventheader · required | string | The event type (also |
X-ASDK-Deliveryheader · required | string | The delivery id, the same on every retry (use it to drop duplicates). |
source.synced
A knowledge source finished syncing
data.source.status is ready after a successful sync and error after a failed one (with error).
Payload: SourceSyncedWebhookEvent
Headers
| Field | Type | Description |
|---|---|---|
X-ASDK-Signatureheader · required | string |
|
X-ASDK-Eventheader · required | string | The event type (also |
X-ASDK-Deliveryheader · required | string | The delivery id, the same on every retry (use it to drop duplicates). |
Objects
AskAnswer
| Field | Type | Description |
|---|---|---|
answerrequired | string | The answer as Markdown, in the question's language. |
sourcesrequired | array of AskSource | The pages the answer cites. |
groundedrequired | boolean | False when the knowledge base did not cover the question. |
languageoptional | string | Base code of the answer's language ( |
AskRequest
| Field | Type | Description |
|---|---|---|
questionrequired | string (≤ 2,000 chars) | The question, as a visitor would ask it. |
localeoptional | string (≤ 35 chars) | BCP 47 language for short questions whose language cannot be told (e.g. |
AskSource
| Field | Type | Description |
|---|---|---|
titlerequired | string | |
urlrequired | string |
CitedPage
| Field | Type | Description |
|---|---|---|
urlrequired | string | |
titlerequired | string | |
answersrequired | integer |
ConversationClosedWebhookEvent
| Field | Type | Description |
|---|---|---|
idrequired | string | |
typerequired | "conversation.closed" | |
createdAtrequired | string (date-time) | |
workspaceIdrequired | string | |
datarequired | object | |
data.siterequired | WebhookSite | |
data.conversationrequired | object | |
data.conversation.idrequired | string | |
data.conversation.siteIdrequired | string | |
data.conversation.visitorIdrequired | string | |
data.conversation.agentrequired | string | |
data.conversation.pageUrlrequired | string | null | |
data.conversation.leadIdrequired | string | null | |
data.conversation.startedAtrequired | string (date-time) | |
data.conversation.lastMessageAtrequired | string (date-time) | |
data.conversation.messageCountrequired | integer | |
data.conversation.previewrequired | boolean | |
data.conversation.messagesrequired | array of WebhookMessage | |
data.conversation.messagesTruncatedrequired | boolean | Only the latest 100 messages are sent. |
data.conversation.dashboardUrloptional | string |
ConversationDetail
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
siteNamerequired | string | |
siteOriginrequired | string | |
agentrequired | "chat" | "sales" | "search" | "forms" | "voice" | |
pageUrloptional | string | |
startedAtrequired | string (date-time) | |
lastMessageAtrequired | string (date-time) | |
previewrequired | boolean | |
unansweredrequired | boolean | |
reviewedAtoptional | string (date-time) | |
reviewedByoptional | PersonRef | |
visitorrequired | InboxVisitor | |
messagesrequired | array of InboxMessage | Oldest first, at most 1,000. |
leadsrequired | array of Lead |
ConversationList
| Field | Type | Description |
|---|---|---|
conversationsrequired | array of ConversationSummary | |
nextCursoroptional | string |
ConversationSummary
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
siteNamerequired | string | |
siteOriginrequired | string | |
agentrequired | "chat" | "sales" | "search" | "forms" | "voice" | |
pageUrloptional | string | The page the conversation started on. |
startedAtrequired | string (date-time) | |
lastMessageAtrequired | string (date-time) | |
reviewedAtoptional | string (date-time) | |
previewrequired | boolean | Started in the dashboard's preview, not by a visitor. |
leadoptional | LeadRef | |
messagesrequired | integer | |
questionsrequired | integer | |
unansweredrequired | boolean | An answer was not grounded in the site's content. |
thumbsUprequired | integer | |
thumbsDownrequired | integer | |
firstQuestionrequired | string | The visitor's first message, shortened to 200 characters. |
lastMessagerequired | string | The last message, shortened to 200 characters. |
lastMessageRolerequired | "visitor" | "agent" |
CreatedWebhookEndpoint
| Field | Type | Description |
|---|---|---|
endpointrequired | WebhookEndpoint | |
secretrequired | string | The signing secret ( |
Document
| Field | Type | Description |
|---|---|---|
idrequired | string | |
sourceIdrequired | string | |
siteIdrequired | string | |
urlrequired | string | The page address, or the file name of an upload. |
titlerequired | string | |
statusrequired | "pending" | "indexed" | "skipped" | "excluded" | "error" | |
chunkCountrequired | integer | |
languageoptional | string | ISO 639-1 code, when detected. |
erroroptional | string | Why the page is skipped or failed, in words for people. |
indexedAtoptional | string (date-time) | |
updatedAtrequired | string (date-time) |
DocumentList
| Field | Type | Description |
|---|---|---|
documentsrequired | array of Document | |
totalrequired | integer | Documents matching the filters. |
nextCursoroptional | string | Present when there are more. |
DownvotedAnswer
| Field | Type | Description |
|---|---|---|
messageIdrequired | string | |
conversationIdrequired | string | |
siteIdrequired | string | |
siteNamerequired | string | |
questionrequired | string | |
answerrequired | string | |
commentoptional | string | |
ratedAtrequired | string (date-time) |
InboxMessage
| Field | Type | Description |
|---|---|---|
idrequired | string | |
rolerequired | "visitor" | "agent" | |
textrequired | string | |
createdAtrequired | string (date-time) | |
sourcesrequired | array of InboxSource | |
groundedoptional | boolean | Agent answers that went through retrieval; absent for greetings. |
refusalrequired | boolean | The agent said it does not know. |
ratingoptional | "up" | "down" | |
ratingCommentoptional | string |
InboxSource
| Field | Type | Description |
|---|---|---|
titlerequired | string | |
urlrequired | string |
InboxVisitor
| Field | Type | Description |
|---|---|---|
idrequired | string | |
emailoptional | string | From the site's identify call, when it made one. |
nameoptional | string | |
firstSeenAtoptional | string (date-time) | |
otherConversationsrequired | integer |
Insights
| Field | Type | Description |
|---|---|---|
timezonerequired | string | |
fromrequired | string (date-time) | |
torequired | string (date-time) | |
daysrequired | integer | |
openGapsrequired | integer | |
entitledrequired | boolean | The plan includes "What visitors ask" insights (catalog feature insights-report). |
minPlanrequired | PlanRef | |
topQuestionsrequired | array of TopQuestion | |
citedPagesrequired | array of CitedPage | |
downvotedrequired | array of DownvotedAnswer |
KnowledgeGap
| Field | Type | Description |
|---|---|---|
idrequired | string | The hex SHA-256 of the normalized question. |
siteIdrequired | string | |
siteNamerequired | string | |
questionrequired | string | |
countrequired | integer | How often visitors asked it. |
firstSeenAtrequired | string (date-time) | |
lastSeenAtrequired | string (date-time) |
KnowledgeGapList
| Field | Type | Description |
|---|---|---|
gapsrequired | array of KnowledgeGap | |
totalrequired | integer | |
nextCursoroptional | string |
KnowledgeGapWebhookEvent
| Field | Type | Description |
|---|---|---|
idrequired | string | |
typerequired | "knowledge_gap.created" | |
createdAtrequired | string (date-time) | |
workspaceIdrequired | string | |
datarequired | object | |
data.siterequired | WebhookSite | |
data.gaprequired | object | |
data.gap.idrequired | string | The gap's id for POST /v1/sites/{siteId}/gaps/{gapId}/answer. |
data.gap.siteIdrequired | string | |
data.gap.questionrequired | string | |
data.gap.countrequired | integer | |
data.gap.firstSeenAtrequired | string (date-time) | |
data.gap.lastSeenAtrequired | string (date-time) | |
data.gap.dashboardUrloptional | string |
KnowledgeSummary
| Field | Type | Description |
|---|---|---|
statusrequired | "empty" | "pending" | "syncing" | "ready" | "error" | |
sourcesrequired | integer | Sources other than the Q&A source. |
documentsrequired | integer | Indexed documents (pages, files, snippets). |
chunksrequired | integer | |
qaPairsrequired | integer | |
lastSyncedAtoptional | string (date-time) |
Lead
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
siteNamerequired | string | |
siteOriginrequired | string | |
conversationIdoptional | string | |
emailrequired | string | |
nameoptional | string | |
companyoptional | string | |
phoneoptional | string | |
noteoptional | string | |
consentrequired | boolean | |
pageUrloptional | string | |
statusrequired | "new" | "contacted" | "archived" | |
previewrequired | boolean | |
createdAtrequired | string (date-time) | |
statusChangedAtoptional | string (date-time) |
LeadCounts
| Field | Type | Description |
|---|---|---|
newrequired | integer | |
contactedrequired | integer | |
archivedrequired | integer |
LeadDetail
| Field | Type | Description |
|---|---|---|
leadrequired | Lead | |
statusChangedByoptional | PersonRef | |
conversationoptional | ConversationDetail |
LeadList
| Field | Type | Description |
|---|---|---|
leadsrequired | array of Lead | |
countsrequired | LeadCounts | |
nextCursoroptional | string |
LeadRef
| Field | Type | Description |
|---|---|---|
idrequired | string | |
emailrequired | string | |
nameoptional | string | |
statusrequired | "new" | "contacted" | "archived" |
LeadUpdate
| Field | Type | Description |
|---|---|---|
statusrequired | "new" | "contacted" | "archived" |
LeadWebhookEvent
| Field | Type | Description |
|---|---|---|
idrequired | string | |
typerequired | "lead.created" | "lead.updated" | |
createdAtrequired | string (date-time) | |
workspaceIdrequired | string | |
datarequired | object | |
data.siterequired | WebhookSite | |
data.leadrequired | WebhookLead | |
data.changesoptional | array of string | lead.updated only. |
data.previousoptional | object (any keys) | lead.updated only; the changed fields' earlier values. |
LimitUsage
| Field | Type | Description |
|---|---|---|
usedrequired | integer | |
limitrequired | integer |
Overview
| Field | Type | Description |
|---|---|---|
timezonerequired | string | |
fromrequired | string (date-time) | |
torequired | string (date-time) | End of today in the time zone (exclusive). |
daysrequired | integer | |
totalsrequired | StatsTotals | |
previousrequired | StatsTotals | |
seriesrequired | array of OverviewDay | One entry per day of the period, oldest first. |
sitesrequired | array of OverviewSite | |
topPagesrequired | array of PageCount | Pages visitors' conversations started on, most first (query strings dropped). |
openGapsrequired | integer | |
hasConversationsrequired | boolean | Visitors ever talked to an agent of the workspace (or the site). |
installedrequired | boolean | A site has a verified installation. |
OverviewDay
| Field | Type | Description |
|---|---|---|
daterequired | string (date) | The day in the workspace's time zone. |
totalsrequired | StatsTotals |
OverviewSite
| Field | Type | Description |
|---|---|---|
siteIdrequired | string | |
namerequired | string | |
originrequired | string | |
installedAtoptional | string (date-time) | |
totalsrequired | StatsTotals |
PageCount
| Field | Type | Description |
|---|---|---|
urlrequired | string | |
conversationsrequired | integer |
PersonRef
| Field | Type | Description |
|---|---|---|
namerequired | string | |
emailrequired | string |
PlanRef
| Field | Type | Description |
|---|---|---|
idrequired | string | |
namerequired | string |
PlanUsage
| Field | Type | Description |
|---|---|---|
planIdrequired | string | |
trialoptional | boolean | The limits are a running trial's (P20). |
sitesrequired | LimitUsage | |
pagesrequired | LimitUsage |
Problem
| Field | Type | Description |
|---|---|---|
typerequired | string | URI reference identifying the problem type; "about:blank" for plain HTTP errors. |
titlerequired | string | Short, human-readable summary of the problem type. |
statusrequired | integer | HTTP status code. |
detailoptional | string | Human-readable explanation of this occurrence. |
instanceoptional | string | Request path the problem occurred on. |
request_idoptional | string | Request id, also returned in the X-Request-ID header. |
trace_idoptional | string | W3C trace id of the request, also returned in the X-Trace-Id header (the id to look the request up by in the tracing backend). |
fieldoptional | string | For type "validation", the request field that is invalid. |
QaPair
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
questionrequired | string | |
answerrequired | string | |
statusrequired | "pending" | "indexed" | "error" | |
erroroptional | string | |
createdByoptional | PersonRef | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
QaPairInput
| Field | Type | Description |
|---|---|---|
questionrequired | string (≤ 1,000 chars) | |
answerrequired | string (≤ 8,000 chars) |
QaPairList
| Field | Type | Description |
|---|---|---|
qaPairsrequired | array of QaPair | |
totalrequired | integer | |
nextCursoroptional | string |
SearchAnalytics
| Field | Type | Description |
|---|---|---|
siteIdrequired | string | |
fromrequired | string (date) | |
torequired | string (date) | |
daysrequired | integer | |
totalsrequired | SearchTotals | |
dailyrequired | array of SearchDay | |
topSearchesrequired | array of SearchQueryStat | |
missedSearchesrequired | array of SearchQueryStat | Searches without a useful result (no result or only weak ones, no answer) that are not resolved. |
SearchDay
any
SearchQueryStat
| Field | Type | Description |
|---|---|---|
idrequired | string | |
queryrequired | string | The query as a visitor last typed it. |
searchesrequired | integer | |
zeroResultsrequired | integer | |
lowScorerequired | integer | |
answersrequired | integer | |
clicksrequired | integer | |
clickThroughRaterequired | number | |
lastSeenAtrequired | string (date-time) | |
lastMissAtoptional | string (date-time) | The last search of it that found nothing useful. |
SearchTotals
| Field | Type | Description |
|---|---|---|
searchesrequired | integer | Searches visitors settled on. |
zeroResultsrequired | integer | Of them without any result and without an answer. |
lowScorerequired | integer | Of them with only weak results and without an answer. |
answersrequired | integer | Of them with an answer shown. |
clicksrequired | integer | Of them with a result clicked. |
clickThroughRaterequired | number | clicks / (searches − zeroResults), 0–1; 0 without searches with results. |
Site
| Field | Type | Description |
|---|---|---|
idrequired | string | |
workspaceIdrequired | string | |
namerequired | string | |
originrequired | string | Normalized |
allowedOriginsrequired | array of string | Origins whose pages may load the widget ( |
statusrequired | "active" | "paused" | |
installVerifiedAtoptional | string (date-time) | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) | |
knowledgerequired | KnowledgeSummary |
SiteList
Source
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
kindrequired | "crawl" | "sitemap" | "file" | "qa" | "text" | |
titlerequired | string | What to call the source in a list (an address, a file name, a snippet title). |
statusrequired | "pending" | "syncing" | "ready" | "error" | |
configrequired | SourceConfig | |
statsrequired | SourceStats | |
erroroptional | string | Why the last sync failed or stopped early, in words for people. |
lastSyncedAtoptional | string (date-time) | |
nextSyncAtoptional | string (date-time) | |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
SourceConfig
The fields of the source's kind.
| Field | Type | Description |
|---|---|---|
urloptional | string | crawl — where reading starts; pages under its path are read. |
includeoptional | array of string | crawl — only pages matching one of these path patterns. |
excludeoptional | array of string | crawl and sitemap — pages matching these path patterns are skipped. |
maxPagesoptional | integer | crawl and sitemap — at most this many pages (never more than the plan allows). |
sitemapUrloptional | string | sitemap — the sitemap or sitemap index. |
fileNameoptional | string | file — the uploaded file's name. |
fileSizeoptional | integer | file — size in bytes. |
contentTypeoptional | string | file — media type. |
titleoptional | string | text — the snippet's title. |
bodyoptional | string | text — the snippet (only when one source is read). |
SourceList
| Field | Type | Description |
|---|---|---|
sourcesrequired | array of Source |
SourceStats
Counters of the last or running sync.
| Field | Type | Description |
|---|---|---|
foundrequired | integer | Pages read so far. |
indexedrequired | integer | Pages in the knowledge base after the sync (unchanged ones included). |
unchangedrequired | integer | Pages whose content did not change (not embedded again). |
skippedrequired | integer | Pages left out (duplicates, too little text, the plan's page limit). |
failedrequired | integer | Pages that could not be read. |
removedrequired | integer | Pages that disappeared from the site since the last sync. |
chunksrequired | integer | |
limitReachedoptional | boolean | The plan's page limit stopped the sync. |
startedAtoptional | string (date-time) | |
finishedAtoptional | string (date-time) |
SourceSyncedWebhookEvent
| Field | Type | Description |
|---|---|---|
idrequired | string | |
typerequired | "source.synced" | |
createdAtrequired | string (date-time) | |
workspaceIdrequired | string | |
datarequired | object | |
data.siterequired | WebhookSite | |
data.sourcerequired | object | |
data.source.idrequired | string | |
data.source.siteIdrequired | string | |
data.source.kindrequired | "crawl" | "sitemap" | "file" | "qa" | "text" | |
data.source.titlerequired | string | |
data.source.statusrequired | "ready" | "error" | |
data.source.errorrequired | string | null | |
data.source.statsrequired | object (any keys) | Pages found, indexed, unchanged, skipped, failed and removed, and chunks. |
data.source.lastSyncedAtrequired | string (date-time) | null | |
data.source.nextSyncAtrequired | string (date-time) | null | |
data.source.dashboardUrloptional | string |
StatsTotals
| Field | Type | Description |
|---|---|---|
conversationsrequired | integer | Visitors' conversations with at least one question, started in the period. |
answersrequired | integer | Agent answers in visitors' conversations. |
measuredAnswersrequired | integer | Answers that went through retrieval (greetings do not). |
groundedAnswersrequired | integer | Measured answers backed by the site's content. |
groundedRateoptional | number (0–1) | groundedAnswers / measuredAnswers; absent without measured answers. |
leadsrequired | integer | |
thumbsUprequired | integer | |
thumbsDownrequired | integer |
TopQuestion
| Field | Type | Description |
|---|---|---|
textrequired | string | The wording visitors used most. |
countrequired | integer | |
answeredrequired | integer | Times the answer was grounded in the site's content. |
unansweredrequired | integer | |
lastAskedAtrequired | string (date-time) | |
conversationIdrequired | string | The newest conversation it was asked in. |
siteIdrequired | string |
WebhookDelivery
| Field | Type | Description |
|---|---|---|
idrequired | string | |
eventIdrequired | string | |
eventTyperequired | string | The event type, or |
testrequired | boolean | |
statusrequired | "pending" | "retrying" | "delivered" | "failed" | |
attemptsrequired | integer | |
nextAttemptAtoptional | string (date-time) | |
responseStatusoptional | integer | The HTTP status of the last attempt (absent when there was no answer). |
responseBodyoptional | string | The start of the endpoint's answer (1,000 characters). |
erroroptional | string | |
durationMsoptional | integer | |
createdAtrequired | string (date-time) | |
lastAttemptAtoptional | string (date-time) | |
deliveredAtoptional | string (date-time) | |
payloadrequired | object (any keys) | The JSON body sent (a webhook event). |
WebhookDeliveryList
| Field | Type | Description |
|---|---|---|
deliveriesrequired | array of WebhookDelivery | |
nextCursoroptional | string |
WebhookEndpoint
| Field | Type | Description |
|---|---|---|
idrequired | string | |
urlrequired | string | |
descriptionrequired | string | |
eventsrequired | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" | |
enabledrequired | boolean | |
disabledReasonoptional | "manual" | "failing" | Why the endpoint is off; |
secretHintrequired | string | The last characters of the signing secret. |
previousSecretExpiresAtoptional | string (date-time) | After a rotation, until when the previous secret also signs. |
createdAtrequired | string (date-time) | |
updatedAtrequired | string (date-time) |
WebhookEndpointInput
| Field | Type | Description |
|---|---|---|
urlrequired | string (≤ 2,048 chars) | A public https address. |
descriptionoptional | string (≤ 120 chars) | |
eventsrequired | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" |
WebhookEndpointList
| Field | Type | Description |
|---|---|---|
endpointsrequired | array of WebhookEndpoint | |
eventsrequired | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" | Every event an endpoint can subscribe to. |
entitledrequired | boolean | Whether the plan includes webhooks. |
minPlanoptional | string | The cheapest plan with webhooks (when not entitled). |
maxEndpointsrequired | integer |
WebhookEndpointPatch
| Field | Type | Description |
|---|---|---|
urloptional | string (≤ 2,048 chars) | |
descriptionoptional | string (≤ 120 chars) | |
eventsoptional | array of "lead.created" | "lead.updated" | "conversation.closed" | "knowledge_gap.created" | "source.synced" | |
enabledoptional | boolean |
WebhookLead
| Field | Type | Description |
|---|---|---|
idrequired | string | |
siteIdrequired | string | |
conversationIdrequired | string | null | |
emailrequired | string | |
namerequired | string | null | |
companyrequired | string | null | |
phonerequired | string | null | |
noterequired | string | null | |
consentrequired | boolean | |
pageUrlrequired | string | null | |
statusrequired | "new" | "contacted" | "archived" | |
scorerequired | integer | null | The Sales agent's score, 0–100. |
qualifiedAtrequired | string (date-time) | null | |
createdAtrequired | string (date-time) | |
previewrequired | boolean | Left in the dashboard's preview, not by a visitor. |
dashboardUrloptional | string |
WebhookMessage
| Field | Type | Description |
|---|---|---|
idrequired | string | |
rolerequired | "visitor" | "agent" | |
textrequired | string | |
sourcesrequired | array of AskSource | |
createdAtrequired | string (date-time) |
WebhookSite
| Field | Type | Description |
|---|---|---|
idrequired | string | |
namerequired | string | |
originrequired | string |
Workspace
| Field | Type | Description |
|---|---|---|
idrequired | string | |
namerequired | string | |
planIdrequired | string | Catalog plan id (packages/catalog). |
trialEndsAtoptional | string (date-time) | |
createdAtrequired | string (date-time) | |
roleoptional | "owner" | "admin" | "member" | "client" |
WorkspaceSuspension
| Field | Type | Description |
|---|---|---|
suspendedrequired | boolean | |
suspendedAtoptional | string (date-time) | |
contactrequired | string | Where to write about it. |