Dayforce Data API: Pay Runs, Time Away & Wallet
Dayforce is the employee self-service companion to the Dayforce HCM suite from Dayforce (the Minneapolis- and Toronto-based company formerly known as Ceridian). After a worker signs in with their employer's Dayforce account, the home screen opens onto everyday pay and time tasks: viewing current and archived pay statements, checking time-away balances and upcoming leave, browsing assigned shifts, clocking in and out, submitting time-away requests, offering or accepting shift trades, completing onboarding to-dos, reviewing benefit elections, setting up or changing direct deposit, and — where the employer has turned it on — drawing earned wages through Dayforce Wallet On Demand. Published for the United States, it serves the hourly and salaried employees of companies that run payroll, time, scheduling and benefits on Dayforce — workers who want pay, schedule and leave on their phone rather than at a shared kiosk — and it fills the same employee-facing role as the self-service apps of rival HCM providers such as ADP, Workday and Paylocity.
Pay-run statements pair lastPayAmount with changeFromPreviousNetPay for the period bounded by payPeriodStartDate and payPeriodEndDate, then expand into a header keyed by payRunHeadersId — grossPay, netPay, disbursedNetPay, payDate, checkNumber, legalEntityName — and line items whose shortName, amount, units, rate and amountYTD rebuild the stub. Time-away balances sit beside that payroll: each plan's remainingBalance, accruedBalance, pendingBalance and grantBalance for a unit, plus the next approved leave (tafwId, payAdjCodeName, requestedAmount). Assigned shifts arrive as employeeShiftByTimePeriod rows with timeStart, timeEnd, deptJobName and orgUnitName; clock punches record time and a type drawn from clockEntryName. Direct-deposit setup returns payGroupCountryCode, isIBAN, financialInstitutionList and maxNumAccounts. Where Wallet On Demand is on, eligibility flags isEligibleForWallet and isEligibleForODP sit next to available-pay netPay in a currencyCode, gated by hasRequestedSuccessfullyToday.
Payroll and ERP bots join each employeeId to netPay and payDate to reconcile the last run before the next disbursement. Leave planners read remainingBalance and upcoming tafwId rows to forecast coverage. Earned-wage products check isEligibleForWallet then pull available-pay netPay so a load does not exceed the period. Clock-compliance tools store each punch's time and clockEntryName against the shift's timeStart/timeEnd. openData Studio turns this per-worker pay, leave, schedule, clock and wallet record into callable open data for those integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
OAuth2 token issue (authorization code)
POST
/v1/workforce/auth/tokenopendataExchanges the OAuth2 authorization code (in-app oauth callback) for the Bearer tokens that every later workforce, schedule and wallet call attaches.
Auth: OAuth2 authorization_code grant at the tenant authenticationUrl. Redirect URI is an in-app oauth callback. Issues access_token, refresh_token and id_token.
- access_token
- refresh_token
- id_token
- token_type
- grant_type
POST /v1/workforce/auth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=app://oauth-callback{ "access_token": "eyJhbGciOiJSUzI1NiIs...", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "def50200ab...", "id_token": "eyJhbGciOiJSUzI1NiIs..." }Tenant mobile site config
POST
/v1/workforce/tenant/site-configosintResolves the signed-in tenant: namespace, server version, and the authentication, workforce, schedule (mobileApiUrl) and identity (dfidRootUrl) roots the rest of the session uses.
Auth: Unauthenticated bootstrap, or the just-issued Bearer access_token. Resolves the tenant namespace before the rest of the session.
- namespaceName
- serverVersion
- applicationRootUrl
- authenticationUrl
- mobileWebServiceUrl
- mobileSvcUrl
- mobileApiUrl
- dfidRootUrl
- gatewayRootUrl
POST /v1/workforce/tenant/site-config HTTP/1.1 Content-Type: application/json {"namespaceName":"acme"}{ "namespaceName": "acme", "serverVersion": "64.1.0", "applicationRootUrl": "/app", "authenticationUrl": "/auth", "mobileWebServiceUrl": "/mobile-web/", "mobileSvcUrl": "/mobile-svc/", "mobileApiUrl": "/mobile-api", "dfidRootUrl": "/identity", "gatewayRootUrl": "/gateway" }Current pay-run earnings summary
POST
/v1/workforce/pay-runs/earningsopendataReturns the signed-in worker's latest pay-run snapshot — last net, period dates, hours total and the change from the previous net — the numbers on the earnings home card.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- payRunHeadersId
- payPeriodStartDate
- payPeriodEndDate
- lastPayAmount
- currencySymbol
- hoursGroupTotalDisplay
- changeFromPreviousNetPay
POST /v1/workforce/pay-runs/earnings HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "payRunHeadersId": 88421, "payPeriodStartDate": "2026-09-14", "payPeriodEndDate": "2026-09-27", "lastPayAmount": 1842.55, "currencySymbol": "$", "hoursGroupTotalDisplay": "80.00", "changeFromPreviousNetPay": 36.2 }Employee pay-run statement detail
POST
/v1/workforce/pay-runs/statementopendataReturns the full pay stub for a run: header (pay date, check number, gross/net, legal entity) plus earnings, deductions and year-to-date line items that rebuild the statement screen.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- showDayforceWalletBanner
- isPDFStatementAvailable
- payRunHeaders
- payRunResults
- id
- employeeId
- payDate
- checkNumber
- grossPay
- netPay
- disbursedNetPay
- legalEntityName
- isPayrollResult
- isArchivedPayRun
- isConnectedPay
- earningsYTD
- totalDeductions
- preTaxDeductions
- postTaxDeductions
- grossHours
- periodStart
- periodEnd
- statementItems
- shortName
- amount
- units
- rate
- amountYTD
POST /v1/workforce/pay-runs/statement HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"payRunHeadersId":88421}{ "showDayforceWalletBanner": true, "isPDFStatementAvailable": true, "payRunHeaders": [ { "id": 88421, "employeeId": 102334, "payDate": "2026-10-02", "payDateDisplay": "Oct 2, 2026", "checkNumber": "901188", "grossPay": 2400.00, "grossPayDisplay": "$2,400.00", "netPay": 1842.55, "netPayDisplay": "$1,842.55", "disbursedNetPay": 1842.55, "legalEntityName": "Acme Manufacturing LLC", "isPayrollResult": true, "isArchivedPayRun": false, "isConnectedPay": false } ], "payRunResults": [ { "earnings": 2400.00, "earningsYTD": 38400.00, "netPay": 1842.55, "netPayYTD": 29480.80, "totalDeductions": 557.45, "totalDeductionsYTD": 8919.20, "preTaxDeductions": 210.00, "postTaxDeductions": 347.45, "grossHours": 80.0, "payDate": "2026-10-02", "periodStart": "2026-09-14", "periodEnd": "2026-09-27", "statementItems": [ {"isHeader": false, "itemType": "Earning", "shortName": "Regular", "amount": 2400.00, "currencySymbol": "$", "units": 80.0, "rate": 30.0, "amountYTD": 38400.00, "unitsYTD": 1280.0} ] } ] }Time-away dashboard
POST
/v1/workforce/time-away/dashboardopendataLoads the time-away home: next approved leave, upcoming requests, per-plan balances and company holidays behind the leave dashboard.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- nextTimeAway
- upcomingRequests
- balances
- companyHolidays
POST /v1/workforce/time-away/dashboard HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "nextTimeAway": {"tafwId": 44102, "timeStart": "2026-10-10T00:00:00", "timeEnd": "2026-10-12T00:00:00", "payAdjCodeName": "Vacation"}, "upcomingRequests": {"count": 2}, "balances": [ {"id": 12, "name": "Vacation", "unit": "hours", "remainingBalance": "62.5"} ], "companyHolidays": [{"name": "Thanksgiving", "startDate": "2026-11-26"}] }Time-away balances
POST
/v1/workforce/time-away/balancesopendataReturns each time-away plan's accrued, approved, pending, remaining and grant balances for the signed-in worker — the figures on the PTO balance card.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- id
- name
- startDate
- endDate
- unit
- accruedBalance
- approvedBalance
- pendingBalance
- remainingBalance
- exceededBalance
- grantBalance
- remainingGrantBalance
POST /v1/workforce/time-away/balances HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "balances": [ { "id": 12, "name": "Vacation", "startDate": "2026-01-01T00:00:00", "endDate": "2026-12-31T00:00:00", "unit": "hours", "accruedBalance": "80.0", "approvedBalance": "16.0", "pendingBalance": "8.0", "remainingBalance": "56.0", "exceededBalance": "0.0", "grantBalance": "80.0", "remainingGrantBalance": "56.0" } ] }Employee shifts
POST
/v1/workforce/schedule/shiftsopendataReads the signed-in worker's assigned shifts for a window — start/end, on-call flag, job name and org unit — the rows behind the schedule grid. A companion schedule-widget query also returns nextApprovedTimeAway (tafwId, payAdjCodeName, requestedAmount, unit, durationType).
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- employeeShiftByTimePeriod
- id
- timeStart
- timeEnd
- isOnCall
- onCallStatusId
- deptJobName
- orgUnitName
POST /v1/workforce/schedule/shifts HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"start":"2026-09-28T00:00:00","end":"2026-10-04T23:59:59"}{ "data": { "scheduleQueries": { "employeeShiftByTimePeriod": [ { "id": "SH-90211", "timeStart": "2026-09-29T09:00:00", "timeEnd": "2026-09-29T17:00:00", "isOnCall": false, "onCallStatusId": null, "deptJobName": "Cashier", "orgUnitName": "Store 14" } ] } } }Submit clock punch
POST
/v1/workforce/clock/punchesopendataPosts a clock punch (time + type). Punch types themselves come from a clock-entry-types catalog as id / clockEntryName pairs (Clock In, Clock Out, meal, transfer).
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- time
- type
- clockEntryName
- id
POST /v1/workforce/clock/punches HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"time":"2026-09-29T09:01:12","type":1}{ "time": "2026-09-29T09:01:12", "type": 1, "clockEntryName": "Clock In" }Wallet On Demand eligibility
POST
/v1/workforce/earned-pay/eligibilityopenfinanceTells the app whether the signed-in worker can use Dayforce Wallet and On-Demand Pay, plus registration status, pay-group country and state — the gate in front of earned-wage access.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- isEligibleForWallet
- isEligibleForODP
- walletRegistrationStatus
- birthDate
- payGroupCountry
- stateCode
POST /v1/workforce/earned-pay/eligibility HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "isEligibleForWallet": true, "isEligibleForODP": true, "walletRegistrationStatus": "Registered", "birthDate": "1991-04-12T00:00:00Z", "payGroupCountry": "US", "stateCode": "MN" }Wallet available pay (On Demand funds)
POST
/v1/workforce/earned-pay/availableopenfinanceReads how much earned-but-unpaid net the worker can load to Dayforce Wallet today, with a same-day request flag and the period calculation breakdown behind the available-pay card.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- netPay
- currencyCode
- hasRequestedSuccessfullyToday
- periodCalculationDetails
- success
- errors
POST /v1/workforce/earned-pay/available HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "netPay": 412.80, "currencyCode": "USD", "hasRequestedSuccessfullyToday": false, "periodCalculationDetails": [{"label": "Hours this period", "value": "24.5"}], "success": true, "errors": [] }Direct-deposit account lookup
POST
/v1/workforce/direct-deposit/accountsopenbankingReturns the direct-deposit setup catalog for the worker's pay group: country, IBAN vs. domestic routing, allowed pay methods and deposit types, institution list, and whether a remainder account or document upload is required.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- currencySymbol
- payGroup
- payGroupCountryCode
- fieldInfoList
- payMethods
- depositTypes
- maxNumAccounts
- remainderRequired
- allowDistributeByPct
- isIBAN
- financialInstitutionList
- hasWorkFlow
- isMandatoryDocumentUpload
POST /v1/workforce/direct-deposit/accounts HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "currencySymbol": "$", "payGroup": "US-BIWEEKLY", "payGroupCountryCode": "US", "maxNumAccounts": 5, "remainderRequired": true, "allowDistributeByPct": true, "isIBAN": false, "hasWorkFlow": false, "isMandatoryDocumentUpload": false, "payMethods": [{"id": 1, "name": "Checking"}], "depositTypes": [{"id": 1, "name": "Percent"}], "financialInstitutionList": [{"name": "Wells Fargo", "routingNumber": "121000248"}], "fieldInfoList": [{"name": "accountNumber", "required": true}] }Employee profile (address & contacts)
POST
/v1/workforce/profileosintReads the worker's profile envelope used by My Profile: person addresses, contact channels, emergency contacts, and whether an address-change request is already in flight.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- personAddress
- contactInformation
- emergencyContact
- isAddressChangeRequestInProcess
POST /v1/workforce/profile HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "personAddress": [{"address1": "100 Hennepin Ave", "city": "Minneapolis", "state": "MN", "postalCode": "55401", "country": "US"}], "contactInformation": [{"type": "Mobile", "value": "+1-612-555-0199"}], "emergencyContact": [{"name": "Alex Rivera", "relationship": "Spouse", "phone": "+1-612-555-0144"}], "isAddressChangeRequestInProcess": false }Onboarding dashboard
POST
/v1/workforce/onboarding/dashboardopendataLoads the new-hire dashboard: welcome card (name, first day, position, company), to-do sections, key people, next learning actions and extra resources for the onboarding window.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- startDate
- endDate
- welcome
- todos
- people
- nextActionItems
- additionalResources
- title
- employeeName
- firstDay
- position
- hasMessage
- companyName
POST /v1/workforce/onboarding/dashboard HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "startDate": "2026-10-06T00:00:00", "endDate": "2026-11-03T00:00:00", "welcome": { "title": "Welcome", "employeeName": "Jordan Lee", "firstDay": "2026-10-06T09:00:00", "position": "Cashier", "hasMessage": true, "companyName": "Acme Manufacturing LLC" }, "todos": {"sections": [{"items": [{"title": "Upload I-9 documents"}]}]}, "people": {"persons": [{"name": "Sam Patel", "role": "Manager"}]}, "nextActionItems": {"learningTypes": []}, "additionalResources": {"resources": [{"title": "Employee handbook"}]} }Benefit elections summary
POST
/v1/workforce/benefits/electionsopendataLists the worker's benefit enrollment windows — type, name, template, enrollment id and days remaining — the summary behind the benefits elections screen.
Auth: OAuth2 Bearer access_token from the token-issue call on the tenant authenticationUrl returned by the site-config bootstrap.
- enrollmentTypeId
- enrollmentType
- enrollmentName
- templateId
- employeeEnrollmentId
- numberOfDaysDueIn
POST /v1/workforce/benefits/elections HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {}{ "enrollments": [ { "enrollmentTypeId": 2, "enrollmentType": "OpenEnrollment", "enrollmentName": "2026 Open Enrollment", "templateId": 88, "employeeEnrollmentId": 55012, "numberOfDaysDueIn": 14 } ] }
Data categories
- pay statements
- time-off balances
- schedules and shifts
- clock punches
- wallet available pay
- direct deposit
- employee profile
- benefit elections
- onboarding
Where teams use this data
Payroll / ERP reconciliation
Finance bots join each employeeId to lastPayAmount, netPay and payDate so the last run's gross, net and disbursedNetPay can be checked against the GL before the next disbursement.
Leave-coverage planning
Workforce tools read remainingBalance, pendingBalance and upcoming tafwId / payAdjCodeName rows to forecast which shifts need coverage without re-keying approved leave.
Earned-wage access gate
On-demand pay products check isEligibleForWallet and isEligibleForODP, then pull available-pay netPay and hasRequestedSuccessfullyToday so a wallet load does not exceed the period or double-draw the same day.
Clock and timesheet compliance
Attendance systems store each punch's time and clockEntryName against the shift's timeStart / timeEnd and deptJobName so missed punches and off-job clocks surface before payroll locks.
Frequently asked questions
What data does the Dayforce interface expose?
The signed-in worker's own employment record: pay-run headers and stub line items (netPay, grossPay, statementItems), time-away balances (remainingBalance, tafwId), assigned shifts (employeeShiftByTimePeriod), clock punches (time, clockEntryName), Wallet On Demand eligibility and available pay, direct-deposit setup (isIBAN, financialInstitutionList), profile addresses and contacts, onboarding to-dos, and benefit enrollment windows.
How does the app authenticate its requests?
Sign-in is an OAuth2 authorization-code grant at the tenant authenticationUrl. An in-app redirect returns a code that the token-issue call exchanges for access_token, refresh_token and id_token. Later workforce, schedule and wallet calls send that access_token as a Bearer.
What is Dayforce Wallet On Demand in this surface?
A gated earned-wage path. The eligibility call returns isEligibleForWallet, isEligibleForODP, walletRegistrationStatus, payGroupCountry and stateCode. The available-pay call then returns the netPay (in currencyCode) the worker can load today, plus hasRequestedSuccessfullyToday and periodCalculationDetails.
Where do shifts and time-away live?
Shifts are the schedule query (employeeShiftByTimePeriod with timeStart, timeEnd, deptJobName, orgUnitName). Time-away balances and the next leave sit on the time-away balances and dashboard calls; a companion schedule widget also returns nextApprovedTimeAway (tafwId, payAdjCodeName, requestedAmount).
Apps similar to Dayforce
- ADP Mobile Solutions — ADP's employee self-service app for pay statements, time-off balances, schedules and clock punches — the closest large-payroll peer to Dayforce.
- Workday — Workday's employee app for time off, timecards, expenses and published schedules inside the Workday HCM suite.
- Paylocity — Paylocity's mid-market payroll and HR mobile app for pay, time off and employee self-service.
- UKG — UKG (Ultimate Kronos Group) is a workforce-management suite known for scheduling, time and attendance, and hourly employee self-service.
Topics
- Dayforce API
- Dayforce mobile endpoints
- pay statement API
- time away balance API
- Dayforce Wallet On Demand
- employee self-service API
- HCM payroll data API
- direct deposit API
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use