Bot Talk API
Bot Talk API er et REST API til at kommunikere med en specifik chatbot fra din egen applikation - tilpassede apps, interne værktøjer eller automatiseringer, du selv bygger. Du opretter en API-nøgle under bottens fane API, og kalder derefter chat-endpointet med nøglen som et Bearer-token for at modtage bottens svar, enten som et enkelt svar eller streamet via SSE.
Kom godt i gang
- Vælg din chatbot, og gå til fanen API øverst på bottens side (Select Bot > API (Vælg bot > API)).
- Klik på Create API Key (Opret API-nøgle).
Tælleren ved siden af knappen viser, hvor mange nøgler der er aktive ("1 of 5 API keys active"). Linket View API Documentation (Vis API-dokumentation) åbner denne reference, og curl-kodestykket under Quick Start (Hurtig start) giver dig et eksempel, der er lige til at køre.
- I dialogboksen Create API Key giver du nøglen et navn, angiver eventuelt en IP-whiteliste og en hastighedsgrænse (rate limit), vælger dens tilladelser og klikker på Create (Opret).
- Kopiér hele nøglen fra bekræftelsesdialogen. Nøglen i klartekst vises kun én gang.
En nøgle ser ud som ck_abcdefghijklmnopqrstuvwxyz012345. Hver nøgle tilhører netop denne ene bot, så enhver anmodning foretaget med nøglen kommunikerer med denne bot - botten identificeres via nøglen og optræder aldrig i URL'en.
Base-URL
https://api.chatlab.com/aichat
Alle endpoints i denne artikel er relative til denne base-URL.
Nøgletilladelser
Hver nøgle har en eller begge af disse tilladelser, som konfigureres med til/fra-knapperne i dialogboksen Create API Key:
- Chat (send messages and receive responses) - giver adgang til endpoints
/v1/chatog/v1/chat/stream. - Conversation history (list and read past conversations) - giver adgang til
/v1/conversations-endpoints.
Fanen API viser hver nøgles tildelte tilladelser som Chat- og Conversations-badges.
Godkendelse
Send nøglen i headeren Authorization ved hver anmodning:
Authorization: Bearer ck_abcdefghijklmnopqrstuvwxyz012345
Anmodninger uden en Authorization: Bearer ...-header returnerer 401 missing_api_key. Ukendte nøgler returnerer 401 invalid_api_key; tilbagekaldte nøgler returnerer 401 revoked_api_key. Fem ugyldige forsøg inden for et minut fra den samme IP-adresse udløser en 60 minutters blokering.
Grænser
- Maks. 5 aktive Bot Talk-nøgler pr. bot
- Maks. 60 anmodninger i minuttet pr. nøgle (token bucket, kapacitet på 60, løbende genopfyldning med 1 token i sekundet). Kan konfigureres til en lavere værdi ved oprettelse - angiv en lavere
rateLimitPerMinute, hvorefter loftet sænkes, og genopfyldningshastigheden skaleres tilsvarende. - Maks. beskedlængde på 4000 tegn
- Samtidige SSE-streams pr. nøgle er underlagt dine kontogrænser
Endpoints
POST /v1/chat
Send en besked til botten, og modtag hele svaret i et enkelt JSON-svar.
Request body
{
"message": "Hi, can you help me track my order?",
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"metadata": {"userEmail": "alice@example.com"}
}
message- påkrævet streng, maks. 4000 tegn.conversationId- valgfri UUID. Udelad ved en ny samtale; genbrug værdien, som serveren returnerede tidligere, for at bygge videre på en eksisterende samtale.metadata- valgfrit objekt:{source, userName, userEmail, userPhone}.userEmailbruges også til at udlede det interne kunde-id.
Response body (200)
{
"message": {"role": "assistant", "content": "Sure, what's your order number?"},
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"model": "gpt-4o-mini",
"usage": {"creditsUsed": 2},
"actions": []
}
message.roleer altid"assistant";message.contenter hele svaret.modeler det model-id, botten kørte på under dette kald.usage.creditsUsedmedregner brugerbeskeden + bottens svar (typisk 2) samt én ekstra Credit pr. udført værktøjskald (tool call).actionsviser de værktøjskørsler, der blev afviklet under denne tur. I øjeblikket udsendes kunfunction_call-elementer (medtype,name,status: "completed").
POST /v1/chat/stream
Streamingvariant af /v1/chat. Returnerer Content-Type: text/event-stream med Server-Sent Events.
Request body
Samme struktur som POST /v1/chat. Parameteren stream i bodyen er ikke påkrævet - selve brugen af denne sti udløser SSE.
Response body (SSE-hændelser)
message.delta- indholdsfragment{ "content": "..." }. Flere af disse streames løbende, efterhånden som tokens ankommer.action- værktøjskørsel{ "type", "name", "status": "executing" }. Udsendes, når botten udløser et funktionskald.message.done- sluthændelse medconversationId,model,usageog (hvis relevant) den afsluttedeactions-liste.error- sendes, hvis genereringen mislykkes; derefter afbrydes streamen.
Keep-alive SSE-kommentarer (:keepalive) sendes hvert 15. sekund under lange genereringer. Timeouts på serversiden: 30 sekunder for det første token, 120 sekunder i alt pr. stream.
Curl-eksempel
curl -N -X POST https://api.chatlab.com/aichat/v1/chat/stream \
-H "Authorization: Bearer ck_..." \
-H "Content-Type: application/json" \
-d '{"message":"hello"}'
GET /v1/conversations
Vis samtaler for den bot, der er knyttet til din nøgle, på tværs af alle kilder (widget, WhatsApp, API osv.).
Query-parametre
limit- 1-100, standardværdi er 20. Værdier uden for intervallet tilpasses automatisk grænserne.cursor- uigennemsigtig værdi, der returneres inextCursorpå den forrige side. Udelad den på første side.
Response body (200)
{
"data": [
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"lastMessagePreview": "Thanks for the help."
}
],
"hasMore": false,
"nextCursor": null
}
lastMessagePreviewafkortes til 100 tegn med et efterfølgende....nextCursorernullpå den sidste side; send den med somcursorfor at hente den næste.
GET /v1/conversations/{conversation_id}
Fuld samtalehistorik.
Response body (200)
{
"conversationId": "550e8400-e29b-41d4-a716-446655440000",
"createdAt": "2026-05-10T14:11:02Z",
"lastMessageAt": "2026-05-10T14:12:34Z",
"messageCount": 6,
"messages": [
{"role": "user", "content": "Hi", "createdAt": "2026-05-10T14:11:02Z"},
{"role": "assistant", "content": "Hello! How can I help?", "createdAt": "2026-05-10T14:11:03Z"}
]
}
Kun rollerne user og assistant returneres; interne system- og værktøjsbeskeder filtreres fra. Returnerer 404 not_found_error, hvis samtalen ikke tilhører den bot, der er knyttet til din nøgle.
For at undersøge bottens konfiguration kan du bruge Management API-endpointet GET /v1/management/bots/{bot_id} med en Management-nøgle.
Rate limit-headere
Svar, der når rate limit-stadiet (dvs. godkendelse og IP-whiteliste er bestået), indeholder:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1715430000
X-RateLimit-Limit- loftet pr. nøgle, der rent faktisk anvendes for dette kald (som standard 60 eller din konfigurerederateLimitPerMinute, hvis den er lavere).X-RateLimit-Remaining- tilbageværende tokens i spanden umiddelbart efter dette kald.X-RateLimit-Reset- Unix epoch-sekunder, hvor det næste token bliver tilgængeligt (ikke en fuldstændig nulstilling af spanden; spanden genopfyldes kontinuerligt). Når spanden er fuld, er dette det aktuelle tidspunkt.
Ved 429 rate_limit_exceeded-svar angives Retry-After også, udtrykt i hele sekunder, indtil mindst ét token frigøres.
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 - hastighedsbegrænseren konsulteres først, når godkendelsen og IP-kontrollerne er bestået.
Fejlformat
Alle fejl deler den samme struktur:
{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 12 seconds.",
"param": null
}
}
Almindelige HTTP-koder:
400 invalid_request_error- forkert formateret input (koder:invalid_parameter,unsupported_media_type)401 authentication_error- manglende nøgle (missing_api_key), ukendt nøgle (invalid_api_key) eller tilbagekaldt nøgle (revoked_api_key)402 quota_exceeded_error- besked-Credits er opbrugt403 permission_error- IP blokeret (ip_blocked), IP ikke på nøglens whiteliste (ip_not_whitelisted), eller nøgletypen tillader ikke dette endpoint (key_type_not_allowed,insufficient_permissions)404 not_found_error- samtalen tilhører ikke denne bot405 invalid_request_error(method_not_allowed) - forkert HTTP-metode på URL'en429 rate_limit_error- for mange anmodninger (rate_limit_exceeded) eller for mange samtidige streams (concurrent_streams_exceeded)500 api_error- intern fejl
Relateret
For handlinger på kontoniveau (oprettelse af bots, opdatering af bots, hentning af forbrug), se Management API.