> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thinnest.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# External Chat

> Chat with an agent using API key authentication (for third-party integrations).

The external chat endpoint is designed for third-party applications, websites, and services. It uses Agent API Keys instead of Auth0 JWT.

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.thinnest.ai/v1/agents/{agent_id}/chat \
    -H "Authorization: Bearer $THINNESTAI_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
    "message": "What products do you offer?",
    "session_id": "sess_website_visitor_001"
  }'
  ```

  ```python Python theme={null}
  import requests

  url = "https://api.thinnest.ai/v1/agents/{agent_id}/chat"
  headers = {
      "Authorization": "Bearer " + "YOUR_THINNESTAI_API_KEY",
      "Content-Type": "application/json",
  }

  payload = {
    "message": "What products do you offer?",
    "session_id": "sess_website_visitor_001"
  }

  response = requests.post(url, headers=headers, json=payload)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.thinnest.ai/v1/agents/{agent_id}/chat", {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + "YOUR_THINNESTAI_API_KEY",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
    "message": "What products do you offer?",
    "session_id": "sess_website_visitor_001"
  }),
  });

  const data = await response.json();
  console.log(data);
  ```

  ```go Go theme={null}
  package main

  import (
      "bytes"
      "fmt"
      "io"
      "net/http"
  )

  func main() {
      payload := []byte(`{
    "message": "What products do you offer?",
    "session_id": "sess_website_visitor_001"
  }`)
      req, _ := http.NewRequest("POST", "https://api.thinnest.ai/v1/agents/{agent_id}/chat", bytes.NewBuffer(payload))
      req.Header.Set("Authorization", "Bearer YOUR_THINNESTAI_API_KEY")
      req.Header.Set("Content-Type", "application/json")

      resp, err := http.DefaultClient.Do(req)
      if err != nil { panic(err) }
      defer resp.Body.Close()
      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```
</RequestExample>

***

## Authentication

Use an **Agent API Key** (`ak_*`) in the `Authorization` header:

```bash theme={null}
curl -X POST https://api.thinnest.ai/v1/agents/ag_c47e7c97_b2f2/chat \
  -H "Authorization: Bearer ak_your_agent_api_key" \
  -H "Content-Type: application/json" \
  -d '{"message": "Hello"}'
```

Create API keys via the [Create API Key](/api-reference/auth/create-key) endpoint or from the dashboard.

***

## Path Parameters

<ParamField path="agent_id" type="string" required>
  The agent's public ID (ag\_\*)
</ParamField>

***

## Request Body

<ParamField body="message" type="string" required>
  User message text
</ParamField>

<ParamField body="session_id" type="string">
  Session ID for conversation continuity
</ParamField>

***

## Response `200`

<ResponseExample>
  ```json 200 theme={null}
  {
    "response": "We offer three product lines: Starter, Professional, and Enterprise...",
    "session_id": "sess_website_visitor_001",
    "usage": {
      "input_tokens": 42,
      "output_tokens": 85,
      "total_tokens": 127
    }
  }
  ```
</ResponseExample>

***

## When to Use This vs `/chat`

| Endpoint                    | Auth                   | Use Case                                  |
| --------------------------- | ---------------------- | ----------------------------------------- |
| `POST /chat`                | Auth0 JWT              | Dashboard, internal apps                  |
| `POST /v1/agents/{id}/chat` | Agent API Key (`ak_*`) | Websites, third-party apps, embed widgets |

***

## Errors

| Code  | Description                              |
| ----- | ---------------------------------------- |
| `401` | Missing or invalid API key               |
| `402` | Insufficient balance                     |
| `404` | Agent not found                          |
| `429` | Rate limit exceeded (60 req/min per key) |
