Next Restaurant 6.1.0: move your data in, run payroll, and connect other systems Next Inventory 6.2.0: a REST API and webhooks for your other systems Next DB 6.1: Auto-Updating Tables, Printing, Phone Layout and SEO Next Task 6.0.0: a task manager for Joomla Next Inventory 6.1.1: smoother Check Out, no more list limits, and much faster PHP2Shell: Is Your Joomla Site Safe? What to Do Today Introducing Next Boards: Kanban project and task boards for Joomla Building the Future of Joomla Extensions
NextSoftware

Get Sales Summary

GET /v1/nextrestaurant/reports/sales-summary

Sales totals and a daily series

Needs reports:read and the Reports app. The same numbers as the admin Reports screen, by venue calendar day. At most 366 days per request.

Request

GET https://your-site.example/api/index.php/v1/nextrestaurant/reports/sales-summary?from=<string>&to=<string>&location_id=<integer>

Parameters

Name Type In Required Description
from string query Yes First venue calendar day, inclusive. (date)
to string query Yes Last venue calendar day, inclusive. At most 366 days after from. (date)
location_id integer query No Only this location. Omit for all. (min 1)

Responses

200 — The summary.

{
    "data": {
        "from": "2026-01-01",
        "to": "2026-01-01",
        "location_id": 1,
        "totals": {
            "orders_count": 1,
            "gross_sales": 1.5,
            "net_sales": 1.5,
            "tax_total": 1.5,
            "service_total": 1.5,
            "tips_total": 1.5,
            "discount_total": 1.5,
            "avg_order_value": 1.5,
            "comp_total": 1.5,
            "refund_total": 1.5
        },
        "days": [
            {
                "day": "2026-01-01",
                "orders_count": 1,
                "gross_sales": 1.5
            }
        ]
    }
}
Field Type Meaning
data.from string (date)
data.to string (date)
data.location_id integer|null
data.totals.orders_count integer
data.totals.gross_sales number
data.totals.net_sales number
data.totals.tax_total number
data.totals.service_total number
data.totals.tips_total number
data.totals.discount_total number
data.totals.avg_order_value number
data.totals.comp_total number
data.totals.refund_total number
data.days[].day string (date)
data.days[].orders_count integer
data.days[].gross_sales number

Errors

Status Code When
401 INVALID_TOKEN The token is missing, wrong, or none has been generated.
403 INSUFFICIENT_SCOPE This API key does not have the permission this request needs.
403 MODULE_DISABLED This module is disabled.
403 API_DISABLED API is disabled
404 UNKNOWN_LOCATION No such published location.
422 VALIDATION_FAILED One error per invalid field, each with source.pointer.
429 RATE_LIMITED Too many requests. RATE_LIMITED with a Retry-After header: this key used its budget for the minute, or this address sent 20 bad tokens in 5 minutes. Nothing ran, so the request is safe to retry after the wait.

Examples

curl

curl -s "https://your-site.example/api/index.php/v1/nextrestaurant/reports/sales-summary?from=value&to=value" \
  -H "Authorization: Bearer $API_TOKEN"

PHP

<?php
$ch = curl_init('https://your-site.example/api/index.php/v1/nextrestaurant/reports/sales-summary?from=<string>&to=<string>&location_id=<integer>');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('API_TOKEN'),
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);

JavaScript

const API_TOKEN = process.env.API_TOKEN;

const response = await fetch("https://your-site.example/api/index.php/v1/nextrestaurant/reports/sales-summary?from=<string>&to=<string>&location_id=<integer>", {
  headers: {
    "Authorization": `Bearer ${API_TOKEN}`,
  },
});
const data = await response.json();

All Extensions