OpenPOS API
Connect AI agents, POS clients, and integrations to restaurant data. Browse menus, place orders, and manage inventory through simple APIs.
REST API
Standard HTTP endpoints. Use from any language, framework, or tool.
AI Agent Protocol
Tool-based access for Claude, ChatGPT, and other AI agents.
Quick Start
Get up and running in under a minute. No API key needed for public endpoints.
1. Browse Stores
curl https://your-domain.com/api/v1/stores2. Get a Menu
curl https://your-domain.com/api/v1/stores/demo-restaurant/menu3. Place an Order
curl -X POST https://your-domain.com/api/v1/orders \
-H "Content-Type: application/json" \
-d '{
"storeSlug": "demo-restaurant",
"items": [{ "itemId": "item_xxx", "quantity": 2 }],
"orderType": "pickup",
"customer": { "name": "Alice", "phone": "555-1234" }
}'4. Check Order Status
curl https://your-domain.com/api/v1/orders/DT-001Want more access? Create an API key in your Dashboard > Settings > API to access customers, reservations, waitlist, campaigns, and more.
Authentication
Public endpoints (stores, menus, ordering) work without authentication. For admin-level access, use an API key.
Creating an API Key
- Go to Dashboard > Settings > API
- Click Create API Key
- Choose a name and access level (Read Only or Read & Write)
- Copy the key — it's only shown once
Using Your Key
Pass the key in the Authorization header:
curl -H "Authorization: Bearer sk_abc123..." \
https://your-domain.com/api/v1/customers?query=aliceScopes
API keys have scopes that control what they can access:
| Scope | Access |
|---|---|
read | Browse stores, menus, orders, customers. Default scope. |
write | Place orders, update inventory (86 items), modify data. Must be explicitly granted. |
orders:read | Read order data only. |
orders:write | Create and modify orders. |
menu:read | Read menu data only. |
menu:write | Update menu items, 86/un-86 items. |
customers:read | Search and read customer data. |
Security: API keys are hashed server-side (SHA-256). We never store the raw key. If you lose a key, revoke it and create a new one.
Rate Limits
Default limits are 60 requests/minute and 10,000 requests/day. Response headers tell you where you stand:
| Header | Description |
|---|---|
X-RateLimit-Limit | Requests allowed per window |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the window resets |
Retry-After | Seconds to wait (only included on 429 responses) |
When rate limited, you'll receive a 429 Too Many Requests response. Wait for the Retry-After duration before retrying.
REST API
Standard HTTP endpoints. All responses are JSON. Prices are in cents.
Public Endpoints
No authentication required.
List all restaurant locations.
Store details: hours, address, order types, and policies.
Full menu with prices, categories, dietary info, and modifiers.
Place a new order.
Get order status and details.
Authenticated Endpoints
Require an API key with appropriate scope.
Search customers by name, phone, or email.
List reservations for a location.
Get the current waitlist queue.
List restaurant tables and their status.
List marketing campaigns.
List customer segments.
Get AI-generated business insights.
MCP (AI Agent Protocol)
The Model Context Protocol endpoint lets AI agents call tools directly. Claude, ChatGPT, and other LLMs can connect to OpenPOS as a tool provider.
Endpoint
POST /api/mcpAuthorization: Bearer sk_xxxHow It Works
Send JSON-RPC style requests. Two methods are supported:
List Tools
curl -X POST https://your-domain.com/api/mcp \
-H "Authorization: Bearer sk_abc123..." \
-H "Content-Type: application/json" \
-d '{ "method": "tools/list" }'Call a Tool
curl -X POST https://your-domain.com/api/mcp \
-H "Authorization: Bearer sk_abc123..." \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "get_menu",
"arguments": { "storeSlug": "demo-restaurant" }
}
}'Discovery (No Auth)
GET the MCP endpoint to discover available tools without authentication:
curl https://your-domain.com/api/mcpAvailable Tools
get_storesreadList all available restaurant locations. Returns store slugs needed for other operations.
get_store_inforeadGet detailed info for a store: hours, address, order types, policies.
storeSlug— Store slug (from get_stores)get_menureadFull menu with items, prices, categories, dietary info, and modifiers.
storeSlug— Store slugcategory— (optional) Filter by categoryinStock— (optional) Only available itemscreate_orderwritePlace a new order with items, modifiers, and customer info.
storeSlug— Store slugitems— [{ itemId, quantity, modifiers }]orderType— "pickup" | "delivery" | "dine_in"get_orderreadCheck the status of an order by ID or order number.
orderId— Order ID or number (e.g., "DT-001")86_itemwriteMark a menu item as unavailable (sold out). Restaurant term: '86' means out of stock.
locationId— Location IDitemId— Menu item IDun86_itemwriteRestore a menu item to available (back in stock).
locationId— Location IDitemId— Menu item IDConnect from Claude Desktop
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"openpos": {
"url": "https://your-domain.com/api/mcp",
"headers": {
"Authorization": "Bearer sk_your_api_key_here"
}
}
}
}Data Formats
| Format | Details |
|---|---|
| Prices | All prices in cents (integer). $14.99 = 1499. Responses include { cents, dollars, display } for convenience. |
| Timestamps | ISO 8601 with timezone, e.g., 2026-02-09T12:30:00Z |
| IDs | Prefixed IDs: loc_xxx, item_xxx, order_xxx. Some endpoints also accept UUIDs. |
| Dietary | Array of strings: vegetarian, vegan, gluten-free, dairy-free, etc. |
| Allergens | Array of strings: dairy, nuts, gluten, shellfish, soy, eggs, etc. |
Errors
All errors return JSON with an error field:
{ "error": "Missing or invalid API key" }| Status | Meaning |
|---|---|
400 | Bad request — missing or invalid parameters |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — insufficient scope or location access |
404 | Not found — resource doesn't exist |
429 | Rate limited — too many requests. Check Retry-After header. |
500 | Server error — please retry |
OpenPOS API v1.0 — Built for AI agents, POS clients, and developers.