Base URL
https://api.getninja.ai
Auth
Bearer token in Authorization header
Host
Audience
Admin
POST/api/admin/loginstableinternal
https://api.getninja.ai
Sign in a platform admin
Verify an admin_accounts email + password (scrypt). Returns an HMAC-signed session token (12h TTL) used as Bearer on all other /api/admin/* endpoints.
Auth
no auth
Parameters
- email(body, string, required)
- password(body, string, required)
Example response
{
"token": "eyJ...",
"expiresAt": "2026-07-20T00:00:00.000Z",
"admin": {
"id": 1,
"name": "admin@wonder.app"
}
}POST/api/admin/loginremovedinternal
https://api.getninja.ai
Create / invoke · /api/admin/login
Auth
no auth
POST/api/admin/wonder/qrremovedinternal
https://api.getninja.ai
Create / invoke · /api/admin/wonder/qr
Auth
no auth
POST/api/admin/wonder/qr/{id}/dev-force-expireremovedinternal
https://api.getninja.ai
Create / invoke · /api/admin/wonder/qr/{id}/dev-force-expire
Auth
no auth
GET/api/admin/wonder/qr/{id}/statusremovedinternal
https://api.getninja.ai
Read · /api/admin/wonder/qr/{id}/status
Auth
no auth
Merchant
POST/api/merchant/loginstableinternal
https://api.getninja.ai
Sign in a merchant account
Verify merchant_accounts username/email/phone + password (scrypt). Returns an HMAC-signed token (12h TTL) and the list of stores the merchant can access. Used by central.getninja.ai.
Auth
no auth
Parameters
- identifier(body, string, required)— username, email or phone
- password(body, string, required)
Example response
{
"token": "eyJ...",
"expiresAt": "2026-07-20T00:00:00.000Z",
"merchant": {
"id": 1,
"username": "acme",
"name": "Acme Ltd",
"email": null,
"phone": null
},
"stores": [
{
"id": 1,
"name": "Acme Central",
"businessType": "cafe",
"logoUrl": null,
"role": "admin"
}
]
}POST/api/merchant/wonder/qrstableinternal
https://api.getninja.ai
Create / invoke · /api/merchant/wonder/qr
Auth
no auth
GET/api/merchant/wonder/qr/{id}/statusstableinternal
https://api.getninja.ai
Read · /api/merchant/wonder/qr/{id}/status
Auth
no auth
POST/api/merchant/loginlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/merchant/login
Auth
no auth
POST/api/merchant/wonder/qrlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/merchant/wonder/qr
Auth
no auth
GET/api/merchant/wonder/qr/{id}/statuslegacymigratedinternal
https://api.getninja.ai
Read · /api/merchant/wonder/qr/{id}/status
Auth
no auth
Meta
GET/api/meta/endpointsstablepublic
https://api.getninja.ai
Machine-readable catalog of every API endpoint
Returns the same list that powers developer.getninja.ai (both stable + legacy hosts). Useful for auto-generated SDKs and internal tooling.
Auth
no auth
Wonder SSO
POST/api/wonder/qr/startstableinternal
https://api.getninja.ai
Start a Wonder QR sign-in session
Auth
no auth
POST/api/wonder/qr/pollstableinternal
https://api.getninja.ai
Poll a Wonder QR session for completion
Auth
no auth
POST/api/wonder/applink/startstableinternal
https://api.getninja.ai
Start a Wonder app-to-app sign-in flow
Auth
no auth
POST/api/wonder/applink/exchangestableinternal
https://api.getninja.ai
Exchange a Wonder app-link code for a session
Auth
no auth
Stores (Public)
GET/api/public/storesstablepublic
https://api.getninja.ai
List published stores for the consumer directory
Auth
no auth
GET/api/public/stores/{storeId}/menustablepublic
https://api.getninja.ai
Fetch a store's public menu (categories + items)
Auth
no auth
POST/api/public/stores/{storeId}/ordersstablepublic
https://api.getninja.ai
Place a consumer order against a store
Auth
no auth
Tables (Public)
GET/api/public/tables/{qrToken}/menustablepublic
https://api.getninja.ai
Fetch the menu for a QR-scanned table
Auth
no auth
GET/api/public/tables/{qrToken}/ordersstablepublic
https://api.getninja.ai
List existing orders for a QR-scanned table
Auth
no auth
POST/api/public/tables/{qrToken}/ordersstablepublic
https://api.getninja.ai
Place an order from a QR-scanned table
Auth
no auth
Receipt (Public)
GET/api/public/receipt/{receiptToken}stablepublic
https://api.getninja.ai
Fetch a public receipt by opaque token
Auth
no auth
Ratings (Public)
GET/api/public/orders/{orderId}/rating-contextstablepublic
https://api.getninja.ai
Fetch context for rating an order (store, items)
Auth
no auth
POST/api/public/orders/{orderId}/ratestablepublic
https://api.getninja.ai
Submit a rating + review for an order
Auth
no auth
Health
GET/api/healthzstableinternal
https://api.getninja.ai
Read · /api/healthz
Auth
no auth
GET/api/healthzlegacymigratedinternal
https://api.getninja.ai
Read · /api/healthz
Auth
no auth
Demo Requests
POST/api/demo-requestsstableinternal
https://api.getninja.ai
Create / invoke · /api/demo-requests
Auth
no auth
POST/api/demo-requestslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/demo-requests
Auth
no auth
Partner Applications
POST/api/partner-applicationsstableinternal
https://api.getninja.ai
Create / invoke · /api/partner-applications
Auth
no auth
POST/api/partner-applicationslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/partner-applications
Auth
no auth
Payment Methods
GET/api/stores/{storeId}/payment-methodsstableinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/payment-methods
Auth
staff or_merchant
POST/api/stores/{storeId}/payment-methodsstableinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/payment-methods
Auth
staff or_merchant
PUT/api/stores/{storeId}/payment-methodsstableinternal
https://api.getninja.ai
Replace · /api/stores/{storeId}/payment-methods
Auth
staff or_merchant
PATCH/api/stores/{storeId}/payment-methods/{methodId}stableinternal
https://api.getninja.ai
Update · /api/stores/{storeId}/payment-methods/{methodId}
Auth
staff or_merchant
DELETE/api/stores/{storeId}/payment-methods/{methodId}stableinternal
https://api.getninja.ai
Delete · /api/stores/{storeId}/payment-methods/{methodId}
Auth
staff or_merchant
GET/api/stores/{storeId}/payment-methodslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/payment-methods
Auth
no auth
POST/api/stores/{storeId}/payment-methodslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/payment-methods
Auth
no auth
PUT/api/stores/{storeId}/payment-methodslegacymigratedinternal
https://api.getninja.ai
Replace · /api/stores/{storeId}/payment-methods
Auth
no auth
PATCH/api/stores/{storeId}/payment-methods/{methodId}legacymigratedinternal
https://api.getninja.ai
Update · /api/stores/{storeId}/payment-methods/{methodId}
Auth
no auth
DELETE/api/stores/{storeId}/payment-methods/{methodId}legacymigratedinternal
https://api.getninja.ai
Delete · /api/stores/{storeId}/payment-methods/{methodId}
Auth
no auth
Staff
POST/api/staff/loginstableinternal
https://api.getninja.ai
Create / invoke · /api/staff/login
Auth
no auth
POST/api/wonder/qrstableinternal
https://api.getninja.ai
Create / invoke · /api/wonder/qr
Auth
no auth
GET/api/wonder/qr/{id}/statusstableinternal
https://api.getninja.ai
Read · /api/wonder/qr/{id}/status
Auth
no auth
POST/api/wonder/choose-storestableinternal
https://api.getninja.ai
Create / invoke · /api/wonder/choose-store
Auth
no auth
POST/api/auth/sign-outstableinternal
https://api.getninja.ai
Create / invoke · /api/auth/sign-out
Auth
no auth
POST/api/staff/loginlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/staff/login
Auth
no auth
POST/api/wonder/choose-storelegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/wonder/choose-store
Auth
no auth
POST/api/wonder/qrlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/wonder/qr
Auth
no auth
GET/api/wonder/qr/{id}/statuslegacymigratedinternal
https://api.getninja.ai
Read · /api/wonder/qr/{id}/status
Auth
no auth
Stores
GET/api/stores/{storeId}/screensaverstableinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/screensaver
Auth
no auth
GET/api/public/demo-storesstablepublic
https://api.getninja.ai
Read · /api/public/demo-stores
Auth
no auth
POST/api/storesstableinternal
https://api.getninja.ai
Create / invoke · /api/stores
Auth
no auth
GET/api/public/demo-storeslegacymigratedpublic
https://api.getninja.ai
Read · /api/public/demo-stores
Auth
no auth
GET/api/public/storeslegacymigratedpublic
https://api.getninja.ai
Read · /api/public/stores
Auth
no auth
GET/api/public/stores/{storeId}/menulegacymigratedpublic
https://api.getninja.ai
Read · /api/public/stores/{storeId}/menu
Auth
no auth
POST/api/public/stores/{storeId}/orderslegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/stores/{storeId}/orders
Auth
no auth
POST/api/storeslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores
Auth
no auth
GET/api/stores/{storeId}/screensaverlegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/screensaver
Auth
no auth
Storage
GET/api/storage/public-objects/*filePathstableinternal
https://api.getninja.ai
Read · /api/storage/public-objects/*filePath
Auth
no auth
GET/api/storage/objects/*pathstableinternal
https://api.getninja.ai
Read · /api/storage/objects/*path
Auth
no auth
GET/api/storage/objects/*pathlegacymigratedinternal
https://api.getninja.ai
Read · /api/storage/objects/*path
Auth
no auth
GET/api/storage/public-objects/*filePathlegacymigratedinternal
https://api.getninja.ai
Read · /api/storage/public-objects/*filePath
Auth
no auth
Customer Displays (Public)
POST/api/customer-displays/heartbeatstableinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/heartbeat
Auth
no auth
POST/api/stores/{storeId}/customer-displays/heartbeatstableinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-displays/heartbeat
Auth
no auth
GET/api/customer-displays/{deviceId}/connection-requeststableinternal
https://api.getninja.ai
Read · /api/customer-displays/{deviceId}/connection-request
Auth
no auth
DELETE/api/customer-displays/{deviceId}/connection-requeststableinternal
https://api.getninja.ai
Delete · /api/customer-displays/{deviceId}/connection-request
Auth
no auth
POST/api/customer-displays/{deviceId}/connection-request/acceptstableinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/connection-request/accept
Auth
no auth
POST/api/customer-displays/{deviceId}/goodbyestableinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/goodbye
Auth
no auth
POST/api/customer-displays/{deviceId}/resetstableinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/reset
Auth
no auth
GET/api/stores/{storeId}/cart-snapshotstableinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/cart-snapshot
Auth
no auth
GET/api/stores/{storeId}/kds/ticketsstableinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/kds/tickets
Auth
no auth
POST/api/stores/{storeId}/kds/tickets/{orderId}/readystableinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/kds/tickets/{orderId}/ready
Auth
no auth
GET/api/stores/{storeId}/customer-order/menustableinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/customer-order/menu
Auth
no auth
POST/api/stores/{storeId}/customer-order/submitstableinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-order/submit
Auth
no auth
POST/api/stores/{storeId}/customer-order/{orderId}/request-billstableinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-order/{orderId}/request-bill
Auth
no auth
POST/api/customer-displays/heartbeatlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/heartbeat
Auth
no auth
DELETE/api/customer-displays/{deviceId}/connection-requestlegacymigratedinternal
https://api.getninja.ai
Delete · /api/customer-displays/{deviceId}/connection-request
Auth
no auth
GET/api/customer-displays/{deviceId}/connection-requestlegacymigratedinternal
https://api.getninja.ai
Read · /api/customer-displays/{deviceId}/connection-request
Auth
no auth
POST/api/customer-displays/{deviceId}/connection-request/acceptlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/connection-request/accept
Auth
no auth
POST/api/customer-displays/{deviceId}/goodbyelegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/goodbye
Auth
no auth
POST/api/customer-displays/{deviceId}/resetlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/customer-displays/{deviceId}/reset
Auth
no auth
GET/api/stores/{storeId}/cart-snapshotlegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/cart-snapshot
Auth
no auth
POST/api/stores/{storeId}/customer-displays/heartbeatlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-displays/heartbeat
Auth
no auth
GET/api/stores/{storeId}/customer-order/menulegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/customer-order/menu
Auth
no auth
POST/api/stores/{storeId}/customer-order/submitlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-order/submit
Auth
no auth
POST/api/stores/{storeId}/customer-order/{orderId}/request-billlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/customer-order/{orderId}/request-bill
Auth
no auth
GET/api/stores/{storeId}/kds/ticketslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/kds/tickets
Auth
no auth
POST/api/stores/{storeId}/kds/tickets/{orderId}/readylegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/kds/tickets/{orderId}/ready
Auth
no auth
Customers (Public)
POST/api/public/customer/otp/requeststablepublic
https://api.getninja.ai
Create / invoke · /api/public/customer/otp/request
Auth
no auth
POST/api/public/customer/otp/verifystablepublic
https://api.getninja.ai
Create / invoke · /api/public/customer/otp/verify
Auth
no auth
POST/api/public/customer/orders/claimstablepublic
https://api.getninja.ai
Create / invoke · /api/public/customer/orders/claim
Auth
no auth
GET/api/public/customer/ordersstablepublic
https://api.getninja.ai
Read · /api/public/customer/orders
Auth
no auth
GET/api/public/customer/orderslegacymigratedpublic
https://api.getninja.ai
Read · /api/public/customer/orders
Auth
no auth
POST/api/public/customer/orders/claimlegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/customer/orders/claim
Auth
no auth
POST/api/public/customer/otp/requestlegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/customer/otp/request
Auth
no auth
POST/api/public/customer/otp/verifylegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/customer/otp/verify
Auth
no auth
Places (Public)
GET/api/places/photostableinternal
https://api.getninja.ai
Read · /api/places/photo
Auth
no auth
GET/api/public/places/autocompletestablepublic
https://api.getninja.ai
Read · /api/public/places/autocomplete
Auth
no auth
GET/api/places/photolegacymigratedinternal
https://api.getninja.ai
Read · /api/places/photo
Auth
no auth
GET/api/public/places/autocompletelegacymigratedpublic
https://api.getninja.ai
Read · /api/public/places/autocomplete
Auth
no auth
Tables
GET/api/public/tables/{qrToken}stablepublic
https://api.getninja.ai
Read · /api/public/tables/{qrToken}
Auth
no auth
POST/api/public/tables/{qrToken}/paystablepublic
https://api.getninja.ai
Create / invoke · /api/public/tables/{qrToken}/pay
Auth
no auth
GET/api/public/tables/{qrToken}/billstablepublic
https://api.getninja.ai
Read · /api/public/tables/{qrToken}/bill
Auth
no auth
POST/api/public/tables/{qrToken}/checkoutstablepublic
https://api.getninja.ai
Create / invoke · /api/public/tables/{qrToken}/checkout
Auth
no auth
GET/api/public/tables/{qrToken}legacymigratedpublic
https://api.getninja.ai
Read · /api/public/tables/{qrToken}
Auth
no auth
GET/api/public/tables/{qrToken}/menulegacymigratedpublic
https://api.getninja.ai
Read · /api/public/tables/{qrToken}/menu
Auth
no auth
GET/api/public/tables/{qrToken}/orderslegacymigratedpublic
https://api.getninja.ai
Read · /api/public/tables/{qrToken}/orders
Auth
no auth
POST/api/public/tables/{qrToken}/orderslegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/tables/{qrToken}/orders
Auth
no auth
POST/api/public/tables/{qrToken}/paylegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/tables/{qrToken}/pay
Auth
no auth
Customers
GET/api/customers/{customerId}/orderslegacymigratedinternal
https://api.getninja.ai
Read · /api/customers/{customerId}/orders
Auth
no auth
PATCH/api/orders/{orderId}/customerlegacymigratedinternal
https://api.getninja.ai
Update · /api/orders/{orderId}/customer
Auth
no auth
Menu
DELETE/api/menu-items/{menuItemId}legacymigratedinternal
https://api.getninja.ai
Delete · /api/menu-items/{menuItemId}
Auth
no auth
PATCH/api/menu-items/{menuItemId}legacymigratedinternal
https://api.getninja.ai
Update · /api/menu-items/{menuItemId}
Auth
no auth
GET/api/stores/{storeId}/menu-categorieslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/menu-categories
Auth
no auth
POST/api/stores/{storeId}/menu-categorieslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/menu-categories
Auth
no auth
GET/api/stores/{storeId}/menu-itemslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/menu-items
Auth
no auth
POST/api/stores/{storeId}/menu-itemslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/menu-items
Auth
no auth
POST/api/stores/{storeId}/menu-items/bulklegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/menu-items/bulk
Auth
no auth
POST/api/stores/{storeId}/menu/scanlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/menu/scan
Auth
no auth
Orders
GET/api/orders/{orderId}legacymigratedinternal
https://api.getninja.ai
Read · /api/orders/{orderId}
Auth
no auth
PATCH/api/orders/{orderId}legacymigratedinternal
https://api.getninja.ai
Update · /api/orders/{orderId}
Auth
no auth
POST/api/orders/{orderId}/checkoutlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/orders/{orderId}/checkout
Auth
no auth
POST/api/orders/{orderId}/itemslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/orders/{orderId}/items
Auth
no auth
POST/api/orders/{orderId}/refundlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/orders/{orderId}/refund
Auth
no auth
POST/api/orders/{orderId}/voidlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/orders/{orderId}/void
Auth
no auth
GET/api/stores/{storeId}/orderslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/orders
Auth
no auth
POST/api/stores/{storeId}/orderslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/orders
Auth
no auth
Products
DELETE/api/products/{productId}legacymigratedinternal
https://api.getninja.ai
Delete · /api/products/{productId}
Auth
no auth
PATCH/api/products/{productId}legacymigratedinternal
https://api.getninja.ai
Update · /api/products/{productId}
Auth
no auth
GET/api/stores/{storeId}/productslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/products
Auth
no auth
POST/api/stores/{storeId}/productslegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/products
Auth
no auth
POST/api/stores/{storeId}/products/batchlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/products/batch
Auth
no auth
Purchases
POST/api/stores/{storeId}/purchases/scanlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/purchases/scan
Auth
no auth
Ratings
POST/api/public/orders/{orderId}/ratelegacymigratedpublic
https://api.getninja.ai
Create / invoke · /api/public/orders/{orderId}/rate
Auth
no auth
GET/api/public/orders/{orderId}/rating-contextlegacymigratedpublic
https://api.getninja.ai
Read · /api/public/orders/{orderId}/rating-context
Auth
no auth
Receipt
GET/api/public/receipt/{receiptToken}legacymigratedpublic
https://api.getninja.ai
Read · /api/public/receipt/{receiptToken}
Auth
no auth
Shifts
GET/api/stores/{storeId}/shiftslegacymigratedinternal
https://api.getninja.ai
Read · /api/stores/{storeId}/shifts
Auth
no auth
POST/api/stores/{storeId}/shifts/openlegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/shifts/open
Auth
no auth
POST/api/stores/{storeId}/shifts/{id}/closelegacymigratedinternal
https://api.getninja.ai
Create / invoke · /api/stores/{storeId}/shifts/{id}/close
Auth
no auth