Hjælpecenter
Chat API

Management API

Sidst opdateret:

Oversigt over Management API

Management API er beregnet til backoffice-arbejde, som ikke involverer afsendelse af chatbeskeder:

  • opret en bot programmatisk med POST /v1/management/bots
  • læs en specifik bot, du ejer, med GET /v1/management/bots/{bot_id}
  • opdater en specifik bot med PATCH /v1/management/bots/{bot_id}
  • aflæs forbrug af abonnement med GET /v1/usage

Management-nøgler er knyttet til din konto og ikke til en bestemt bot. De holdes bevidst adskilt fra Bot Talk-nøgler, så en kompromitteret chatnøgle ikke kan ændre dine botter eller læse dine faktureringsdata.

Base-URL

https://api.chatlab.com/aichat

Alle endpoints i denne artikel er relative i forhold til denne base-URL.

Kom godt i gang

  1. Åbn administrationspanelet og gå til Account Settings > Management API (Kontoindstillinger > Management API).
  2. Klik på Create Management Key (Opret Management-nøgle), giv den et navn, angiv eventuelt IP-hvidliste og hastighedsgrænse (rate limit), og send derefter formularen.
  3. Kopiér hele nøglen fra bekræftelsesvinduet. Nøglen i klartekst vises kun én gang.

En nøgle ser ud som mk_abcdefghijklmnopqrstuvwxyz012345. Præfikset mk_ adskiller den fra Bot Talk-nøgler (ck_).

Godkendelse

Authorization: Bearer mk_abcdefghijklmnopqrstuvwxyz012345

