Skip to main content
POST
/
v1
/
forecasting
/
demand
Upload Demand Forecast
curl --request POST \
  --url https://app.untetherlabs.com/api/v1/forecasting/demand \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
[
  {
    "role": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "startDate": "2024-11-20T07:43:34+0000",
    "endDate": "2024-11-20T07:43:34+0000",
    "demand": 1
  }
]
'
{
  "type": "https://developers.untetherlabs.com/errors#validation",
  "status": 400,
  "title": "Input validation failed.",
  "message": "<string>",
  "detail": "The specified provider does not satisfy the skill requirements for this shift.",
  "path": "<string>"
}
Upload demand forecasts for one or more roles. Demand is the number of staff needed during a 15-minute window — the same staffing level consumed by the autoscheduler and coverage metrics. A row spanning more than 15 minutes applies its demand to every 15-minute window in its range: a day-long row with a demand of 4 means 4 staff are needed throughout that day. startDate and endDate must be ISO-8601 strings with an explicit timezone offset and fall on 15-minute boundaries (:00, :15, :30 or :45). Rows may be supplied in any order, but rows for the same role must not overlap. A single request may create at most 50000 15-minute windows (a full year for one role is roughly 35,000). Any existing forecast data between each role’s first startDate and last endDate is replaced. The body may be sent as application/json, or as text/csv with a header row containing the columns: role, startDate, endDate, demand.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

role
string<uuid>
required
startDate
string
required
Example:

"2024-11-20T07:43:34+0000"

endDate
string
required
Example:

"2024-11-20T07:43:34+0000"

demand
number | null
required
Required range: x >= 0

Response