Porter - Logistics Service App icon

Porter Logistics Service App Data API

SmartShift Logistics Solutions Private Limited · Transport

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

  • Porter - Logistics Service App screenshot 1
  • Porter - Logistics Service App screenshot 2
  • Porter - Logistics Service App screenshot 3
  • Porter - Logistics Service App screenshot 4
  • Porter - Logistics Service App screenshot 5
  • Porter - Logistics Service App screenshot 6
  • Porter - Logistics Service App screenshot 7

API surface

  • On-demand vehicle quotations

    POST /v1/quotes/on-demand opendata

    Returns 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 screen
    • field names match the per-vehicle quotation model behind that screen
  • Apply on-demand coupon

    POST /v1/quotes/coupons/apply opendata

    Re-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 screen
    • request/response mirror the quotation flow with coupon fields added
  • Apply on-demand discounts

    POST /v1/quotes/discounts/apply opendata

    Applies 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/remove opendata

    Clears 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/packages opendata

    Lists 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 screen
    • camelCase field set matches the rental package cards shown per vehicle
  • Apply rental coupon

    POST /v1/rentals/coupons/apply opendata

    Re-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/create opendata

    Places 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 flow
    • response fields match the order model behind the trip tracking screen
  • Account history, wallet and dues

    POST /v1/account/snapshot openfinance

    Loads 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 snapshot
    • wallet and dues fields match the models behind the wallet card
  • Fetch geo region

    POST /v1/regions/resolve opendata

    Resolves 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/rating opendata

    Submits 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.

Get a quote