For the complete documentation index, see llms.txt. This page is also available as Markdown.

Incentives by Date Range

Returns staff incentives and commissions for a date range, at one row per timesheet entry per incentive component. Base activity wages are not included - those come from Wages by Date Range.

There is no server-side aggregation. The per-component grain is deliberate: it is the only grain from which every resort's payroll policy can derive its own totals.

This is a read-only reporting feed; nothing is written.

This is an alternative to, not a replacement for, Paid Activities by Date Range. That combined feed remains fully supported and is in production use. Use Wages + Incentives if you want the two components separated; use Paid Activities if you want them together. Do not pull both for the same period - you will double-count.

Authentication

Authorization: Bearer {access_token}

Endpoint

GET {api-url}/api/timekeeping/incentives

Query parameters

Parameter
Type
Description

startDate

date

Required. Start of the range (YYYY-MM-DD).

endDate

date

Required. End of the range (YYYY-MM-DD).

updatedAfterLocalDateTime

date-time

Required. Only entries updated after this time. Interpreted in resort-local time, not UTC - convert using the timezone from Resort Details.

seasonId

integer

Required. The season to report on.

includeResolutionStatus

boolean

Optional, defaults to false. Opt in to the resolutionStatus field - see below.

Response

200 with an array of incentive rows.

Each row carries the same employee and entry context as the wage feed: seasonId, seasonName, payrollId, employeeIdentifier, employeeName, flaikEmployeeId, timesheetId, timesheetStatus, timesheetDate, startTime, endTime, paidActivityGroupId, paidActivityGroupName, paidActivityId, paidActivityName, paidActivityType.

The incentive-specific fields:

Field
Type
Description

type

string

"staffIncentive" or "commission". Unknown sections pass through with their raw section name rather than being dropped.

sourceKey

string?

Raw key of the component. null on unparseable rows.

incentiveId / incentiveName

integer? / string?

The incentive, when resolved

amount

decimal

The incentive or commission amount

minutes

integer

Minutes attributed to this component

guestCount

integer?

Commission only - null on staff-incentive rows

guestDetails

string?

Commission only

payCodeId / payCodeName / payCodeType / payCodeCostCentre

The incentive's own resolved pay code - not the parent activity's

businessStructureId / businessStructureName / costCentre / exportBusinessStructureName / externalId / locationName / parentPath

Resolved from the parent entry's paid activity

jobCodeId / jobCodeName / jobCodeType / jobCodeCostCentre

Resolved from the parent entry

isAutoAppliedToStaff

boolean?

Whether the incentive is applied automatically

resolutionStatus

string?

null unless includeResolutionStatus=true - see below

Rows are never dropped

Set includeResolutionStatus=true to have each row explain why its component did or did not resolve:

resolved · hardcodedCommission · unknownSection · unknownIncentive · missingPayCode · unparseable

It is off by default so the feed is not treated as a configuration validator. Rows are returned either way - a component that failed to resolve is surfaced for review, never silently dropped. An unparseable row indicates corrupt incentive detail worth manual review.

Turning it on for a first integration run is a good way to surface resort configuration gaps before you rely on the totals.

The three timekeeping feeds

Feed
Grain
Contains

per timesheet entry

wages and commission combined - supported, in production use

per timesheet entry

base activity wage only

Incentives by Date Range (this page)

per entry x incentive component

staff incentives and commissions

Need help? Contact resortsupport@flaik.com.

Was this helpful?