Översikt över Management API
Management API är avsett för administrativt arbete i bakgrunden som inte innebär att skicka chattmeddelanden:
- skapa en bot programmatiskt med
POST /v1/management/bots - läsa information om en specifik bot du äger med
GET /v1/management/bots/{bot_id} - uppdatera en specifik bot med
PATCH /v1/management/bots/{bot_id} - läsa abonnemangsanvändning med
GET /v1/usage
Management-nycklar är kopplade till ditt konto, inte till någon enskild bot. De hålls medvetet åtskilda från Bot Talk-nycklar så att en komprometterad chattnyckel inte kan ändra dina botar eller läsa din faktureringsdata.
Bas-URL
https://api.chatlab.com/aichat
Alla slutpunkter i denna artikel är relativa till denna bas-URL.
Komma igång
- Öppna administratörspanelen och gå till Account Settings (Kontoinställningar) > Management API.
- Klicka på Create Management Key (Skapa Management-nyckel), namnge den, ställ valfritt in godkända IP-adresser och hastighetsbegränsning (rate limit), och bekräfta.
- Kopiera hela nyckeln från framgångsmodalen. Nyckeln i klartext visas bara en gång.
En nyckel ser ut som mk_abcdefghijklmnopqrstuvwxyz012345. Prefixet mk_ skiljer den från Bot Talk-nycklar (ck_).
Autentisering
Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345
Att skicka en mk_-nyckel till /v1/chat (eller någon annan Bot Talk-slutpunkt) returnerar 403 key_type_not_allowed. Att skicka en ck_-nyckel till /v1/management/* returnerar samma fel.
Begränsningar
- Max 5 aktiva Management API-nycklar per användare
- Max 10 förfrågningar per minut per nyckel (token bucket, kapacitet 10, jämn påfyllning med ~1 token var 6:e sekund). Kan konfigureras nedåt vid skapandet - sätt ett lägre
rateLimitPerMinuteså sänks taket, och påfyllningshastigheten skalas därefter.
Behörigheter
Varje Management-nyckel har en valfri delmängd av de tre behörigheterna nedan. Minst en måste väljas när nyckeln skapas; annars avvisas förfrågan med 400 invalid_request_error. Att anropa en slutpunkt med en nyckel som saknar behörigheten som krävs returnerar 403 insufficient_permissions.
bot_read- krävs förGET /v1/management/bots/{bot_id}bot_management- krävs förPOST /v1/management/botsochPATCH /v1/management/bots/{bot_id}usage- krävs förGET /v1/usage
JSON-strukturen: kapslade sektioner som speglar flikarna i adminpanelen
POST och PATCH tar emot en JSON-body grupperad i 13 sektioner. Varje sektion motsvarar en underflik i adminpanelens sidofält för Bot Settings (Botinställningar), så att JSON-nycklarna och de synliga flikarna matchar: om du ändrar consent.humanSupportRequirePolicyAccept via API:et kommer du att se samma reglage slås om under fliken Consent & Privacy (Samtycke och integritet) i adminpanelen.
role- botpersona, råprompt, svarslängd, språk, webbplats-/företagskontext (fliken Role & Behavior)conversation- välkomstmeddelande, frågebearbetning, konversationskontinuitet, betygsknapp + verktygstips, förslag på frågor + dynamiska uppföljningar (fliken Chat Conversation)chatMemory- reglage för chattminne, sammanfattningsprompter, kontextallokering (fliken Summaries & Memory)appearance- färger, texter, mått, anpassad CSS, välkomstskärm, stil för frågeförslag, beteende för automatisk öppning, simulering av mänskligt skrivande, sidfotsmarkdown (fliken Appearance)humanSupport- kontaktformulär för mänsklig support (fliken Human Contact Form)leadCollection- formulär för lead-insamling (fliken Lead Collection)liveChat- överlämning till Live Chat (fliken Live Chat)consent- alla fyra reglage för samtycke till integritetspolicy samt texten för samtyckesskärmen (fliken Consent & Privacy)whiteLabel- dölja logotyp, anpassad logotyplänk, hosting på anpassad domän (fliken Whitelabel)security- tillåtna domäner, spamfilter, hastighetsbegränsningar för samtal (fliken Security)voice- röstinmatning och röstkonversationer: modell, röst, språk, prompt, tidsgräns (fliken Voice Conversation)multilingual- flerspråkigt läge, basspråk, erbjudna språk, hantering av kunskapsbasspråk (fliken Languages)advanced- LLM-modell, temperatur, kontextstorlek, gräns för botmeddelanden, internt språk/region, Offer Cards (fliken Model & Advanced)
Endast name ligger på rotnivå, eftersom det identifierar botten snarare än att tillhöra en enskild flik.
Sidofältet för Bot Settings har för närvarande 15 underflikar, och 13 av dem motsvarar sektionerna ovan. De två underflikar som inte har någon motsvarande sektion är Flow och Actions - båda beskrivs under "Utanför API:ets omfattning" längre ner. De 13 som motsvarar sektioner är Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation och Languages.
Begärans body och svarets body har samma struktur. Svaret innehåller två extra fält:
meta- skrivskyddad: bot-id och tidsstämplar. Ta bort detta fält för att göra om ett GET-svar till en giltig POST-body.apiKey- finns endast vid skapande - den nyskapade Bot Talk API-nyckeln för den nya botten.
Två fält inom den gemensamma strukturen är skrivskyddade - de returneras i svaret men ignoreras om du försöker skicka dem i POST/PATCH:
appearance.avatarUrl- fullständig publik URL till bottens avatarbild (t.ex.https://api.chatlab.com/aichat/content/avatar_xyz.png). Gör en direkt GET-förfrågan för att ladda ner filen. För att ändra den laddar du upp en ny fil via multipart-delenavatar(se PATCH).whiteLabel.whitelabelLogoUrl- fullständig publik URL till White Label-huvudlogotypen. Samma mönster som föravatarUrl. För att ändra den laddar du upp en ny fil via multipart-delenwhitelabel_logo(se PATCH).
Båda URL:erna använder den aktuella förfrågans schema + värd + kontextsökväg, så på en anpassad White Label-domän returneras de med den domänen som bas (t.ex. https://api.acme.com/aichat/content/...).
Skicka null för en sektion för att hoppa över den vid PATCH; skicka null för ett fält inom en sektion för att hoppa över det enskilda fältet. null på fältnivå raderar aldrig ett sparat värde - det betyder endast "rör inte".
Roll och uppbyggnad av prompt
Systemprompten som LLM-modellen faktiskt tar emot byggs upp på ett av två sätt beroende på role.role. Genom att veta vilket spår du använder ser du vilka fält som har betydelse och vilka som sparas men ignoreras.
Spår A - role.role är CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (mallbaserad)
Backend bygger ihop prompten från en inbyggd mall och ignorerar role.rawPrompt helt (värdet sparas fortfarande på botten, men används inte). Mallen inkluderar:
role.role- rolletikett (t.ex. "Customer Support") samt rollspecifika instruktioner som läggs till automatisktname- bottens namn, som infogas i den inledande meningenrole.language-"Auto Detect"ställer in botten på att följa användarens språk; alla andra värden (t.ex."English","Polish") blir "Output in {language}, unless user uses another language"role.responseLength- mappas till ett målantal ord:Concise≈ 50 ord,Normal≈ 100,Detailed≈ 200role.websiteAddress- valfritt; om det inte är tomt läggs det till som "for the users of the website {url}"role.companyDescription- valfritt; om det inte är tomt läggs det till som ett extra stycke före rollinstruktionerna
Detta är det rekommenderade spåret för de flesta botar - du får rollanpassat beteende och skyddsräcken utan extra arbete.
Spår B - role.role är CUSTOM (användardefinierad prompt)
Backend använder role.rawPrompt ordagrant som hela systemprompten. responseLength, language, websiteAddress och companyDescription sparas men infogas inte i prompten - om du vill att något av dem ska återspeglas i bottens beteende måste du själv inkludera dem i texten för rawPrompt. Rollspecifika skyddsräcken och toninstruktioner läggs inte heller till; du styr hela prompten själv.
Använd CUSTOM endast när den mallbaserade prompten inte passar ditt användningsområde (t.ex. om du behöver en mycket domänspecifik persona, egna säkerhetsbegränsningar eller ett icke-standardiserat utdataformat).
Enum- / slutna fält
Flera fält accepterar endast en fast uppsättning strängvärden. Att skicka något utanför listan avvisas med 400 validation_failed och fältsökvägen i error.param. Värdena är skiftlägeskänsliga.
role.role-CUSTOMER_SUPPORT,SALES,LEAD_COLLECTION_AGENT,CUSTOMrole.responseLength-Concise,Normal,Detailedrole.language- fullständigt engelskt språknamn från rullgardinsmenyn i adminpanelen, t.ex.Auto Detect,English,Polish,Spanish,German,French,Italian,Portuguese,Dutch,Russian,Chinese (Simplified),Japanese,Arabic,Hindioch cirka 80 andra. Värdet sparas ordagrant och sätts in i promptmallen, så tvåställiga ISO-koder (en,pl) och andra värden utanför listan avvisas inte av API:et men ger en förvrängd instruktion i stil med "Output in en, unless...". Standardvärdet ärAuto Detectom det utelämnas vid skapandet.advanced.model- se "AI-textmodeller" nedan; den valbara uppsättningen beror på dina kontobegränsningar och värden som ditt konto inte kan använda returnerar400 invalid_parameteradvanced.chatContextSize-8000,16000,32000. Begränsas av ditt konto; högre värden justeras ned automatisktchatMemory.clientSummaryPromptType-DEFAULT,CUSTOMchatMemory.conversationSummaryPromptType-DEFAULT,CUSTOMappearance.chatAlignment-left,rightappearance.minimizedDisplayMode-icon,minifiedappearance.chatMessageLinkTarget-_blank,_selfleadCollection.requireBeforeNewConversation- booleskt reglage.truetvingar användaren att fylla i lead-formuläret innan en konversation startas;falselåter AI:n avgöra när formuläret ska visas (standard).
Strukturerade fält och intervall
Fält som ser ut som enkla strängar eller siffror men som i själva verket har specifika format, intervall eller egenheter i administratörsgränssnittet som är bra att känna till.
-
advanced.temperature- accepterat intervall är0.0till1.0, vilket matchar reglaget i adminpanelen. Värden utanför detta intervall avvisas med400 validation_failed. -
chatMemory.summariesToKnowledgeRatio- heltalsprocent,10-90med steg om10. Styr hur stor del av chattkontexten som reserveras för klientens historiska sammanfattningar i förhållande till resten (kunskapsbas, aktuell konversation, instruktioner). Standardvärde är50. Värden utanför10-90avvisas med400 validation_failed. Gäller endast närchatMemory.enabled=trueOCHchatMemory.summaryConversationsEnabled=true. -
liveChat.schedule- JSON-kodad som en sträng, inte ett kapslat JSON-objekt i anropet. Servern sparar råsträngen ordagrant; adminpanelen parsar den på klientsidan när schemaredigeraren visas. Efter parsning är strängen strukturerad med en post per veckodag plus entimezone-nyckel:- varje veckodagsnyckel (
monday-sunday) mappas till{enabled: boolean, from: "H:MM", to: "H:MM"}i 24-timmarsformat timezoneär ett IANA-zonnamn (t.ex."Europe/Warsaw","America/New_York")
Exempelvärde (observera de yttre citattecknen och de escaped inre citattecknen - det är ett enda strängfält, inte ett kapslat objekt):
"{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}"Utanför de angivna tiderna visas
liveChat.outOfHoursMessageför besökaren och överlämning till livechatt inaktiveras. Validering av den inre strukturen körs endast på klientsidan i adminpanelen - felaktig JSON eller okända nycklar accepteras av API:et som en vanlig sträng och orsakar ett renderingsfel först när en användare senare öppnar botten i administratörspanelen. Validera därför strukturen på din sida innan du skickar den. - varje veckodagsnyckel (
-
conversation.positiveRatingTooltip/conversation.negativeRatingTooltip- korta etiketter som visas på knapparna 👍 / 👎 bredvid varje AI-svar närconversation.conversationRatingEnabled=true. Standardtexten är "I like the response" / "I don't like the response". Synliga för slutanvändare. -
whiteLabel.hideRoboAssistLogo- White Label-funktion som styrs av dina kontobegränsningar. Döljer sidfotsraden "Powered by ChatLab". Om ditt konto inte inkluderar White Label sparas värdet men ignoreras, och sidfoten visas alltid. -
whiteLabel.whitelabelLogoLink- White Label-funktion som styrs av dina kontobegränsningar. Mål-URL vid klick på den anpassade logotypen närhideRoboAssistLogo=trueoch en anpassad logotypfil har laddats upp via multipart-delenwhitelabel_logo. -
appearance.simulateHumanTypingDelay- sekunder (inte millisekunder), heltal0-200. Paus mellan efterföljande botbubblor närsimulateHumanTyping=true. Standardvärde är5. -
appearance.autoOpenChatDelaySeconds- sekunder, heltal. Fördröjning innan widgeten öppnas automatiskt närautoOpenChat=trueochautoOpenChatDelay=true. -
advanced.internalLocale- IETF-språk-/regionskod i formatetll_CC(understreck, INTEll-CCmed bindestreck). Accepterade värden hämtas från en fast lista med cirka 95 språkkoder:en_US,pl_PL,de_DE,fr_FR,es_ES,it_IT,pt_PT,nl_NL,ru_RU,zh_CN,zh_TW,ja_JP,ko_KR,ar_SA,hi_IN,tr_TR,cs_CZ,da_DK,fi_FI,sv_SE,no_NO,el_GR,he_ILmed flera. Att enbart skicka en tvåställig kod ("en") eller BCP-47 ("en-US") finns inte med i listan över tillåtna värden. Standardvärde ären_US. Detta är språkkoden som används för datum- och talformatering i widgetens gränssnitt, till skillnad frånrole.language(bottens utdataspråk i konversationen). -
security.talkMessagesRateLimit/security.talkMessagesRateLimitDurationSeconds- heltal (skickas som JSON-tal, t.ex.30, inte"30").0inaktiverar hastighetsbegränsningen per IP-adress. Vid värden över noll tillämpar widgeten N meddelanden per tidsperiod i sekunder innansecurity.talkMessagesRateLimitHitMessagevisas för besökaren. -
advanced.botMessagesLimit- heltal (JSON-tal, t.ex.1000).0betyder "ingen gräns"; i annat fall måste det vara en multipel av 1000 (1000,2000,10000, ...). Värden som100eller1500avvisas med400 validation_failed. Därefter justeras värdet automatiskt ned till ditt kontos gräns om det överskrids.
AI-textmodeller (advanced.model)
Skicka det exakta API-värdet (vänstra kolumnen inom backticks). Visningsnamnet i adminpanelen står inom parentes. Dina kontobegränsningar avgör vilken delmängd som kan väljas; att skicka en modell som ditt konto inte har tillgång till returnerar 400 invalid_parameter. Standardvärdet för nya botar är 5-MINI.
4-O-MINI(GPT 4-o mini)4-O(GPT 4-o)4.1-MINI(GPT 4.1-mini)4.1(GPT 4.1)5-MINI(GPT 5-mini)5(GPT 5)5.1(GPT 5.1)5.4-MINI(GPT 5.4-mini)5.4(GPT 5.4)5.5(GPT 5.5)GEMINI 2.5 PRO(Gemini 2.5 Pro)GEMINI 3 Flash(Gemini 3 Flash)GEMINI 3.5 Flash(Gemini 3.5 Flash)GEMINI 3.7 Flash(Gemini 3.7 Flash)GEMINI 3.8 Flash(Gemini 3.8 Flash)GEMINI 3.1 Flash-Lite(Gemini 3.1 Flash-Lite)GEMINI 3 PRO(Gemini 3 Pro)
Fältreferens (fullständigt förfrågningsschema)
Varje fält i anropet, med dess typ, begränsning och en rads beskrivning. PATCH-semantik: alla utelämnade fält (eller fält som skickas som null) lämnar det sparade värdet orört. Samma struktur används för svaret (minus flerdelat binärt innehåll; plus det skrivskyddade meta-blocket i varje svar och apiKey endast i svaret vid skapande).
Toppnivå
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
name |
string | max 150, krävs vid skapande | Chattbotens visningsnamn |
role |
object | Se § role | |
conversation |
object | Se § conversation | |
chatMemory |
object | Se § chatMemory | |
appearance |
object | Se § appearance | |
humanSupport |
object | Se § humanSupport | |
leadCollection |
object | Se § leadCollection | |
liveChat |
object | Se § liveChat | |
consent |
object | Se § consent | |
whiteLabel |
object | Se § whiteLabel | |
security |
object | Se § security | |
advanced |
object | Se § advanced |
Tillägg som endast finns i svaret:
meta: { id, createdAt, updatedAt }- skrivskyddat.apiKey- string, finns endast i svaret förPOST /v1/management/bots- den nyskapade Bot Talk-nyckeln för den nya chattbotten, returneras exakt en gång.
§ role
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
role |
string (enum) | CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM |
Personaförinställning; väljer promptmallen (se "Role and prompt construction") |
language |
string | fullständigt engelskt språknamn (English, Polish, ...) eller Auto Detect |
Primärt språk som matas in i promptmallen |
responseLength |
string | ∈ {Concise, Normal, Detailed} |
Önskad utförlighet i AI-svaret |
websiteAddress |
string | Webbplats som används för promptkontext | |
companyDescription |
string | Företagsbeskrivning som används för promptkontext | |
rawPrompt |
string | Anpassad systemprompt - används ordagrant endast när role=CUSTOM |
§ conversation
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
welcomeMessage |
string | Första meddelandet som visas för besökaren när chatten öppnas | |
queryRefinementEnabled |
boolean | Om true förfinas besökarens fråga före RAG-hämtning | |
conversationContinuityEnabled |
boolean | Om true återupptar återkommande besökare sin senaste konversation | |
conversationRatingEnabled |
boolean | Om true visas betyg med tumme upp/ned på chattbotens meddelanden | |
positiveRatingTooltip |
string | Verktygstips på knappen för positivt betyg | |
negativeRatingTooltip |
string | Verktygstips på knappen för negativt betyg | |
suggestedQuestions |
string | Nyradsseparerade föreslagna frågor / konversationsöppnare | |
dynamicSuggestedFollowups |
boolean | Om true föreslår AI uppföljningsfrågor efter varje svar | |
dynamicFollowupsAutoIcons |
boolean | Om true väljer AI automatiskt emoji-ikoner för de dynamiska uppföljningarna |
§ chatMemory
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Huvudströmbrytare för funktionen chattminne | |
summaryConversationsEnabled |
boolean | Spara sammanfattningar per konversation | |
conversationSummaryPrompt |
string | Anpassad prompt som används för att sammanfatta varje konversation | |
conversationSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Om standardprompten eller den anpassade sammanfattningsprompten ska användas |
clientSummaryPrompt |
string | Anpassad prompt som används för att sammanfatta klienten över flera konversationer | |
clientSummaryPromptType |
string (enum) | ∈ {DEFAULT, CUSTOM} |
Standard- kontra anpassad prompt för klientprofil |
summariesToKnowledgeRatio |
int | 10-90, steg om 10 |
% av chattens kontextfönster som allokeras till sammanfattningar jämfört med RAG-kunskap |
§ appearance
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
launcherColor |
string (hex) | Bakgrundsfärg för startknappen (chattikonen) | |
headerColor |
string (hex) | Bakgrundsfärg för chatthuvudet | |
titleColor |
string (hex) | Titelfärg i chatthuvudet | |
subtitleColor |
string (hex) | Undertitelfärg i chatthuvudet | |
clientMessageBubbleColor |
string (hex) | Färg på besökarens meddelandebubbla | |
clientMessageTextColor |
string (hex) | Textfärg för besökarens meddelande | |
responseMessageBubbleColor |
string (hex) | Färg på chattbotens svarsbubbla | |
responseMessageTextColor |
string (hex) | Textfärg för chattbotens svar | |
chatSubheader |
string | Underrubrik som visas under chatttiteln | |
senderPlaceholder |
string | Platshållartext i inmatningsfältet för meddelanden | |
resetConversationTooltip |
string | Verktygstips på knappen "återställ konversation" | |
chatAlignment |
string (enum) | ∈ {left, right} |
Vilken sida av skärmen chatten fästs vid |
launcherBottomMargin |
int | 0-500 |
Startknappens avstånd från nederkanten (px) |
launcherSideMargin |
int | 0-500 |
Startknappens avstånd från sidokanten (px) |
displayShadow |
boolean | Skuggeffekt under widgeten | |
customCss |
string | Rå CSS som injiceras i widgetens iframe | |
chatMessageLinkTarget |
string (enum) | ∈ {_blank, _self} |
Hur länkar inuti chattbotens meddelanden öppnas |
minimizedDisplayMode |
string (enum) | ∈ {icon, minified} |
Minimerat läge: startikon eller kompakt inmatningsfält |
chatDesktopWidthPx |
int | Widgetbredd på dator | |
chatDesktopHeightPx |
int | Widgethöjd på dator | |
chatMobileSizePercent |
int | Mobil widgetstorlek som % av visningsytan | |
messageFontSize |
int | Teckenstorlek för meddelandetext (px) | |
showChatbotBubblesDesktop |
boolean | Visa de flytande puffbubblorna på dator | |
showChatbotBubblesMobile |
boolean | Visa de flytande puffbubblorna på mobil | |
chatbotBubblesDelaySeconds |
int | Fördröjning innan puffbubblorna visas (sekunder) | |
launcherIconFullSize |
boolean | Rendera den anpassade startikonen kant-till-kant istället för infälld | |
welcomeScreenEnabled |
boolean | Visa välkomstskärmen istället för att gå direkt till chatten | |
welcomeScreenQuestionsLabel |
string | Etikett ovanför de föreslagna frågorna på välkomstskärmen | |
welcomeScreenHideHumanContactForm |
boolean | Dölj åtgärden för mänskligt kontaktformulär i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Chattbottar skapade före 2026-09-02 har true som standard |
|
welcomeScreenHideLiveChat |
boolean | Dölj åtgärden för livechatt i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Chattbottar skapade före 2026-09-02 har true som standard |
|
headerActionsLayout |
string | DROPDOWN |
Hur livechatt och det mänskliga kontaktformuläret erbjuds i chatthuvudet: ICONS (en separat ikon för varje) eller DROPDOWN (grupperade i rubrikmenyn). Chattbottar skapade före 2026-09-02 har ICONS som standard |
stackSuggestedQuestions |
boolean | Stapla föreslagna frågor vertikalt (istället för sida vid sida) | |
suggestedQuestionsFontSize |
int | Teckenstorlek för brickor med föreslagna frågor (px) | |
suggestedQuestionsTextColor |
string (hex) | Textfärg för brickor med föreslagna frågor | |
suggestedQuestionsBackgroundColor |
string (hex) | Bakgrundsfärg för brickor med föreslagna frågor | |
autoOpenChat |
boolean | Öppna chatten automatiskt på dator | |
autoOpenChatOnMobiles |
boolean | Öppna chatten automatiskt på mobil | |
autoOpenChatDelay |
boolean | Använd en fördröjning innan chatten öppnas automatiskt | |
autoOpenChatDelaySeconds |
int | Fördröjning för automatisk öppning (sekunder) | |
simulateHumanTyping |
boolean | Dela upp chattbotens svar i bubblor med skrivanimering | |
simulateHumanTypingDelay |
int | 0-200 |
Fördröjning mellan bubbelmeddelanden (sekunder) |
footerMarkdown |
string | max 255 | Anpassad sidfots-markdown som visas under chatten |
avatarUrl |
string | skrivskyddad | Fullständig publik URL till avataren; ladda upp via multipart-delen avatar för att ändra den |
Flerdelad förfrågan (multipart) vid POST/PATCH: avatar (fildel). GET / svarstexter utelämnar filinnehållet - endast webbadressen finns i anropet.
§ humanSupport
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för flödet Human Support (mänsklig support) | |
email |
string | krävs (strikt vid skapande) när enabled=true |
Adress som tar emot e-post för mänsklig support |
dialogMessage |
string | Uppmuntrande meddelande som visas ovanför formuläret | |
thankYouMessage |
string | Bekräftelse som visas efter inskickning | |
emailMessageSubjectTemplate |
string | Ämnesmall för e-postmeddelandet som skickas till agenten | |
emailMessageContentTemplate |
string | Innehållsmall för e-postmeddelandet som skickas till agenten | |
emailPlaceholder |
string | Platshållare i e-postfältet | |
messagePlaceholder |
string | Platshållare i textrutan för meddelande | |
emailWithConversationContent |
boolean | Om true inkluderas konversationens transkription i e-postmeddelandet | |
customFormId |
long | id för ett befintligt anpassat formulär | Ersätt det inbyggda kontaktformuläret med ett anpassat formulär. null behåller det inbyggda formuläret |
customFormMapping |
string | JSON-kodad sträng | Mappar fält från det anpassade formuläret till fälten för mänsklig support via e-post |
requirePolicyAccept finns under consent.humanSupportRequirePolicyAccept, inte här.
§ leadCollection
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för leadformulär | |
nameEnabled |
boolean | Samla in namn | |
nameLabel |
string | Etikett i namnfältet | |
emailEnabled |
boolean | Samla in e-post | |
emailLabel |
string | krävs (strikt vid skapande) när enabled=true OCH emailEnabled=true |
Etikett i e-postfältet |
phoneEnabled |
boolean | Samla in telefonnummer | |
phoneLabel |
string | krävs (strikt vid skapande) när enabled=true OCH phoneEnabled=true |
Etikett i telefonfältet |
leaveDetailsMessage |
string | krävs (strikt vid skapande) när enabled=true |
Meddelande som uppmuntrar besökaren att lämna sina uppgifter |
thankYouMessage |
string | krävs (strikt vid skapande) när enabled=true |
Bekräftelse som visas efter inskickning |
requireBeforeNewConversation |
boolean | Om true måste formuläret skickas in innan chatten startar; om false avgör AI när formuläret ska visas |
|
emailNotificationEnabled |
boolean | Skicka e-post till ägaren varje gång ett lead samlas in | |
emailNotificationAddress |
string | Mottagare av aviseringen (standard är kontots e-postadress) | |
emailWithConversationContent |
boolean | Om true inkluderas konversationens transkription i aviseringen |
Regel över flera fält vid strikt skapande: enabled=true kräver minst en av emailEnabled eller phoneEnabled. requirePolicyAccept finns under consent.leadCollectionRequirePolicyAccept, inte här.
| customFormId | long | id för ett befintligt anpassat formulär | Ersätt det inbyggda leadformuläret med ett anpassat formulär. null behåller det inbyggda formuläret |
| customFormMapping | string | JSON-kodad sträng | Mappar fält från det anpassade formuläret till namn / e-post / telefon |
§ liveChat
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för funktionen Live Chat | |
infoMessage |
string | Förklarande meddelande före överlämning | |
startMessage |
string | Meddelande som visas när live-sessionen börjar | |
endMessage |
string | Meddelande som visas när live-sessionen avslutas | |
nameLabel |
string | Etikett i namnfältet i förformuläret för livechatt | |
emailLabel |
string | Etikett i e-postfältet i förformuläret för livechatt | |
schedule |
string | JSON-kodad sträng (veckodagsväxlingar + from/to + timezone) |
Arbetsschema för livechatt - se "Structured fields and ranges" för den exakta strukturen |
outOfHoursMessage |
string | Meddelande som visas när schemat anger att vi har stängt | |
closeModalMessage |
string | Titel i modalfönstret för "avsluta livechatt?" | |
closeModalConfirmLabel |
string | Etikett för bekräftelseknappen i stängningsrutan | |
closeModalCancelLabel |
string | Etikett för avbrytknappen i stängningsrutan | |
closeModalTooltipText |
string | Verktygstips på stängningsknappen för chatten | |
operatorHasJoinedLabel |
string | Etikett som visas när en operatör ansluter | |
operatorDidNotJoinInTimeLabel |
string | Etikett som visas när ingen operatör ansluter inom tidsgränsen | |
waitingForOperatorToJoinLabel |
string | Etikett som visas i väntan på en operatör | |
waitingForOperatorSeconds |
int | Tidsgräns för en operatör att svara (sekunder) | |
redirectToHumanSupportForm |
boolean | Om true växlas det över till formuläret för Human Support när ingen operatör svarar | |
missedEmailEnabled |
boolean | standard true |
Skicka e-post till chattbotens ägare när en livechattförfrågan förblev obesvarad. Lämnas oangiven på äldre bottar, vilket tolkas som aktiverat |
requirePolicyAccept finns under consent.liveChatRequirePolicyAccept, inte här.
§ consent
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
newConversationRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan en ny konversation startas | |
humanSupportRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan formuläret för mänsklig support skickas in | |
leadCollectionRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan formuläret för insamling av leads skickas in | |
liveChatRequirePolicyAccept |
boolean | Kräv godkännande av integritetspolicy innan en livechattsession startas | |
newConversationConsentDescription |
string | Introduktionstext för samtyckesskärmen vid konversationens start | |
privacyPolicyConsentCheckboxLabel |
string | Etikett bredvid samtyckeskryssrutan (innehåller vanligtvis en länk till integritetspolicyn) |
§ whiteLabel
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
hideRoboAssistLogo |
boolean | White Label-funktion; omfattas av kontogränser | Dölj standardlogotypen för ChatLab i sidfoten |
whitelabelLogoLink |
string | White Label-funktion; omfattas av kontogränser | URL som den anpassade sidfotslogotypen länkar till |
assignToCustomDomain |
boolean | styrs av funktionen CUSTOM_DOMAIN |
Hysa chatten på den konfigurerade anpassade domänen |
whitelabelLogoUrl |
string | skrivskyddad | Fullständig publik URL till White Label-logotypen; ladda upp via multipart-delen whitelabel_logo för att ändra den |
Flerdelad förfrågan (multipart) vid POST/PATCH: whitelabel_logo (fildel). GET / svarstexter utelämnar filinnehållet - endast webbadressen finns i anropet.
§ security
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
allowedDomains |
string | Kommaseparerad lista över domäner som tillåts bädda in widgeten (tom = ingen vitlista) | |
spamFilterEnabled |
boolean | Aktivera spamfiltret per chattbot för inkommande meddelanden | |
countryFilterMode |
string | BLACKLIST eller WHITELIST |
Hur landslistorna tolkas. Själva listorna förblir endast tillgängliga för administratörer |
talkMessagesRateLimit |
int | >= 0; 0 inaktiverar |
Max antal användarmeddelanden som tillåts under hastighetsbegränsningens tidsfönster |
talkMessagesRateLimitDurationSeconds |
int | >= 0 |
Längd på hastighetsbegränsningens tidsfönster (sekunder) |
talkMessagesRateLimitHitMessage |
string | Meddelande som visas för besökaren när hastighetsbegränsningen nås |
§ voice
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
inputEnabled |
boolean | Tillåt besökaren att diktera meddelanden (tal till text) | |
conversationEnabled |
boolean | kräver röstfunktionen i abonnemanget | Aktivera fullständiga röstkonversationer |
voiceId |
string | leverantörsspecifikt röst-ID (t.ex. alloy) |
Vilken syntetisk röst som talar |
model |
string | t.ex. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* |
Röstmodell. Faktureras per minut, priserna skiljer sig per modell |
turnDetection |
string | leverantörsspecifik | Läge för turtagning |
audioPrompt |
string | Extra systemprompt som endast används för röstturer | |
welcomeMessage |
string | Talad öppningsreplik | |
language |
string | språkkod | Primärt röstspråk |
additionalLanguages |
string | kommaseparerade språkkoder | Extra språk som röstagenten accepterar |
maxDurationSeconds |
int | Fast maxgräns för en enskild röstkonversation | |
maxDurationMessage |
string | Meddelande som visas när maxgränsen nås |
§ multilingual
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
enabled |
boolean | Strömbrytare för flerspråkigt läge | |
mode |
string | AUTODETECT eller ett fast listläge |
Hur chattbotten väljer svarspråk |
baseLanguage |
string | språkkod | Språk som chattbotens egna texter är skrivna på |
languages |
string | kommaseparerade språkkoder | Språk som erbjuds besökaren |
knowledgeLanguageMode |
string | Hur kunskap på andra språk behandlas | |
knowledgeLanguageFallback |
string | språkkod | Språk som används när ingen matchning hittas |
§ advanced
| Fält | Typ | Begränsning | Beskrivning |
|---|---|---|---|
model |
string | omfattas av kontogränser; se "AI text models" ovan | LLM-identifierare (t.ex. 5-MINI) |
temperature |
decimal | 0.0-1.0 |
Samplingstemperatur (motsvarar skjutreglaget i gränssnittet) |
chatContextSize |
int | ∈ {8000, 16000, 32000}; begränsas automatiskt till din kontogräns |
Tokenfönster för chatthistorik |
botMessagesLimit |
long | 0 eller multipel av 1000 (t.ex. 1000, 2000, 10000) |
Max antal bot-svar per konversation (0 = ingen gräns) |
internalLocale |
string | språkkod i formen ll_CC |
Språk för widgetens gränssnittsetiketter (skiljer sig från role.language) |
productsViewEnabled |
boolean | Om true exponeras e-handelsfunktionen Offer Cards inuti chatten | |
includeProductsInKnowledgeBase |
boolean | Om true indexeras produktkatalogen som en del av kunskapsbasen |
Utanför API:ets omfattning
Administratörsgränssnittet tillhandahåller några områden som avsiktligt inte exponeras i denna version av Management API:
- Fliken Flow (Flöde) - den visuella redigeraren för konversationsflöden (steg och övergångar). Exponeras inte via Management API.
- Fliken Actions (Åtgärder) - hanterade e-handels- och bokningsintegrationer, AI Search samt anpassade API-funktioner. Verktygsanrop har aldrig varit en del av Management API.
- Själva byggaren för anpassade formulär - att skapa och redigera anpassade formulär exponeras inte. Du kan däremot koppla ett befintligt formulär till en chattbot via
leadCollection.customFormIdochhumanSupport.customFormId. - Anpassade chattikoner för att öppna/stänga -
customLauncherIconVisible,openChatIcon,closeChatIcon. API:et exponerar endast de huvudsakliga multipart-delarnaavatarochwhitelabel_logo. - IP- och landslistor - själva posterna är endast tillgängliga för administratörer. Endast tolkningsläget exponeras, via
security.countryFilterMode.
Slutpunkter
POST /v1/management/bots
Skapa en ny bot. Två likvärdiga Content-Types accepteras; välj den som passar dig bäst.
Läge A - ren JSON (rekommenderas när du inte behöver ladda upp en avatar/logotyp i samma förfrågan):
Content-Type: application/json- Request body är botens konfigurations-JSON (inget omslutande
data-objekt) - Filer (avatar/logotyp) kan laddas upp senare via en separat
PATCHmed läge B
Läge B - multipart/form-data (används när du laddar upp filer i samma förfrågan):
Content-Type: multipart/form-data; boundary=...dataJSON-del (obligatorisk,Content-Type: application/json) - botkonfigurationen i den kapslade strukturen som beskrivs ovanavatarfildel (valfri) - botens avatarbildwhitelabel_logofildel (valfri) - white label-logotyp (gäller endast om ditt konto inkluderar White Label)
Endast name är obligatoriskt i JSON-strukturen; alla andra fält återgår till samma standardvärde som admin-gränssnittets guide skulle sätta.
Fullständig request body
Detta är den maximala data-JSON-strukturen - alla sektioner ifyllda. Skicka endast de sektioner du behöver; allt annat får standardvärden.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5-MINI",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
}
}
Valideringsregler med egna felmeddelanden:
name- obligatoriskt, max 150 teckenadvanced.temperature- mellan0.0och1.0chatMemory.summariesToKnowledgeRatio- heltal mellan10och90(procent, steg10)appearance.launcherBottomMargin,appearance.launcherSideMargin- mellan0och500appearance.footerMarkdown- max 255 teckenhumanSupport.enabled=truekräver atthumanSupport.emailär angivetleadCollection.enabled=truekräver att minst ett av fältenleadCollection.emailEnabledellerleadCollection.phoneEnabledär satt till true; den kanal som är aktiverad kräver även sin etikett, samtleaveDetailsMessageochthankYouMessage- Begränsade fält (
advanced.chatContextSize,advanced.botMessagesLimitosv.) justeras tyst till gränserna för ditt konto
Fält vars värde är null på servern utelämnas från JSON-strukturen - nätverksanropet överför endast fält med icke-null-värden.
Fullständig response body (201)
Samma struktur som förfrågan, plus det skrivskyddade meta-blocket och engångsnyckeln apiKey på toppnivå. Skrivskyddade fil-URL:er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) fylls i av servern när motsvarande multipart-delar laddades upp.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5-MINI",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T10:11:02Z"
},
"apiKey": "ck_freshly_minted_bot_talk_key_here"
}
Fältet apiKey visas endast vid skapandet - det är den nyutfärdade Bot Talk-nyckeln bunden till den nya boten. Klartexten visas en gång och kan inte hämtas senare från API:et; spara den direkt på din sida.
Svarsheadern Location innehåller URL:en för den nya boten (/v1/management/bots/{id}).
Curl-exempel
Läge A - ren JSON (enklast):
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d '{"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}}'
Läge B - multipart med avatar:
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-F 'data={"name":"Helpdesk Bot","conversation":{"welcomeMessage":"Hi!"}};type=application/json' \
-F 'avatar=@./avatar.png'
GET /v1/management/bots/{bot_id}
Returnera den aktuella konfigurationen för en bot du äger.
Curl-exempel
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..."
Fullständig response body (200)
Samma struktur som POST-svaret, minus engångsnyckeln apiKey. Blocket meta ingår. Returnerar 404 not_found_error om boten inte finns eller inte tillhör ditt konto.
Den aktuella avataren och white label-logotypen visas som fullständiga skrivskyddade URL:er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - med samma schema + värd + kontextsökväg som betjänade denna förfrågan. Hämta datan genom att göra en GET mot dessa URL:er direkt; för att ersätta någon av filerna laddar du upp en ny via multipart-delen avatar / whitelabel_logo vid PATCH. Dessa URL-fält ignoreras om de skickas i en request body.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Normal",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hi! How can I help today?",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "What are your hours?\nHow do I cancel?\nWhere is my order?",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize this conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about this customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#1A73E8",
"headerColor": "#1A73E8",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI support assistant",
"senderPlaceholder": "Type a message...",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we will get back to you.",
"thankYouMessage": "Thanks - we received your message.",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details and we will get in touch.",
"thankYouMessage": "Thanks - we will be in touch shortly.",
"requireBeforeNewConversation": false,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5-MINI",
"temperature": 0.4,
"chatContextSize": 16000,
"botMessagesLimit": 1000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T11:02:19Z"
}
}
Klona en bot
Förfrågningskroppen för POST /v1/management/bots och svarskroppen för GET /v1/management/bots/{bot_id} har samma struktur, så kloning görs i tre steg: gör en GET på källan, rensa bort serverhanterade identitetsfält och gör en POST med resultatet.
1. Hämta källbotten med GET.
curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-o source-bot.json
2. Ta bort meta-blocket på rotnivå. meta-objektet (id, createdAt, updatedAt) hanteras av servern och är skrivskyddat - att lämna kvar det i POST-kroppen orsakar ingen skada (servern ignorerar det), men att ta bort det gör avsikten tydlig och håller nyttolasten ren. Redigera eventuellt name så att klonen kan skiljas från källan.
jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json
3. Skicka POST med den rensade kroppen för att skapa klonen. Se referensen för POST /v1/management/bots ovan för den fullständiga strukturen på förfrågningskroppen och valideringsregler.
curl -X POST https://api.chatlab.com/aichat/v1/management/bots \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d @clone-body.json
Svaret innehåller den nya bottens meta.id samt en nygenererad apiKey (Bot Talk-nyckeln för klonen). Klartexten för apiKey returneras endast i detta skapande-svar - kopiera den innan du stänger svarskroppen; den kan inte hämtas senare.
Två viktiga punkter:
- Filer klonas inte.
appearance.avatarUrlochwhiteLabel.whitelabelLogoUrlär skrivskyddade och pekar på källbottens filer. Om du behöver samma avatar eller White Label-logotyp på klonen, ladda ner filerna från källans URL:er och ladda upp dem som multipart-delar (avatar/whitelabel_logo) - antingen vid POST-anropet som skapar botten (Läge B) eller via en efterföljande PATCH. - Bot Talk-nycklar klonas inte. Varje bot har en egen uppsättning Bot Talk-nycklar. Den enda
apiKeysom returneras av create-POST-anropet är den enda som genereras automatiskt; skapa ytterligare nycklar från bottens API-flik vid behov.
PATCH /v1/management/bots/{bot_id}
Uppdatera ett eller flera fält på en bot du äger. Endast sektioner / fält som finns med i JSON-datan modifieras; allt som utelämnas (eller skickas som null) lämnas oförändrat. Semantik för partiell uppdatering tillämpas per fält inom en skickad sektion.
Två likvärdiga Content-Types accepteras (samma som för POST):
Läge A - ren JSON (rekommenderas vid uppdatering av endast inställningar):
Content-Type: application/json- Förfrågningskroppen är den patchade JSON-datan (inget omslutande
data-fält)
Läge B - multipart/form-data (används vid uppladdning av filer):
- JSON-delen
data(valfri) - själva patchen. Skicka endast om du vill ändra fält. Utelämna helt om du bara vill ladda upp en avatar eller logotyp. - Fildelen
avatar(valfri) - ersätt avataren - Fildelen
whitelabel_logo(valfri) - ersätt White Label-logotypen (gäller endast om ditt konto har stöd för White Label)
Alla tre delar är valfria vid PATCH, men minst en måste finnas med för att anropet ska utföra något.
Fullständig förfrågningskropp (maximal omfattning)
Alla fält som accepteras av POST /v1/management/bots kan också skickas här. Exemplet nedan visar hela strukturen; i praktiken skickar du bara de nycklar du vill ändra (se "Minimal partiell uppdatering" längre ner) - varje nyckel som utelämnas (eller skickas som null) lämnar det sparade värdet orört.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Concise",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hello there!",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "Pricing\nShipping times\nReturns policy",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about the customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#abcdef",
"headerColor": "#abcdef",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI assistant",
"senderPlaceholder": "Type a message",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we'll get back to you.",
"thankYouMessage": "Thanks!",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details.",
"thankYouMessage": "Thanks!",
"requireBeforeNewConversation": true,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5",
"temperature": 0.2,
"chatContextSize": 32000,
"botMessagesLimit": 2000,
"internalLocale": "en_US",
"productsViewEnabled": false
}
}
Minimal partiell uppdatering
Uppdatera ett enstaka fält via PATCH genom att skicka exakt de nycklar du vill ändra - allt annat bevaras.
{
"appearance": {
"launcherColor": "#abcdef"
}
}
Curl-exempel
Läge A - ren JSON (enklast):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-H "Content-Type: application/json" \
-d '{"appearance":{"launcherColor":"#abcdef"}}'
Läge B - multipart (vid byte av avatar / logotyp):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'data={"appearance":{"launcherColor":"#abcdef"}};type=application/json' \
-F 'avatar=@./new-avatar.png'
Läge B - ersätt endast avataren (inga fältändringar):
curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
-H "Authorization: Bearer mk_..." \
-F 'avatar=@./new-avatar.png'
Svarskropp (200)
Samma struktur som GET /v1/management/bots/{bot_id} - bottens fullständiga konfiguration efter att patchen har tillämpats, inklusive meta-blocket. Inget apiKey-fält. Returnerar 404 not_found_error om botten inte finns eller inte tillhör ditt konto.
Exemplet nedan visar svaret efter att patchen under Fullständig förfrågningskropp (maximal omfattning) ovan har tillämpats på botten från GET-exemplet - ändrade fält visar de nya värdena, orörda fält bevaras och meta.updatedAt uppdateras.
{
"name": "Helpdesk Bot",
"role": {
"rawPrompt": "You are a friendly support assistant for Acme Inc. Be concise.",
"role": "CUSTOMER_SUPPORT",
"language": "English",
"responseLength": "Concise",
"websiteAddress": "https://acme.com",
"companyDescription": "Acme sells industrial widgets."
},
"conversation": {
"welcomeMessage": "Hello there!",
"queryRefinementEnabled": true,
"conversationContinuityEnabled": true,
"conversationRatingEnabled": true,
"positiveRatingTooltip": "Helpful",
"negativeRatingTooltip": "Not helpful",
"suggestedQuestions": "Pricing\nShipping times\nReturns policy",
"dynamicSuggestedFollowups": true,
"dynamicFollowupsAutoIcons": true
},
"chatMemory": {
"enabled": true,
"summaryConversationsEnabled": true,
"conversationSummaryPrompt": "Summarize the conversation in 3 sentences.",
"clientSummaryPrompt": "Summarize what we know about the customer.",
"clientSummaryPromptType": "DEFAULT",
"conversationSummaryPromptType": "DEFAULT",
"summariesToKnowledgeRatio": 50
},
"appearance": {
"launcherColor": "#abcdef",
"headerColor": "#abcdef",
"titleColor": "#FFFFFF",
"subtitleColor": "#FFFFFF",
"clientMessageBubbleColor": "#000000",
"clientMessageTextColor": "#FFFFFF",
"responseMessageBubbleColor": "#F4F4F4",
"responseMessageTextColor": "#000000",
"chatSubheader": "AI assistant",
"senderPlaceholder": "Type a message",
"resetConversationTooltip": "Restart conversation",
"chatAlignment": "right",
"launcherBottomMargin": 20,
"launcherSideMargin": 20,
"displayShadow": true,
"customCss": ".rcw-conversation-container { border-radius: 16px; }",
"chatMessageLinkTarget": "_blank",
"minimizedDisplayMode": "icon",
"chatDesktopWidthPx": 400,
"chatDesktopHeightPx": 600,
"chatMobileSizePercent": 100,
"messageFontSize": 14,
"showChatbotBubblesDesktop": true,
"showChatbotBubblesMobile": false,
"chatbotBubblesDelaySeconds": 5,
"welcomeScreenEnabled": false,
"welcomeScreenQuestionsLabel": "Quick start",
"welcomeScreenHideHumanContactForm": false,
"welcomeScreenHideLiveChat": false,
"headerActionsLayout": "DROPDOWN",
"stackSuggestedQuestions": false,
"suggestedQuestionsFontSize": 14,
"suggestedQuestionsTextColor": "#000000",
"suggestedQuestionsBackgroundColor": "#F4F4F4",
"autoOpenChat": false,
"autoOpenChatOnMobiles": false,
"autoOpenChatDelay": false,
"autoOpenChatDelaySeconds": 5,
"simulateHumanTyping": true,
"simulateHumanTypingDelay": 5,
"footerMarkdown": "Powered by Acme",
"avatarUrl": "https://api.chatlab.com/aichat/content/avatar_a8f3b2c1_2026060110.png"
},
"humanSupport": {
"enabled": true,
"email": "support@acme.com",
"dialogMessage": "Leave us a message and we'll get back to you.",
"thankYouMessage": "Thanks!",
"emailMessageSubjectTemplate": "[Acme support] New message from {customerName}",
"emailMessageContentTemplate": "{message}\n\n - \n{conversationTranscript}",
"emailPlaceholder": "your@email.com",
"messagePlaceholder": "How can we help?",
"emailWithConversationContent": true
},
"leadCollection": {
"enabled": true,
"nameEnabled": true,
"nameLabel": "Your name",
"emailEnabled": true,
"emailLabel": "Email",
"phoneEnabled": false,
"phoneLabel": "Phone",
"leaveDetailsMessage": "Please leave your details.",
"thankYouMessage": "Thanks!",
"requireBeforeNewConversation": true,
"emailNotificationEnabled": true,
"emailNotificationAddress": "leads@acme.com",
"emailWithConversationContent": true
},
"liveChat": {
"enabled": false,
"infoMessage": "Connecting you with a human agent...",
"startMessage": "You are now chatting with our team.",
"endMessage": "Live chat has ended.",
"nameLabel": "Your name",
"emailLabel": "Email",
"schedule": "{\"monday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"tuesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"wednesday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"thursday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"friday\":{\"enabled\":true,\"from\":\"9:00\",\"to\":\"17:00\"},\"saturday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"sunday\":{\"enabled\":false,\"from\":\"9:00\",\"to\":\"17:00\"},\"timezone\":\"Europe/Warsaw\"}",
"outOfHoursMessage": "We are currently offline.",
"closeModalMessage": "End the live chat session?",
"closeModalConfirmLabel": "Yes, end",
"closeModalCancelLabel": "Cancel",
"closeModalTooltipText": "End live chat",
"operatorHasJoinedLabel": "An agent has joined.",
"operatorDidNotJoinInTimeLabel": "No agent available right now.",
"waitingForOperatorToJoinLabel": "Waiting for an agent...",
"waitingForOperatorSeconds": 60,
"redirectToHumanSupportForm": true
},
"consent": {
"newConversationRequirePolicyAccept": false,
"humanSupportRequirePolicyAccept": false,
"leadCollectionRequirePolicyAccept": true,
"liveChatRequirePolicyAccept": false,
"newConversationConsentDescription": "By starting a conversation you agree to our terms.",
"privacyPolicyConsentCheckboxLabel": "I have read and accepted the privacy policy."
},
"whiteLabel": {
"hideRoboAssistLogo": false,
"whitelabelLogoLink": "https://acme.com",
"assignToCustomDomain": false,
"whitelabelLogoUrl": "https://api.chatlab.com/aichat/content/custom_logo_4287_2026060110.png"
},
"security": {
"allowedDomains": "acme.com,support.acme.com",
"spamFilterEnabled": true,
"talkMessagesRateLimit": 30,
"talkMessagesRateLimitDurationSeconds": 60,
"talkMessagesRateLimitHitMessage": "Please slow down."
},
"advanced": {
"model": "5",
"temperature": 0.2,
"chatContextSize": 32000,
"botMessagesLimit": 2000,
"internalLocale": "en_US",
"productsViewEnabled": false
},
"meta": {
"id": 4287,
"createdAt": "2026-06-01T10:11:02Z",
"updatedAt": "2026-06-01T12:45:08Z"
}
}
GET /v1/usage
Läs av aktuell prenumerationsanvändning för kontot som äger Management-nyckeln.
Svarskropp (200)
{
"subscriptionType": "standard",
"messages": {"used": 4123, "limit": 11000, "remaining": 6877},
"bots": {"used": 3, "limit": 5, "remaining": 2}
}
subscriptionTypeär en identifierare i gemener för kontots nuvarande plan (t.ex.standardi exemplet). Planer hämtas från en dynamisk katalog, så den exakta uppsättningen identifierare kan ändras över tid när planer byter namn eller läggs till - hantera detta som en opak sträng, inte en fast enum.messages.used/limit/remainingär meddelandekrediter för den aktuella faktureringsperioden.bots.used/limit/remainingräknar aktiva bottar gentemot ditt kontos botgräns.
Rate limit-rubriker
Svar som når hastighetsbegränsningsstadiet (det vill säga när autentisering och godkända IP-adresser har passerats) innehåller:
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- den gräns per nyckel som faktiskt tillämpas på detta anrop (10 som standard, eller ditt konfigureraderateLimitPerMinuteom det är lägre).X-RateLimit-Remaining- återstående tokens i hinken direkt efter detta anrop.X-RateLimit-Reset- Unix-epoksekunder då nästa token blir tillgänglig (inte en fullständig återställning av hinken; hinken fylls på kontinuerligt). När hinken är full är detta den aktuella tiden.
Vid 429 rate_limit_exceeded-svar anges även Retry-After, uttryckt i hela sekunder tills minst en token frigörs.
Fel före autentisering (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) och 403 ip_not_whitelisted innehåller inte X-RateLimit-*-rubrikerna - hastighetsbegränsaren kontrolleras först efter att autentisering och IP-kontroller har lyckats.
Felformat
Samma kuvert som för Bot Talk API:
{
"error": {
"type": "permission_error",
"code": "key_type_not_allowed",
"message": "This endpoint requires a MANAGEMENT API key.",
"param": null
}
}
Valideringsfel använder code: "invalid_parameter" och placerar sökvägen till fältet som orsakade felet först i meddelandet, så att det är enkelt att hitta avsnittet som misslyckades:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
}
}
Ogiltiga värden för enum-fält eller fält med fasta värdemängder (t.ex. chatMemory.clientSummaryPromptType = "BOGUS") innehåller fältsökvägen, det avvisade värdet och listan över tillåtna värden:
{
"error": {
"type": "invalid_request_error",
"code": "invalid_parameter",
"message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
}
}
Relaterat
För konversationsslutpunkter och SSE-strömning, se Bot Talk API.