ADP Mobile Solutions icon

ADP Mobile Solutions data API

ADP, INC. · Banking

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

  • ADP Mobile Solutions screenshot 1
  • ADP Mobile Solutions screenshot 2
  • ADP Mobile Solutions screenshot 3
  • ADP Mobile Solutions screenshot 4
  • ADP Mobile Solutions screenshot 5
  • ADP Mobile Solutions screenshot 6
  • ADP Mobile Solutions screenshot 7
  • ADP Mobile Solutions screenshot 8

API surface

  • OAuth token issue (scoped access tokens)

    POST /v1/auth/token opendata

    Issues 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 flow
    • matches the Bearer credential attached to every balance, schedule and timecard call
  • Server session + user profile

    POST /v1/session/login osint

    Creates 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 flow
    • matches the profile envelope that personalizes the home screen
  • Time-off balances (GraphQL)

    POST /v1/graphql opendata

    Reads 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 card
    • matches the per-policy hour balances shown as of a date
  • Work schedule & period totals (GraphQL)

    POST /v1/graphql opendata

    Pulls 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 screens
    • pairs the assigned-shift query with the per-period hour totals
  • Submit time-off request (GraphQL mutation)

    POST /v1/graphql opendata

    Submits 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 flow
    • covers the write side of the leave-request screens
  • Bank routing OCR (check photo)

    POST /v1/ocr/bank-routing openbanking

    Reads 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 flow
    • matches 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.

Get a quote