AstrBot HTTP API
Starting from v4.18.0, AstrBot provides API Key based HTTP APIs for programmatic access.
Quick Start
- Create an API key in WebUI - Settings.
- Include the API key in request headers:
Authorization: Bearer abk_xxxAlso supported:
X-API-Key: abk_xxx- For chat endpoints,
usernameis required:
POST /api/v1/chat: request body must includeusernameGET /api/v1/chat/sessions: query params must includeusername
The local OpenAPI schema is available at http://localhost:6185/api/v1/openapi.json, and the interactive docs are available at http://localhost:6185/api/v1/docs.
Scope Permissions
API Keys can be configured with scopes. See the API Scope–Endpoint Reference for each scope's purpose, inheritance rules, and complete endpoint list.
If the API Key does not include the required scope for the target endpoint, the request will return 403 Insufficient API key scope.
configis not selected by default in the WebUI and automatically includesbotandprovider.config:edit_adminandchat:adminmust be granted explicitly and are never inherited from their parent scopes.- Deselecting
botorproviderin the WebUI also removes the dependentconfigscope.
Developer API keys currently support 11 top-level scopes and two sensitive sub-scopes. tool, skills, kb, and system are not valid developer API key scopes. Use the singular skill scope for /api/v1/skills/* endpoints.
Every operation in the interactive reference also displays Required scope: ...; operations involving administrator capabilities additionally display Conditional sensitive scope: ....
Common Endpoints
Chat
Interact with AstrBot's built-in Agent. Supports plugin calls, tool calls, and other capabilities — consistent with IM-side chat.
POST /api/v1/chat: send chat message (SSE stream, server generates UUID whensession_idis omitted)GET /api/v1/chat/sessions: list sessions for a specificusernamewith paginationGET /api/v1/configs: list available config filesPOST /api/v1/file: upload an attachment for later use in message segments
Bots and Providers
GET /api/v1/bots: list bot/platform configurationsPOST /api/v1/bots: create a bot/platform configurationGET /api/v1/providers: list model provider configurationsGET /api/v1/provider-sources: list provider source configurations
Personas, Plugins, MCP, and Skills
GET /api/v1/personas: list personasGET /api/v1/plugins: list pluginsGET /api/v1/mcp/servers: list MCP serversGET /api/v1/skills: list skills
Proactive IM Messages
POST /api/v1/im/message: send a proactive message via UMOGET /api/v1/im/bots: list bot/platform IDs
message Field Format (Important)
The message field in POST /api/v1/chat and POST /api/v1/im/message supports two formats:
- String: plain text message
- Array: message segments (message chain)
1. Plain Text Format
{
"message": "Hello"
}2. Message Segment Array Format
{
"message": [
{ "type": "plain", "text": "Please see this file" },
{ "type": "file", "attachment_id": "9a2f8c72-e7af-4c0e-b352-111111111111" }
]
}Supported type values:
| type | Required Fields | Optional Fields | Description |
|---|---|---|---|
plain | text | - | Text segment |
reply | message_id | selected_text | Quote-reply a message |
image | attachment_id | - | Image attachment segment |
record | attachment_id | - | Audio attachment segment |
file | attachment_id | - | Generic file segment |
video | attachment_id | - | Video attachment segment |
- The
replysegment is currently only supported for/api/v1/chat, not forPOST /api/v1/im/message.
Notes:
attachment_idcomes from an existing attachment record, or fromPOST /api/v1/fileafter uploading an attachment with thefilescope.replycannot be the only segment; at least one content segment (e.g.plain/image/file/...) is required.- A request with only
replyor empty content will return an error.
message Usage in Chat API
POST /api/v1/chat additionally requires username, with optional session_id (a UUID is auto-generated if omitted).
username is a caller-declared WebChat identity used as the message sender and session owner. A key with only chat is rejected when the value matches any configured administrator ID and is prevented from receiving an administrator role inside the message pipeline. The sensitive chat:admin sub-scope explicitly permits configured administrator IDs; it does not make arbitrary usernames administrators. Integrations should still map external users to stable, application-controlled usernames.
{
"username": "alice",
"session_id": "my_session_001",
"message": [
{ "type": "plain", "text": "Please summarize this PDF" },
{ "type": "file", "attachment_id": "9a2f8c72-e7af-4c0e-b352-111111111111" }
],
"enable_streaming": true
}message Usage in IM Message API
POST /api/v1/im/message requires umo + message.
{
"umo": "webchat:FriendMessage:openapi_probe",
"message": [
{ "type": "plain", "text": "This is a proactive message" },
{ "type": "image", "attachment_id": "9a2f8c72-e7af-4c0e-b352-222222222222" }
]
}Example
curl -N 'http://localhost:6185/api/v1/chat' \
-H 'Authorization: Bearer abk_xxx' \
-H 'Content-Type: application/json' \
-d '{"message":"Hello","username":"alice"}'Full API Reference
Use the interactive docs:
