https://chatbot.awardee.dev/{public_slug} — anyone with the URL can converse with it (unless you password-gate it).
Chatbots are reachable three ways: directly via their
public_slug, or as the destination of a scanned QR code, Product, or Object. Either way, the same chatbot handles the conversation.Lifecycle
Create
POST /chatbots with at minimum a name. The chatbot is created in status: "draft" with a generated slug and public_slug. Pass article_ids, category_ids, system_prompt, branding, etc. inline if you have them.Configure
PATCH /chatbots/{id} to set the system_prompt, welcome_message, tone, model, primary_color, logo_url, suggestion chips, and the knowledge sources (article_ids, category_ids) the agent can draw on. Optionally attach page_ids for destinations the agent can present. All ID arrays are replace-only — pass the full desired list every time.Activate
PATCH /chatbots/{id} with status: "active". The public URL starts serving conversations. Flip to paused to take it offline temporarily, archived to retire it.Respond
Subscribe to the
conversation.* webhook events (see Conversations) to react to new sessions, hand off to humans, or sync transcripts.Common workflows
Create, configure, publish
Attach knowledge sources
Knowledge sources are how the chatbot answers from your own content. Two grains are linkable, and both are sent on the same PATCH:article_ids— individual articles from your knowledge base. Pick this when you want fine-grained control.category_ids— folder-level links. Attaching a category implicitly includes every article inside it, now and in the future. Pick this when you want a whole topic always available to the chatbot.
Attach pages (destinations)
Pages are a different surface from knowledge sources. They’re destinations the agent can present to the visitor through itspresent_page tool — e.g. “here’s the order tracking page” or “fill out this form to start a return”. They don’t feed retrieval. Update the set with page_ids; the array fully replaces what was there.
cURL
Password-gate a chatbot
Send a plaintextpassword field on create or update. We hash it server-side and never return it. The boolean password_protected on the response tells you whether a gate is in place.
The hashed password is never returned. Inspect
password_protected: true|false on the response to know whether a gate is set. There is no endpoint to read the password back.Provide a logo by URL
logo_url accepts any public image URL. We fetch the bytes (SSRF-checked), store them in your organization’s asset library, link the resulting asset to this chatbot, and return the resolved public URL. The asset library content-addresses uploads, so re-using the same image across multiple chatbots in your organization is free — the bytes are stored once and the URL you see returned will be identical. Pass null to clear the logo. Customer CDN URLs can rot without breaking the chatbot.
cURL
422 unprocessable_entity.
Status
| Status | Public URL serves? | Meaning |
|---|---|---|
draft | No | Default on create. Build it out before exposing. |
active | Yes | Live to visitors. |
paused | No | Temporarily offline. Settings preserved, returns later. |
archived | No | Retired. Survives for historical conversation lookups. |
PATCH /chatbots/{id} and status in the body.
Webhook events
Three events fire on the chatbot lifecycle. Payloads come through the standard envelope — see Webhooks overview.Fired after a chatbot row is inserted.
Fired after any field changes, including status transitions and join-set swaps (
page_ids, article_ids, category_ids).Fired after
DELETE /chatbots/{id} removes the row. Payload is minimal (id + slug + timestamp) because the source row is gone.chatbot.created / chatbot.updated payload (data field):
chatbot.deleted payload:
Next
Chatbot object
Every field on the resource, with types and examples.
QR Codes
Point a scannable QR at a chatbot as its destination.

