Spark Driver last-mile data API
Spark Driver is Walmart's last-mile courier app for independent drivers who pick up grocery and general-merchandise orders from Walmart and Sam's Club. Gig partners in the United States use it to accept delivery offers, run multi-stop trips, complete drop-offs and follow weekly pay.
Weekly pay windows on the earnings home carry aggregatedTransactionAmount plus the day's tipAmount and tripEarning; each completed stop then gets a golden receipt that splits earnedAmount against lastOfferAmount into TRIP, TIP and SURGE. Live batches show priceOffered and estimatedTotalPayout before accept, while the demand calendar paints hourly dsRatio slots over Supercenter pins.
Payroll bots reconcile those weekly totals to bank deposits, dispatch tools score offers on payout versus planned mileage, and fleet dashboards overlay busy-hour slots so partners know which stores will have work. openData Studio turns the same last-mile surface into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Generate login OTP
POST
/v1/spark/auth/otp/sendosintStarts Spark Driver OTP sign-in by sending a one-time code to the driver's loginId (phone or email).
Auth: None (pre-login). Identifies the driver by loginId.
- loginId
POST /v1/spark/auth/otp/send HTTP/1.1 Content-Type: application/json { "loginId": "4155550199" }{ "loginId": "4155550199" }Validate OTP and issue session
POST
/v1/spark/auth/otp/confirmosintConfirms the OTP and returns the signed-in driver identity plus authToken/refreshToken used as the session on later last-mile calls.
Auth: None (issues the session). Later calls send the returned authToken as a Bearer session token plus a consumer key.
- username
- firstName
- lastName
- driverUUID
- driverUserId
- authToken
- refreshToken
- validity
- authenticationState
- status
POST /v1/spark/auth/otp/confirm HTTP/1.1 Content-Type: application/json { "loginId": "4155550199", "loginCode": "482916" }{ "username": "4155550199", "firstName": "Jordan", "lastName": "Lee", "driverUUID": "dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234", "driverUserId": "4155550199", "authToken": "eyJhbGciOi...", "refreshToken": "d8f1c2a9...", "validity": 1800, "authenticationState": "SUCCESS", "status": "ACTIVE" }Available delivery offers
GET
/v1/spark/offersopendataLists live delivery offers for the signed-in Spark driver, each wrapping a Trip with offerPrice (priceOffered, surge, estimatedTotalPayout) and stop counts.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- offers
- expiryTime
- status
- tripId
- displayTripId
- driverOfferId
- totalDeliveryTasks
- totalOrders
- totalPlannedMileage
- pickupASAP
- isTipEligible
- priceOffered
- preTipAmount
- estimatedPayout
- estimatedTotalPayout
- surge
- currencyAmount
- currencyUnit
GET /v1/spark/offers?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "offers": [ { "expiryTime": 1758738120000, "isExpired": false, "isTakenAlready": false, "status": "OFFER_PUBLISHED", "trip": { "tripId": "trp_44102", "displayTripId": "SPK-884211", "driverOfferId": "off_77a1", "totalDeliveryTasks": 3, "totalOrders": 3, "totalPlannedMileage": 12.4, "pickupASAP": true, "isTipEligible": true, "offerPrice": { "priceOffered": {"currencyAmount": 18.5, "currencyUnit": "USD"}, "preTipAmount": {"currencyAmount": 14.25, "currencyUnit": "USD"}, "estimatedPayout": {"currencyAmount": 18.5, "currencyUnit": "USD"}, "estimatedTotalPayout": {"currencyAmount": 22.0, "currencyUnit": "USD"}, "surge": {"currencyAmount": 2.0, "currencyUnit": "USD"} } } } ] }Accept delivery offer
POST
/v1/spark/offers/{offerId}/acceptopendataAccepts a published offer at the driver's current coordinates; the offer-acceptance screen writes offerId plus lat/long and receives ACCEPTED.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- offerId
- driverId
- latitude
- longitude
- status
POST /v1/spark/offers/off_77a1/accept HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "offerId": "off_77a1", "driverId": "4155550199", "latitude": 37.7902, "longitude": -122.3971 }{ "status": "ACCEPTED" }Trip details (lite)
GET
/v1/spark/trips/{tripId}opendataLoads the lite trip card used on the active-trip screen: identifiers, stop counts, planned mileage, pickup pin and the accepted offerPrice.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- tripId
- tripExternalId
- displayTripId
- status
- tripStartDateTime
- pickupTime
- totalDeliveryTasks
- totalOrders
- totalPlannedMileage
- totalCalculatedMileage
- totalCalculatedTravelTime
- isTipEligible
- driverPin
- deliveryStartPoint
- offerPrice
GET /v1/spark/trips/trp_44102?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "tripId": "trp_44102", "tripExternalId": "ext_9c81", "displayTripId": "SPK-884211", "status": "IN_PROGRESS", "tripStartDateTime": 1758734400000, "pickupTime": 1758735000000, "totalDeliveryTasks": 3, "totalOrders": 3, "totalPlannedMileage": 12.4, "totalCalculatedMileage": 13.1, "totalCalculatedTravelTime": 42.0, "isTipEligible": true, "driverPin": "4829", "deliveryStartPoint": { "storeName": "Walmart Supercenter #2455", "latitude": 37.7849, "longitude": -122.4094 }, "offerPrice": { "priceOffered": {"currencyAmount": 18.5, "currencyUnit": "USD"}, "estimatedTotalPayout": {"currencyAmount": 22.0, "currencyUnit": "USD"} } }Completed trips list
GET
/v1/spark/trips/historyopendataPages the driver's completed-trip history as CompletedTripLite rows (ids, window, stop count, status, offerPrice) for the Completed tab.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- trips
- tripId
- tripExternalId
- displayTripId
- tripStartDateTime
- tripEndDateTime
- totalDeliveryTasks
- status
- offerPrice
GET /v1/spark/trips/history?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234&startDate=2026-09-22&endDate=2026-09-28&pageNo=1&pageSize=20 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "trips": [ { "tripId": "trp_44102", "tripExternalId": "ext_9c81", "displayTripId": "SPK-884211", "tripStartDateTime": 1758734400000, "tripEndDateTime": 1758738120000, "totalDeliveryTasks": 3, "status": "COMPLETED", "offerPrice": { "priceOffered": {"currencyAmount": 18.5, "currencyUnit": "USD"}, "estimatedTotalPayout": {"currencyAmount": 22.0, "currencyUnit": "USD"} } } ] }Weekly earnings summary
GET
/v1/spark/pay/weeklyopenfinanceReturns paginated weekly pay windows (aggregatedTransactionAmount, trip count, USD) plus the current week's dailyEarnings — the Spark earnings home.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- weeklyTransactions
- week
- weekStartDate
- weekEndDate
- aggregatedTransactionAmount
- currency
- noOfTransactionInWeek
- dailyEarnings
GET /v1/spark/pay/weekly?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234&pageNo=1&pageSize=8 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "weeklyTransactions": [ { "week": 39, "weekStartDate": "2026-09-21", "weekEndDate": "2026-09-27", "aggregatedTransactionAmount": 612.4, "currency": "USD", "noOfTransactionInWeek": 28 } ], "dailyEarnings": { "week": 39, "earnings": [ {"date": "2026-09-24", "amount": 96.5, "noOfTrips": 5} ] } }Daily earnings with trips
GET
/v1/spark/pay/dailyopenfinanceBreaks one calendar day into trip pay, tips, incentives and the per-trip EarningTrip list that the daily-earnings drill-down renders.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- transactionAmount
- deliveriesAmount
- tipAmount
- transactionStatus
- noOfTransaction
- dayName
- date
- currency
- tripEarning
- incentiveBonusEarning
- rewardsEarning
- trips
- unconfirmedTips
GET /v1/spark/pay/daily?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234&date=2026-09-24&timezone=America/Los_Angeles HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "transactionAmount": 96.5, "deliveriesAmount": 78.0, "tipAmount": 14.5, "transactionStatus": "CONFIRMED", "noOfTransaction": 5, "dayName": "Wednesday", "date": "2026-09-24T00:00:00Z", "currency": "USD", "tripEarning": {"amount": 78.0, "name": "TRIP"}, "incentiveBonusEarning": {"amount": 4.0, "name": "INCENTIVE"}, "rewardsEarning": {"amount": 0.0, "name": "REWARDS"}, "trips": [ { "tripId": "trp_44102", "displayTripId": "SPK-884211", "amount": 22.0, "totalOrders": 3, "tripStatus": "COMPLETED", "unconfirmedTips": 3.0 } ] }Golden trip receipt
GET
/v1/spark/pay/trips/{tripId}/receiptopenfinanceReturns the per-trip golden receipt: earnedAmount vs lastOfferAmount, a categorized earningsBreakdown (trip/tip/surge) and depositHistory.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- tripDetails
- displayTripId
- tripStatus
- earnedAmount
- lastOfferAmount
- earningsBreakdown
- category
- displayName
- offeredAmount
- depositHistory
- rewardPoints
GET /v1/spark/pay/trips/trp_44102/receipt HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "tripDetails": { "displayTripId": "SPK-884211", "tripStatus": "COMPLETED", "timeStamp": 1758738120000, "currency": "USD", "earnedAmount": 22.0, "lastOfferAmount": 18.5 }, "earningsBreakdown": [ { "category": "TRIP", "displayName": "Trip earnings", "orderPriority": 1, "earnedAmount": 14.25, "offeredAmount": 14.25 }, { "category": "TIP", "displayName": "Customer tip", "orderPriority": 2, "earnedAmount": 3.0, "offeredAmount": null }, { "category": "SURGE", "displayName": "Busy-time extra", "orderPriority": 3, "earnedAmount": 2.0, "offeredAmount": 2.0 } ], "depositHistory": [ { "category": "DIRECT_DEPOSIT", "status": "PENDING", "amount": 22.0 } ], "rewardPoints": {"points": 12} }Export earnings history
POST
/v1/spark/pay/exportopenfinanceQueues an XLSX dump of the driver's earnings between startDate and endDate; the history bottom sheet polls on requestId.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- driverUUID
- startDate
- endDate
- format
- requestId
- status
- message
POST /v1/spark/pay/export HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "driverUUID": "dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234", "startDate": "2026-07-01", "endDate": "2026-09-30", "format": "XLSX" }{ "requestId": "exp_c41e90", "status": "QUEUED", "message": "Earnings export queued" }Driver performance summary
POST
/v1/spark/quality/scorecardopendataReturns the driver's quality scorecard: named PerformanceMetric rows with displayValue, unit and performanceZone, plus tripMetric totals.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- driver
- metrics
- name
- title
- description
- displayValue
- unit
- performanceZone
- tripMetric
- shoppersMetrics
- summaryV2ZoneEnabled
POST /v1/spark/quality/scorecard HTTP/1.1 Authorization: Bearer eyJhbGciOi... Content-Type: application/json { "driverId": "4155550199", "driverUUID": "dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234" }{ "driver": {"driverUUID": "dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234"}, "metrics": [ { "name": "onTimeArrival", "title": "On-time arrival", "description": "Share of stops arrived on time", "position": "1", "valueDetails": {"displayValue": "96%", "unit": "PERCENT"}, "performanceZone": "GREEN" } ], "tripMetric": {"completedTrips": 184}, "shoppersMetrics": [], "summaryV2ZoneEnabled": true }Rewards tier and metrics
GET
/v1/spark/rewards/meopendataReads the Spark Rewards card: currentLevel vs nextLevel, qualifyingPeriod, and primaryMetrics (acceptance and related KPIs) that gate the next tier.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- tiers
- currentTierDetails
- currentLevel
- nextLevel
- qualifyingPeriod
- projectedTierDetails
- primaryMetrics
- key
- value
- unit
- lastUpdatedTs
- rewardsMetrics
GET /v1/spark/rewards/me HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "tiers": [{"name": "Silver"}, {"name": "Gold"}, {"name": "Platinum"}], "currentTierDetails": { "currentLevel": "Gold", "nextLevel": "Platinum", "qualifyingPeriod": {"start": "2026-07-01", "end": "2026-09-30"} }, "projectedTierDetails": {"projectedLevel": "Gold"}, "primaryMetrics": { "data": [ { "key": "ACCEPTANCE_RATE", "value": 0.92, "unit": "PERCENT", "currentLevel": "Gold", "nextLevel": "Platinum", "lastUpdatedTs": 1758738120000 } ] }, "rewardsMetrics": {"pointsToNext": 40} }Active incentive promotions
GET
/v1/spark/bonuses/activeopenfinanceLists in-progress incentive promotions for the driver's deliveryArea, including targetIncentiveAmount and eligibleTime windows shown on the bonuses screen.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- driverUserId
- driverUUID
- deliveryArea
- displayDate
- incentives
- incentiveId
- incentiveDisplayId
- incentiveName
- incentiveSummary
- targetIncentiveAmount
- eligibleTime
- incentiveStatus
- executionId
- showProgressBar
GET /v1/spark/bonuses/active?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234 HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "driverUserId": "4155550199", "driverUUID": "dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234", "deliveryArea": "SF-BAY", "displayDate": "2026-09-24", "incentives": [ { "incentiveId": "inc_2201", "incentiveDisplayId": "WKND-BAY-40", "incentiveName": "Weekend Bay Area bonus", "incentiveSummary": "Complete 8 trips Sat–Sun", "targetIncentiveAmount": 40.0, "eligibleTime": "08:00-20:00", "incentiveStatus": "IN_PROGRESS", "executionId": "exe_91", "showProgressBar": true } ] }Busy-hour demand calendar
GET
/v1/spark/demand/hoursopendataFeeds the home-screen busy-hour heatmap: per-day hourlyDSRatio slots (driver-to-store dsRatio) plus color legend and overlapping incentives.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- colors
- busyHours
- date
- displayDate
- hourlyDSRatio
- slotStartTime
- slotEndTime
- dsRatio
- events
- incentives
GET /v1/spark/demand/hours?includeIncentives=true HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "colors": [ {"code": "LOW", "hex": "#C8E6C9"}, {"code": "HIGH", "hex": "#E53935"} ], "busyHours": [ { "date": 1758734400000, "displayDate": "Wed 24", "hourlyDSRatio": [ {"slotStartTime": 16, "slotEndTime": 17, "dsRatio": 0.82}, {"slotStartTime": 17, "slotEndTime": 18, "dsRatio": 1.14} ], "events": [] } ], "incentives": [] }Zone stores and offer heatmap
GET
/v1/spark/zone/storesopendataReturns stores in the driver's zone that currently have offers, with address/lat-long and heatMapMarkerEntryList pins for the My Zone map.
Auth: Bearer authToken from OTP confirm, plus a consumer key
- deliveryStartPoints
- deliveryStartPointId
- deliveryArea
- countryCode
- storeName
- addressLine1
- city
- state
- postalCode
- latitude
- longitude
- heatMapMarkerEntryList
GET /v1/spark/zone/stores?driverUUID=dvr_8f21c0a4-9b11-4e02-a1c3-77d4e8b01234&deliveryArea=SF-BAY HTTP/1.1 Authorization: Bearer eyJhbGciOi...{ "deliveryStartPoints": [ { "deliveryStartPointId": "dsp_2455", "deliveryArea": "SF-BAY", "countryCode": "US", "storeName": "Walmart Supercenter #2455", "addressLine1": "450 Mission St", "city": "San Francisco", "state": "CA", "postalCode": "94105", "latitude": 37.7902, "longitude": -122.3971 } ], "heatMapMarkerEntryList": [ {"latitude": 37.7902, "longitude": -122.3971, "offerCount": 4} ] }
Data categories
- identity
- session
- trip-offers
- active-trips
- completed-trips
- weekly-earnings
- daily-earnings
- trip-receipts
- earnings-export
- performance
- rewards-tier
- incentives
- busy-hours
- zone-heatmap
Where teams use this data
Weekly deposit reconciliation
Payroll bots pull aggregatedTransactionAmount, weekStartDate and noOfTransactionInWeek, then match each day's tipAmount and tripEarning against bank deposits and Prop 22 true-up windows.
Offer-quality scoring
Dispatch tools score live offers on priceOffered, estimatedTotalPayout, surge, totalPlannedMileage and totalDeliveryTasks so drivers can filter low-yield batches before accept.
Per-trip pay ledger
Tax and gig-ledger apps store golden receipts (earnedAmount vs lastOfferAmount, earningsBreakdown categories TRIP/TIP/SURGE) alongside displayTripId for year-end 1099 support.
Busy-hour staffing overlay
Fleet dashboards overlay hourly dsRatio slots and zone storeName pins so partners know which Walmart Supercenters will have offers in the next hour.
Frequently asked questions
What earnings fields does Spark Driver expose?
Weekly windows return aggregatedTransactionAmount, weekStartDate/weekEndDate and noOfTransactionInWeek in USD. Daily drill-down adds transactionAmount, deliveriesAmount, tipAmount, tripEarning and the per-trip EarningTrip list. The golden receipt splits earnedAmount into TRIP/TIP/SURGE categories.
How does Spark Driver authenticate?
Drivers request an OTP with loginId, then validate loginCode. The User payload returns authToken, refreshToken, driverUUID and driverUserId. Later last-mile calls send that session token plus a consumer key.
What offer and trip data is available?
Available offers wrap a Trip with offerPrice (priceOffered, preTipAmount, surge, estimatedTotalPayout), stop counts and planned mileage. Accept posts offerId plus the driver's latitude/longitude. Lite trip details and the completed-trip list reuse those identifiers.
Is this a public Walmart developer API?
No. These are illustrative reconstructions of the first-party last-mile calls the Spark Driver app makes after sign-in. They are not a documented public Walmart developer program.
Topics
- Spark Driver API
- Walmart Spark Driver earnings
- aggregatedTransactionAmount
- priceOffered
- earnedAmount
- dsRatio busy hours
- last-mile driver data
- golden trip receipt
- Spark Driver offers
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