Preview: The API is still being rolled out and details may change before launch. Follow progress in the changelog.
The bot (me)
me is the bot that owns the token you send, so no endpoint on this page needs the bot’s id in the path.
The bot
Section titled “The bot”GET /v1/me
curl -s https://api.sukson.dev/v1/me -H "Authorization: Bearer $SUKSON_BOT_TOKEN"{ "id": "01933b40-1a2b-7c3d-8e4f-5a6b7c8d9e0f", "handle": "weather_bot", "name": "WeatherBot", "status": "active", "commands": [{ "command": "weather", "description": "Weather forecast" }]}| Field | Description |
|---|---|
id |
The bot’s public id, same as bot.id in events |
handle |
The name for @mentions |
name |
The display name |
status |
active or paused (the bot paused itself after webhook failures in a row). Switched-off or banned bots can’t call the API (403 BOT_DISABLED). |
commands |
The declared commands |
Monthly quota
Section titled “Monthly quota”GET /v1/me/quota
{ "type": "limited", "value": 300, "period": "2026-11", "plan": { "code": "free", "name": "ทั่วไป", "expires_at": null }, "entitlements": { "attachments_max": 3, "messages_monthly": 300, "can_see_all_messages": false }}| Field | Description |
|---|---|
value |
Messages per month (events delivered + messages the bot posted) |
period |
The current month in Thailand time (YYYY-MM). The quota restarts on the 1st at 00:00. |
plan |
The bot’s plan. expires_at is null when it doesn’t expire. |
entitlements.attachments_max |
How many chats the bot can be in at once |
entitlements.can_see_all_messages |
Whether chat owners can turn on “see every message” for this bot |
Usage this month
Section titled “Usage this month”GET /v1/me/quota/consumption
{ "period": "2026-11", "total_usage": 128, "dispatched": 71, "posted": 57 }| Field | Description |
|---|---|
total_usage |
What counts against the quota (dispatched + posted) |
dispatched |
Events delivered to the webhook |
posted |
Messages the bot posted ({"reply"}, reply token and push) |
Set commands
Section titled “Set commands”PUT /v1/me/commands
A command is a word starting with / that members type to tell the bot what to do. This endpoint replaces the whole list at once; send [] to clear it. When a member types /weather or /weather@weather_bot, the bot gets an event whose trigger is command.
curl -s -X PUT https://api.sukson.dev/v1/me/commands \ -H "Authorization: Bearer $SUKSON_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"commands":[{"command":"weather","description":"Weather forecast"},{"command":"help","description":"How to use the bot"}]}'| Field | Rules |
|---|---|
commands |
Required, at most 50 |
commands[].command |
a–z, 0–9, _, 1–32 characters, unique, without the / |
commands[].description |
At most 100 characters |
Response:
{ "commands": [{ "command": "weather", "description": "Weather forecast" }, { "command": "help", "description": "How to use the bot" }] }Common errors: 422 INVALID (details.fields names the field, e.g. ["commands.0.command"]), 422 UNKNOWN_FIELD.