REST API and MCP server for developers and AI integrations
The bundlist API is a standard JSON REST API. All endpoints require authentication. The base URL is:
https://api.bundlist.app/v1
All request and response bodies are application/json. Errors follow a consistent shape: {"detail": "human-readable message"}.
Pass a Bearer token in the Authorization header on every request:
Authorization: Bearer your_api_key_here
You can use:
API keys are shown once at creation. If you lose one, revoke it from Settings and generate a new one.
GET /v1/lists — return all lists for the authenticated userPOST /v1/lists — create a list; body: {"name": "..."}GET /v1/lists/{id} — get a single list by IDPATCH /v1/lists/{id} — rename a list; body: {"name": "..."}DELETE /v1/lists/{id} — delete a list and all its items and fieldsCreating a list beyond your account limit returns 409 Conflict.
Fields define the schema for items in a list. Every list starts with a built-in name field that cannot be removed.
GET /v1/lists/{id}/fields — list all fields for a listPOST /v1/lists/{id}/fields — add a field; body: {"name": "..."}PATCH /v1/lists/{id}/fields/{field_id} — rename or reorder a field; body: {"name": "...", "position": 0} (both optional)DELETE /v1/lists/{id}/fields/{field_id} — remove a field and its data from all itemsAll fields are text. Adding a field beyond your list's limit returns 409 Conflict.
Items are the rows in a list. Each item's shape is determined by the list's fields.
GET /v1/lists/{id}/items — list all items in a list (newest first)POST /v1/lists/{id}/items — create an item; body: {"name": "...", "field_values": {"<field_id>": "value"}}GET /v1/lists/{id}/items/{item_id} — get a single itemPATCH /v1/lists/{id}/items/{item_id} — update an item (merge semantics); body: {"name": "...", "field_values": {"<field_id>": "value"}}DELETE /v1/lists/{id}/items/{item_id} — delete an itemAdding an item beyond your list's limit returns 409 Conflict.
GET /v1/events — open a Server-Sent Events stream of change notifications for the authenticated user.
Each event has the shape:
{"type": "items" | "fields" | "lists", "list_id": "uuid", "action": "created" | "updated" | "deleted"}
Events are notifications only — your client should refetch the affected resource via the normal REST endpoints when an event arrives. The stream sends a heartbeat ping every 15 seconds to keep the connection alive through proxies and load balancers.
Connect using the browser's EventSource API or any SSE-compatible HTTP client with a valid Bearer token.
GET /v1/export — download a full JSON dump of all your lists, fields, and items in one request.
POST /v1/auth/api-keys — create an API key; body: {"label": "optional label"} — the key value is returned once and not storedGET /v1/auth/api-keys — list all keys (labels and IDs only; values are never returned after creation)DELETE /v1/auth/api-keys/{key_id} — revoke a key immediatelybundlist includes a built-in Model Context Protocol (MCP) server so AI assistants like Claude can read and update your lists without you copy-pasting anything.
Connect your MCP client to https://api.bundlist.app/mcp using the streamable HTTP transport.
Authentication — two options:
Authorization: Bearer bndl_<key> on every request.WWW-Authenticate header pointing to the OAuth discovery endpoint. Your client will open a browser window for Google sign-in and handle the rest automatically — no manual key setup needed.Tools: list_lists, get_list, create_list, rename_list, delete_list, get_schema, add_field, delete_field, list_items, get_item, create_item, update_item, delete_item, export_data.
Real-time notifications: The MCP server sends notifications/resources/updated events whenever your data changes, so agents always know when to re-fetch without polling.
All endpoints are rate-limited. Exceeding the limit returns 429 Too Many Requests with standard rate-limit headers indicating when you can retry.
200 OK — success201 Created — resource created400 Bad Request — malformed body or invalid field value401 Unauthorized — missing or invalid token403 Forbidden — valid token but insufficient permission404 Not Found — resource doesn't exist or belongs to another user409 Conflict — usage limit reached (lists, items, or fields cap)422 Unprocessable — validation error (see detail for specifics)429 Too Many Requests — rate limit exceeded