ADP Mobile Solutions data API
ADP Mobile Solutions is the employee self-service app for ADP payroll, time and benefits. Its data layer combines OAuth2 token issuance at POST /v1/auth/token, a session and profile call at POST /v1/session/login, and a scoped GraphQL gateway at POST /v1/graphql that serves paid-time-off balances, work schedules, period totals and time-off submissions. A check-photo OCR endpoint, POST /v1/ocr/bank-routing, reads bank routing data during direct-deposit setup.
ADP Mobile Solutions is the employee self-service companion for ADP payroll, time and benefits: workers open it to see pay statements and tax forms, check paid-time-off balances, review schedules, clock in and out with location-verified punches, and file time-off requests. Behind those screens the app talks to ADP's mobile backend over OAuth2-secured REST calls and a scoped GraphQL gateway — token issuance, a session and profile call, balance, schedule and timecard queries plus time-off submissions, and a check-photo OCR service that reads bank routing details during direct-deposit setup.
Screenshots
API surface
OAuth token issue (scoped access tokens)
POST
/v1/auth/tokenopendataIssues the scoped OAuth2 access tokens that the app attaches as Bearer credentials to its session, GraphQL and OCR calls; the time-and-attendance scope gates clock, balance and schedule data.
Auth: OAuth2 application credentials (HTTP Basic). Issues scoped Bearer access tokens — e.g. the time-and-attendance scope required by the clock, balance and schedule features.
- access_token
- token_type
- expires_in
- scope
- refresh_token
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/auth/token HTTP/1.1 Authorization: Basic <base64(appKey:appSecret)> Content-Type: application/x-www-form-urlencoded grant_type=password&username=jdoe&password=******&scope=time_attendance{ "access_token": "eyJhbGciOiJSUzI1NiIs...", "token_type": "Bearer", "expires_in": 3600, "scope": "time_attendance" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's sign-in and token exchange flowmatches the Bearer credential attached to every balance, schedule and timecard call
Server session + user profile
POST
/v1/session/loginosintCreates the server session after sign-in and returns the worker's profile envelope — user id, realm, auth scheme, locale and terms-acceptance flag — that personalizes the home screen and feature gates.
Auth: Form credential POST (username/password) with a client-app header; the resulting session upgrades to OAuth Bearer tokens for subsequent calls.
- id
- realmID
- authScheme
- tncAccepted
- Locale
- authToken
- enableForgotPassword
- enableChangePassword
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/session/login HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=UTF-8 X-Client-App: mobile username=jdoe&password=******{ "user": { "id": "3fa9c1e2-7b5d-4c2a-9e01-8f2d6a41b0c7", "realmID": "GLOBL", "authScheme": "federated", "tncAccepted": true, "Locale": {"language": "en", "country": "US"}, "enableForgotPassword": true, "enableChangePassword": true } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's credential sign-in flowmatches the profile envelope that personalizes the home screen
Time-off balances (GraphQL)
POST
/v1/graphqlopendataReads the signed-in worker's paid-time-off balances as of a date, per role — the numbers behind the app's PTO balance card.
Auth: OAuth2 Bearer access token with a time-and-attendance scope.
- roleCode
- balanceAsOfDate
- timeOffBalances
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/graphql HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"operationName":"GetTimeOffBalances","variables":{"roleCode":"employee","balanceAsOfDate":"2026-09-24"},"query":"query GetTimeOffBalances($roleCode: String!, $balanceAsOfDate: String!) { timeOffBalances { timeOffBalances(roleCode: $roleCode, balanceAsOfDate: $balanceAsOfDate) } }"}{ "data": { "timeOffBalances": { "timeOffBalances": [ {"policy": "Vacation", "balance": 62.5, "unit": "hours", "balanceAsOfDate": "2026-09-24"}, {"policy": "Sick", "balance": 24.0, "unit": "hours", "balanceAsOfDate": "2026-09-24"} ] } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's paid-time-off balance cardmatches the per-policy hour balances shown as of a date
Work schedule & period totals (GraphQL)
POST
/v1/graphqlopendataPulls the worker's assigned shifts for a date range (GetTimeSchedule) and the per-period hour totals (GetTimePeriodCalculations) behind the schedule grid and timesheet summary screens.
Auth: OAuth2 Bearer access token with a time-and-attendance scope.
- roleCode
- startDate
- endDate
- workAssignmentId
- includeSegments
- latestShift
- timeSchedule
- timePeriodCalculations
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/graphql HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"operationName":"GetTimeSchedule","variables":{"startDate":"2026-09-21","endDate":"2026-09-27","workAssignmentId":"W-10432"},"query":"query GetTimeSchedule($startDate: String!, $endDate: String!, $workAssignmentId: String) { timeScheduleData: timeSchedule { timeSchedule(roleCode: \"employee\", startDate: $startDate, endDate: $endDate, workAssignmentId: $workAssignmentId, includeSegments: \"Manual\") } }"}{ "data": { "timeScheduleData": { "timeSchedule": [ {"date": "2026-09-24", "workAssignmentId": "W-10432", "segments": [{"start": "09:00", "end": "17:00", "kind": "Manual"}]} ] } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's schedule grid and timesheet summary screenspairs the assigned-shift query with the per-period hour totals
Submit time-off request (GraphQL mutation)
POST
/v1/graphqlopendataSubmits the worker's time-off request events for review and returns their post-submit state — the write side of the app's time-off flow.
Auth: OAuth2 Bearer access token with a time-and-attendance scope.
- myEvents
- events
- Event
- TimeOffReview
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/graphql HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json {"operationName":"PostTimeOffReview","variables":{"myEvents":[{"type":"vacationRequest","startDate":"2026-10-05","endDate":"2026-10-06","unit":"days"}]},"query":"mutation PostTimeOffReview($myEvents: [Event]!) { TimeOffReview(events: $myEvents) }"}{ "data": { "TimeOffReview": { "events": [ {"id": "EVT-88120", "type": "vacationRequest", "status": "pending", "startDate": "2026-10-05", "endDate": "2026-10-06"} ] } } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's time-off request and review flowcovers the write side of the leave-request screens
Bank routing OCR (check photo)
POST
/v1/ocr/bank-routingopenbankingReads the bank routing number from a photographed paper check so workers can set up or change direct-deposit accounts without typing the numbers.
Auth: OAuth2 Bearer access token from the mobile session.
- routingNumber
- bankRoutingServiceEnabled
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/ocr/bank-routing HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: multipart/form-data; boundary=----appform ------appform Content-Disposition: form-data; name="checkImage"; filename="check.jpg" Content-Type: image/jpeg <JPEG bytes> ------appform--{ "routingNumber": "021000021", "confidence": 0.98 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's direct-deposit setup flowmatches the check-photo capture used to fill the routing number
Data categories
- pay statements
- time-off balances
- work schedules
- clock entries
- time-off requests
- user profile
- bank routing data
Where teams use this data
Payroll reconciliation feeds
Finance teams join each worker's session profile (id, realmID) with timePeriodCalculations totals pulled via the GraphQL gateway to reconcile scheduled hours against payroll runs before payday.
Absence management automation
Workforce tools read timeOffBalances (roleCode, balanceAsOfDate) to forecast coverage, then track PostTimeOffReview events so approved leave lands in scheduling systems without re-keying.
Direct-deposit onboarding checks
During bank setup, routingNumber values returned by the bank-routing OCR endpoint are validated against routing directories to catch mis-keyed deposit accounts before the first pay run.
Frequently asked questions
What data does the ADP Mobile Solutions interface expose?
The worker's own employment data: session and profile fields (id, realmID, locale), paid-time-off balances via GetTimeOffBalances, assigned shifts and period hour totals via GetTimeSchedule and GetTimePeriodCalculations, time-off request submission via PostTimeOffReview, and bank routing details read from check photos.
How does the app authenticate its requests?
Sign-in creates a server session through a form POST to /v1/session/login with a client-app header, and tokens are issued by the OAuth2 grant at /v1/auth/token. Time and attendance calls then send an OAuth2 Bearer token carrying a time-and-attendance scope.
Which endpoint carries time and attendance data?
The scoped GraphQL gateway at /v1/graphql. It serves balance, schedule and timecard queries such as GetTimeOffBalances and GetTimeSchedule, and accepts mutations such as PostTimeOffReview for time-off requests.
Does the app expose any banking data?
Yes — a narrow banking surface: the OCR endpoint /v1/ocr/bank-routing extracts the routingNumber from a photographed check so workers can configure direct deposit.
Topics
- ADP Mobile Solutions API
- ADP mobile endpoints
- pay statement API
- time off balance API
- ADP GraphQL gateway
- employee self-service API
- workforce data API
- bank routing OCR
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.