Porter Logistics Service App Data API
Porter's customer app prices and books intra-city goods moves through a private JSON customer API. The review screen posts /v1/quotes/on-demand with vehicle_ids and a nested order and gets back per-vehicle fare_info plus a quotation_uuid; the booking call /v1/bookings/create turns that quote into an order_crn. The home snapshot at /v1/account/snapshot returns the Porter wallet amount, Paytm balance, dues_amount and open_or_live_order_ids. Coupons, rental packages, geo-region polygons and driver ratings share the same mobile + auth_token session.
Porter is India's on-demand goods-logistics customer app (two-wheelers, tempos, Ace and trucks) from SmartShift Logistics. Behind the fare-review, coupon, rental-package and wallet screens sits a private JSON customer API: on-demand quotations keyed by vehicle_ids and a nested order (pickup/drop lat-long, geo_region_id, payment_mode), coupon and discount application that returns fare plus applied_coupon, rental hour/km packages, a Porter/Paytm wallet snapshot (amount, payable, Paytm balance), geo-region polygons for the pickup city, live-order and dues flags on the account snapshot, and post-trip driver ratings. Signed-in calls send the customer's mobile and auth_token in the request body.
Screenshots
API surface
On-demand vehicle quotations
POST
/v1/quotes/on-demandopendataReturns per-vehicle on-demand fare quotes (quotation_uuid, fare_info, route_polyline) for a pickup/drop pair — the review-and-book screen.
Auth: Customer session: JSON body fields mobile and auth_token.
- vehicle_ids
- selected_vehicle_id
- service_type
- part_load_only_request
- customer_mobile
- geo_region_id
- from_address_lat
- from_address_long
- to_address_lat
- to_address_long
- waypoints_attributes
- payment_mode
- use_porter_credits
- vehicle_wise_quotations
- quotation_uuid
- vehicle_id
- fare_info
- fare
- min_paytm_amount
- total_discount
- applied_coupon
- fare_before_discount
- nearby_vehicle_drivers
- route_polyline
- select_vehicle_id
- wallet_info
- porter_duration_in_mins
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/quotes/on-demand HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "vehicle_ids": [1, 2, 5], "selected_vehicle_id": 2, "service_type": "spot", "part_load_only_request": false, "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 12.9716, "from_address_long": 77.5946, "to_address_lat": 12.9352, "to_address_long": 77.6245, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "business_order_info": null, "use_porter_credits": true } }{ "vehicle_wise_quotations": [{ "quotation_uuid": "q-9f3a1c", "vehicle_id": 2, "fare_info": { "fare": 412.0, "min_paytm_amount": 50.0, "min_paytm_amount_with_credits": 0.0, "total_discount": 40.0, "applied_coupon": null, "description": "2-wheeler", "applied_discounts": [], "fare_before_discount": 452.0 }, "book_cta_info_text": "Book now", "value_added_services": [], "bill_details": {}, "porter_duration_in_mins": 28, "price_differential_percentage": 0, "outstation_tag": null }], "nearby_vehicle_drivers": [], "route_polyline": "enc:polyline", "select_vehicle_id": 2, "wallet_info": { "paytm_wallet": {"login_status": true, "balance": 120.5, "balance_api_status": "ok"}, "porter_wallet": {"amount": 80.0, "payable": true} }, "partload_vehicle_wise_quotations": [] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's review-and-book fare screenfield names match the per-vehicle quotation model behind that screen
Apply on-demand coupon
POST
/v1/quotes/coupons/applyopendataRe-prices an on-demand quotation after applying coupon_code for a vehicle_id, returning fare_info with applied_coupon and total_discount.
Auth: Customer session: JSON body fields mobile and auth_token.
- coupon_code
- vehicle_id
- quotations_request
- applied_coupon
- total_discount
- applied_discounts
- fare
- fare_before_discount
- quotation_uuid
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/quotes/coupons/apply HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "coupon_code": "PORTER40", "vehicle_id": 2, "quotations_request": { "vehicle_ids": [2], "selected_vehicle_id": 2, "service_type": "spot", "part_load_only_request": false, "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 12.9716, "from_address_long": 77.5946, "to_address_lat": 12.9352, "to_address_long": 77.6245, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": false } } }{ "vehicle_wise_quotations": [{ "quotation_uuid": "q-9f3a1c", "vehicle_id": 2, "fare_info": { "fare": 372.0, "min_paytm_amount": 50.0, "min_paytm_amount_with_credits": 0.0, "total_discount": 80.0, "applied_coupon": "PORTER40", "description": "2-wheeler", "applied_discounts": [{"value": "PORTER40"}], "fare_before_discount": 452.0 } }], "select_vehicle_id": 2, "wallet_info": { "paytm_wallet": {"login_status": true, "balance": 120.5, "balance_api_status": "ok"}, "porter_wallet": {"amount": 80.0, "payable": true} } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's coupon entry step on the fare review screenrequest/response mirror the quotation flow with coupon fields added
Apply on-demand discounts
POST
/v1/quotes/discounts/applyopendataApplies coupon and rewards discounts (should_use_auto_apply, requested_discounts) against a quotations_request and returns the updated fare_info.
Auth: Customer session: JSON body fields mobile and auth_token.
- discounts_request
- should_use_auto_apply
- requested_discounts
- value
- vehicle_id
- quotations_request
- applied_discounts
- applied_coupon
- total_discount
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/quotes/discounts/apply HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "vehicle_id": 2, "discounts_request": { "should_use_auto_apply": true, "requested_discounts": [{"value": "PORTER40"}] }, "quotations_request": { "vehicle_ids": [2], "selected_vehicle_id": 2, "service_type": "spot", "part_load_only_request": false, "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 12.9716, "from_address_long": 77.5946, "to_address_lat": 12.9352, "to_address_long": 77.6245, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": true } } }{ "vehicle_wise_quotations": [{ "quotation_uuid": "q-9f3a1c", "vehicle_id": 2, "fare_info": { "fare": 372.0, "total_discount": 80.0, "applied_coupon": "PORTER40", "applied_discounts": [{"value": "PORTER40"}], "fare_before_discount": 452.0 } }], "select_vehicle_id": 2 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's auto-apply rewards and discount flow
Remove on-demand coupon
POST
/v1/quotes/coupons/removeopendataClears a previously applied coupon_code from an on-demand quotation and returns the undiscounted fare_info.
Auth: Customer session: JSON body fields mobile and auth_token.
- coupon_code
- vehicle_id
- quotations_request
- applied_coupon
- total_discount
- fare
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/quotes/coupons/remove HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "coupon_code": "PORTER40", "vehicle_id": 2, "quotations_request": { "vehicle_ids": [2], "selected_vehicle_id": 2, "service_type": "spot", "part_load_only_request": false, "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 12.9716, "from_address_long": 77.5946, "to_address_lat": 12.9352, "to_address_long": 77.6245, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": false } } }{ "vehicle_wise_quotations": [{ "quotation_uuid": "q-9f3a1c", "vehicle_id": 2, "fare_info": { "fare": 452.0, "total_discount": 0.0, "applied_coupon": null, "applied_discounts": [], "fare_before_discount": 452.0 } }], "select_vehicle_id": 2 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the coupon remove action on the fare review screen
Rental packages
POST
/v1/rentals/packagesopendataLists hour/km rental packages per vehicle (uuid, fare, time, distance) for the rental booking flow.
Auth: Customer session: JSON body fields mobile and auth_token.
- n_waypoints
- vehicle_ids
- order
- rentalVehicleData
- uuid
- fare
- totalDiscount
- time
- distance
- minPaytmBalance
- vehicleInfoList
- initSelectedVehicleId
- description
- walletInfo
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/rentals/packages HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "n_waypoints": 0, "vehicle_ids": [4, 5], "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 19.0760, "from_address_long": 72.8777, "to_address_lat": 19.1136, "to_address_long": 72.8697, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": false } }{ "rentalVehicleData": [{ "uuid": "rp-8h", "fare": 1499.0, "totalDiscount": 0.0, "time": "8 hrs", "distance": "80 km", "minPaytmBalance": 0.0 }], "vehicleInfoList": [], "initSelectedVehicleId": 4, "description": "Full-day rental", "walletInfo": { "paytm_wallet": {"login_status": true, "balance": 120.5, "balance_api_status": "ok"}, "porter_wallet": {"amount": 80.0, "payable": true} } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's rental package selection screencamelCase field set matches the rental package cards shown per vehicle
Apply rental coupon
POST
/v1/rentals/coupons/applyopendataRe-prices rental packages after applying couponCode for selectedVehicleId.
Auth: Customer session: JSON body fields mobile and auth_token.
- couponCode
- selectedVehicleId
- rentalPackagesRequest
- uuid
- fare
- totalDiscount
- initSelectedVehicleId
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/rentals/coupons/apply HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "couponCode": "RENTAL100", "selectedVehicleId": 4, "rentalPackagesRequest": { "mobile": "9876543210", "auth_token": "<auth_token>", "n_waypoints": 0, "vehicle_ids": [4], "order": { "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 19.0760, "from_address_long": 72.8777, "to_address_lat": 19.1136, "to_address_long": 72.8697, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": false } } }{ "rentalVehicleData": [{ "uuid": "rp-8h", "fare": 1399.0, "totalDiscount": 100.0, "time": "8 hrs", "distance": "80 km", "minPaytmBalance": 0.0 }], "initSelectedVehicleId": 4, "description": "Full-day rental", "walletInfo": { "porter_wallet": {"amount": 80.0, "payable": true} } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the rental coupon step in the rental booking flow
Create on-demand booking
POST
/v1/bookings/createopendataPlaces an on-demand booking from a quotation_uuid and returns order_crn plus order_status for the live-trip screen.
Auth: Customer session: JSON body fields mobile and auth_token.
- quotation_uuid
- vehicle_id
- customer_mobile
- geo_region_id
- from_address_lat
- from_address_long
- to_address_lat
- to_address_long
- payment_mode
- use_porter_credits
- order_crn
- order_created_at
- order_status
- rebooking_enabled
- pay_online_enabled
- is_cod_order
- amount
- cash_payable
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/bookings/create HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "quotation_uuid": "q-9f3a1c", "vehicle_id": 2, "customer_mobile": "9876543210", "geo_region_id": 3, "from_address_lat": 12.9716, "from_address_long": 77.5946, "to_address_lat": 12.9352, "to_address_long": 77.6245, "waypoints_attributes": [], "value_added_services": [], "payment_mode": "online", "use_porter_credits": true }{ "order_crn": "CRN240918001", "order_created_at": 1726632000000, "geo_region_id": 3, "order_status": {"name": "finding_driver"}, "rebooking_enabled": false, "pay_online_enabled": true, "is_cod_order": false, "total_amount": {"amount": 372.0, "cash_payable": 0.0} }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the booking confirmation and live-trip flowresponse fields match the order model behind the trip tracking screen
Account history, wallet and dues
POST
/v1/account/snapshotopenfinanceLoads the signed-in home snapshot: Porter/Paytm wallet balances, dues_amount, live order ids, unrated trips and blacklisting_info.
Auth: Customer session: JSON body fields mobile and auth_token.
- for_blacklisting
- blacklisting_info
- is_blacklisted
- wallet_info
- paytm_wallet
- login_status
- balance
- balance_api_status
- porter_wallet
- amount
- payable
- category
- unrated_order_ids
- open_or_live_order_ids
- goods_type_info
- all_goods_types
- default_goods_types
- dues_info
- dues_amount
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/account/snapshot HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "for_blacklisting": false }{ "blacklisting_info": { "is_blacklisted": false, "skip_blacklisting": false, "type": null, "message": null, "balance": 0.0 }, "wallet_info": { "paytm_wallet": {"login_status": true, "balance": 120.5, "balance_api_status": "ok"}, "porter_wallet": {"amount": 80.0, "payable": true} }, "category": "retail", "unrated_order_ids": ["CRN240917014"], "open_or_live_order_ids": ["CRN240918001"], "app_update_data": {}, "goods_type_info": { "all_goods_types": ["Household", "Electronics"], "default_goods_types": ["Household"] }, "share_app": {}, "dues_info": {"message": "", "dues_amount": 0.0} }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the signed-in home screen snapshotwallet and dues fields match the models behind the wallet card
Fetch geo region
POST
/v1/regions/resolveopendataResolves a lat/long pair to a Porter geo_region (id, name, pickup_polygon, drop_polygon) used by quotations and booking.
Auth: Optional customer session (mobile, auth_token). Request body is lat/long.
- lat
- long
- geo_region
- id
- name
- pickup_polygon
- drop_polygon
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/regions/resolve HTTP/1.1 Content-Type: application/json { "lat": 12.9716, "long": 77.5946 }{ "geo_region": { "id": 3, "name": "Bengaluru", "pickup_polygon": "12.97,77.59 ...", "drop_polygon": "12.97,77.59 ..." } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the pickup-city resolution step when a pin is dropped
Save driver rating
POST
/v1/trips/ratingopendataSubmits post-trip driver feedback (rating_reasons with id/name) for an order_crn from unrated_order_ids.
Auth: Customer session: JSON body fields mobile and auth_token.
- order_crn
- rating_reasons
- id
- name
- unrated_order_ids
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/trips/rating HTTP/1.1 Content-Type: application/json { "mobile": "9876543210", "auth_token": "<auth_token>", "order_crn": "CRN240917014", "rating_reasons": [{"id": 11, "name": "On time"}] }{ "order_crn": "CRN240917014", "unrated_order_ids": [] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the post-trip driver rating prompt
Data categories
- quotations
- fares
- coupons
- wallets
- geo-regions
- orders
- ratings
Where teams use this data
Shipper fare intelligence
A 3PL or marketplace can snapshot vehicle-wise fare quotes, coupon-adjusted totals and Porter-duration minutes before committing a lane, then compare two-wheeler vs tempo quotes for the same pickup/drop.
Wallet and dues reconciliation
Finance bots can pull Porter-wallet amount/payable plus Paytm login_status and balance alongside dues_amount to flag customers who cannot book until outstanding cash is cleared.
Live-order ops desk
An ops console can poll open_or_live_order_ids and unrated_order_ids after booking, then close the loop by posting rating_reasons once the trip ends.
Serviceable-city gate
A booking widget can resolve pickup coordinates to a geo region (id, name, pickup/drop polygons) and refuse quotes outside Porter's coverage before showing vehicle options.
Frequently asked questions
What data does the Porter customer API expose?
On-demand quotations (quotation_uuid, fare, vehicle_id), coupon and discount adjustments, rental hour/km packages, Porter and Paytm wallet balances, geo-region polygons, live/unrated order ids, dues, and post-trip rating reasons.
How does Porter authenticate customer calls?
Signed-in requests send the customer's mobile and auth_token in the JSON request body, as issued by the login flow. Geo-region lookup is keyed by lat/long and does not require those fields on the body.
Does the Porter customer API cover rentals as well as on-demand bookings?
Yes. The rental flow lists hour/km packages per vehicle (uuid, fare, time, distance) and re-prices them after coupon application, separately from the on-demand quotation and booking flow used for immediate trips.
Topics
- Porter API
- Porter quotations API
- Porter wallet balance
- Porter customer data API
- on-demand logistics API India
- Porter coupon fare
- Porter geo region
- Porter order CRN
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.