Skip to content
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.

GET /v1/me

Terminal window
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

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

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)

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.

Terminal window
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.