openapi: 3.0.3 info: title: SpotOn Reserve Availability Orders API description: The SpotOn Reserve API (powered by SeatNinja) lets partners integrate reservation, waitlist, and guest-management workflows into the SpotOn Reserve product. It supports listing accessible restaurants, checking available reservation times, creating and managing reservations, retrieving wait times, and adding guests to a waitlist. Authentication uses an API key supplied via the x-api-key request header, scoped to specific restaurants. The sandbox environment enforces daily and hourly request quotas; production has no documented rate limit. version: v2 contact: name: SpotOn Reserve Developer Center url: https://developers.spoton.com/reserve/docs/getting-started x-generated-from: documentation x-last-validated: '2026-06-03' servers: - url: https://api.seatninja.com description: Production - url: https://sandbox.seatninja.com description: Sandbox security: - apiKeyAuth: [] tags: - name: Orders description: Order and check data export, including items, modifiers, payments, and taxes. paths: /locations/{locationId}/orders: get: operationId: listOrders summary: SpotOn List Orders description: Retrieve all orders that were last updated, created, or closed within the supplied date/time range for a location. Only orders touched within the last ~90 days are available, and a single date range cannot exceed 26 hours. tags: - Orders parameters: - $ref: '#/components/parameters/LocationId' - name: updatedAtStart in: query description: Inclusive RFC 3339 start of the update range. Max 26-hour range, no milliseconds. schema: type: string format: date-time - name: updatedAtEnd in: query description: Exclusive RFC 3339 end of the update range. Must be at least 5 minutes in the past. schema: type: string format: date-time - name: createdAtStart in: query description: Inclusive RFC 3339 start of the creation range. Max 26-hour range, no milliseconds. schema: type: string format: date-time - name: createdAtEnd in: query description: Exclusive RFC 3339 end of the creation range. Must be at least 5 minutes in the past. schema: type: string format: date-time - name: closedAtStart in: query description: Inclusive RFC 3339 start of the closure range. Max 26-hour range, no milliseconds. schema: type: string format: date-time - name: closedAtEnd in: query description: Exclusive RFC 3339 end of the closure range. Must be at least 5 minutes in the past. schema: type: string format: date-time - name: includeUpdatedActivity in: query description: Return previously created or closed orders that were subsequently updated. Only valid with createdAt or closedAt ranges. schema: type: boolean responses: '200': description: A list of orders for the location. content: application/json: schema: type: array items: $ref: '#/components/schemas/Order' examples: ListOrders200Example: summary: Default listOrders 200 response x-microcks-default: true value: - id: abc123 name: Smoke's Burgers deleted: false locationId: abc123 orderTypeId: abc123 orderTypeName: Smoke's Burgers createdByEmployeeId: abc123 createdByEmployeeName: Smoke's Burgers createdAt: '2025-03-15T14:30:00Z' closedAt: '2025-03-15T14:30:00Z' orderNumber: '3' tableNumber: '3' scheduled: false releasedAt: '2025-03-15T14:30:00Z' ownerInfo: employeeId: example employeeName: example jobPositionId: example totalAmount: '12.50' balanceDueAmount: '12.50' checks: - {} updatedAt: '2025-03-15T14:30:00Z' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/ServerError' x-microcks-operation: delay: 0 dispatcher: FALLBACK /locations/{locationId}/orders/{orderId}: get: operationId: getOrder summary: SpotOn Get Order description: Retrieve a single order by its unique identifier for a location. tags: - Orders parameters: - $ref: '#/components/parameters/LocationId' - name: orderId in: path required: true description: The unique identifier for the order. schema: type: string responses: '200': description: The requested order. content: application/json: schema: $ref: '#/components/schemas/Order' examples: GetOrder200Example: summary: Default getOrder 200 response x-microcks-default: true value: id: abc123 name: Smoke's Burgers deleted: false locationId: abc123 orderTypeId: abc123 orderTypeName: Smoke's Burgers createdByEmployeeId: abc123 createdByEmployeeName: Smoke's Burgers createdAt: '2025-03-15T14:30:00Z' closedAt: '2025-03-15T14:30:00Z' orderNumber: '3' tableNumber: '3' scheduled: false releasedAt: '2025-03-15T14:30:00Z' ownerInfo: employeeId: abc123 employeeName: Smoke's Burgers jobPositionId: abc123 totalAmount: '12.50' balanceDueAmount: '12.50' checks: - gratuityAmount: example totalAmount: example paymentsAmount: example balanceAmount: example guests: example surcharges: example payments: example autoGratuityTaxes: example items: example voidedItems: example updatedAt: '2025-03-15T14:30:00Z' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '500': $ref: '#/components/responses/ServerError' x-microcks-operation: delay: 0 dispatcher: FALLBACK components: schemas: OrderTax: type: object description: A tax applied to an order line, modifier, or surcharge. properties: taxId: type: string description: Tax identifier. Empty for splick.it orders. example: abc123 taxName: type: string description: Tax name at the time of application. example: Smoke's Burgers percentage: type: string description: Tax percentage as a decimal string, for example "6.5". example: '8.25' amount: type: string description: Tax amount in US dollars, as a decimal string. example: '12.50' OrderDiscount: type: object description: A discount applied to an order line or modifier. properties: id: type: string description: Discount instance identifier. May repeat across levels. example: abc123 discountId: type: string description: Discount type identifier. example: abc123 discountName: type: string description: Discount name at the time of application. example: Smoke's Burgers createdAt: type: string format: date-time description: RFC 3339 timestamp when the discount was applied. example: '2025-03-15T14:30:00Z' amount: type: string description: Discount amount in US dollars, as a decimal string. example: '12.50' OrderGuest: type: object description: A guest on an order check. properties: name: type: string description: Guest name if available. example: Smoke's Burgers items: type: array description: Items ordered by the guest. items: $ref: '#/components/schemas/OrderMenuItem' voidedItems: type: array description: Items voided for the guest. items: $ref: '#/components/schemas/OrderMenuItem' OrderMenuItem: type: object description: A menu item line on an order check or guest. properties: menuItemId: type: string description: Menu item identifier. example: abc123 name: type: string description: Item name at the time the order was placed. example: Smoke's Burgers createdAt: type: string format: date-time description: RFC 3339 timestamp when the item was added. example: '2025-03-15T14:30:00Z' quantity: type: string description: Decimal quantity as a string. Subitems show the parent quantity. example: example preDiscountsAmount: type: string description: Extended amount before discounts and taxes, as a decimal string. example: '12.50' discountsAmount: type: string description: Total applied discounts, as a decimal string. example: '12.50' postDiscountsAmount: type: string description: Amount after discounts and before taxes, as a decimal string. example: '12.50' taxesAmount: type: string description: Applied taxes, as a decimal string. example: '12.50' totalAmount: type: string description: Final amount after discounts and taxes, as a decimal string. example: '12.50' discounts: type: array description: Applied discount details. items: $ref: '#/components/schemas/OrderDiscount' taxes: type: array description: Applied tax details. items: $ref: '#/components/schemas/OrderTax' subItems: type: array description: Nested subitems. items: $ref: '#/components/schemas/OrderMenuItem' giftCardIssueReload: type: boolean description: Whether the line represents a gift card sale or reload. example: false modifiers: type: array description: Applied modifiers. items: $ref: '#/components/schemas/OrderModifier' OrderModifier: type: object description: A modifier applied to an ordered menu item. properties: modifierId: type: string description: Modifier identifier. example: abc123 modifierOptionId: type: string description: Selected modifier option identifier. example: abc123 text: type: string description: Combined display text for the modifier, for example "Extra Cheese". example: Extra Cheese preDiscountsAmount: type: string description: Extended amount before discounts and taxes, as a decimal string. example: '12.50' discountsAmount: type: string description: Applied discount portion, as a decimal string. example: '12.50' postDiscountsAmount: type: string description: Amount after discounts and before taxes, as a decimal string. example: '12.50' taxesAmount: type: string description: Applied taxes, as a decimal string. example: '12.50' totalAmount: type: string description: Final amount after discounts and taxes, as a decimal string. example: '12.50' discounts: type: array description: Distributed discount details. items: $ref: '#/components/schemas/OrderDiscount' taxes: type: array description: Applied tax details. items: $ref: '#/components/schemas/OrderTax' OrderCheck: type: object description: A check on an order, holding guests, payments, and surcharges. properties: gratuityAmount: type: string description: Applied auto-gratuity amount, as a decimal string. example: '12.50' totalAmount: type: string description: Final check total, as a decimal string. example: '12.50' paymentsAmount: type: string description: Total payments received, as a decimal string. example: '12.50' balanceAmount: type: string description: Remaining balance, as a decimal string. example: '12.50' guests: type: array description: Guests on the check. items: $ref: '#/components/schemas/OrderGuest' surcharges: type: array description: Check-level surcharges. items: $ref: '#/components/schemas/OrderSurcharge' payments: type: array description: Payment records. items: $ref: '#/components/schemas/OrderPayment' autoGratuityTaxes: type: array description: Taxes applied to the auto-gratuity. items: $ref: '#/components/schemas/OrderTax' items: type: array description: Items applied directly to the check, typically empty. items: $ref: '#/components/schemas/OrderMenuItem' voidedItems: type: array description: Voided items applied directly to the check. items: $ref: '#/components/schemas/OrderMenuItem' OwnerInfo: type: object description: Employee ownership details for an order. properties: employeeId: type: string description: Employee identifier. example: abc123 employeeName: type: string description: Employee name. example: Smoke's Burgers jobPositionId: type: string description: Job position identifier held during ownership. example: abc123 OrderPayment: type: object description: A payment recorded against an order check. properties: paymentOptionId: type: string description: Payment method identifier. example: abc123 paymentName: type: string description: Payment method name at the time of application. example: Smoke's Burgers createdAt: type: string format: date-time description: RFC 3339 timestamp when the payment was applied. example: '2025-03-15T14:30:00Z' amount: type: string description: Payment amount in US dollars, as a decimal string. example: '12.50' surcharges: type: array description: Payment-level surcharges. items: $ref: '#/components/schemas/OrderSurcharge' surchargesAmount: type: integer format: int64 description: Total surcharge amount. example: 0 tipAmount: type: string description: Tip amount in US dollars, as a decimal string. example: '12.50' tipDeductionAmount: type: string description: Processing fee deduction from the tip, as a decimal string. example: '12.50' tipAppliedToEmployeeId: type: string description: Identifier of the employee the tip was applied to. example: abc123 employeeId: type: string description: Identifier of the employee who processed the payment. example: abc123 employeeName: type: string description: Name of the employee who processed the payment. example: Smoke's Burgers cardType: type: string description: The card type used for the payment. enum: - Unknown - Amex - Discover - Manual CC - Mastercard - Visa example: Unknown cardNumber: type: string description: Last four digits of the card, formatted as "...XXXX". example: '3' cardholderName: type: string description: Cardholder name. example: Smoke's Burgers Error: type: object description: A standard error response. properties: message: type: string description: A human-readable description of the error. example: example code: type: string description: A machine-readable error code. example: A1B2 Order: type: object description: An order exported from the SpotOn Restaurant POS System. properties: id: type: string description: Unique order identifier. example: abc123 name: type: string description: Order name. example: Smoke's Burgers deleted: type: boolean description: Whether the order is marked as deleted. example: false locationId: type: string description: Associated location identifier. example: abc123 orderTypeId: type: string description: Order type identifier. example: abc123 orderTypeName: type: string description: Order type name at the time of assignment. example: Smoke's Burgers createdByEmployeeId: type: string description: Identifier of the employee who created the order. example: abc123 createdByEmployeeName: type: string description: Name of the employee who created the order. example: Smoke's Burgers createdAt: type: string format: date-time description: RFC 3339 creation timestamp. example: '2025-03-15T14:30:00Z' closedAt: type: string format: date-time description: RFC 3339 closure timestamp. Null if the order is open. nullable: true example: '2025-03-15T14:30:00Z' orderNumber: type: string description: Assigned order number. Empty if unassigned. example: '3' tableNumber: type: string description: Assigned table number. Empty if none. example: '3' scheduled: type: boolean description: Whether the order is scheduled for the future. example: false releasedAt: type: string format: date-time description: RFC 3339 kitchen release time for scheduled orders. nullable: true example: '2025-03-15T14:30:00Z' ownerInfo: $ref: '#/components/schemas/OwnerInfo' totalAmount: type: string description: Final total after discounts, taxes, and surcharges, as a decimal string. example: '12.50' balanceDueAmount: type: string description: Remaining balance due, as a decimal string. example: '12.50' checks: type: array description: Checks belonging to the order. items: $ref: '#/components/schemas/OrderCheck' updatedAt: type: string format: date-time description: RFC 3339 last update timestamp, including milliseconds. example: '2025-03-15T14:30:00Z' OrderSurcharge: type: object description: A surcharge applied to an order check or payment. properties: surchargeId: type: string description: Surcharge identifier. example: abc123 surchargeName: type: string description: Surcharge name at the time of application. example: Smoke's Burgers createdAt: type: string format: date-time description: RFC 3339 timestamp when the surcharge was applied. example: '2025-03-15T14:30:00Z' amount: type: string description: Surcharge amount in US dollars, as a decimal string. example: '12.50' taxesAmount: type: string description: Applied tax amount, as a decimal string. example: '12.50' taxes: type: array description: Tax details. items: $ref: '#/components/schemas/OrderTax' responses: Forbidden: description: The API key does not have access to the requested location. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource does not exist. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: The API key is missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: The request was malformed or violated a documented constraint such as the date range limit. content: application/json: schema: $ref: '#/components/schemas/Error' ServerError: description: An unexpected server error occurred. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: LocationId: name: locationId in: path required: true description: The unique identifier for the location. schema: type: string securitySchemes: apiKeyAuth: type: apiKey in: header name: x-api-key description: API key scoped to specific restaurants.