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.
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 offinalSaleAmountacross all transactions for that location and day, computed by Connecteam from the Transactions API. You cannot set this directly. Push sales usingPOST /sales/v1/transactionsand the daily total will reflect them.projectedSales— your forecast or budget for the day, set via the PUT endpoint. Independent oftotalSales. Use it for variance reports (actual vs forecast).
Sparse ResultsThe 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. |
Example
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
{
"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) doSetting
projectedSalesreplaces the projected value for that day. It does not modifytotalSales. To record or change actuals, use the Transactions API.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| locationId | integer | Yes | The location to update. Get IDs from Managing 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
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
{
"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:
{
"detail": "endDate must be greater than or equal to startDate"
}GET — unknown location:
{
"detail": "Locations with IDs [999] not found"
}PUT — duplicate dates:
{
"detail": "Each date in updates may appear only once"
}PUT — location not found:
{
"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
totalSalesvsprojectedSalesfor performance reviews. - Forecast / budget setup — push weekly or monthly projections in advance with a single PUT per location.
Updated about 15 hours ago
