developer.getninja.ai

Ninja AI · Developer

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