# GET Get an analytics summary

Return bounded operational totals for the authenticated Store. Orders, modern products, and native-currency revenue are counted over complete UTC calendar days. Revenue remains in integer minor units and is never converted or combined across currencies. Malformed stored currency codes appear honestly in one null-currency bucket. Customer details, provider data, and legacy ProductCache rows are excluded. Requires `analytics:read`; this operation is read-only and safe to retry. `end_date` is the inclusive final day and must be before the current UTC date. It defaults to yesterday. `period` defaults to `30d`. The response reports the half-open query bounds `[starts_at, ends_before)`. Correct a 422 using the reported parameter, replace a key after 401, add the scope after 403, and retry 429 responses after `retry_after` seconds.

- Source URL: https://www.signcustomiser.com/help/api/v3-get-get-an-analytics-summary/
- Markdown URL: https://www.signcustomiser.com/help/api/v3-get-get-an-analytics-summary.md
- Group: Analytics
- Method: GET
- Path: /api/v3/analytics/summary
- Auth: Bearer token
- Required scopes: `analytics:read`

## Query parameters

- period (string, optional): Closed set of supported complete-day reporting periods. Example: 30d
- end_date (string, optional): Inclusive final UTC date in YYYY-MM-DD format. Defaults to the previous UTC day. Example: 2026-07-19

## cURL example

```bash
curl https://web.signcustomiser.com/api/v3/analytics/summary?period=30d&end_date=2026-07-19 \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN'
```

## Response examples

### 200 GET 200 example 1

```json
{
  "data": {
    "object": "analytics_summary",
    "period": "30d",
    "starts_at": "2026-06-20T00:00:00Z",
    "ends_before": "2026-07-20T00:00:00Z",
    "order_count": 18,
    "product_count": 21,
    "revenue": [
      {
        "currency": "AUD",
        "amount": 248900,
        "order_count": 16
      },
      {
        "currency": "NZD",
        "amount": 31100,
        "order_count": 2
      }
    ]
  },
  "links": {
    "self": "https://web.signcustomiser.com/api/v3/analytics/summary?period=30d&end_date=2026-07-19",
    "documentation": "https://www.signcustomiser.com/help/api/"
  },
  "meta": {
    "api_version": "v3",
    "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
  }
}
```

### 401 Missing or invalid API key

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/missing_api_key",
  "title": "Missing API key",
  "status": 401,
  "code": "missing_api_key",
  "detail": "Provide a store API key as a bearer token.",
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 403 Insufficient scope

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This operation requires the analytics:read scope.",
  "required_scopes": [
    "analytics:read"
  ],
  "granted_scopes": [],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 422 Invalid reporting period

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/invalid_parameter",
  "title": "Invalid query parameter",
  "status": 422,
  "code": "invalid_parameter",
  "detail": "The period parameter must be one of: 7d, 30d, 90d, 365d.",
  "errors": [
    {
      "parameter": "period",
      "code": "unsupported_value",
      "detail": "The period parameter is unsupported.",
      "allowed_values": [
        "7d",
        "30d",
        "90d",
        "365d"
      ]
    }
  ],
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```

### 429 Rate limited

```json
{
  "type": "https://www.signcustomiser.com/help/api/problems/rate_limited",
  "title": "Too many requests",
  "status": 429,
  "code": "rate_limited",
  "detail": "You have exceeded the request limit for this API key.",
  "retry_after": 60,
  "request_id": "req_01jz9x2k7c8f3m5n6p7q8r9s0t"
}
```
