Hjälpcenter
Chat API

Management API

Senast uppdaterad:

Översikt över Management API

Management API är avsett för administrativt arbete som inte omfattar att skicka chattmeddelanden:

  • skapa en bot programmatiskt med POST /v1/management/bots
  • läsa 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 prenumerationsanvändning med GET /v1/usage

Management-nycklar är knutna 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 manipulera dina botar eller läsa dina 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örsappen och gå till Account Settings > Management API (Kontoinställningar > Management API).
  2. Klicka på Create Management Key (Skapa Management-nyckel), namnge den, ställ valfritt in vitlistning för IP-adresser samt hastighetsbegränsning och bekräfta.
  3. Välj endast de behörigheter som din integration behöver och kopiera hela nyckeln från framgångsmodalfönstret. Klartexten visas bara en gång.
  4. Spara den på din server, inte i kod i webbläsaren eller i ett offentligt arkiv. Gör en skrivskyddad förfrågan såsom GET /v1/usage med behörigheten usage för att verifiera åtkomsten.
  5. Återkalla oanvända eller komprometterade nycklar från sidan Management API.

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.

Gränser

  • 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 - ställ in ett lägre rateLimitPerMinute så sänks taket och påfyllningshastigheten skalas därefter.

Behörigheter

Varje Management-nyckel innehåller 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 den behörighet 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

Anropskroppens struktur: kapslade sektioner som speglar flikarna i administratörsgränssnittet

POST och PATCH accepterar en JSON-kropp grupperad i 13 sektioner. Varje sektion motsvarar en underflik i administratörsappens sidofält för botinställningar, så JSON-nycklarna och de synliga flikarna stämmer överens: om du ändrar consent.humanSupportRequirePolicyAccept via API:et kommer samma reglage att slås om på fliken Consent & Privacy (Samtycke och integritet) i administratörsappen.

  • role - botpersona, rå prompt, svarslängd, språk, webbplats-/företagskontext (fliken Role & Behavior)
  • conversation - välkomstmeddelande, sökfrågebearbetning, konversationskontinuitet, betygsknappar + verktygstips, innehåll för förslagsfrågor + dynamiska uppföljningar (fliken Chat Conversation)
  • chatMemory - chattminnesreglage, sammanfattningsprompter, kontextallokering (fliken Summaries & Memory)
  • appearance - färger, text, mått, anpassad CSS, välkomstskärm, utformning av förslagsfrågor, beteende för automatisk öppning, simulering av mänskligt skrivande, sidfotsmarkdown (fliken Appearance)
  • humanSupport - mänskligt kontaktformulär (fliken Human Contact Form)
  • leadCollection - leadinsamlingsformulär (fliken Lead Collection)
  • liveChat - överlämning till livechatt (fliken Live Chat)
  • consent - alla fyra reglage för integritetspolicy samt text för samtyckesskärmen (fliken Consent & Privacy)
  • whiteLabel - dölj logotyp, länk för anpassad logotyp, 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 kunskapsspråk (fliken Languages)
  • advanced - LLM-modell, temperatur, kontextstorlek, gräns för botmeddelanden, intern språkversion, Offer Cards (fliken Model & Advanced)

Av de skrivbara inställningarna ligger endast name på toppnivån, eftersom det identifierar botten snarare än tillhör en enskild flik.

Sidofältet för botinställningar har för närvarande 16 underflikar, och 13 av dem motsvarar sektionerna ovan. De tre underflikarna utan motsvarande sektion är Flow, Actions och Forms - alla tre tas upp under "Utanför API:ets räckvidd" nedan. De 13 som faktiskt motsvaras ä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.

Förfrågans och svarets kropp har samma struktur. Svaret lägger till två extra element:

  • meta - skrivskyddad: bot-id och tidsstämplar. Ta bort detta för att göra om ett GET-svar till en giltig POST-kropp.
  • apiKey - finns endast vid skapandet - den nyskapade Bot Talk API-nyckeln för den nya botten.

