Hjälpcenter
Chat API

Management API

Senast uppdaterad:

Ö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

  1. Öppna administratörspanelen och gå till Account Settings (Kontoinställningar) > Management API.
  2. 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.
  3. 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 rateLimitPerMinute så 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ör GET /v1/management/bots/{bot_id}
  • bot_management - krävs för POST /v1/management/bots och PATCH /v1/management/bots/{bot_id}
  • usage - krävs för GET /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-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fullständig publik URL till White Label-huvudlogotypen. Samma mönster som för avatarUrl. För att ändra den laddar du upp en ny fil via multipart-delen whitelabel_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 automatiskt
  • name - bottens namn, som infogas i den inledande meningen
  • role.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 ≈ 200
  • role.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, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.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, Hindi och 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 är Auto Detect om 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 returnerar 400 invalid_parameter
  • advanced.chatContextSize - 8000, 16000, 32000. Begränsas av ditt konto; högre värden justeras ned automatiskt
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - booleskt reglage. true tvingar användaren att fylla i lead-formuläret innan en konversation startas; false lå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 är 0.0 till 1.0, vilket matchar reglaget i adminpanelen. Värden utanför detta intervall avvisas med 400 validation_failed.

  • chatMemory.summariesToKnowledgeRatio - heltalsprocent, 10-90 med steg om 10. 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 är 50. Värden utanför 10-90 avvisas med 400 validation_failed. Gäller endast när chatMemory.enabled=true OCH chatMemory.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 en timezone-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.outOfHoursMessage fö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.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korta etiketter som visas på knapparna 👍 / 👎 bredvid varje AI-svar när conversation.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är hideRoboAssistLogo=true och en anpassad logotypfil har laddats upp via multipart-delen whitelabel_logo.

  • appearance.simulateHumanTypingDelay - sekunder (inte millisekunder), heltal 0-200. Paus mellan efterföljande botbubblor när simulateHumanTyping=true. Standardvärde är 5.

  • appearance.autoOpenChatDelaySeconds - sekunder, heltal. Fördröjning innan widgeten öppnas automatiskt när autoOpenChat=true och autoOpenChatDelay=true.

  • advanced.internalLocale - IETF-språk-/regionskod i formatet ll_CC (understreck, INTE ll-CC med 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_IL med 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 är en_US. Detta är språkkoden som används för datum- och talformatering i widgetens gränssnitt, till skillnad från role.language (bottens utdataspråk i konversationen).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltal (skickas som JSON-tal, t.ex. 30, inte "30"). 0 inaktiverar hastighetsbegränsningen per IP-adress. Vid värden över noll tillämpar widgeten N meddelanden per tidsperiod i sekunder innan security.talkMessagesRateLimitHitMessage visas för besökaren.

  • advanced.botMessagesLimit - heltal (JSON-tal, t.ex. 1000). 0 betyder "ingen gräns"; i annat fall måste det vara en multipel av 1000 (1000, 2000, 10000, ...). Värden som 100 eller 1500 avvisas med 400 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ör POST /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.customFormId och humanSupport.customFormId.
  • Anpassade chattikoner för att öppna/stänga - customLauncherIconVisible, openChatIcon, closeChatIcon. API:et exponerar endast de huvudsakliga multipart-delarna avatar och whitelabel_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 PATCH med 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=...
  • data JSON-del (obligatorisk, Content-Type: application/json) - botkonfigurationen i den kapslade strukturen som beskrivs ovan
  • avatar fildel (valfri) - botens avatarbild
  • whitelabel_logo fildel (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 tecken
  • advanced.temperature - mellan 0.0 och 1.0
  • chatMemory.summariesToKnowledgeRatio - heltal mellan 10 och 90 (procent, steg 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - mellan 0 och 500
  • appearance.footerMarkdown - max 255 tecken
  • humanSupport.enabled=true kräver att humanSupport.email är angivet
  • leadCollection.enabled=true kräver att minst ett av fälten leadCollection.emailEnabled eller leadCollection.phoneEnabled är satt till true; den kanal som är aktiverad kräver även sin etikett, samt leaveDetailsMessage och thankYouMessage
  • Begränsade fält (advanced.chatContextSize, advanced.botMessagesLimit osv.) 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.avatarUrl och whiteLabel.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 apiKey som 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. standard i 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 / remaining rä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 konfigurerade rateLimitPerMinute om 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.