---
title: "Chatbot Endpoint"
method: POST
path: "/api/chatbot"
tags: ["chatbot"]
---

# Chatbot Endpoint

`POST /api/chatbot`

## Headers

- `x-user-id` string, nullable

## Request body

- ChatRequest
  - `message` string
  - `conversation_id` string, nullable
  - `sendAudio` boolean, nullable
  - `newUser` boolean, nullable
  - `promptKey` string, nullable — Used alongside daily topic quest
  - `image_ids` string[], nullable
  - `retriedFromStream` boolean, nullable — Set by the client when re-sending a message whose streamed attempt failed. The stream route already saved the user message and counted the quota, so the buffered route must not do either again. Contract: the client sets this ONLY after receiving the stream's meta event — meta is emitted after the save/increment phase, so it is the signal that both actually happened. A stream that failed before meta (HTTP error, dropped connection) persisted nothing and must be retried WITHOUT this flag.

## Response `200`

Successful Response

- ChatResponse
  - `reply` string, nullable
  - `conversation_id` string, required
  - `bible_verses` string[]
  - `sources` Source[], nullable
    - `title` string, required
    - `url` string, required
    - `snippet` string, nullable
    - `favicon` string, nullable
    - `domain` string, nullable
  - `error` string, nullable
  - `audio_base64` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/usecreed/apis/creed-api.md) · [All operations](https://skmtc.net/usecreed/apis/creed-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/usecreed/creed-api/revisions/ec6a7aef1f3e/schema)