Två fält i den delade strukturen är skrivskyddade - de returneras i svaret men ignoreras om du försöker skicka dem i POST/PATCH:

  • appearance.avatarUrl - fullständigt kvalificerad offentlig URL för bottens avatarbild (t.ex. https://api.chatlab.com/aichat/content/avatar_xyz.png). Gör en GET direkt mot den för att ladda ned filen. För att ändra den, ladda upp en ny fil via multipart-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fullständigt kvalificerad offentlig URL för sidhuvudslogotypen för whitelabel. Samma mönster som avatarUrl. För att ändra den, ladda upp en ny fil via multipart-delen whitelabel_logo (se PATCH).

Båda webbadresserna använder den aktuella förfrågans schema + värd + kontextsökväg, så på en anpassad domän för whitelabel returneras de med den domänen som rot (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 just det fältet. null på fältnivå rensar aldrig ett lagrat värde - det betyder bara "rör inte".

Roll- och promptuppbyggnad

Den systemprompt som språkmodellen faktiskt tar emot byggs upp på ett av två sätt beroende på role.role. Genom att veta vilken gren du befinner dig på förstår du vilka fält som spelar roll och vilka som lagras men ignoreras.

Gren A - role.role är CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (mallstyrd)

Backend sätter samman prompten från en inbyggd mall och ignorerar role.rawPrompt helt (värdet lagras fortfarande på botten, men används inte). Mallen inkluderar:

  • role.role - rolletikett (t.ex. "Customer Support") och rollspecifika instruktioner läggs till automatiskt
  • name - bottens namn, injiceras i inledningsmeningen
  • 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ålordantal: Concise ≈ 50 ord, Normal ≈ 100, Detailed ≈ 200
  • role.websiteAddress - valfritt; när det inte är tomt läggs det till som "for the users of the website {url}"
  • role.companyDescription - valfritt; när det inte är tomt läggs det till som ett extra stycke före rollinstruktionerna

Detta är den rekommenderade grenen för de flesta botar - du får rollanpassat beteende och skyddsräcken utan extra arbete.

Gren B - role.role är CUSTOM (prompt tillhandahålls av anroparen)

Backend använder role.rawPrompt som rollprompt och lägger till plattformens fasta riktlinjer för svarslängd. Detta är skilt från role.responseLength: den valfria inställningen Concise/Normal/Detailed injiceras inte för en CUSTOM-roll. På samma sätt lagras language, websiteAddress och companyDescription, men injiceras inte i denna rollprompt. Inkludera önskat språk, mål för svarslängd eller företagskontext direkt i rawPrompt själv. Ytterligare körtidsinstruktioner och hämtad kontext kan också tillhandahållas, så rawPrompt utgör inte hela modellinmatningen. Den fördefinierade rollens toninstruktioner läggs inte till, men att välja CUSTOM tar inte bort alla plattformsinstruktioner.

Använd endast CUSTOM när den mallstyrda 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- / fält med fasta värden

Enum-fält och begränsade fält avvisar ogiltiga värden med 400 invalid_parameter. Andra fält är vanliga strängar, även där användargränssnittet erbjuder en fast lista. Använd den dokumenterade stavningen och validera dina data i stället för att anta att varje sträng som inte stöds avvisas.

  • 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 administratörsgränssnittet, t.ex. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi och ~80 andra. Värdet lagras ordagrant och sätts in i promptmallen, så tvåställig ISO-koder (en, pl) och andra värden utanför listan avvisas inte av API:et men skapar en felaktig instruktion som "Output in en, unless...". Standardvärdet är Auto Detect om det utelämnas vid skapandet.
  • advanced.model - se "AI-textmodeller" nedan. Detta är en sträng, inte en validerad enum i förfrågningsschemat; använd ett värde som stöds och inte ett godtyckligt modellnamn.
  • advanced.chatContextSize - använd 8000, 16000 eller 32000, i linje med användargränssnittet. Värden över kontots maximum trunkeras tyst nedåt; DTO:n tvingar inte fram denna uppsättning om tre värden.
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified, pill
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - booleskt reglage. true tvingar användaren att fylla i leadformulä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 praktiken 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 motsvarar skjutreglaget i administratörsgränssnittet. Värden utanför detta intervall avvisas med 400 invalid_parameter.

  • chatMemory.summariesToKnowledgeRatio - heltal i procent, 10-90; gränssnittet använder steg om 10, men API:et accepterar heltal i hela intervallet. Standardvärde 50. När minne är aktiverat och kontexten är större än 8k fördelas budgeten för kunskap och minne efter reservationen för prompt och senaste konversation, inte hela modellkontexten. Vid 8k allokeras ingen sammanfattningsbudget av denna inställning.

  • liveChat.schedule - JSON kodad som en sträng, inte ett kapslat JSON-objekt över nätverket. Servern lagrar den råa strängen ordagrant; administratörsgränssnittet tolkar den på klientsidan när schemaredigeraren renderas. När strängen tolkats är den uppbyggd som en post per veckodag plus nyckeln timezone:

    • 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 sker endast på klientsidan i administratörsgränssnittet - felaktig JSON eller okända nycklar accepteras av API:et som en vanlig sträng och orsakar ett renderingsfel först när en person senare öppnar botten i administratörsgränssnittet. Validera strukturen på din sida innan du skickar den.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korta etiketter som visas på kontrollerna för betygsättning med 👍 / 👎 när conversation.conversationRatingEnabled=true. Standardtext är "I like the response" / "I don't like the response". Synliga för slutanvändare.

  • whiteLabel.hideRoboAssistLogo - whitelabel-funktion, underställd dina kontogränser. Döljer sidfotsraden "Powered by ChatLab". Om ditt konto inte inkluderar whitelabel lagras värdet men ignoreras, och sidfoten visas alltid.

  • whiteLabel.whitelabelLogoLink - whitelabel-funktion, underställd dina kontogränser. Klickmålets URL för den anpassade logotypen när hideRoboAssistLogo=true och en anpassad logotypfil laddas 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 5.

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

  • advanced.internalLocale - IETF-kod för språk och region i formatet ll_CC (understreck, INTE ll-CC med bindestreck). Accepterade värden kommer från en fast lista med ~95 språkområden: 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 och många fler. Att skicka endast en tvåställig kod ("en") eller BCP-47 ("en-US") ingår inte i den tillåtna listan. Standardvärde en_US. Detta är den språkversion som används för datum- och talformatering i widgetens gränssnitt, till skillnad från role.language (bottens språk för konversation och svar).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltal (skickas som JSON-tal, t.ex. 30, inte "30"). Sätt meddelandegränsen till 0 för att inaktivera denna sessionsbaserade gräns. Om den aktiveras måste en positiv varaktighet anges. Backend tillämpar N meddelanden per session per varaktighet i sekunder innan security.talkMessagesRateLimitHitMessage visas för besökaren.

  • advanced.botMessagesLimit - heltal (JSON-tal, t.ex. 1000). 0 innebär inget ytterligare tak per bot, medan kontots övergripande saldo för Credits fortfarande gäller; annars måste det vara en multipel av 1000 (1000, 2000, 10000, ...). Värden som 100 eller 1500 avvisas med 400 invalid_parameter. Detta är ett månatligt tak för botkrediter, inte ett antal meddelanden per konversation. Mappningen begränsar inte detta värde till kontots budget; kontots budget sätter fortfarande gränsen för den faktiska användningen.

AI-textmodeller (advanced.model)

Använd den exakta modellidentifierare som returneras i advanced.model när du läser en bot som konfigurerats med din avsedda modell i Settings > Model & Advanced (Inställningar > Modell och avancerat). Nuvarande standardvärde vid skapande är 5.6-LUNA. Identifierare är skiftlägeskänsliga och skiljer sig från visningsnamnen; exempelvis visas 5.6-LUNA som GPT 5.6-luna.

Modellkatalogen förändras över tid. Dra inte slutsatsen att en godtycklig sträng eller en leverantörs offentliga modell-ID stöds bara för att förfrågningsschemat accepterar en sträng. Läs tillbaka den sparade konfigurationen och testa den resulterande chattbotten innan du driftsätter den.

Fältreferens (fullständigt förfrågningsschema)

De sektioner och fält som stöds, med deras typer och viktiga begränsningar. PATCH-semantik: alla fält som utelämnas (eller skickas som null) lämnar det sparade värdet orört. Samma struktur används för svaret (minus binärt multipart-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, obligatoriskt vid skapande Bottens 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 botten, 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-svaren
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 kontroller med tumme upp/ner för att betygsätta konversationen
positiveRatingTooltip string Verktygstips på knappen för positivt betyg
negativeRatingTooltip string Verktygstips på knappen för negativt betyg
suggestedQuestions string Föreslagna frågor / konversationsöppnare separerade med radbrytningar
dynamicSuggestedFollowups boolean Om true föreslår AI uppföljningsfrågor efter varje svar
positiveRatingMessage string Meddelande som visas efter positiv feedback
negativeRatingMessage string Meddelande som visas efter negativ feedback
hideSuggestedQuestionsAfterFirstUse boolean Dölj statiska förslag efter användning
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 chattminnesfunktionen
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} Standardprompt kontra anpassad klientprofilsprompt
summariesToKnowledgeRatio int 10-90 (UI-steg 10) % av den tillgängliga kunskaps-/minnesbudgeten som allokeras till sammanfattningar vid kontexter över 8k

§ appearance

Fält Typ Begränsning Beskrivning
launcherLabelLine1 string max 60 Första raden i startknappens text
launcherLabelLine2 string max 60 Andra raden i startknappens text
launcherTextColor string Textfärg på startknappen
launcherDismissEnabled boolean Tillåt att startknappen avfärdas
widgetFontFamily string inter, system, nunito, lato, montserrat, poppins, source-serif, jetbrains-mono Typsnittsfamilj för widgeten
chatDrawerEnabled boolean Aktivera sidopanelsvisning (drawer)
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) Bubblans färg för besöksmeddelanden
clientMessageTextColor string (hex) Textfärg för besöksmeddelanden
responseMessageBubbleColor string (hex) Bubblans färg för bottsvar
responseMessageTextColor string (hex) Textfärg för bottsvar
chatSubheader string Underrubrik som visas under chatttiteln
senderPlaceholder string Platshållartext i inmatningsfältet för meddelanden
resetConversationTooltip string Verktygstips på knappen "reset conversation" (å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 bottmeddelanden öppnas
minimizedDisplayMode string (enum) ∈ {icon, minified, pill} Minimerat läge: startikon, kompakt inmatningsfält eller piller
chatDesktopWidthPx int Widgetbredd på dator
chatDesktopHeightPx int Widgethöjd på dator
chatMobileSizePercent int Widgetstorlek på mobil i % av visningsytan
messageFontSize int Teckenstorlek för meddelandetext (px)
showChatbotBubblesDesktop boolean Visa flytande puffbubblor på dator
showChatbotBubblesMobile boolean Visa flytande puffbubblor på mobil
chatbotBubblesDelaySeconds int Fördröjning innan puffbubblorna visas (sekunder)
launcherIconFullSize boolean Rendera den anpassade startikonen kant-till-kant i stället för indragen
welcomeScreenEnabled boolean Visa Welcome Screen (välkomstskärm) i stä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 kontaktformulär till mänsklig support i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Bottar skapade före 2026-09-02 har som standard true
welcomeScreenHideLiveChat boolean Dölj livechattåtgärden i sidhuvudet medan välkomstskärmen visas. Den återkommer efter besökarens första meddelande. Bottar skapade före 2026-09-02 har som standard true
headerActionsLayout string ICONS eller DROPDOWN Hur Live Chat och kontaktformuläret för mänsklig support erbjuds i chatthuvudet: ICONS (en separat ikon för vardera) eller DROPDOWN (grupperade i sidhuvudmenyn). Bottar skapade före 2026-09-02 har som standard ICONS
stackSuggestedQuestions boolean Stapla föreslagna frågor vertikalt (i stället för sida vid sida)
suggestedQuestionsFontSize int Teckenstorlek för brickor med föreslagna frågor (px)
suggestedQuestionsTextColor string (hex) Textfärg på brickor med föreslagna frågor
suggestedQuestionsBackgroundColor string (hex) Bakgrundsfärg på 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 före automatisk öppning
autoOpenChatDelaySeconds int Fördröjning för automatisk öppning (sekunder)
simulateHumanTyping boolean Dela upp bottens 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; för att ändra den, ladda upp via multipart-delen avatar

Multipart vid POST/PATCH: avatar (fildel). GET / svarstexter utelämnar filinnehållet - endast URL:en överförs.

§ humanSupport

Fält Typ Begränsning Beskrivning
enabled boolean Strömbrytare för flödet Human Support (mänsklig support)
email string obligatoriskt (strikt vid skapande) när enabled=true Adress som tar emot e-postmeddelanden 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 meddelandefältet
emailWithConversationContent boolean Om true inkluderas konversationstranskriptet i e-postmeddelandet
customFormId long id för ett befintligt anpassat formulär Ersätt det inbyggda kontaktformuläret med ett anpassat formulär. Vid skapande innebär utelämnande att det inbyggda formuläret används; vid PATCH lämnar null det nuvarande valet oförändrat
customFormMapping string JSON-kodad sträng Mappar anpassade formulärfält till fälten i e-postmeddelandet för mänsklig support

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 på namnfältet
emailEnabled boolean Samla in e-post
emailLabel string obligatoriskt (strikt vid skapande) när enabled=true OCH emailEnabled=true Etikett på e-postfältet
phoneEnabled boolean Samla in telefonnummer
phoneLabel string obligatoriskt (strikt vid skapande) när enabled=true OCH phoneEnabled=true Etikett på telefonfältet
leaveDetailsMessage string obligatoriskt (strikt vid skapande) när enabled=true Meddelande som uppmuntrar besökaren att lämna sina uppgifter
thankYouMessage string obligatoriskt (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 aviseringar (standard är kontots e-postadress)
emailWithConversationContent boolean Om true inkluderas konversationstranskriptet i aviseringen

| customFormId | long | id för ett befintligt anpassat formulär | Ersätt det inbyggda leadformuläret med ett anpassat formulär. Vid skapande innebär utelämnande att det inbyggda formuläret används; vid PATCH lämnar null det nuvarande valet oförändrat | | customFormMapping | string | JSON-kodad sträng | Mappar anpassade formulärfält till namn / e-post / telefon |

Regel för flera fält (strikt vid skapande): enabled=true kräver minst ett av alternativen emailEnabled eller phoneEnabled. requirePolicyAccept finns under consent.leadCollectionRequirePolicyAccept, inte här.

§ 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 livesessionen startar
endMessage string Meddelande som visas när livesessionen avslutas
nameLabel string Etikett på namnfältet i förformuläret för livechatt
emailLabel string Etikett på e-postfältet i förformuläret för livechatt
schedule string JSON-kodad sträng (veckodagsbrytare + from/to + timezone) Öppettider för livechatt - se "Structured fields and ranges" för exakt struktur
outOfHoursMessage string Meddelande som visas när schemat anger att vi har stängt
closeModalMessage string Titel för modalfönstret "close live chat?" (stäng livechatt?)
closeModalConfirmLabel string Bekräftelseknappens etikett i stängningsrutan
closeModalCancelLabel string Avbrytknappens etikett i stängningsrutan
closeModalTooltipText string Verktygstips på kontrollen för att stänga 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 medan man väntar på en operatör
waitingForOperatorSeconds int Tidsgräns för en operatör att svara (sekunder)
redirectToHumanSupportForm boolean Om true skickas användaren vidare till formuläret för Human Support när ingen operatör svarar
requireAdminOnline boolean Kräv en tillgänglig operatör enligt närvaroinställningarna
presenceMode string Närvaroläge; använd värdet från en bot som konfigurerats i gränssnittet
hideHumanSupportWhenLiveChatAvailable boolean Dölj kontaktformuläret när livechatt är tillgänglig
missedEmailEnabled boolean standard true Skicka e-post till bottägaren när en förfrågan om livechatt inte besvarades. Lämnas outfyllt 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 leadinsamlingsformuläret 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 kryssrutan för samtycke (innehåller vanligtvis en länk till integritetspolicyn)

§ whiteLabel

Fält Typ Begränsning Beskrivning
hideRoboAssistLogo boolean White Label-funktion; styrs av kontogränser Dölj ChatLabs standardlogotyp i sidfoten
whitelabelLogoLink string White Label-funktion; styrs av kontogränser URL som den anpassade sidfotslogotypen länkar till
assignToCustomDomain boolean styrs av funktionen CUSTOM_DOMAIN Ha chatten på den konfigurerade anpassade domänen
whitelabelLogoUrl string skrivskyddad Fullständig publik URL till White Label-logotypen; för att ändra den, ladda upp via multipart-delen whitelabel_logo

Multipart vid POST/PATCH: whitelabel_logo (fildel). GET / svarstexter utelämnar filinnehållet - endast URL:en överförs.

§ 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 skräppostfiltret per bot 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 Maximalt antal användarmeddelanden som tillåts inom frekvensbegränsningsfönstret
talkMessagesRateLimitDurationSeconds int >= 0 Längd på frekvensbegränsningsfönstret (sekunder)
talkMessagesRateLimitHitMessage string Meddelande som visas för besökaren när frekvensbegrä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 åt per modell
turnDetection string leverantörsspecifik Läge för turtagning
audioPrompt string Extra systemprompt som endast används vid röstturer
welcomeMessage string Talad öppningsfras
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 FIXED_LIST Hur botten väljer svarspråk
baseLanguage string språkkod Språk som bottens egen text är skriven på
languages string kommaseparerade språkkoder Språk som erbjuds besökaren
knowledgeLanguageMode string NONE, MAIN eller DYNAMIC Hur kunskap på andra språk hanteras
knowledgeLanguageFallback string språkkod Språk som används när ingen matchning hittas

§ advanced

Fält Typ Begränsning Beskrivning
model string begränsas av kontogränser; se "AI text models" ovan LLM-identifierare (t.ex. 5.6-LUNA)
temperature decimal 0.0-1.0 Samplingstemperatur (motsvarar skjutreglaget i gränssnittet)
chatContextSize int ∈ {8000, 16000, 32000}; begränsas automatiskt till ditt kontos maxgräns Konfigurerad kontextbudget, inklusive instruktioner, historik och kunskap
botMessagesLimit long 0 eller multipel av 1000 (t.ex. 1000, 2000, 10000) Månatligt tak för bottens meddelandekrediter (0 = inget ytterligare botttak; kontobudgeten gäller fortfarande)
internalLocale string språkkod i formatet ll_CC Språkvariant för widgetens ramverksetiketter (skild från role.language)
productsViewEnabled boolean Om true visas e-handelns 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:

  • Träning och borttagning - dessa slutpunkter listar inte alla bottar, hanterar inte träningsdataset och tar inte bort bottar. Använd appen för dessa arbetsflöden.
  • Fliken Flow (flöde) - det visuella redigeringsverktyget för konversationsflöden, Flow Editor (steg och övergångar). Exponeras inte via Management API.
  • Fliken Actions (åtgärder) - hanterade integrationer för e-handel / bokning, AI Search och anpassade API-funktioner. Verktygsanrop (tool calling) har aldrig varit en del av Management API.
  • Själva byggverktyget 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 bot via leadCollection.customFormId och humanSupport.customFormId.
  • Anpassade ikoner för att öppna/stänga chatt - customLauncherIconVisible, openChatIcon, closeChatIcon. API:et exponerar endast multipart-delarna för huvudsaklig 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 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
  • Förfrågans brödtext är botkonfigurationens JSON (inget data-omslag)
  • Filer (avatar/logotyp) kan laddas upp senare via en andra PATCH med läge B

Läge B - multipart/form-data (används vid uppladdning av filer i samma förfrågan):

  • Content-Type: multipart/form-data; boundary=...
  • data JSON-del (obligatorisk, Content-Type: application/json) - botkonfiguration 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 adminpanelens guide skulle sätta.

Exempel på förfrågans brödtext

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.6-LUNA",
    "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 ifyllt
  • leadCollection.enabled=true kräver att minst en av leadCollection.emailEnabled eller leadCollection.phoneEnabled är true; den kanal som är aktiverad kräver även sin etikett, plus leaveDetailsMessage och thankYouMessage
  • advanced.chatContextSize begränsas till kontots maximala kontextstorlek som stöds. Förutsätt inte att andra numeriska fält begränsas automatiskt.

Fält vars värde är null på servern utelämnas från JSON-brödtexten - endast fält med icke-nullvärden skickas över nätverket.

Exempel på svarstext (201)

Samma struktur som förfrågan, plus det skrivskyddade meta-blocket och engångsnyckeln apiKey på rotnivån. Skrivskyddade filadresser (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.6-LUNA",
    "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 nyskapade Bot Talk-nyckeln kopplad till den nya botten. Klartexten visas bara 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 till den nya botten (/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_..."

Exempel på svarstext (200)

Samma struktur som i POST-svaret, minus engångsnyckeln apiKey. Blocket meta inkluderas. Returnerar 404 not_found_error om botten 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) - baserade på samma schema + värd + kontextsökväg som betjänade denna förfrågan. Hämta filinnehållet genom att göra GET direkt mot dessa URL:er; 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 förfrågans brödtext.

{
  "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.6-LUNA",
    "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

Request-body för POST /v1/management/bots och response-body för GET /v1/management/bots/{bot_id} har samma struktur, så kloning sker i en pipeline med tre steg: hämta källan via GET, ta bort serverhanterade identitetsfält och skicka resultatet via POST.

1. Hämta källboten 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å. Objektet meta (id, createdAt, updatedAt) hanteras av servern och är skrivskyddat - att lämna kvar det i POST-bodyn gör ingen skada (servern ignorerar det), men att ta bort det gör avsikten tydlig och håller datamängden 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 den rensade bodyn via POST för att skapa klonen. Se referensen för POST /v1/management/bots ovan för fullständig body-struktur 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 nyskapad apiKey (Bot Talk-nyckeln för klonen). Klartextversionen av apiKey returneras endast i detta skapande-svar - kopiera den innan du stänger responstexten, eftersom den inte kan hämtas igen senare.

Detta kopierar inställningar som stöds, inte en fullt tränad chattbot. Träningsinnehåll, konversationshistorik, integrationer/åtgärder, Flow samt formulärdefinitioner klonas inte av dessa slutpunkter. Konfigurera dem separat i appen.

Ytterligare begränsningar:

  • 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 laddar du ner filerna från källans URL-adresser och laddar upp dem som multipart-delarna avatar / whitelabel_logo - antingen via skapande-POST (läge B) eller i en uppföljande PATCH.
  • Bot Talk-nycklar klonas inte. Varje bot har sin egen uppsättning av Bot Talk-nycklar. Den enda apiKey som returneras vid skapande-POST är den enda som genereras automatiskt; skapa fler nycklar under fliken API (API) för botten vid behov.

PATCH /v1/management/bots/{bot_id}

Uppdatera ett eller flera fält för en bot du äger. Endast sektioner/fält som ingår i JSON-datan modifieras; allt som utelämnas (eller skickas som null) förblir orört. Partiell uppdatering tillämpas per fält inom en skickad sektion.

Två likvärdiga Content-Types accepteras (precis som för POST):

Läge A - ren JSON (rekommenderas vid uppdatering av enbart inställningar):

  • Content-Type: application/json
  • Request-body är själva JSON-patchen (inget data-omslag)

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 inkluderas för att anropet ska göra någon skillnad.

Exempel på request-body (flera sektioner)

Alla fält som accepteras av POST /v1/management/bots kan också skickas här. Exemplet nedan illustrerar flera sektioner, inte alla fält som stöds; i praktiken skickar du enbart de nycklar du vill ändra (se "Minimal partiell uppdatering" längre ner) - alla nycklar som utelämnas (eller skickas som null) lämnar det sparade värdet oförändrat.

{
  "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 enskilt fält via PATCH genom att endast skicka 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 (när du ersätter 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 enbart 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'

Response-body (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 ha tillämpat patchen från Fullständig request-body (flera sektioner) ovan på botten från GET-exemplet - ändrade fält återspeglar de nya värdena, orörda fält bevaras och meta.updatedAt räknas upp.

{
  "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.

Response-body (200)

{
  "subscriptionType": "your-plan-id",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • subscriptionType är en identifierare i gemener för kontots aktuella abonnemang (your-plan-id är ett exempel på en platshållare). Abonnemangen hämtas från en dynamisk katalog, så den exakta uppsättningen identifierare kan förändras över tid när abonnemang byter namn eller läggs till - hantera detta som en godtycklig sträng, inte en fast enum.
  • messages.used / limit / remaining visar meddelandekrediter för innevarande kalendermånad och nollställs den första dagen i månaden, inte på förnyelsedagen för prenumerationen. De är kreditviktade och motsvarar inte ett rent antal svar.
  • bots.used / limit / remaining räknar ägda botar, inklusive pausade botar, mot ditt kontos totala botgräns.

Rate limit-headers

Svar som når hastighetsbegränsningsstadiet (det vill säga autentisering och IP-vitlistning godkändes) innehåller:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - taket 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 epoch-sekunder 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 blir ledig.

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-*-headers - hastighetsbegränsaren kontrolleras först efter att autentisering och IP-kontroller har lyckats.

Felformat

Samma struktur som 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 lägger till fältsökvägen som felar i början av meddelandet så att den felande delen är enkel att upptäcka:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "humanSupport.email Human support email is required when humanSupport.enabled=true"
  }
}

Felaktiga värden för enum- / begränsade uppsättningsfält (t.ex. chatMemory.clientSummaryPromptType = "BOGUS") inkluderar fältsökvägen, det avvisade värdet samt 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.