---
updatedAt: 2026-05-19T15:11:31.000Z
---

Fetch the complete documentation index at: https://developer.connecteam.com/llms.txt. Use this file to discover all available pages before exploring further.

# Managing Daily Sales

Daily sales endpoints provide aggregated daily totals per location and let you set projected (forecast) sales for any day. They are designed for dashboards and forecasting workflows; for syncing actual sale records, use the [Transactions API](sales-data-transactions).

## Endpoints

| Method | Endpoint                                     | Description                                        |
| :----- | :------------------------------------------- | :------------------------------------------------- |
| GET    | /sales/v1/daily-sales                        | Get aggregated daily sales totals across locations |
| PUT    | /sales/v1/locations/{locationId}/daily-sales | Set projected sales per day for a single location  |

***

## Concepts

Daily sales rows have two values per day per location:

* **`totalSales`** — sum of `finalSaleAmount` across all transactions for that location and day, computed by Connecteam from the [Transactions API](sales-data-transactions). **You cannot set this directly.** Push sales using `POST /sales/v1/transactions` and the daily total will reflect them.
* **`projectedSales`** — your forecast or budget for the day, set via the PUT endpoint. Independent of `totalSales`. Use it for variance reports (actual vs forecast).

> 📘 Sparse Results
>
> The GET endpoint returns rows only for days that have stored aggregation data. **Days with no data are omitted — they are not returned as zero.** Treat missing days as 'no data yet' in your client.

***

## Get Daily Sales

Retrieve daily sales totals per location across a date range.

### Endpoint

`GET https://api.connecteam.com/sales/v1/daily-sales`

### Query Parameters

| Parameter   | Type             | Required | Description                                                                                                                                  |
| :---------- | :--------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------- |
| startDate   | string           | Yes      | First date in the range (ISO 8601, `YYYY-MM-DD`)                                                                                             |
| endDate     | string           | Yes      | Last date in the range, inclusive (ISO 8601, `YYYY-MM-DD`)                                                                                   |
| locationIds | array of integer | No       | Filter results to specific locations. Omit to include all locations on the account. Get IDs from [Managing Locations](sales-data-locations). |

### Example

```bash
curl --request GET \
  --url 'https://api.connecteam.com/sales/v1/daily-sales?startDate=2026-04-01&endDate=2026-04-07&locationIds=123&locationIds=456' \
  --header 'X-API-KEY: YOUR_API_KEY'
```

### Response

```json
{
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "data": {
    "dailySales": [
      {
        "date": "2026-04-01",
        "locationId": 123,
        "totalSales": 4520.50,
        "projectedSales": 5000.00
      },
      {
        "date": "2026-04-01",
        "locationId": 456,
        "totalSales": 1230.00,
        "projectedSales": null
      },
      {
        "date": "2026-04-02",
        "locationId": 123,
        "totalSales": 3899.00,
        "projectedSales": 5000.00
      }
    ]
  }
}
```

### Response Fields

| Field          | Type           | Description                                                                         |
| :------------- | :------------- | :---------------------------------------------------------------------------------- |
| date           | string         | The day this aggregation covers (`YYYY-MM-DD`)                                      |
| locationId     | integer        | The location for this row                                                           |
| totalSales     | number         | Sum of transaction amounts for the day. Computed by Connecteam from transactions.   |
| projectedSales | number \| null | The projected total set via PUT. `null` if no projection has been set for this day. |

***

## Set Projected Sales

Set projected sales for a single location for one or more days in a single request. Use this for forecasting and budget targets.

### Endpoint

`PUT https://api.connecteam.com/sales/v1/locations/{locationId}/daily-sales`

> 👍 What this does (and doesn't) do
>
> Setting `projectedSales` **replaces** the projected value for that day. It does **not** modify `totalSales`. To record or change actuals, use the [Transactions API](sales-data-transactions).

### Path Parameters

| Parameter  | Type    | Required | Description                                                                      |
| :--------- | :------ | :------- | :------------------------------------------------------------------------------- |
| locationId | integer | Yes      | The location to update. Get IDs from [Managing Locations](sales-data-locations). |

### Request Body

| Field                     | Type            | Required | Description                                                         |
| :------------------------ | :-------------- | :------- | :------------------------------------------------------------------ |
| updates                   | array of object | Yes      | One entry per day. Each `date` may appear at most once per request. |
| updates\[].date           | string          | Yes      | The day to update (ISO 8601, `YYYY-MM-DD`)                          |
| updates\[].projectedSales | number          | Yes      | The new projected total for that day                                |

### Example

```bash
curl --request PUT \
  --url 'https://api.connecteam.com/sales/v1/locations/123/daily-sales' \
  --header 'Content-Type: application/json' \
  --header 'X-API-KEY: YOUR_API_KEY' \
  --data '{
    "updates": [
      { "date": "2026-04-01", "projectedSales": 5000.00 },
      { "date": "2026-04-02", "projectedSales": 5500.00 },
      { "date": "2026-04-03", "projectedSales": 6000.00 }
    ]
  }'
```

### Response

```json
{
  "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "data": {
    "daysAffected": 3,
    "updatedDays": ["2026-04-01", "2026-04-02", "2026-04-03"]
  }
}
```

### Response Fields

| Field        | Type            | Description                                         |
| :----------- | :-------------- | :-------------------------------------------------- |
| daysAffected | integer         | Total number of days the request changed            |
| updatedDays  | array of string | The dates that were updated, in `YYYY-MM-DD` format |

***

## Authentication

All endpoints require API Key or OAuth 2.0.

### Required Scopes

| Scope             | Operations                                       |
| :---------------- | :----------------------------------------------- |
| sales\_data.read  | GET /sales/v1/daily-sales                        |
| sales\_data.write | PUT /sales/v1/locations/{locationId}/daily-sales |

***

## Error Responses

### 400 Bad Request

**GET — invalid range:**

```json
{
  "detail": "endDate must be greater than or equal to startDate"
}
```

**GET — unknown location:**

```json
{
  "detail": "Locations with IDs [999] not found"
}
```

**PUT — duplicate dates:**

```json
{
  "detail": "Each date in updates may appear only once"
}
```

**PUT — location not found:**

```json
{
  "detail": "Location with ID 999 not found"
}
```

***

## Common Use Cases

* **Daily KPI dashboards** — pull aggregated totals per location for any date range without paging through every transaction.
* **Variance reporting** — compare `totalSales` vs `projectedSales` for performance reviews.
* **Forecast / budget setup** — push weekly or monthly projections in advance with a single PUT per location.

***

[API Reference](https://developer.connecteam.com/reference/)