The list app your AI can actually use.
Four ways to connect. Pick one:
| Method | Best for | Setup time |
|---|---|---|
| MCP Server | Claude Desktop, Cursor, Windsurf, Cline | 30 seconds |
| CLI | Terminal workflows, shell scripts, AI agents via exec | 1 minute |
| REST API | Custom integrations, any language, webhooks | 2 minutes |
| Alexa | Hands-free voice control on Echo devices | 1 minute |
Step 1: Install the LystBot app (iOS / Android)
Step 2: Go to Settings > AI Agents > Create API Key
Step 3: Pick your integration method below
Base URL: https://lystbot.com/api/v1
Two auth methods:
| Method | Header | Used by |
|---|---|---|
| Bearer Token | Authorization: Bearer YOUR_API_KEY | AI agents, CLI, external integrations |
| Device UUID | X-Device-UUID: YOUR_UUID | Mobile app |
Get a Bearer token: install the app, go to Settings > AI Agents > Create API Key.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/health | Health check (no auth) |
| POST | /api/v1/devices/register | Register device (no auth) |
| PATCH | /api/v1/devices/{uuid} | Update device |
| GET | /api/v1/devices/{uuid}/api-key | Get API key |
| GET | /api/v1/lists | Get all lists |
| POST | /api/v1/lists | Create list |
| GET | /api/v1/lists/{id} | Get list with items |
| PUT | /api/v1/lists/{id} | Update list |
| DELETE | /api/v1/lists/{id} | Delete list |
| POST | /api/v1/lists/{id}/items | Add item |
| PUT | /api/v1/lists/{id}/items/{itemId} | Update item |
| DELETE | /api/v1/lists/{id}/items/{itemId} | Delete item |
| POST | /api/v1/lists/{id}/share | Generate share code |
| POST | /api/v1/lists/join | Join shared list |
| POST | /api/v1/lists/{id}/leave | Leave shared list |
| GET | /api/v1/favorites | Get favorites |
| POST | /api/v1/favorites | Create favorite |
| PUT | /api/v1/favorites/{id} | Update favorite |
| DELETE | /api/v1/favorites/{id} | Delete favorite |
| POST | /api/v1/favorites/{id}/use | Add favorite to list |
| PATCH | /api/v1/agents/me | Update agent profile |
GET /api/v1/health
No authentication required.
curl https://lystbot.com/api/v1/health
{
"status": "ok"
}
POST /api/v1/devices/register
No authentication required. Registers a new device and returns a UUID.
curl -X POST https://lystbot.com/api/v1/devices/register \
-H "Content-Type: application/json" \
-d '{"name": "My Agent", "platform": "cli"}'
{
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "My Agent",
"platform": "cli",
"createdAt": "2026-03-13T09:00:00Z"
}
GET /api/v1/devices/{uuid}/api-key
curl https://lystbot.com/api/v1/devices/YOUR_UUID/api-key \
-H "X-Device-UUID: YOUR_UUID"
{
"apiKey": "lystbot_ak_xxxxxxxxxxxxxxxxxxxx"
}
GET /api/v1/lists
curl https://lystbot.com/api/v1/lists \
-H "Authorization: Bearer YOUR_API_KEY"
[
{
"id": 1,
"name": "Groceries",
"emoji": "🛒",
"itemCount": 5,
"checkedCount": 2,
"shared": true,
"createdAt": "2026-03-13T09:00:00Z",
"updatedAt": "2026-03-13T10:30:00Z"
}
]
POST /api/v1/lists
curl -X POST https://lystbot.com/api/v1/lists \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Groceries", "emoji": "🛒"}'
{
"id": 1,
"name": "Groceries",
"emoji": "🛒",
"itemCount": 0,
"checkedCount": 0,
"shared": false,
"createdAt": "2026-03-13T09:00:00Z",
"updatedAt": "2026-03-13T09:00:00Z"
}
GET /api/v1/lists/{id}
curl https://lystbot.com/api/v1/lists/1 \
-H "Authorization: Bearer YOUR_API_KEY"
{
"id": 1,
"name": "Groceries",
"emoji": "🛒",
"items": [
{
"id": 1,
"text": "Oat milk",
"checked": false,
"position": 0,
"createdAt": "2026-03-13T09:00:00Z"
},
{
"id": 2,
"text": "Bananas",
"checked": true,
"position": 1,
"createdAt": "2026-03-13T09:01:00Z"
}
],
"shared": true,
"shareCode": "ABC123",
"members": 2,
"createdAt": "2026-03-13T09:00:00Z",
"updatedAt": "2026-03-13T10:30:00Z"
}
PUT /api/v1/lists/{id}
curl -X PUT https://lystbot.com/api/v1/lists/1 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Weekly Groceries", "emoji": "🛒"}'
DELETE /api/v1/lists/{id}
curl -X DELETE https://lystbot.com/api/v1/lists/1 \
-H "Authorization: Bearer YOUR_API_KEY"
Returns 204 No Content on success.
POST /api/v1/lists/{id}/items
curl -X POST https://lystbot.com/api/v1/lists/1/items \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Coffee beans"}'
{
"id": 3,
"text": "Coffee beans",
"checked": false,
"position": 2,
"createdAt": "2026-03-13T09:05:00Z"
}
PUT /api/v1/lists/{id}/items/{itemId}
curl -X PUT https://lystbot.com/api/v1/lists/1/items/3 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Coffee beans (whole)", "checked": true}'
DELETE /api/v1/lists/{id}/items/{itemId}
curl -X DELETE https://lystbot.com/api/v1/lists/1/items/3 \
-H "Authorization: Bearer YOUR_API_KEY"
Returns 204 No Content on success.
POST /api/v1/lists/{id}/share
curl -X POST https://lystbot.com/api/v1/lists/1/share \
-H "Authorization: Bearer YOUR_API_KEY"
{
"shareCode": "ABC123",
"listId": 1,
"listName": "Groceries"
}
POST /api/v1/lists/join
curl -X POST https://lystbot.com/api/v1/lists/join \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"shareCode": "ABC123"}'
{
"id": 1,
"name": "Groceries",
"emoji": "🛒",
"itemCount": 5,
"shared": true
}
POST /api/v1/lists/{id}/leave
curl -X POST https://lystbot.com/api/v1/lists/1/leave \
-H "Authorization: Bearer YOUR_API_KEY"
Returns 204 No Content on success.
Reusable item templates. "Milk" that you add to your grocery list every week.
GET /api/v1/favorites
curl https://lystbot.com/api/v1/favorites \
-H "Authorization: Bearer YOUR_API_KEY"
[
{
"id": 1,
"text": "Milk",
"emoji": "🥛",
"useCount": 12,
"lastUsedAt": "2026-03-12T18:00:00Z"
}
]
POST /api/v1/favorites
curl -X POST https://lystbot.com/api/v1/favorites \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Milk", "emoji": "🥛"}'
POST /api/v1/favorites/{id}/use
curl -X POST https://lystbot.com/api/v1/favorites/1/use \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"listId": 1}'
PUT /api/v1/favorites/{id} # update
DELETE /api/v1/favorites/{id} # delete (returns 204)
PATCH /api/v1/agents/me
curl -X PATCH https://lystbot.com/api/v1/agents/me \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "TARS", "description": "Personal AI assistant"}'
The fastest way to connect your AI to LystBot. Works with any MCP-compatible client. Listed in the official MCP Registry.
npx lystbot login YOUR_API_KEYClaude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"lystbot": {
"command": "npx",
"args": ["lystbot", "mcp"]
}
}
}
Cursor / Windsurf / Cline: Same config format, add to your editor's MCP settings.
OpenClaw:
openclaw mcp add lystbot -- npx lystbot mcp
| Tool | Parameters | Description |
|---|---|---|
list_lists | (none) | Get all lists |
get_list | list_id or name | Get a list with all items |
create_list | name, emoji (opt) | Create a new list |
delete_list | list_id | Delete a list |
add_items | list_id, items[] | Add one or more items |
check_item | list_id, item_id or text | Check off an item |
uncheck_item | list_id, item_id or text | Uncheck an item |
remove_item | list_id, item_id or text | Remove item from list |
share_list | list_id | Generate a share code |
join_list | share_code | Join a shared list |
Manage lists from your terminal. Works standalone or as a tool for AI agents.
# Run directly (no install)
npx lystbot
# Or install globally
npm install -g lystbot
npx lystbot login YOUR_API_KEY
Credentials are stored in ~/.lystbot/config.json. You can also set LYSTBOT_API_KEY as env variable.
# Lists
npx lystbot lists # show all lists
npx lystbot create "Groceries" --category shopping
npx lystbot show "Groceries" # show items
npx lystbot delete "Groceries"
# Items
npx lystbot add "Groceries" "Milk" "Eggs" "Bread"
npx lystbot check "Groceries" "Milk"
npx lystbot uncheck "Groceries" "Milk"
npx lystbot remove "Groceries" "Milk"
# Sharing
npx lystbot share "Groceries" # get share code
npx lystbot join ABC123 # join shared list
# JSON output (for piping / AI agents)
npx lystbot show "Groceries" --json | jq '.items'
# MCP Server mode
npx lystbot mcp
| Flag | Description |
|---|---|
--json | Output as JSON |
--api-url | Override API base URL |
--version | Show version |
--help | Show help |
LystBot works with Alexa. The skill is a thin voice front-end: Alexa handles invocation and speech-to-text, then forwards the spoken command to the LystBot voice endpoint, which uses the same command layer as the API, MCP Server, and CLI.
The pairing code links your (hashed) Alexa user id to your LystBot user/device. That link is the only account association LystBot creates for Alexa.
RawCommandIntent
command : AMAZON.SearchQuery # the free-form spoken command
-> LystBot voice/command endpoint
-> same command layer as API / MCP / CLI
Copy this into your agent's system prompt or context file:
You have access to the user's LystBot lists.
## MCP (preferred)
If MCP is available, use these tools: list_lists, get_list, create_list,
delete_list, add_items, check_item, uncheck_item, remove_item, share_list, join_list.
## REST API (fallback)
Base URL: https://lystbot.com/api/v1
Auth: Authorization: Bearer API_KEY
Endpoints:
- GET /lists - List all lists
- POST /lists - Create list {"name": "...", "emoji": "..."}
- GET /lists/:id - Get list with items
- PUT /lists/:id - Update list
- DELETE /lists/:id - Delete list
- POST /lists/:id/items - Add item {"text": "..."}
- PUT /lists/:id/items/:itemId - Update item {"checked": true}
- DELETE /lists/:id/items/:itemId - Remove item
- POST /lists/:id/share - Get share code
- POST /lists/join - Join list {"shareCode": "..."}
## CLI
npx lystbot lists | show | add | check | uncheck | remove | share | join
When the user asks to add something to a list, do it.
When the user asks what's on a list, read it.
Always confirm what you did.
All errors return JSON:
{
"error": {
"code": "NOT_FOUND",
"message": "List not found"
}
}
| Code | Meaning |
|---|---|
400 | BAD_REQUEST - Invalid or missing parameters |
401 | UNAUTHORIZED - Missing or invalid authentication |
403 | FORBIDDEN - No access to this resource |
404 | NOT_FOUND - Resource not found |
409 | CONFLICT - Already exists (e.g. already joined) |
422 | VALIDATION_ERROR - Invalid request body |
429 | RATE_LIMITED - Slow down (Retry-After header included) |
500 | INTERNAL_ERROR - Server error |
100 requests per minute per API key. 429 responses include a Retry-After header.
© 2026 TourAround UG (haftungsbeschränkt) · Privacy · Imprint