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

MethodEndpointDescription
GET/sales/v1/daily-salesGet aggregated daily sales totals across locations
PUT/sales/v1/locations/{locationId}/daily-salesSet 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. 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

ParameterTypeRequiredDescription
startDatestringYesFirst date in the range (ISO 8601, YYYY-MM-DD)
endDatestringYesLast date in the range, inclusive (ISO 8601, YYYY-MM-DD)
locationIdsarray of integerNoFilter 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

FieldTypeDescription
datestringThe day this aggregation covers (YYYY-MM-DD)
locationIdintegerThe location for this row
totalSalesnumberSum of transaction amounts for the day. Computed by Connecteam from transactions.
projectedSalesnumber | nullThe 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.

Path Parameters

ParameterTypeRequiredDescription
locationIdintegerYesThe location to update. Get IDs from Managing Locations.

Request Body

FieldTypeRequiredDescription
updatesarray of objectYesOne entry per day. Each date may appear at most once per request.
updates[].datestringYesThe day to update (ISO 8601, YYYY-MM-DD)
updates[].projectedSalesnumberYesThe 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

FieldTypeDescription
daysAffectedintegerTotal number of days the request changed
updatedDaysarray of stringThe dates that were updated, in YYYY-MM-DD format

Authentication

All endpoints require API Key or OAuth 2.0.

Required Scopes

ScopeOperations
sales_data.readGET /sales/v1/daily-sales
sales_data.writePUT /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 totalSales vs projectedSales for performance reviews.
  • Forecast / budget setup — push weekly or monthly projections in advance with a single PUT per location.

API Reference