Live inventory, orders, COD and settlements — one place, updated as it happens.
| Account | Login ID | Login | Portal | Last sign-in |
|---|
View as shows exactly what that account sees when it signs in. You stay signed in as admin (no password, no session swap) and every view-as is written to the audit log. Audit shows their last 100 logged actions.
Tap a brand to open its dashboard. Tap a courier to drill into its brands, orders, COD and billing. Numbers are the last 30 days; the arrow compares with the 30 before that.
| Order | Product | Customer | Area | COD | Status | Action |
|---|
| Brand | Orders, 30 days | Change | Activity, 30 days | Last order | Health |
|---|
Red = churn risk: shrinking volume or gone quiet. Call them before they call a competitor.
| SKU | Product | On hand | Reserved | Available | Level | Action |
|---|
Reserved = units assigned to orders that haven't shipped yet. Available = on hand − reserved. Cover = available ÷ the average units ordered per day over the last 30 days.
| Date | SKU | Product | Expected | Received | Status |
|---|
Brands announce a shipment; we count it on arrival. Confirmed units go straight into live stock, and any mismatch is flagged, never hidden.
| Date | SKU | Change | Reason | Note |
|---|
Every stock change is logged permanently, and the client can see this log. Damage is never silently absorbed.
We count it on arrival; the units go into live stock once confirmed.
Logged permanently; the brand sees it.
A deal is ordered like one item. We pack it only when every item in it has been scanned, and the stock of each item goes down.
| Order | Product | Customer | Area | COD | Status | Action |
|---|
| Return | Order | Product | Customer | Reason | Status | Action |
|---|
| Month | Orders | Order value | Commission | Paid |
|---|
| Order | Date | Order value | Fulfillment | Delivery | Total fee |
|---|
Fulfillment fee = the greater of your minimum or the percentage of order value. Only delivered, non-voided orders are billed.
| Date | Description | Type | Amount |
|---|
Measured from order received to delivered. The target comes from this client's rate card (SLA hours).
Issue a key so this brand’s system can push orders straight into RapidXpk. The full key is shown once — copy it then.
| Key | Env | Label | Created | Last used |
|---|
Each box is an open parcel at the customer's exact pin. Grey = received, orange = packed, blue = out for delivery, red = failed attempt. Lime border = pinned on the nearest landmark. Parcels with no exact pin are not guessed onto the map: they are under "No pin". 🏍️ = a rider on duty, live. 🏢 = RapidXpk HQ. Tap anything for details.
| Courier | Brands | Orders 30d | Delivered % | RTO % | COD outstanding | Commission owed | Status |
|---|---|---|---|---|---|---|---|
No couriers yet. Add your first partner. | |||||||
Click a courier to drill into its brands, orders, COD, billing and performance.
| Brand | Code | Orders 30d | Delivered % | RTO % | COD outstanding |
|---|
Generate a code, send it to the brand. When RapidXpk creates their account with that code they are linked to your courier automatically.
| Order | Customer | Rider | COD | Where the cash is | Waiting |
|---|
In transit: out for delivery. With rider: collected at the door, still in the rider's hand. At office: handed over and counted, ready to pay. Paid: sent to you, COD minus our charges.
| Date | Paid | COD covered | Our charges kept | Orders | Method · reference |
|---|
A failed attempt is charged only when the rider's phone was within the radius of the pin (sql/52). The ones here could not be verified: the phone was too far, had no fix, the order had no pin, or the failure was recorded at DISPATCH. Charge it or not; the order's attempt count follows.
━ where the rider has been today (click a rider) road still ahead through the parcels they carry, in stop order. Every rider has their own colour: it is the bar on the left of their card. “km left” on each rider
Boxes = open parcels at the customer's location (grey received, orange packed, blue out for delivery, red failed; dashed = approximate, lime border = landmark pin). 🏢 = HQ. 🏍️ bike = rider: green = on duty & reporting. Amber = on duty but gone quiet (no ping >90s). Grey = off duty. Tap a rider to draw today’s route — lime = GPS measured, amber dashed = road-routed across a signal gap. Updates every 10s.
| When | Rider | Expected | Received | Shortfall | Orders | Shortfall status |
|---|
Failed at door = the rider went and could not deliver (counts as an attempt). No answer = the customer did not answer the call before the rider left (not an attempt). Month figures are from the 1st to the chosen day; failed attempts are recorded one by one from 16 Oct 2026.
First try = delivered on the first attempt. Delivered = delivered in the end, out of everything attempted. Orders created in the period; test orders left out. Rider failed attempts are counted from 7 Oct 2026.
Uses the real delivery time from the rider app (or the office), not the order date. Voided, test-key and QA orders are left out.
Stop = stayed in one place ≥ 3 min (a delivery, a break, or stuck in traffic) with where & how long. Ride = a moving leg with km and average speed; a leg crawling under 12 km/h is flagged slow = likely traffic. Signal lost = a blackout stretch filled by road-routing. Tap a stop to see it on the map.
| Rider | Day | Shifts | Measured km | Est. km | Total km | Litres | Amount |
|---|
Litres = total km ÷ mileage (the petrol the bike actually burned for work). Amount = litres × petrol price. Est. km = road distance filled across a signal/battery gap (real streets, never a straight line). Riders are on salary, so this is petrol for work distance only — personal trips off-duty are never counted.
Every zone is a coloured territory. Tap a zone on the map (or a row in the legend) to assign riders to it — or set a rider’s zone straight from their card below. Orders from that area go to that rider’s queue.
Out now = parcels this rider is carrying. To collect = COD on those parcels. In pocket = cash collected at doorsteps but not yet handed to the office — clear it with “Receive cash”. Only received cash becomes eligible for client remittance.
| Company | Orders | Delivered | Returned | COD collected | Our charges |
|---|
Every day: parcel value, what we earn per delivery (each brand's rate card), petrol and rider cash.
| Day | Delivered | Returned | Parcel value | We earn | Per parcel | Petrol | Net | Cash in | Short |
|---|
Signs out every admin and DISPATCH login on every laptop and phone within seconds, including you (sign in again afterwards). If someone leaves, press Remove access on their row, then Set password on any login they knew.
| Person | Role | Devices | |
|---|---|---|---|
Loading… | |||
Login passwords are hashed by Supabase Auth and can never be displayed, by anyone. Use Set password to give an account a new password (the old one stops working at once; you send the new one to the owner). Anything you manage by hand (rider app PINs, courier portals, SIM accounts) belongs in the Vault below.
| Account | Login ID | Role | Since |
|---|
| Rider | Phone | Zone | Status | Pay type | Rs / parcel | Petrol / run |
|---|
| Label | Login | Secret | Note |
|---|
| When | Who | Action | Entity | Details |
|---|
When on, each customer gets one WhatsApp from the bridge number when their parcel goes out for delivery (with the live tracking link and the cash to keep ready), and one if an attempt fails. Held 21:00–09:00, capped per day, skipped for courier orders, test brands, brands that switched it off and customers who replied STOP.
Loading…
Paste this URL into the client’s Shopify admin once. After that, every new order lands here automatically. No exports, no copying.
Send the brand this link. They install the app once, then book deliveries from inside Shopify (More actions → Book with RapidXpk). Nothing else from their store reaches us.
| Shopify # | Customer | City / Area | Pin | Items | Total | Payment | Status | Action |
|---|---|---|---|---|---|---|---|---|
No orders received yet. | ||||||||
Orders marked paid in Shopify import as Prepaid and stay out of COD reconciliation. Everything else imports as COD for the order total. Non-Karachi orders are hidden by default. Switch to All cities to see them.
For stores not connected yet: Shopify admin → Orders → Export → CSV, then paste or drop it here.
Right now someone probably types each order in by hand. Pick whichever option below matches the system you already use, then follow the steps. Most brands are done in under ten minutes, and you never have to touch it again. If anything is confusing, tap Ask us to set it up at the bottom and we’ll do it for you.
Nothing to install, nothing to configure. Good way to start today and switch to an automatic connection later.
You paste one address into Shopify. After that every order you receive appears in this portal within seconds, and we start packing it.
This is done entirely inside Odoo’s own settings. No custom module, no development work, and nothing to pay anyone for. If an Odoo partner has quoted you for a module to do this, read the note at the bottom before you agree to it.
https://api.rapidxpk.com/v1/orders/odooIf someone technical looks after your system, this section is for them. You do not need to understand it. Just forward it on.
Give these to whoever connects your system. The key itself is secret. We show only its first characters here, so keep the copy we sent you somewhere safe.
| Key | Env | Label | Status |
|---|---|---|---|
Checking… | |||
Every time an order changes (packed, out for delivery, delivered, failed attempt, return) we POST it to your URL, signed. Or pull changes in batches with GET /v1/orders?updated_since=.
Save an Odoo API user here, then point Odoo's Send Webhook Notification action at https://api.rapidxpk.com/v1/orders/odoo/<your API key>. We read each confirmed order back from Odoo ourselves.
Brands who came to us through the website. Brands we approach ourselves are in the Command Center.