Sender du en mk_-nøgle til /v1/chat (eller et hvilket som helst andet Bot Talk-endpoint), returneres 403 key_type_not_allowed. Sender du en ck_-nøgle til /v1/management/*, returneres den samme fejl.

Grænser

  • Maks. 5 aktive Management API-nøgler pr. bruger
  • Maks. 10 anmodninger i minuttet pr. nøgle (token bucket, kapacitet på 10, jævn genopfyldning med ~1 token for hver 6 sekunder). Kan konfigureres nedadgående ved oprettelse - sæt en lavere rateLimitPerMinute, så falder grænsen, og genopfyldningshastigheden skaleres tilsvarende.

Tilladelser

Hver Management-nøgle bærer et vilkårligt undersæt af de tre nedenstående tilladelser. Mindst én skal vælges ved oprettelse; ellers afvises anmodningen med 400 invalid_request_error. Kaldes et endpoint med en nøgle, der mangler den påkrævede tilladelse, returneres 403 insufficient_permissions.

  • bot_read - påkrævet for GET /v1/management/bots/{bot_id}
  • bot_management - påkrævet for POST /v1/management/bots og PATCH /v1/management/bots/{bot_id}
  • usage - påkrævet for GET /v1/usage

Body-struktur: indlejrede sektioner, der afspejler fanerne i administrationspanelet

POST og PATCH accepterer en JSON-body grupperet i 13 sektioner. Hver sektion svarer til en underfane i sidepanelet Bot Settings (Botindstillinger) i administrationspanelet, så JSON-nøglerne og de synlige faner passer sammen: Hvis du ændrer consent.humanSupportRequirePolicyAccept via API'et, vil du se den samme indstilling skifte på fanen Consent & Privacy (Samtykke og privatliv) i administrationspanelet.

  • role - bot-persona, rå prompt, svarlængde, sprog, website-/virksomhedskontekst (fanen Role & Behavior (Rolle og adfærd))
  • conversation - velkomstbesked, forespørgselsforfinelse, samtalekontinuitet, vurderingsknap + værktøjstip, indhold af foreslåede spørgsmål + dynamisk opfølgning (fanen Chat Conversation (Chatsamtale))
  • chatMemory - slå chathukommelse til/fra, opsummeringsprompts, konteksttildeling (fanen Summaries & Memory (Opsummeringer og hukommelse))
  • appearance - farver, tekst, dimensioner, tilpasset CSS, velkomstskærm, styling af foreslåede spørgsmål, adfærd for automatisk åbning, simulering af menneskelig indtastning, sidefod-markdown (fanen Appearance (Udseende))
  • humanSupport - kontaktformular til menneskelig support (fanen Human Contact Form (Menneskelig kontaktformular))
  • leadCollection - formular til indsamling af leads (fanen Lead Collection (Lead-indsamling))
  • liveChat - overdragelse til live chat (fanen Live Chat)
  • consent - alle fire samtykkeindstillinger for privatlivspolitik samt teksten på samtykkeskærmen (fanen Consent & Privacy (Samtykke og privatliv))
  • whiteLabel - skjul logo, tilpasset logolink, hosting på eget domæne (fanen Whitelabel)
  • security - tilladte domæner, spamfilter, hastighedsgrænser for samtaler (fanen Security (Sikkerhed))
  • voice - stemmeinput og stemmesamtaler: model, stemme, sprog, prompt, maksimal varighed (fanen Voice Conversation (Stemmesamtale))
  • multilingual - flersproget tilstand, grundsprog, tilbudte sprog, håndtering af videnssprog (fanen Languages (Sprog))
  • advanced - LLM-model, temperatur, kontekststørrelse, grænse for bot-beskeder, intern landestandard, Offer Cards (fanen Model & Advanced (Model og avanceret))

Kun name findes på øverste niveau, fordi det identificerer botten i stedet for at høre til en specifik fane.

Sidepanelet Bot Settings har i øjeblikket 15 underfaner, hvoraf de 13 svarer til sektionerne ovenfor. De to underfaner uden en tilsvarende sektion er Flow og Actions (Handlinger) - begge er beskrevet under "Uden for API'ets rækkevidde" nedenfor. De 13 faner, der matcher, er Appearance, Chat Conversation, Role & Behavior, Human Contact Form, Lead Collection, Live Chat, Whitelabel, Consent & Privacy, Security, Model & Advanced, Summaries & Memory, Voice Conversation og Languages.

Request body og response body deler den samme struktur. Responsen tilføjer to ekstra felter:

  • meta - skrivebeskyttet: bot-id og tidsstempler. Fjern dette for at gøre et GET-svar til en gyldig POST-body.
  • apiKey - vises kun ved oprettelse - den nyoprettede Bot Talk API-nøgle til den nye bot.

To felter i den fælles struktur er skrivebeskyttede - de returneres i svaret, men ignoreres, hvis du forsøger at sende dem med i POST/PATCH:

  • appearance.avatarUrl - fuldt kvalificeret offentlig URL til bottens avatarbillede (f.eks. https://api.chatlab.com/aichat/content/avatar_xyz.png). Hent den direkte med GET for at downloade billeddataene. For at ændre det uploades en ny fil via multipart-delen avatar (se PATCH).
  • whiteLabel.whitelabelLogoUrl - fuldt kvalificeret offentlig URL til header-logoet ved white label. Samme mønster som avatarUrl. For at ændre det uploades en ny fil via multipart-delen whitelabel_logo (se PATCH).

Begge URL'er anvender den aktuelle anmodnings protokol + host + kontekststi, så på et tilpasset white-label-domæne returneres de med rod i dette domæne (f.eks. https://api.acme.com/aichat/content/...).

Send null for en sektion for at springe den over ved PATCH; send null for et felt i en sektion for at springe det enkelte felt over. null på feltniveau rydder aldrig en gemt værdi - det betyder blot "rør ikke".

Rolle og opbygning af prompt

Den system-prompt, som LLM'en rent faktisk modtager, opbygges på en af to måder afhængigt af role.role. Når du ved, hvilken gren du benytter, ved du også, hvilke felter der betyder noget, og hvilke der blot gemmes, men ignoreres.

Gren A - role.role er CUSTOMER_SUPPORT, SALES eller LEAD_COLLECTION_AGENT (skabelonbaseret)

Backend sammensætter prompten ud fra en indbygget skabelon og ignorerer role.rawPrompt fuldstændigt (værdien gemmes stadig på botten, men bruges ikke). Skabelonen indeholder:

  • role.role - rollebetegnelse (f.eks. "Customer Support") og rollespecifikke instruktioner, der tilføjes automatisk
  • name - bottens navn, som indsættes i åbningssætningen
  • role.language - "Auto Detect" får botten til at følge brugerens sprog; enhver anden værdi (f.eks. "English", "Polish") bliver til "Output in {language}, unless user uses another language"
  • role.responseLength - knyttet til et målantal af ord: Concise ≈ 50 ord, Normal ≈ 100 ord, Detailed ≈ 200 ord
  • role.websiteAddress - valgfrit; når feltet er udfyldt, tilføjes det som "for the users of the website {url}"
  • role.companyDescription - valgfrit; når feltet er udfyldt, foranstilles det som et ekstra afsnit før rolleinstruktionerne

Dette er den anbefalede gren for de fleste botter - du får adfærd tilpasset rollen samt faste sikkerhedsrammer uden ekstra arbejde.

Gren B - role.role er CUSTOM (brugerdefineret prompt)

Backend anvender role.rawPrompt ordret som hele system-prompten. responseLength, language, websiteAddress, companyDescription gemmes, men indsættes ikke i prompten - hvis du ønsker, at de skal afspejles i bottens adfærd, skal du selv inkludere dem i din rawPrompt-tekst. Rollespecifikke sikkerhedsrammer og toneinstruktioner tilføjes heller ikke; du styrer hele prompten selv.

Brug kun CUSTOM, hvis den skabelonbaserede prompt ikke passer til dit brugsscenarie (f.eks. hvis du har brug for en meget branchespecifik persona, dine egne sikkerhedsbegrænsninger eller et atypisk outputformat).

Enum-felter og felter med faste værdier

Flere felter accepterer kun et fast sæt strengværdier. Hvis der sendes værdier uden for listen, afvises anmodningen med 400 validation_failed samt feltstien i error.param. Værdierne skelner mellem store og små bogstaver.

  • role.role - CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM
  • role.responseLength - Concise, Normal, Detailed
  • role.language - fulde engelske sprognavne fra dropdown-menuen i administrationspanelet, f.eks. Auto Detect, English, Polish, Spanish, German, French, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Arabic, Hindi og ~80 andre. Værdien gemmes ordret og indsættes i promptskabelonen, så to-bogstavs ISO-koder (en, pl) og andre værdier uden for listen afvises ikke af API'et, men fører til en misvisende instruktion som f.eks. "Output in en, unless...". Standardværdien er Auto Detect, hvis feltet udelades ved oprettelse.
  • advanced.model - se "AI-tekstmodeller" nedenfor; det tilgængelige udvalg afhænger af dine kontogrænser, og enhver værdi, din konto ikke har adgang til, returnerer 400 invalid_parameter
  • advanced.chatContextSize - 8000, 16000, 32000. Afhænger af dine kontogrænser; højere værdier begrænses automatisk uden fejlmeddelelse
  • chatMemory.clientSummaryPromptType - DEFAULT, CUSTOM
  • chatMemory.conversationSummaryPromptType - DEFAULT, CUSTOM
  • appearance.chatAlignment - left, right
  • appearance.minimizedDisplayMode - icon, minified
  • appearance.chatMessageLinkTarget - _blank, _self
  • leadCollection.requireBeforeNewConversation - boolesk indstilling. true tvinger brugeren til at udfylde lead-formularen, før en samtale startes; false lader AI'en bestemme, hvornår formularen skal vises (standard).

Strukturerede felter og intervaller

Felter, der ligner simple strenge eller tal, men som i virkeligheden har specifikke formater, intervaller eller særheder i administrationspanelet, som er værd at kende til.

  • advanced.temperature - det accepterede interval er 0.0 til 1.0, svarende til skyderen i administrationspanelet. Værdier uden for dette interval afvises med 400 validation_failed.

  • chatMemory.summariesToKnowledgeRatio - heltalsprocent, 10-90 med trin på 10. Styrer, hvor stor en del af chatkonteksten der reserveres til kunders historiske opsummeringer i forhold til resten (vidensbase, aktuel samtale, instruktioner). Standardværdi er 50. Værdier uden for 10-90 afvises med 400 validation_failed. Gælder kun, når chatMemory.enabled=true OG chatMemory.summaryConversationsEnabled=true.

  • liveChat.schedule - JSON kodet som en streng, ikke et indlejret JSON-objekt i datastrømmen. Serveren gemmer den rå streng uændret; administrationspanelet parser den på klientsiden ved visning af tidsplankonfigurationen. Når strengen er parset, er strukturen opbygget med ét element pr. ugedag plus en timezone-nøgle:

    • hver ugedagsnøgle (monday-sunday) peger på {enabled: boolean, from: "H:MM", to: "H:MM"} i 24-timers format
    • timezone er et IANA-zonenavn (f.eks. "Europe/Warsaw", "America/New_York")

    Eksempel på værdi (bemærk de ydre anførselstegn og de escapede indre anførselstegn - det er ét strengfelt, ikke et indlejret 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\"}"
    

    Uden for de angivne åbningstider vises liveChat.outOfHoursMessage til den besøgende, og overdragelse til live chat deaktiveres. Validering af den indre struktur sker kun på klientsiden i administrationspanelet - forkert formateret JSON eller ukendte nøgler accepteres af API'et blot som en streng, men vil udløse en visningsfejl, når en person senere åbner botten i administrationspanelet. Valider strukturen på din egen side før afsendelse.

  • conversation.positiveRatingTooltip / conversation.negativeRatingTooltip - korte tekster, der vises på knapperne 👍 / 👎 ud for hvert AI-svar, når conversation.conversationRatingEnabled=true. Standardteksten er "I like the response" / "I don't like the response". Synlig for slutbrugere.

  • whiteLabel.hideRoboAssistLogo - white label-funktion, underlagt dine kontogrænser. Skjuler sidefoden "Powered by ChatLab". Hvis din konto ikke omfatter white label, gemmes værdien, men den ignoreres, og sidefoden vises altid.

  • whiteLabel.whitelabelLogoLink - white label-funktion, underlagt dine kontogrænser. URL-destinationslink for det tilpassede logo, når hideRoboAssistLogo=true, og en tilpasset logofil er uploadet via multipart-delen whitelabel_logo.

  • appearance.simulateHumanTypingDelay - sekunder (ikke millisekunder), heltal 0-200. Pause mellem efterfølgende bot-talebobler, når simulateHumanTyping=true. Standardværdi er 5.

  • appearance.autoOpenChatDelaySeconds - sekunder, heltal. Forsinkelse, før widgetten åbnes automatisk, når autoOpenChat=true og autoOpenChatDelay=true.

  • advanced.internalLocale - IETF-sprog- og regionskode i formatet ll_CC (med understregning, IKKE ll-CC med bindestreg). Accepterede værdier kommer fra en fast liste med ~95 landestandarder: 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 og mange flere. Sendes en to-bogstavs kode alene ("en") eller BCP-47 ("en-US"), findes den ikke på listen over tilladte værdier. Standardværdi er en_US. Dette er den landestandard, der anvendes til dato- og talformatering i widget-grænsefladen, til forskel fra role.language (bottens sprog i samtaleoutput).

  • security.talkMessagesRateLimit / security.talkMessagesRateLimitDurationSeconds - heltal (sendes som JSON-tal, f.eks. 30, ikke "30"). 0 deaktiverer hastighedsgrænsen pr. IP. Er værdien over nul, håndhæver widgetten N beskeder pr. varighed i sekunder, før security.talkMessagesRateLimitHitMessage vises for den besøgende.

  • advanced.botMessagesLimit - heltal (JSON-tal, f.eks. 1000). 0 betyder "ingen grænse"; ellers skal værdien være et multiplum af 1000 (1000, 2000, 10000 osv.). Værdier som 100 eller 1500 afvises med 400 validation_failed. Værdien begrænses desuden automatisk opadtil af din kontogrænse.

AI-tekstmodeller (advanced.model)

Send den nøjagtige API-værdi (den venstre kolonne markeret med backticks). Det viste navn i administrationspanelet står i parentes. Dine kontogrænser afgør, hvilket undersæt der kan vælges; sendes en model, din konto ikke har adgang til, returneres 400 invalid_parameter. Standardmodellen for nye botter er 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)

Feltreference (fuldt request-skema)

Hvert felt på forbindelsen, med dets type, begrænsning og en linjes beskrivelse. PATCH-semantik: udelades et felt (eller sendes som null), efterlades den gemte værdi uændret. Den samme struktur bruges til svaret (minus binært multipart-indhold; plus den skrivebeskyttede meta-blok på alle svar og apiKey udelukkende på create-svaret).

Øverste niveau

Felt Type Begrænsning Beskrivelse
name string maks 150, påkrævet ved oprettelse Bottens viste navn
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

Tilføjelser, der kun optræder i svar:

  • meta: { id, createdAt, updatedAt } - skrivebeskyttet.
  • apiKey - string, findes kun i svaret på POST /v1/management/bots - den nyoprettede Bot Talk-nøgle til den nye bot, returneret præcis én gang.

§ role

Felt Type Begrænsning Beskrivelse
role string (enum) CUSTOMER_SUPPORT, SALES, LEAD_COLLECTION_AGENT, CUSTOM Persona-forudindstilling; vælger promptskabelonen (se "Role and prompt construction")
language string fuldt engelsk sprognavn (English, Polish, ...) eller Auto Detect Primært sprog, der sendes ind i promptskabelonen
responseLength string ∈ {Concise, Normal, Detailed} Ønsket detaljegrad for AI-svaret
websiteAddress string Hjemmeside anvendt til promptkontekst
companyDescription string Virksomhedsbeskrivelse anvendt til promptkontekst
rawPrompt string Tilpasset systemprompt - anvendes kun ordret, når role=CUSTOM

§ conversation

Felt Type Begrænsning Beskrivelse
welcomeMessage string Første besked, der vises for den besøgende ved åbning
queryRefinementEnabled boolean Hvis true, præciseres den besøgendes spørgsmål før RAG-hentning
conversationContinuityEnabled boolean Hvis true, genoptager tilbagevendende besøgende deres seneste samtale
conversationRatingEnabled boolean Hvis true, vises tommelfinger op/ned-bedømmelse på botbeskeder
positiveRatingTooltip string Værktøjstip på knappen til positiv bedømmelse
negativeRatingTooltip string Værktøjstip på knappen til negativ bedømmelse
suggestedQuestions string Forslåede spørgsmål / samtaleåbnere adskilt af linjeskift
dynamicSuggestedFollowups boolean Hvis true, foreslår AI opfølgende forslag efter hvert svar
dynamicFollowupsAutoIcons boolean Hvis true, vælger AI automatisk emoji-ikoner til de dynamiske opfølgninger

§ chatMemory

Felt Type Begrænsning Beskrivelse
enabled boolean Hovedafbryder for funktionen chat-hukommelse
summaryConversationsEnabled boolean Gem opsummeringer pr. samtale
conversationSummaryPrompt string Tilpasset prompt brugt til at opsummere hver samtale
conversationSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Hvorvidt standardprompten eller den tilpassede opsummeringsprompt skal bruges
clientSummaryPrompt string Tilpasset prompt brugt til at opsummere klienten på tværs af samtaler
clientSummaryPromptType string (enum) ∈ {DEFAULT, CUSTOM} Standard- vs. tilpasset klientprofil-prompt
summariesToKnowledgeRatio int 10-90, trin 10 % af chat-kontekstvinduet tildelt opsummeringer vs. RAG-viden

§ appearance

Felt Type Begrænsning Beskrivelse
launcherColor string (hex) Baggrundsfarve på starter (chatikon)
headerColor string (hex) Baggrundsfarve på chat-header
titleColor string (hex) Titelfarve på chat-header
subtitleColor string (hex) Undertitelfarve på chat-header
clientMessageBubbleColor string (hex) Farve på den besøgendes beskedboble
clientMessageTextColor string (hex) Tekstfarve på den besøgendes besked
responseMessageBubbleColor string (hex) Farve på bottens svarboble
responseMessageTextColor string (hex) Tekstfarve på bottens svar
chatSubheader string Tagline vist under chattitlen
senderPlaceholder string Pladsholdertekst i beskedfeltet
resetConversationTooltip string Værktøjstip på knappen "nulstil samtale"
chatAlignment string (enum) ∈ {left, right} Hvilken side af skærmen chatten er fastgjort til
launcherBottomMargin int 0-500 Starterens afstand fra bundkanten (px)
launcherSideMargin int 0-500 Starterens afstand fra sidekanten (px)
displayShadow boolean Dråbeskygge under widgetten
customCss string Rå CSS indsat i widgettens iframe
chatMessageLinkTarget string (enum) ∈ {_blank, _self} Hvordan links inde i botbeskeder åbnes
minimizedDisplayMode string (enum) ∈ {icon, minified} Minimeret tilstand: starterikon eller kompakt afsenderlinje
chatDesktopWidthPx int Widget-bredde på desktop
chatDesktopHeightPx int Widget-højde på desktop
chatMobileSizePercent int Widget-størrelse på mobil som % af visningsfeltet
messageFontSize int Skriftstørrelse på beskedtekst (px)
showChatbotBubblesDesktop boolean Vis de svævende teaserbobler på desktop
showChatbotBubblesMobile boolean Vis de svævende teaserbobler på mobil
chatbotBubblesDelaySeconds int Forsinkelse, før teaserboblerne vises (sekunder)
launcherIconFullSize boolean Vis det tilpassede starterikon helt til kant i stedet for med indrykning
welcomeScreenEnabled boolean Vis velkomstskærmen i stedet for at gå direkte til chatten
welcomeScreenQuestionsLabel string Etiket over de foreslåede spørgsmål på velkomstskærmen
welcomeScreenHideHumanContactForm boolean Skjul handlingen til den menneskelige kontaktformular i headeren, mens velkomstskærmen vises. Den dukker op igen efter den besøgendes første besked. Bots oprettet før 2026-09-02 har som standard true
welcomeScreenHideLiveChat boolean Skjul handlingen til livechat i headeren, mens velkomstskærmen vises. Den dukker op igen efter den besøgendes første besked. Bots oprettet før 2026-09-02 har som standard true
headerActionsLayout string DROPDOWN Hvordan livechat og den menneskelige kontaktformular tilbydes i chattens header: ICONS (hvert sit ikon) eller DROPDOWN (grupperet i header-menuen). Bots oprettet før 2026-09-02 har som standard ICONS
stackSuggestedQuestions boolean Stabl foreslåede spørgsmål lodret (modsat side om side)
suggestedQuestionsFontSize int Skriftstørrelse på brikker med foreslåede spørgsmål (px)
suggestedQuestionsTextColor string (hex) Tekstfarve på brikker med foreslåede spørgsmål
suggestedQuestionsBackgroundColor string (hex) Baggrundsfarve på brikker med foreslåede spørgsmål
autoOpenChat boolean Åbn automatisk chatten på desktop
autoOpenChatOnMobiles boolean Åbn automatisk chatten på mobil
autoOpenChatDelay boolean Brug en forsinkelse før automatisk åbning
autoOpenChatDelaySeconds int Forsinkelse ved automatisk åbning (sekunder)
simulateHumanTyping boolean Opdel botsvar i bobler med skriveanimation
simulateHumanTypingDelay int 0-200 Forsinkelse mellem boblebeskeder (sekunder)
footerMarkdown string maks 255 Tilpasset footer-markdown vist under chatten
avatarUrl string skrivebeskyttet Fuldt kvalificeret offentlig URL til avataren; for at ændre den skal den uploades via multipart-delen avatar

Multipart ved POST/PATCH: avatar (fildel). GET- / svardata udelader filindholdet - kun URL'en er med over forbindelsen.

§ humanSupport

Felt Type Begrænsning Beskrivelse
enabled boolean Afbryder til Human Support-flowet
email string påkrævet (create-strict) når enabled=true Adresse, der modtager e-mails til menneskelig support
dialogMessage string Opmuntrende besked vist over formularen
thankYouMessage string Bekræftelse vist efter indsendelse
emailMessageSubjectTemplate string Emneskabelon til e-mailen sendt til agenten
emailMessageContentTemplate string Brødtekstskabelon til e-mailen sendt til agenten
emailPlaceholder string Pladsholder i e-mailfeltet
messagePlaceholder string Pladsholder i beskedtekstfeltet
emailWithConversationContent boolean Hvis true, inkluderes samtaleudskriften i e-mailens brødtekst
customFormId long id på en eksisterende tilpasset formular Erstat den indbyggede kontaktformular med en tilpasset formular. null beholder den indbyggede formular
customFormMapping string JSON-kodet streng Knytter felter fra den tilpassede formular til felterne i e-mailen til menneskelig support

requirePolicyAccept findes under consent.humanSupportRequirePolicyAccept, ikke her.

§ leadCollection

Felt Type Begrænsning Beskrivelse
enabled boolean Afbryder til leadformular
nameEnabled boolean Indsaml navn
nameLabel string Etiket på navnefeltet
emailEnabled boolean Indsaml e-mail
emailLabel string påkrævet (create-strict) når enabled=true OG emailEnabled=true Etiket på e-mailfeltet
phoneEnabled boolean Indsaml telefon
phoneLabel string påkrævet (create-strict) når enabled=true OG phoneEnabled=true Etiket på telefonfeltet
leaveDetailsMessage string påkrævet (create-strict) når enabled=true Besked, der opfordrer den besøgende til at efterlade sine oplysninger
thankYouMessage string påkrævet (create-strict) når enabled=true Bekræftelse vist efter indsendelse
requireBeforeNewConversation boolean Hvis true, skal formularen indsendes, før chatten starter; hvis false, beslutter AI, hvornår formularen skal vises
emailNotificationEnabled boolean Send en e-mail til ejeren, hver gang et lead indsamles
emailNotificationAddress string Modtager af notifikationer (standard er kontoens e-mail)
emailWithConversationContent boolean Hvis true, inkluderes samtaleudskriften i notifikationen

Create-strict-regel på tværs af felter: enabled=true kræver mindst én af emailEnabled eller phoneEnabled. requirePolicyAccept findes under consent.leadCollectionRequirePolicyAccept, ikke her.

| customFormId | long | id på en eksisterende tilpasset formular | Erstat den indbyggede leadformular med en tilpasset formular. null beholder den indbyggede formular | | customFormMapping | string | JSON-kodet streng | Knytter felter fra den tilpassede formular til navn / e-mail / telefon |

§ liveChat

Felt Type Begrænsning Beskrivelse
enabled boolean Afbryder til Live Chat-funktionen
infoMessage string Forklarende besked før overdragelse
startMessage string Besked vist, når live-sessionen starter
endMessage string Besked vist, når live-sessionen slutter
nameLabel string Etiket på navnefeltet i livechat-forformularen
emailLabel string Etiket på e-mailfeltet i livechat-forformularen
schedule string JSON-kodet streng (ugedags-toggles + from/to + timezone) Driftstidsplan for livechat - se "Structured fields and ranges" for den nøjagtige struktur
outOfHoursMessage string Besked vist, når tidsplanen angiver, at der er lukket
closeModalMessage string Titel på "luk livechat?"-modalen
closeModalConfirmLabel string Etiket på bekræft-knappen i lukke-modalen
closeModalCancelLabel string Etiket på annuller-knappen i lukke-modalen
closeModalTooltipText string Værktøjstip på luk-chat-elementet
operatorHasJoinedLabel string Etiket vist, når en operatør deltager
operatorDidNotJoinInTimeLabel string Etiket vist, når ingen operatør deltager inden for tidsfristen
waitingForOperatorToJoinLabel string Etiket vist, mens der ventes på en operatør
waitingForOperatorSeconds int Tidsfrist for, at en operatør tager imod (sekunder)
redirectToHumanSupportForm boolean Hvis true, viderestilles der til Human Support-formularen, hvis ingen operatør svarer
missedEmailEnabled boolean standard true Send en e-mail til bottens ejer, når en anmodning om livechat ikke blev besvaret. Er udeladt på ældre bots, hvilket tolkes som aktiveret

requirePolicyAccept findes under consent.liveChatRequirePolicyAccept, ikke her.

§ consent

Felt Type Begrænsning Beskrivelse
newConversationRequirePolicyAccept boolean Kræv accept af privatlivspolitik, før en ny samtale startes
humanSupportRequirePolicyAccept boolean Kræv accept af privatlivspolitik, før formularen til menneskelig support indsendes
leadCollectionRequirePolicyAccept boolean Kræv accept af privatlivspolitik, før lead-indsamlingsformularen indsendes
liveChatRequirePolicyAccept boolean Kræv accept af privatlivspolitik, før en livechat-session startes
newConversationConsentDescription string Introduktionstekst til samtykkeskærmen ved samtalens start
privacyPolicyConsentCheckboxLabel string Etiket ved siden af samtykke-afkrydsningsfeltet (indeholder typisk et link til privatlivspolitikken)

§ whiteLabel

Felt Type Begrænsning Beskrivelse
hideRoboAssistLogo boolean White Label-funktion; underlagt kontogrænser Skjul standard ChatLab-logoet i footeren
whitelabelLogoLink string White Label-funktion; underlagt kontogrænser URL, som det tilpassede footer-logo linker til
assignToCustomDomain boolean styret af funktionen CUSTOM_DOMAIN Host chatten på det konfigurerede tilpassede domæne
whitelabelLogoUrl string skrivebeskyttet Fuldt kvalificeret offentlig URL til White Label-logoet; for at ændre det skal det uploades via multipart-delen whitelabel_logo

Multipart ved POST/PATCH: whitelabel_logo (fildel). GET- / svardata udelader filindholdet - kun URL'en er med over forbindelsen.

§ security

Felt Type Begrænsning Beskrivelse
allowedDomains string Kommasepareret liste over domæner med tilladelse til at integrere widgetten (tom = ingen hvidliste)
spamFilterEnabled boolean Aktivér spamfilteret på indgående beskeder for den enkelte bot
countryFilterMode string BLACKLIST eller WHITELIST Hvordan landelisterne fortolkes. Selve listerne forbliver kun tilgængelige for administratorer
talkMessagesRateLimit int >= 0; 0 deaktiverer Maksimalt antal tilladte brugerbeskeder i rate-limit-vinduet
talkMessagesRateLimitDurationSeconds int >= 0 Varighed af rate-limit-vinduet (sekunder)
talkMessagesRateLimitHitMessage string Besked vist til den besøgende, når grænsen for rate-limit nås

§ voice

Felt Type Begrænsning Beskrivelse
inputEnabled boolean Tillad den besøgende at diktere beskeder (tale til tekst)
conversationEnabled boolean kræver talefunktionen i abonnementet Aktivér fulde talesamtaler
voiceId string udbyderspecifikt stemme-id (f.eks. alloy) Hvilken syntetisk stemme der taler
model string f.eks. GPT-REALTIME-MINI, GEMINI-LIVE, ELEVENLABS-* Stemmemodel. Afregnes pr. minut, taksterne varierer pr. model
turnDetection string udbyderspecifik Turtagningstilstand
audioPrompt string Ekstra systemprompt, der kun bruges ved talesekvenser
welcomeMessage string Talt åbningsreplik
language string sprogkode Primært talesprog
additionalLanguages string kommaseparerede sprogkoder Ekstra sprog, som taleagenten accepterer
maxDurationSeconds int Hård grænse for en enkelt talesamtale
maxDurationMessage string Besked vist, når grænsen nås

§ multilingual

Felt Type Begrænsning Beskrivelse
enabled boolean Afbryder til flersproget tilstand
mode string AUTODETECT eller en fast listetilstand Hvordan botten vælger svarspråk
baseLanguage string sprogkode Sprog, som bottens egne tekster er forfattet på
languages string kommaseparerede sprogkoder Sprog tilbudt til den besøgende
knowledgeLanguageMode string Hvordan viden på andre sprog behandles
knowledgeLanguageFallback string sprogkode Sprog, der bruges, når der ikke findes et match

§ advanced

Felt Type Begrænsning Beskrivelse
model string underlagt kontogrænser; se "AI text models" ovenfor LLM-identifikator (f.eks. 5-MINI)
temperature decimal 0.0-1.0 Sampling-temperatur (matcher skyderen i brugerfladen)
chatContextSize int ∈ {8000, 16000, 32000}; tilpasses automatisk til din kontogrænse Token-vindue til chathistorik
botMessagesLimit long 0 eller multiplum af 1000 (f.eks. 1000, 2000, 10000) Maksimalt antal botsvar pr. samtale (0 = ingen grænse)
internalLocale string sprog- og landekode i formen ll_CC Sprogindstilling til widget-elementernes etiketter (adskilt fra role.language)
productsViewEnabled boolean Hvis true, gøres e-handels-Offer Cards synlige inde i chatten
includeProductsInKnowledgeBase boolean Hvis true, indekseres produktkataloget som en del af vidensbasen

Uden for API-omfanget

Administratorbrugerfladen indeholder enkelte områder, som med overlæg ikke er eksponeret i denne version af Management API:

  • Fanen Flow - den visuelle Conversation Flow-editor (faser og overgange). Ikke eksponeret via Management API.
  • Fanen Actions - administrerede e-handels- / reservationsintegrationer, AI Search og tilpassede API-funktioner. Tool calling har aldrig været en del af Management API.
  • Selve værktøjet til oprettelse af tilpassede formularer - oprettelse og redigering af tilpassede formularer er ikke eksponeret. Du kan dog knytte en eksisterende formular til en bot via leadCollection.customFormId og humanSupport.customFormId.
  • Tilpassede ikoner for åbn / luk chat - customLauncherIconVisible, openChatIcon, closeChatIcon. API'et eksponerer kun de overordnede multipart-dele for avatar og whitelabel_logo.
  • IP- og landelister - selve indtastningerne er kun tilgængelige for administratorer. Kun fortolkningstilstanden er eksponeret via security.countryFilterMode.

Endpoints

POST /v1/management/bots

Opret en ny bot. To ækvivalente Content-Types accepteres; vælg den, der passer dig bedst.

Tilstand A - ren JSON (anbefales, når du ikke behøver at uploade en avatar / et logo i den samme anmodning):

  • Content-Type: application/json
  • Request body er JSON-konfigurationen for botten (uden data-indpakning)
  • Filer (avatar / logo) kan uploades senere via et efterfølgende PATCH ved hjælp af tilstand B

Tilstand B - multipart/form-data (bruges ved upload af filer i samme anmodning):

  • Content-Type: multipart/form-data; boundary=...
  • data-JSON-del (påkrævet, Content-Type: application/json) - botkonfiguration i den indlejrede struktur beskrevet ovenfor
  • avatar-fildel (valgfri) - avatarbillede til botten
  • whitelabel_logo-fildel (valgfri) - white-label-logo (gælder kun, hvis din konto inkluderer White Label)

Kun name er påkrævet i JSON-strukturen; alle andre felter falder tilbage til de samme standardværdier, som guiden i administratorbrugerfladen ville sætte.

Fuld request body

Dette er den maksimale data-JSON - alle sektioner er udfyldt. Send kun de sektioner, du har brug for; alt andet tildeles standardværdier.

{
  "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 egne fejlmeddelelser:

  • name - påkrævet, maks. 150 tegn
  • advanced.temperature - mellem 0.0 og 1.0
  • chatMemory.summariesToKnowledgeRatio - heltal mellem 10 og 90 (procent, trin 10)
  • appearance.launcherBottomMargin, appearance.launcherSideMargin - mellem 0 og 500
  • appearance.footerMarkdown - maks. 255 tegn
  • humanSupport.enabled=true kræver, at humanSupport.email er angivet
  • leadCollection.enabled=true kræver, at mindst én af leadCollection.emailEnabled eller leadCollection.phoneEnabled er sat til true; den aktiverede kanal kræver desuden sin etiket samt leaveDetailsMessage og thankYouMessage
  • Begrænsede felter (advanced.chatContextSize, advanced.botMessagesLimit osv.) tilpasses automatisk til grænserne på din konto

Felter, hvis værdi er null på serveren, udelades fra JSON-strukturen - der sendes udelukkende felter med værdier, der ikke er null.

Fuld response body (201)

Samme struktur som anmodningen, plus den skrivebeskyttede meta-blok og engangsnøglen apiKey på øverste niveau. Skrivebeskyttede filadresser (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) udfyldes af serveren, når de tilsvarende multipart-dele er uploadet.

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

Feltet apiKey vises kun ved oprettelse - det er den nyligt genererede Bot Talk-nøgle, der er knyttet til den nye bot. Værdien i klartekst vises én gang og kan ikke hentes via API'et senere; gem den på din side med det samme.

Svar-headeren Location indeholder URL'en til den nye bot (/v1/management/bots/{id}).

Curl-eksempler

Tilstand A - ren JSON (enklest):

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!"}}'

Tilstand 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}

Returnerer den aktuelle konfiguration for en bot, du ejer.

Curl-eksempel

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..."

Fuld response body (200)

Samme struktur som svaret på POST, minus engangsnøglen apiKey. meta-blokken er inkluderet. Returnerer 404 not_found_error, hvis botten ikke findes eller ikke tilhører din konto.

Den aktuelle avatar og white-label-logoet vises som fuldt kvalificerede skrivebeskyttede URL'er (appearance.avatarUrl, whiteLabel.whitelabelLogoUrl) - baseret på den samme protokol + vært + kontekststi, som betjente denne anmodning. Hent de rå bytes ved at foretage et GET direkte til disse URL'er; for at udskifte en af filerne skal du uploade en ny via multipart-delen avatar / whitelabel_logo i et PATCH. Disse URL-felter ignoreres, hvis de sendes med 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"
  }
}

Klon en bot

Request body for POST /v1/management/bots og response body for GET /v1/management/bots/{bot_id} deler samme struktur, så kloning er en tretrins proces: Hent kilden med GET, fjern serverstyrede identitetsfelter, og send resultatet med POST.

1. Hent kildebotten med GET.

curl https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -o source-bot.json

2. Fjern meta-blokken på øverste niveau. meta-objektet (id, createdAt, updatedAt) styres af serveren og er skrivebeskyttet - at lade det blive i POST-bodyen gør ingen skade (serveren ignorerer det), men at fjerne det gør hensigten tydelig og holder dataindholdet rent. Rediger eventuelt name, så klonen kan skelnes fra kilden.

jq 'del(.meta) | .name = "Helpdesk Bot (clone)"' source-bot.json > clone-body.json

3. Send den rensede body med POST for at oprette klonen. Se referencen for POST /v1/management/bots ovenfor for den fulde struktur og 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 indeholder den nye bots meta.id samt en nyligt genereret apiKey (Bot Talk-nøglen til klonen). Denne apiKey i klartekst returneres kun i dette oprettelsessvar - kopiér den, før du kasserer svarindholdet; den kan ikke hentes senere.

To vigtige forbehold:

  • Filer klones ikke. appearance.avatarUrl og whiteLabel.whitelabelLogoUrl er skrivebeskyttede og peger på kildebottens filer. Hvis du har brug for den samme avatar eller det samme white-label-logo på klonen, skal du downloade filerne fra kildens URL-adresser og uploade dem som multipart avatar / whitelabel_logo-dele - enten ved oprettelses-POST (Mode B) eller i en efterfølgende PATCH.
  • Bot Talk-nøgler klones ikke. Hver bot har sin egen pulje af Bot Talk-nøgler. Den enkelte apiKey, der returneres ved oprettelses-POST, er den eneste, der genereres automatisk; opret yderligere nøgler fra bottens fane API (API-fane), hvis det er nødvendigt.

PATCH /v1/management/bots/{bot_id}

Opdater et eller flere felter på en bot, du ejer. Kun sektioner/felter, der er til stede i JSON-strukturen, ændres; alt udeladt (eller sendt som null) forbliver uberørt. Semantikken for delvis opdatering gælder pr. felt inden for en afsendt sektion.

To ækvivalente Content-Types accepteres (samme som POST):

Mode B - almindelig JSON (anbefales, når du kun opdaterer indstillinger):

  • Content-Type: application/json
  • Request body er patch-JSON (ingen data-indpakning)

Mode B - multipart/form-data (bruges ved upload af filer):

  • data JSON-del (valgfri) - selve ændringen. Send kun denne, hvis du vil ændre felter. Udelad helt, hvis du kun vil uploade en avatar eller et logo.
  • avatar fil-del (valgfri) - erstat avataren
  • whitelabel_logo fil-del (valgfri) - erstat white-label-logoet (gælder kun, hvis din konto inkluderer White Label)

Alle tre dele er valgfrie ved PATCH, men mindst én skal være til stede, for at kaldet giver mening.

Fuld request body (maksimal struktur)

Ethvert felt, der accepteres af POST /v1/management/bots, kan også sendes her. Nedenstående eksempel viser hele strukturen; i praksis sender du kun de nøgler, du ønsker at ændre (se "Minimal delvis opdatering" længere nede) - enhver nøgle, der udelades (eller sendes som null), lader den gemte værdi forblive uberø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 delvis opdatering

Foretag en PATCH af et enkelt felt ved udelukkende at sende de nøgler, du ønsker ændret - alt andet bevares.

{
  "appearance": {
    "launcherColor": "#abcdef"
  }
}

Curl-eksempler

Mode A - almindelig JSON (enklest):

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"}}'

Mode B - multipart (ved udskiftning af avatar/logo):

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'

Mode B - erstat kun avataren (ingen feltændringer):

curl -X PATCH https://api.chatlab.com/aichat/v1/management/bots/4287 \
  -H "Authorization: Bearer mk_..." \
  -F 'avatar=@./new-avatar.png'

Response body (200)

Samme struktur som GET /v1/management/bots/{bot_id} - bottens fulde konfiguration efter opdateringen er udført, inklusive meta-blokken. Intet apiKey-felt. Returnerer 404 not_found_error, hvis botten ikke findes eller ikke tilhører din konto.

Nedenstående eksempel viser svaret efter anvendelse af patchen fra Fuld request body (maksimal struktur) ovenfor på botten fra GET-eksemplet - ændrede felter afspejler de nye værdier, uberørte felter bevares, og meta.updatedAt opdateres.

{
  "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 det aktuelle abonnementsforbrug for kontoen, der ejer Management-nøglen.

Response body (200)

{
  "subscriptionType": "standard",
  "messages": {"used": 4123, "limit": 11000, "remaining": 6877},
  "bots": {"used": 3, "limit": 5, "remaining": 2}
}
  • subscriptionType er en identifikator med små bogstaver for kontoens aktuelle abonnement (f.eks. standard i eksemplet). Abonnementer stammer fra et dynamisk katalog, så det nøjagtige sæt af identifikatorer kan ændre sig over tid, efterhånden som planer omdøbes eller tilføjes - behandl dette som en uigennemskuelig streng (opaque string), ikke som en fast enum.
  • messages.used / limit / remaining angiver den aktuelle faktureringsperiodes besked-credits.
  • bots.used / limit / remaining tæller aktive botter i forhold til din kontos bot-grænse.

Rate limit-headere

Svar, der når rate limit-stadiet (dvs. godkendelse og IP-hvidliste er bestået), indeholder:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1715430000
  • X-RateLimit-Limit - grænsen pr. nøgle, der rent faktisk anvendes på dette kald (10 som standard, eller din konfigurerede rateLimitPerMinute, hvis den er lavere).
  • X-RateLimit-Remaining - tokens tilbage i bucket umiddelbart efter dette kald.
  • X-RateLimit-Reset - Unix epoch-sekunder, hvor den næste token bliver tilgængelig (ikke en fuldstændig nulstilling af bucket; bucket fyldes op løbende). Når bucket er fuld, er dette det aktuelle tidspunkt.

Ved 429 rate_limit_exceeded-svar er Retry-After også angivet, udtrykt i hele sekunder, indtil mindst én token bliver ledig.

Fejl før godkendelse (401 missing_api_key, 401 invalid_api_key, 403 ip_blocked) og 403 ip_not_whitelisted indeholder ikke X-RateLimit-*-headere - begrænseren kontrolleres først, efter godkendelse og IP-tjek er gennemført.

Fejlformat

Samme struktur som Bot Talk API:

{
  "error": {
    "type": "permission_error",
    "code": "key_type_not_allowed",
    "message": "This endpoint requires a MANAGEMENT API key.",
    "param": null
  }
}

Valideringsfejl bruger code: "invalid_parameter" og tilføjer stien til det fejlbehæftede felt foran meddelelsen, så det er nemt at finde den sektion, der fejler:

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

Ugyldige værdier for enum- / lukkede felter (f.eks. chatMemory.clientSummaryPromptType = "BOGUS") indeholder feltstien, den afviste værdi og listen over tilladte værdier:

{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_parameter",
    "message": "chatMemory.clientSummaryPromptType 'BOGUS' is not a valid value. Allowed: CUSTOM, DEFAULT"
  }
}

Relateret

For samtale-endpoints og SSE-streaming, se Bot Talk API.