Skip to content

App developer documentation

HTTP contract for the customer app, picker app, and driver app.

  1. Public API — customer app (http://localhost:5000, prefix /v1)
  2. Picker API — Admin API (http://localhost:5001, /v1/fulfillment/picker/*)
  3. Driver API — Admin API (/v1/fulfillment/driver/*)

Admin catalog CRUD is out of scope. Live OpenAPI UIs (try requests with Bearer):

Which API to call

AppBase URL (dev)Auth
Customerhttp://localhost:5000Authorization: Bearer <accessToken>
Pickerhttp://localhost:5001Staff Bearer JWT + orders:read / orders:update
Driverhttp://localhost:5001Same staff JWT; route the UI when roleKey is driver

Do not send picker or driver traffic to the Public API. Fulfillment routes are not mounted there.

Read in this order

  1. Getting started
  2. Conventions
  3. Customer auth or Picker / Driver staff login
  4. Domain pages: catalog, cart, orders, account, notifications, support, assistant

Honest constraints

  • Persist accessToken + refreshToken (SecureStore). Send Bearer on every authenticated call. On 401, refresh once, then send the user to login.
  • Place-order payment methods: cod | wallet only.
  • OTP SMS is stubbed in development.
  • No fulfillment WebSockets — poll HTTP.